<!--{{{-->
<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
/*{{{*/
h1{border-bottom:2px solid [[ColorPalette::TertiaryLight]]}
h1,h2,h3,h4,h5,h6{background:transparent;color:[[ColorPalette::SecondaryDark]]}
h2,h3{border-bottom:1px solid [[ColorPalette::TertiaryLight]]}
.annotation{background:[[ColorPalette::SecondaryLight]];border:2px solid [[ColorPalette::SecondaryMid]];color:[[ColorPalette::Foreground]]}
.backstagePanelFooter .button{border:none;color:[[ColorPalette::Background]]}
.button{border:1px solid [[ColorPalette::Background]];color:[[ColorPalette::PrimaryDark]]}
.editor textarea{border:1px solid [[ColorPalette::PrimaryMid]];width:100%}
.error,.errorButton{background:[[ColorPalette::Error]];color:[[ColorPalette::Foreground]]}
.header{background:[[ColorPalette::PrimaryMid]]}
.headerForeground{color:[[ColorPalette::Background]]}
.headerForeground a{color:[[ColorPalette::PrimaryPale]];font-weight:normal}
.headerShadow a{color:[[ColorPalette::Foreground]];font-weight:normal}
.highlight,.marked{background:[[ColorPalette::SecondaryLight]]}
.listBreak div{border-bottom:1px solid [[ColorPalette::TertiaryDark]]}
.popup{background:[[ColorPalette::TertiaryPale]];border-bottom:2px solid [[ColorPalette::TertiaryDark]];border-left:1px solid [[ColorPalette::TertiaryMid]];border-right:2px solid [[ColorPalette::TertiaryDark]];border-top:1px solid [[ColorPalette::TertiaryMid]];color:[[ColorPalette::TertiaryDark]]}
.popup hr{background:[[ColorPalette::PrimaryDark]];border-bottom:1px;color:[[ColorPalette::PrimaryDark]]}
.popup li.disabled,.selected .toolbar a,.selected .footer,.editorFooter{color:[[ColorPalette::TertiaryMid]]}
.popupTiddler{background:[[ColorPalette::TertiaryPale]];border:2px solid [[ColorPalette::TertiaryMid]]}
.selected .tagging,.selected .tagged{background:[[ColorPalette::TertiaryLight]];border:1px solid [[ColorPalette::TertiaryMid]]}
.shadow .title,.subtitle{color:[[ColorPalette::TertiaryDark]]}
.sparkline{background:[[ColorPalette::PrimaryPale]];border:0}
.sparktick{background:[[ColorPalette::PrimaryDark]]}
.tabContents{background:[[ColorPalette::TertiaryPale]];border:1px solid [[ColorPalette::TertiaryLight]];color:[[ColorPalette::PrimaryDark]]}
.tabSelected{background:[[ColorPalette::TertiaryPale]];border-left:1px solid [[ColorPalette::TertiaryLight]];border-right:1px solid [[ColorPalette::TertiaryLight]];border-top:1px solid [[ColorPalette::TertiaryLight]];color:[[ColorPalette::PrimaryDark]]}
.tabUnselected{background:[[ColorPalette::TertiaryMid]];color:[[ColorPalette::Background]]}
.tagging .button,.tagged .button{border:none}
.tagging .listTitle,.tagged .listTitle{color:[[ColorPalette::PrimaryDark]]}
.tagging,.tagged{background:[[ColorPalette::TertiaryPale]];border:1px solid [[ColorPalette::TertiaryPale]]}
.tiddler .defaultCommand{font-weight:bold}
.title,.viewer code{color:[[ColorPalette::SecondaryDark]]}
.toolbar a,.footer{color:[[ColorPalette::TertiaryLight]]}
.viewer .button{border:1px solid [[ColorPalette::SecondaryMid]]}
.viewer .listTitle{list-style:none;margin-left:-2em}
.viewer blockquote{border-left:3px solid [[ColorPalette::TertiaryDark]]}
.viewer hr{border:0;border-top:dashed 1px [[ColorPalette::TertiaryDark]];color:[[ColorPalette::TertiaryDark]]}
.viewer pre{background:[[ColorPalette::SecondaryPale]];border:1px solid [[ColorPalette::SecondaryLight]]}
.viewer table,table.twtable{border:2px solid [[ColorPalette::TertiaryDark]]}
.viewer td,.viewer tr,.twtable td,.twtable tr{border:1px solid [[ColorPalette::TertiaryDark]]}
.viewer th,.viewer thead td,.twtable th,.twtable thead td{background:[[ColorPalette::SecondaryMid]];border:1px solid [[ColorPalette::TertiaryDark]];color:[[ColorPalette::Background]]}
.warning{background:[[ColorPalette::SecondaryPale]];color:[[ColorPalette::Foreground]]}
.wizard{background:[[ColorPalette::PrimaryPale]];border:1px solid [[ColorPalette::PrimaryMid]]}
.wizard .button{background:[[ColorPalette::SecondaryLight]];border:1px solid;color:[[ColorPalette::Foreground]]}
.wizard .changedBoth{background:#ff8080}
.wizard .changedLocally{background:#80ff80}
.wizard .changedServer{background:#8080ff}
.wizard .gotFromServer{background:#80ffff}
.wizard .notFound{background:#ffff80}
.wizard .putToServer{background:#ff80ff}
.wizard h1{border:none;color:[[ColorPalette::PrimaryDark]]}
.wizardFooter .status{background:[[ColorPalette::PrimaryDark]];color:[[ColorPalette::Background]]}
.wizardStep{background:[[ColorPalette::Background]];border:1px solid [[ColorPalette::PrimaryMid]];color:[[ColorPalette::Foreground]]}
.wizardStep .wizardStepDone,.lowlight{background:[[ColorPalette::TertiaryLight]]}
.zoomer{background:none;border:3px solid [[ColorPalette::TertiaryMid]];color:[[ColorPalette::TertiaryMid]]}
a img,.tabContents .button{border:0}
a,.toolbar{color:[[ColorPalette::PrimaryMid]]}
#backstageArea{background:[[ColorPalette::Foreground]];color:[[ColorPalette::TertiaryMid]]}
#backstageButton a{background:none;border:none;color:[[ColorPalette::Background]]}
#backstageCloak{background:[[ColorPalette::Foreground]];filter:'alpha(opacity=60)';opacity:0.6}
#backstagePanel{background:[[ColorPalette::Background]];border:[[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]]}
#messageArea{background:[[ColorPalette::SecondaryLight]];border:1px solid [[ColorPalette::SecondaryMid]];color:[[ColorPalette::Foreground]]}
#messageArea .button{background:[[ColorPalette::SecondaryPale]];border:none;color:[[ColorPalette::PrimaryMid]]}
#sidebar{}
#sidebarOptions input,.editor input{border:1px solid [[ColorPalette::PrimaryMid]]}
#sidebarOptions .sliderPanel a{border:none;color:[[ColorPalette::PrimaryMid]]}
#sidebarOptions .sliderPanel,.wizardFooter{background:[[ColorPalette::PrimaryPale]]}
.wizard .notChanged,.imageLink,#displayArea .imageLink{background:transparent}
#backstageArea a,#backstageButton a:hover{background:[[ColorPalette::Foreground]];border:none;color:[[ColorPalette::Background]]}
#backstageArea a:hover{background:[[ColorPalette::SecondaryLight]];color:[[ColorPalette::Foreground]]}
#sidebarOptions .sliderPanel a:active{background:[[ColorPalette::Background]];color:[[ColorPalette::PrimaryMid]]}
.button:active{background:[[ColorPalette::SecondaryMid]];border:1px solid [[ColorPalette::SecondaryDark]];color:[[ColorPalette::Background]]}
.button:hover{background:[[ColorPalette::SecondaryLight]];border:[[ColorPalette::SecondaryMid]];color:[[ColorPalette::PrimaryDark]]}
.headerShadow,.selected .toolbar a:hover,.backstagePanelFooter .button:hover{color:[[ColorPalette::Foreground]]}
.popup li a:active{background:[[ColorPalette::SecondaryPale]];border:none;color:[[ColorPalette::Foreground]]}
.popup li a:hover{background:[[ColorPalette::SecondaryLight]];border:none;color:[[ColorPalette::Foreground]]}
.wizard .button:active{background:[[ColorPalette::Foreground]];border:1px solid;color:[[ColorPalette::Background]]}
.wizard h2,.popup li a,.popup li a:visited{border:none;color:[[ColorPalette::Foreground]]}
a:hover,#sidebarOptions .sliderPanel a:hover{background:[[ColorPalette::PrimaryMid]];color:[[ColorPalette::Background]]}
body,.wizard .button:hover,.popupHighlight,#backstageArea a.backstageSelTab{background:[[ColorPalette::Background]];color:[[ColorPalette::Foreground]]}
/*}}}*/
/*{{{*/
a{text-decoration:none}
body{font:.75em arial,helvetica;margin:0;padding:0}
h1{font-size:1.35em}
h1,h2,h3{margin-bottom:0.3em;margin-top:1.2em;padding-bottom:1px}
h1,h2,h3,h4,h5,h6{font-weight:bold;text-decoration:none}
h2{font-size:1.25em}
h4{font-size:1em}
h4,h5,h6{margin-top:1em}
hr{height:1px}
ol ol ol,ol ol ol ol ol ol{list-style:lower-roman}
ol ol,ol ol ol ol ol{list-style:lower-alpha}
ol,ol ol ol ol,ol ol ol ol ol ol ol{list-style:decimal}
* html .tiddler{height:1%}
* html .viewer pre{padding:0 0 1em 0;width:99%}
.annotation{margin:0.5em;padding:0.5em}
.backstagePanelFooter{float:right;padding-top:0.2em}
.editor input,.editor textarea{display:block;font:inherit;width:100%}
.editorFooter{font-size:.9em;padding:0.25em 0}
.editorFooter .button{padding-bottom:0px;padding-top:0px}
.fieldsetFix{border:0;margin:1px 0px;padding:0}
.footer li{display:inline}
.headerForeground{left:0px;padding:4.5em 0 1em 1em;position:absolute;top:0px}
.headerShadow{left:-1px;padding:4.5em 0 1em 1em;position:relative;top:-1px}
.indent{margin-left:3em}
.listBreak{font-size:1px;line-height:1px}
.listBreak div{margin:2px 0}
.messageToolbar{display:block;padding:0.2em;text-align:right}
.outdent{margin-left:3em;text-indent:-3em}
.popup{font-size:.9em;list-style:none;margin:0;padding:0;position:absolute;z-index:300}
.popup .popupMessage,.popup li.disabled{padding:0.4em}
.popup hr{display:block;height:1px;margin:0.2em 0;padding:0;width:auto}
.popup li a{cursor:pointer;display:block;font-weight:normal;padding:0.4em}
.popupTiddler{margin:0;padding:1em;position:absolute;z-index:300}
.siteSubtitle{font-size:1.2em}
.siteTitle{font-size:3em}
.sparkline{line-height:1em}
.sparktick{outline:0}
.tab{margin:0 0 0 0.25em;padding:2px}
.tabContents{padding:0.5em}
.tabContents li.listLink{margin-left:.75em}
.tabContents ul,.tabContents ol{margin:0;padding:0}
.tabset{padding:1em 0 0 0.5em}
.tagClear{clear:both}
.tagged{float:right;margin:0.5em}
.tagging{display:none;float:left;margin:0.5em 0.5em 0.5em 0}
.tagging ul,.tagged ul{list-style:none;margin:0.25em;padding:0}
.tagging,.tagged{font-size:0.9em;padding:0.25em}
.tiddler{padding:1em 1em 0}
.tiddler .button,.backstagePanelFooter a{padding:0.2em 0.4em}
.tiddlerPopupButton{padding:0.2em}
.tiddlyLinkNonExisting,.missing .viewer,.missing .title{font-style:italic}
.title{font-size:1.6em;font-weight:bold}
.toolbar{font-size:.9em;text-align:right}
.txtMainTab .tabContents li{list-style:none}
.txtOptionInput{width:11em}
.viewer{line-height:1.4em;padding-top:0.5em}
.viewer .button{margin:0 0.25em;padding:0 0.25em}
.viewer blockquote{line-height:1.5em;margin-left:2.5em;padding-left:0.8em}
.viewer code{font-size:1.2em;line-height:1.4em}
.viewer pre{font-size:1.2em;line-height:1.4em;margin-left:0.5em;overflow:auto;padding:0.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}
.viewer ul,.viewer ol{margin-left:0.5em;padding-left:1.5em}
.wizard{padding:0.1em 1em 0 2em}
.wizard .button{padding:0.1em 0.2em}
.wizard .button{font-size:1.2em;margin:0.5em 0 0}
.wizard h1{background:none;font-size:2em;font-weight:bold;margin:0.4em 0 0.2em;padding:0}
.wizard h2{background:none;font-size:1.2em;font-weight:bold;margin:0.4em 0 0.2em;padding:0}
.wizardFooter{padding:0.8em 0.4em 0.8em 0}
.wizardFooter .status{margin-left:1em;padding:0 0.4em}
.wizardStep{padding:1em 1em 1em 1em}
.zoomer{font-size:1.1em;overflow:hidden;position:absolute}
.zoomer div{padding:1em}
code.escaped{white-space:nowrap}
dt,.tiddlyLinkExisting,a.tiddlyLinkNonExisting .shadow{font-weight:bold}
h3,.subtitle,.editor{font-size:1.1em}
h5,.footer{font-size:.9em}
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}
#backstage{position:relative;width:100%;z-index:50}
#backstageArea{display:none;overflow:hidden;padding:0.3em 0.5em;position:relative;z-index:150}
#backstageArea a{font-weight:bold;margin-left:0.5em;padding:0.3em 0.5em}
#backstageButton{display:none;position:absolute;right:0;top:0;z-index:175}
#backstageButton a{margin:0.1em;padding:0.1em 0.4em}
#backstageCloak{display:none;height:100px;position:absolute;width:100%;z-index:20}
#backstagePanel{display:none;margin-left:3em;padding:1em;position:absolute;width:90%;z-index:100}
#contentWrapper,.isTag .tagging,.backstageVisible .whenBackstage{display:block}
#contentWrapper .chkOptionInput{border:0}
#displayArea{margin:1em 17em 0 14em}
#mainMenu{font-size:1.1em;left:0;line-height:1.6em;padding:1.5em 0.5em 0.5em 0.5em;position:absolute;text-align:right;width:10em}
#mainMenu .tiddlyLinkExisting,#mainMenu .tiddlyLinkNonExisting,#sidebarTabs .tiddlyLinkNonExisting{font-style:normal;font-weight:normal}
#messageArea{margin:0.5em;padding:0.5em;position:fixed;right:0;top:2em;z-index:2000;_position:absolute}
#sidebar{font-size:.9em;position:absolute;right:3px;width:16em}
#sidebarOptions{padding-top:0.3em}
#sidebarOptions a{display:block;margin:0 0.2em;padding:0.2em 0.3em}
#sidebarOptions input{margin:0.4em 0.5em}
#sidebarOptions .sliderPanel{font-size:.85em;margin-left:1em;padding:0.5em}
#sidebarOptions .sliderPanel a{display:inline;font-weight:bold;padding:0}
#sidebarOptions .sliderPanel input{margin:0 0 0.3em 0}
#sidebarTabs .tabContents{overflow:hidden;width:15em}
#sidebarTabs .tiddlyLinkExisting{font-style:normal;font-weight:bold}
#splashScreen,.missing .subtitle,.whenBackstage{display:none}
* html #backstage,* html #backstageArea{width:99%}
.externalLink,#messageArea a{text-decoration:underline}
.header,#backstageToolbar{position:relative}
.header a:hover{background:transparent}
/*}}}*/
/***
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{
noscript{display:none} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
#displayArea{margin:1em 1em 0em}
#mainMenu,#sidebar,#messageArea,.toolbar,#backstageButton,#backstageArea{display: none !important}
}
/*}}}*/
<!--{{{-->
<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>>
* x
* MenuFlex
** <<list filter [tag[MenuFlex]]>>
* HtmlScripts
** <<list filter [tag[htm]]>>
* Favlets
** <<list filter [tag[htm]]>>
* System
** <<closeAll>>
** <<permaview>>
** <<newTiddler focus:"title" tag:"neu">>
** <<newJournal "YY 0MM DD - ddd">>
** <<tiddler GoogleSearch>>
** <<tiddler Pop##Right with: " load.." Load "load additional plugins">>
** <<tiddler Pop##Right with: " Optionen.." OptionsPanel "Optionen von TiddlyWiki ändern">>
** <<saveChanges>>
*  • Menu Flex
** {{x{
<<tiddler AccordionMenu##1>>}}}
<<accordion>>/%
!1
<<slider pTl AccordionMenu##1a " PageTemplate" "show/hide menu">><<slider pTl AccordionMenu##1b " StyleSheet" "show/hide menu">><<slider mEn AccordionMenu##1c " Menu" "show/hide menu">>[[How To ?|HowTo]]
!1a
<<tiddler Pop##Right with: PageTemplate SliderMenu##2 ok>>
<<tiddler Pop##Right with: SiteMenu SliderMenu##2a ok>>
<<tiddler Pop##Right with: Template2 SliderMenu##2b ok>>
<<tiddler Pop##Right with: TemplateBody SliderMenu##2c ok>>
<<tiddler Pop##Right with: TemplateHeader SliderMenu##2d ok>>
!1b
<<tiddler Pop##Right with: StyleSheet SliderMenu##2e ok>>
!1c
<<tiddler Pop##Right with: Menu SliderMenu##2f ok>>
!0
%/
/***
|''Name:''|AccordionMenuPlugin|
|''Description:''|Turn an unordered list into an accordion style menu|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#AccordionMenuPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.0|
|''Date:''|03/11/2007|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.5|
!!Usage:
* put {{{<<accordion>>}}} on the line after your unordered list

!!Customizing:
* customize the css via the shadow tiddler StyleSheetAccordionMenuPlugin
* or give the list a custom class by passing the classes as parameters to the macro.
** Eg: {{{<<accordion ClassName1 ClassName2>>}}}

!!Examples:
*[[AccordionMenuPluginDemo]]

***/
// /%
//!BEGIN-PLUGIN-CODE
config.macros.accordion={
	dropchar : "",
	handler : function(place,macroName,params,wikifier,paramString,tiddler){
		list = findRelated(place.lastChild,"UL","tagName","previousSibling");
		if (!list)
			return;
		addClass(list,"accordion");
		if (params.length){
			addClass(list,paramString);
		}
		this.fixLinks(list.childNodes);		
	},

	fixLinks : function(els){
		for (var i=0; i<els.length; i++){
			if(els[i].tagName.toLowerCase()=="li"){
				var link = findRelated(els[i].firstChild,"A","tagName","nextSibling");
				if(!link){
					var ih = els[i].firstChild.data;
					els[i].removeChild(els[i].firstChild);
					link = createTiddlyElement(null,"a",null,null,ih+this.dropchar,{href:"javascript:;"});
					els[i].insertBefore(link,els[i].firstChild);
				}
				else{
					link.firstChild.data = link.firstChild.data + this.dropchar;
					removeClass(link,"tiddlyLinkNonExisting");
				}
				link.onclick = this.show;
			}
		}
	},
	
	show : function(e){
		var list = this.parentNode.parentNode;
		var els = list.childNodes;
		for (var i=0; i<els.length; i++){
			removeClass(els[i],"accordion-active");
		}
		addClass(this.parentNode,"accordion-active");
	}	
};

config.shadowTiddlers["StyleSheetAccordionMenuPlugin"] = "/*{{{*/\n"+
	 "ul.accordion, ul.accordion li, ul.accordion li ul  {margin:0; padding:0; list-style-type:none;text-align:left;}\n"+
	 "ul.accordion li ul {display:none;}\n"+
	 "ul.accordion li.accordion-active ul {display:block;}\n"+
	 "\n"+
	 "ul.accordion li.accordion-active a {cursor:default;}\n"+
	 "ul.accordion li.accordion-active ul li a{cursor:pointer;}\n"+
	 "\n"+
	 "ul.accordion a {display:block; padding:0.5em;}\n"+
	 "ul.accordion li a.tiddlyLink, ul.accordion li a.tiddlyLinkNonExisting, ul.accordion li a {font-weight:bold;}\n"+
	 "ul.accordion li a {background:#0066aa; color:#FFF; border-bottom:1px solid #fff;}\n"+
	 "ul.accordion li.accordion-active a, ul.accordion li a:hover {background:#00558F;color:#FFF;}\n"+
	 "\n"+
	 "ul.accordion li ul li{display:inline-block;overflow:hidden;}\n"+
	 "ul.accordion li.accordion-active ul li {background:#eff3fa; color:#000; padding:0em;}\n"+
	 "ul.accordion li.accordion-active ul li div {padding:1em 1.5em; background:#eff3fa;}\n"+
	 "ul.accordion li.accordion-active ul a{background:#eff3fa; color:#000; padding:0.5em 0.5em 0.5em 1.0em;border:none;}\n"+
	 "ul.accordion li.accordion-active ul a:hover {background:#e0e8f5; color:#000;}\n" +
	 "/*}}}*/";
 
 store.addNotification("StyleSheetAccordionMenuPlugin",refreshStyles);
 //!END-PLUGIN-CODE
// %/
/%
Name: AppendToTiddler
Source: http://www.TiddlyTools.com/#AppendToTiddler
Version: 1.0.0
Author: Eric Shulman
License: http://www.TiddlyTools.com/#LegalStatements
Description: append a single-line of input to the end of the current tiddler
Usage: <<tiddler AppendToTiddler with: datefmt>>
where 'datefmt' is *optional*

%/<html><nowiki><form style="white-space:nowrap" onsubmit="this.btn.onclick(); return false"><input type="text" name="in" style="width:90%" value=""><input type="button" name="btn" style="width:8%" value="ok" onclick="if(!this.form.in.value.length)return false;if(this.form.in.value==this.form.in.defaultValue)return false;var here=story.findContainingTiddler(this);if(!here)return false;var title=here.getAttribute('tiddler');var tid=store.getTiddler(title);var now=new Date();var datefmt='YYYY.0MM.0DD 0hh:0mm:0ss';var txt=(tid?tid.text:'')+'\n'+now.formatString(datefmt)+this.form.in.value;var who=tid?tid.modifier:config.options.txtUserName;var when=tid?tid.modified:now;var tags=tid?tid.tags:[];var fields=tid?tid.fields:{};store.saveTiddler(title,title,txt,who,when,tags,fields);"></form></html>
/***
|Name|BreadcrumbsPlugin|
|Author|Eric Shulman|
|Source|http://www.TiddlyTools.com/#BreadcrumbsPlugin|
|Documentation|http://www.TiddlyTools.com/#BreadcrumbsPluginInfo|
|Version|2.1.0|
|License|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Story.prototype.displayTiddler,TiddlyWiki.prototype.deleteTiddler|
|Options|##Configuration|
|Description|list/jump to tiddlers viewed during this session plus "back" button/macro|
This plugin provides a list of links to all tiddlers opened during the session, creating a "trail of breadcrumbs" from one tiddler to the next, allowing you to quickly navigate to any previously viewed tiddler, or select 'home' to reset the display to the initial set of tiddlers that were open at the start of the session (i.e., when the document was loaded into the browser).
!!!!!Documentation
<<<
see [[BreadcrumbsPluginInfo]]
<<<
!!!!!Configuration
<<<
<<option chkCreateDefaultBreadcrumbs>> automatically create breadcrumbs display (if needed)
<<option chkShowBreadcrumbs>> show/hide breadcrumbs display
<<option chkReorderBreadcrumbs>> re-order breadcrumbs when visiting a previously viewed tiddler
<<option chkBreadcrumbsHideHomeLink>> omit 'Home' link from breadcrumbs display
<<option chkBreadcrumbsSave>> prompt to save breadcrumbs when 'Home' link is pressed
<<option chkShowStartupBreadcrumbs>> show breadcrumbs for 'startup' tiddlers
<<option chkBreadcrumbsReverse>> show breadcrumbs in reverse order (most recent first)
<<option chkBreadcrumbsLimit>> limit breadcrumbs display to {{twochar{<<option txtBreadcrumbsLimit>>}}} items
<<option chkBreadcrumbsLimitOpenTiddlers>> limit open tiddlers to {{twochar{<<option txtBreadcrumbsLimitOpenTiddlers>>}}} items

<<<
!!!!!Revisions
<<<
2009.03.22 [2.1.0] added 'save breadcrumbs to tiddler' feature
| Please see [[BreadcrumbsPluginInfo]] for previous revision details |
2006.02.01 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.BreadcrumbsPlugin= {major: 2, minor: 1, revision: 0, date: new Date("March 2, 2009")};

var co=config.options; // abbreviation

// show/hide display option (default is to SHOW breadcrumbs)
if (co.chkShowBreadcrumbs===undefined) co.chkShowBreadcrumbs=true;

// REORDER breadcrumbs when visiting previously viewed tiddler (default)
if (co.chkReorderBreadcrumbs===undefined) co.chkReorderBreadcrumbs=true;

// create default breadcrumbs display as needed (default is to CREATE)
if (co.chkCreateDefaultBreadcrumbs===undefined) co.chkCreateDefaultBreadcrumbs=true;

// show breadcrumbs for 'startup' tiddlers (default is FALSE = only show crumbs for tiddlers opened after startup)
if (co.chkShowStartupBreadcrumbs===undefined) co.chkShowStartupBreadcrumbs=false;

// show crumbs in reverse order (most recent first)
if (co.chkBreadcrumbsReverse===undefined) co.chkBreadcrumbsReverse=false;

// limit number of crumbs displayed
if (co.chkBreadcrumbsLimit===undefined) co.chkBreadcrumbsLimit=false;
if (co.txtBreadcrumbsLimit===undefined) co.txtBreadcrumbsLimit=5;

// limit number of open tiddlers
if (co.chkBreadcrumbsLimitOpenTiddlers===undefined) co.chkBreadcrumbsLimitOpenTiddlers=false;
if (co.txtBreadcrumbsLimitOpenTiddlers===undefined) co.txtBreadcrumbsLimitOpenTiddlers=3;

// omit home link from breadcrumbs display
if (co.chkBreadcrumbsHideHomeLink===undefined) co.chkBreadcrumbsHideHomeLink=false;

// prompt for 'save crumbs' when 'home' button is pressed
if (co.chkBreadcrumbsSave===undefined) co.chkBreadcrumbsSave=false;

config.macros.breadcrumbs =  {
	crumbs: [], // the list of current breadcrumbs
	askMsg: "Save current breadcrumbs before clearing?\nPress OK to save, or CANCEL to continue without saving.",
	saveMsg: 'Enter the name of a tiddler in which to save the current breadcrumbs',
	saveTitle: 'SavedBreadcrumbs',
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var area=createTiddlyElement(place,"span",null,"breadCrumbs",null);
		area.setAttribute("homeSep",params[0]?params[0]:this.homeSeparator); // custom home separator
		area.setAttribute("crumbSep",params[1]?params[1]:this.crumbSeparator); // custom crumb separator
		this.render(area);
	},
	add: function (title) {
		var thisCrumb = title;
		var ind = this.crumbs.indexOf(thisCrumb);
		if(ind === -1)
			this.crumbs.push(thisCrumb);
		else if (config.options.chkReorderBreadcrumbs)
			this.crumbs.push(this.crumbs.splice(ind,1)[0]); // reorder crumbs
		else
			this.crumbs=this.crumbs.slice(0,ind+1); // trim crumbs
		if (config.options.chkBreadcrumbsLimitOpenTiddlers)
			this.limitOpenTiddlers();
		this.refresh();
		return false;
	},
	getAreas: function() {
		var crumbAreas=[];
		// find all DIVs with classname=="breadCrumbs"
		// Note: use try/catch to avoid "Bad NPObject as private data" fatal error  caused when
		// some versions of embedded QuickTime player element is accessed by hasClass() function.
		var all=document.getElementsByTagName("*");
		for (var i=0; i<all.length; i++)
			try{ if (hasClass(all[i],"breadCrumbs")) crumbAreas.push(all[i]); } catch(e) {;}
		// find single DIV w/fixed ID (backward compatibility)
		var byID=document.getElementById("breadCrumbs")
		if (byID && !hasClass(byID,"breadCrumbs")) crumbAreas.push(byID);
		if (!crumbAreas.length && config.options.chkCreateDefaultBreadcrumbs) {
			// no existing crumbs display areas... create one...
			var defaultArea = createTiddlyElement(null,"span",null,"breadCrumbs",null);
		 	defaultArea.style.display= "none";
			var targetArea= document.getElementById("tiddlerDisplay");
		 	targetArea.parentNode.insertBefore(defaultArea,targetArea);
			crumbAreas.push(defaultArea);
		}
		return crumbAreas;
	},
	refresh: function() {
		var crumbAreas=this.getAreas();
		for (var i=0; i<crumbAreas.length; i++) {
			crumbAreas[i].style.display = config.options.chkShowBreadcrumbs?"block":"none";
			removeChildren(crumbAreas[i]);
			this.render(crumbAreas[i]);
		}
	},
	render: function(here) {
		var co=config.options; var out=""
		var homeSep=here.getAttribute("homeSep"); if (!homeSep) homeSep=this.homeSeparator;
		var crumbSep=here.getAttribute("crumbSep"); if (!crumbSep) crumbSep=this.crumbSeparator;
		if (!co.chkBreadcrumbsHideHomeLink) {
			createTiddlyButton(here,"Home",null,this.home,"tiddlyLink tiddlyLinkExisting");
			out+=homeSep;
		}
		for (c=0; c<this.crumbs.length; c++) // remove non-existing tiddlers from crumbs
			if (!store.tiddlerExists(this.crumbs[c]) && !store.isShadowTiddler(this.crumbs[c]))
				this.crumbs.splice(c,1);
		var count=this.crumbs.length;
		if (co.chkBreadcrumbsLimit && co.txtBreadcrumbsLimit<count) count=co.txtBreadcrumbsLimit;
		var list=[];
		for (c=this.crumbs.length-count; c<this.crumbs.length; c++) list.push('[['+this.crumbs[c]+']]');
		if (co.chkBreadcrumbsReverse) list.reverse();
		out+=list.join(crumbSep);
		wikify(out,here);
	},
	home: function() {
		var cmb=config.macros.breadcrumbs;
		if (config.options.chkBreadcrumbsSave && confirm(cmb.askMsg)) cmb.saveCrumbs();
		story.closeAllTiddlers(); restart();
		cmb.crumbs = []; var crumbAreas=cmb.getAreas();
		for (var i=0; i<crumbAreas.length; i++) crumbAreas[i].style.display = "none";
		return false;
	},
	saveCrumbs: function() {
		var tid=prompt(this.saveMsg,this.saveTitle); if (!tid||!tid.length) return; // cancelled by user
		var t=store.getTiddler(tid);
		if(t && !confirm(config.messages.overwriteWarning.format([tid]))) return;
		var who=config.options.txtUserName;
		var when=new Date();
		var text='[['+this.crumbs.join(']]\n[[')+']]';
		var tags=t?t.tags:[]; tags.pushUnique('story');
		var fields=t?t.fields:{};
		store.saveTiddler(tid,tid,text,who,when,tags,fields);
		story.displayTiddler(null,tid);
		story.refreshTiddler(tid,null,true);
		displayMessage(tid+' has been '+(t?'updated':'created'));
	},
	limitOpenTiddlers: function() {
		var limit=config.options.txtBreadcrumbsLimitOpenTiddlers; if (limit<1) limit=1;
		for (c=this.crumbs.length-1; c>=0; c--) {
			var tid=this.crumbs[c];
			var elem=document.getElementById(story.idPrefix+tid);
			if (elem) { // tiddler is displayed
				if (limit <=0) { // display limit has been reached
					if (elem.getAttribute("dirty")=="true") { // tiddler is being edited
						var msg="'"+tid+"' is currently being edited.\n\n";
						msg+="Press OK to save and close this tiddler\nor press Cancel to leave it opened";
						if (confirm(msg)) { story.saveTiddler(tid); story.closeTiddler(tid); }
					}
					else
						story.closeTiddler(this.crumbs[c]);
				}
				limit--;
			}
		}
	}
};
if (config.macros.breadcrumbs.homeSeparator==undefined) // note: not a cookie
	config.macros.breadcrumbs.homeSeparator=" | ";
if (config.macros.breadcrumbs.crumbSeparator==undefined)  // note: not a cookie
	config.macros.breadcrumbs.crumbSeparator=" > ";

config.commands.previousTiddler = {
	text: 'back',
	tooltip: 'view the previous tiddler',
	hideReadOnly: false,
	dateFormat: 'DDD, MMM DDth YYYY hh:0mm:0ss',
	handler: function(event,src,title) {
		var here=story.findContainingTiddler(src); if (!here) return;
		var crumbs=config.macros.breadcrumbs.crumbs;
		if (crumbs.length>1) {
			var crumb=crumbs[crumbs.length-2];
			story.displayTiddler(here,crumb);
		}
		else
			config.macros.breadcrumbs.home();
		return false;
	}
};

config.macros.previousTiddler= {
	label: 'back',
	prompt: 'view the previous tiddler',
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var label=params.shift(); if (!label) label=this.label;
		var prompt=params.shift(); if (!prompt) prompt=this.prompt;
		createTiddlyButton(place,label,prompt,function() {
			var crumbs=config.macros.breadcrumbs.crumbs;
			if (crumbs.length>1) {
				var crumb=crumbs[crumbs.length-2];
				story.displayTiddler(place,crumb);
			}
			else
				config.macros.breadcrumbs.home();
		});
	}
}

// hijack story.displayTiddler() so crumbs can be refreshed when a tiddler is displayed
if (Story.prototype.breadCrumbs_coreDisplayTiddler==undefined)
	Story.prototype.breadCrumbs_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler,template,animate,slowly)
{
	var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
	this.breadCrumbs_coreDisplayTiddler.apply(this,arguments);
	// if not displaying tiddler during document startup, then add it to the breadcrumbs
	// note: 'startingUp' flag is a global, set/reset by the core init() function
	if (!startingUp || config.options.chkShowStartupBreadcrumbs) config.macros.breadcrumbs.add(title);
}

// hijack store.removeTiddler() so crumbs can be refreshed when a tiddler is deleted
if (TiddlyWiki.prototype.breadCrumbs_coreRemoveTiddler==undefined)
	TiddlyWiki.prototype.breadCrumbs_coreRemoveTiddler=TiddlyWiki.prototype.removeTiddler;
TiddlyWiki.prototype.removeTiddler= function(title)
{
	this.breadCrumbs_coreRemoveTiddler.apply(this,arguments);
	config.macros.breadcrumbs.refresh();
}
//}}}
/%
FileBrowser by EricShulman - http://www.tiddlytools.com/faq.html#FAQ_LocalFilesWithIFRAME
%/{{floatright{<<tiddler Switch##Nav>>}}}{{whiteGray{<<tabs txtBrowse
"Recent " "view recent changes" BrowseMenu##changes
"Tiddler " "view tiddlers" QuickMenu
"Slices " "view slices" ShowSlices
"File " "show file browser" BrowseMenu##file
"System " "show file system - only possible when this TW is saved to the drive" BrowseMenu##system
"Web " "show web browser" BrowseMenu##web
"Google " "show google browser" BrowseMenu##google
>>}}}/%
!file
<html><form target="theFrameID"><input type=file name=whichfile><input type=button value="view"onclick="var frame=document.getElementById(this.form.target);this.form.action='file:///'+this.form.whichfile.value;try{frame.style.display='block';this.form.done.disabled=false;this.form.submit();}catch(e){alert(e.description?e.description:e.toString());}"><input type=button name=done value="done" disabledonclick="var frame=document.getElementById(this.form.target);frame.style.display='none';this.disabled=true;"></form><iframe src="" name="theFrameID" id="theFrameID" style="display:none; background:#fff; width:100%; height:500px"></iframe></html>
!system
<html><iframe src ="file:./" frameborder="0" width="100%" align="center" height="600"></iframe></html>
@@marginLeft:600px; @@
!web
{{smallform{<<tiddler MicroBrowser with: UrlList>>}}}
!google
<html><hide linebreaks><iframe src ="http://www.google.com/" frameborder="0" width="100%" align="center" height="600"></iframe></html>
@@marginLeft:600px; @@
!changes
<<tiddler ShowRecentChanges>><<tiddler ShowUnsavedChanges>>
!0
%/
{{wrappingClass{
<<tiddler BrowseMenu>>
}}}
<<cloud 0 excludeLists all tt>>
/%
Name: Compare
Source: http://menuflex.tiddlyspot.com/#Compare - abandoned: http://www.TiddlyTools.com/#CompareTiddlers
Version: 0.0.0
Author: Eric Shulman (modified by Wolfgang)
License: http://www.TiddlyTools.com/#LegalStatements
Description: TidIDE: show color-coded differences between two selected tiddlers. - This is a modified version of CompareTiddlers with dependency to InlneJavascriptPlugin eliminated. Important: Don't ask the original author for support to this variant script, before you haven't verified it by installing instead the latest version of the full CompareTiddlersPlugin.

%/<<tiddler HideTiddlerTags>>{{smallform small{
<html><form action="javascript:;" style="display:inline"><!--
	--><select name=list1 size=1 style="width:30%" onchange="var f=this.form; f.view1.disabled=f.edit1.disabled=f.done.disabled=!this.value.length; f.compare.disabled=!f.list1.value.length||!f.list2.value.length; if (!this.value.length) return; f.text1.style.display=f.text2.style.display='inline'; f.text1.value=store.getTiddlerText(this.value);"></select><!--
	--><input type=button name=view1 style="width:10%" value='view' disabled 
		onclick="if (this.form.list1.value.length) story.displayTiddler(story.findContainingTiddler(this),this.form.list1.value,DEFAULT_VIEW_TEMPLATE)"><!--
	--><input type=button name=edit1 style="width:10%" value='edit' disabled 
		onclick="if (this.form.list1.value.length) story.displayTiddler(story.findContainingTiddler(this),this.form.list1.value,DEFAULT_EDIT_TEMPLATE)"><!--
	--><select name=list2 size=1 style="width:30%" onchange="var f=this.form; f.view2.disabled=f.edit2.disabled=f.done.disabled=!this.value.length; f.compare.disabled=!f.list1.value.length||!f.list2.value.length; if (!this.value.length) return; f.text1.style.display=f.text2.style.display='inline'; f.text2.value=store.getTiddlerText(this.value)"></select><!--
	--><input type=button name=view2 style="width:10%" value='view' disabled 
		onclick="if (this.form.list2.value.length) story.displayTiddler(story.findContainingTiddler(this),this.form.list2.value,DEFAULT_VIEW_TEMPLATE)"><!--
	--><input type=button name=edit2 style="width:10%" value='edit' disabled 
		onclick="if (this.form.list2.value.length) story.displayTiddler(story.findContainingTiddler(this),this.form.list2.value,DEFAULT_EDIT_TEMPLATE)"><br><!--
	--><textarea name=text1 style="width:49.5%;display:none" rows="10" readonly></textarea><!--
	--><textarea name=text2 style="width:49.5%;display:none" rows="10" readonly></textarea><!--
	--><div style='float:left'><!--
	-->The output shows additions in green, and deletions in red<!--
	--></div><!--
	--><div style='text-align:right'><!--
	--><input type=button name=compare style="width:10%" value='compare' disabled 
		onclick="var f=this.form; if (!f.list1.value.length) { f.list1.focus(); return alert('select a tiddler'); } var t1=store.getTiddlerText(f.list1.value); if (!t1) { displayMessage(f.list1.value+' not found');return false; } if (!f.list2.value.length) { f.list2.focus(); return alert('select a tiddler'); } var t2=store.getTiddlerText(f.list2.value); if (!t2) { displayMessage(f.list2.value+' not found');return false; } removeChildren(f.parentNode.nextSibling); var out=diffString(t1,t2); if (!out || !out.length) out='no differences'; f.parentNode.nextSibling.innerHTML=out;  f.parentNode.nextSibling.style.display='block'; f.done.disabled=false;"><!--
	--><input type=button name=done style="width:10%" value='done' disabled 
		onclick="var f=this.form; f.text1.style.display='none'; f.text1.value=''; var list=f.list1; while (list.options[0]) list.options[0]=null; list.options[0]=new Option('select a tiddler...','',false,false); var tids=store.getTiddlers('title','excludeLists'); for (i=0; i<tids.length; i++) list.options[list.length]=new Option(tids[i].title,tids[i].title,false,false); f.text2.style.display='none'; f.text2.value=''; var list=f.list2; while (list.options[0]) list.options[0]=null; list.options[0]=new Option('select a tiddler...','',false,false); var tids=store.getTiddlers('title','excludeLists'); for (i=0; i<tids.length; i++) list.options[list.length]=new Option(tids[i].title,tids[i].title,false,false); f.parentNode.nextSibling.style.display='none'; removeChildren(f.parentNode.nextSibling); f.view1.disabled=f.view2.disabled=f.edit1.disabled=f.edit2.disabled=f.compare.disabled=this.disabled=true;"><!--
	--></div><!--
--></form></html><<tiddler {{

	// initialize form
	var form=place.lastChild.firstChild;
	var tids=store.getTiddlers('title','excludeLists');
	while (form.list1.options[0]) form.list1.options[0]=null; 
	form.list1.options[0]=new Option("select a tiddler...","",false,false);
	for (i=0; i<tids.length; i++)
		form.list1.options[form.list1.length]=new Option(tids[i].title,tids[i].title,false,false);
	while (form.list2.options[0]) form.list2.options[0]=null; 
	form.list2.options[0]=new Option("select a tiddler...","",false,false);
	for (i=0; i<tids.length; i++)
		form.list2.options[form.list2.length]=new Option(tids[i].title,tids[i].title,false,false);

'';}}>>@@display:none;margin-top:1em;border:1px solid;-moz-border-radius:1em;padding:1em;white-space:normal;/%
this will be replaced with output from compare button 
%/@@}}}<html><div style='clear:both'></div></html><<tiddler {{

// returns difference between old and new text, color-formatted additions and deletions
window.diffString=function( o, n ) {
  if (o==n) return ""; // simple check, saves time if true
  var error = 5;
  var reg = new RegExp( "\\n|(?:.{0,"+error+"})", "g" );
  var oarr = o.match( reg ); // dices text into chunks
  var narr = n.match( reg );
  var out = diff(oarr,narr); // compare the word arrays
  var str = ""; // construct output
  for (i=0; i<out.length; i++) {
	switch (out[i].change) {
		case "ADDED":
			str+="<span style='color:green'>";
			str+=narr.slice(out[i].index,out[i].index+out[i].length).join("");
			str+="</span> ";
			break;
		case "DELETED":
			str+="<span style='color:red'>";
			str+=oarr.slice(out[i].index,out[i].index+out[i].length).join("");
			str+="</span> ";
			break;
		default:
			str+="<span>";
			str+=oarr.slice(out[i].index,out[i].index+out[i].length).join("");
			str+="</span> ";
			break;
	}	
  }
  return str;
  return "<html>"+str+"</html>";
}

/***
!About
|Author - Bradley Meck|
|Date - Dec 24, 2006|
|Version - 1.4.1|
This is a simple function to be used to find the differences between one set of objects and another. ''The objects do not need to be Strings''. It outputs and array of objects with the properties value and change. This function is pretty hefts but appears to be rather light for a diff and tops out at O(N^^2^^) for absolute worst cast scenario that I can find.
!History
*December 23, 2006 - Function made to be minimal edit diff, and changed output.
!Code
***/

function diff( oldArray, newArray ) {
	var newElementHash = { };
	for( var i = 0; i < newArray.length; i++ ) {
		if( ! newElementHash [ newArray [ i ] ] ) {
			newElementHash [ newArray [ i ] ] = [ ];
		}
		newElementHash [ newArray [ i ] ].push( i );
	}
	var substringTable = [ ];
	for( var i = 0; i < oldArray.length; i++ ) {
		if(newElementHash [ oldArray [ i ] ] ) {
			var locations = newElementHash [ oldArray [ i ] ] ;
			for( var j = 0; j < locations.length; j++){
				var length = 1;
				while( i + length < oldArray.length && locations [ j ] + length < newArray.length
					&& oldArray [ i + length ] == newArray [ locations [ j ] + length ] ){
					length++;
				}
				substringTable.push( {
					oldArrayIndex : i,
					newArrayIndex : locations [ j ],
					matchLength : length
				} );
			}
		}
	}
	substringTable.sort( function( a, b ) {
		if ( a.matchLength > b.matchLength /* a is less than b by some ordering criterion */ ) {
			return -1;
		}
		if ( a.matchLength < b.matchLength /* a is greater than b by the ordering criterion */ ) {
			return 1;
		}
		// a must be equal to b
		return 0
	} );
	//displayMessage( substringTable.toSource( ) );
	for( var i = 0; i < substringTable.length; i++) {
		for( var j = 0; j < i; j++) {
			var oldDelta = substringTable [ i ].oldArrayIndex + substringTable [ i ].matchLength - 1 - substringTable [ j ].oldArrayIndex;
			var newDelta = substringTable [ i ].newArrayIndex + substringTable [ i ].matchLength - 1 - substringTable [ j ].newArrayIndex;
			//displayMessage( "oldDelta ::: " + oldDelta );
			//displayMessage( "newDelta ::: " + newDelta );
			//displayMessage( "matchLength ::: " + substringTable [ j ].matchLength );
			if( ( oldDelta >= 0 && oldDelta <= substringTable [ j ].matchLength )
			|| ( newDelta >= 0 && newDelta <= substringTable [ j ].matchLength )
			|| ( oldDelta < 0 && newDelta > 0 )
			|| ( oldDelta > 0 && newDelta < 0 ) ) {
				substringTable.splice( i, 1 );
				i--;
				break;
			}
		}
	}
	//displayMessage( substringTable.toSource(  ) );
	substringTable.sort( function( a, b ) {
		if ( a.oldArrayIndex < b.oldArrayIndex /* a is less than b by some ordering criterion */ ) {
			return -1;
		}
		if ( a.oldArrayIndex > b.oldArrayIndex /* a is greater than b by the ordering criterion */ ) {
			return 1;
		}
		// a must be equal to b
		return 0
	} );
	//displayMessage( substringTable.toSource( ) );
	var oldArrayIndex = 0;
	var newArrayIndex = 0;
	var results = [ ];
	for( var i = 0; i < substringTable.length; i++ ) {
		if( oldArrayIndex != substringTable [ i ].oldArrayIndex ) {
			results.push( {
				change : "DELETED",
				length : substringTable [ i ].oldArrayIndex - oldArrayIndex,
				index : oldArrayIndex
			} );
		}
		if( newArrayIndex != substringTable [ i ].newArrayIndex ) {
			results.push( {
				change : "ADDED",
				length : substringTable [ i ].newArrayIndex - newArrayIndex,
				index : newArrayIndex
			} );
		}
		results.push( {
			change : "STAYED",
			length : substringTable [ i ].matchLength,
			index : substringTable [ i ].oldArrayIndex
		} );
		oldArrayIndex = substringTable [ i ].oldArrayIndex + substringTable [ i ].matchLength;
		newArrayIndex = substringTable [ i ].newArrayIndex + substringTable [ i ].matchLength;
	}
	if( oldArrayIndex != oldArray.length ) {
		results.push( {
			change : "DELETED",
			length : oldArray.length - oldArrayIndex,
			index : oldArrayIndex
		} );
	}
	if( newArrayIndex != newArray.length ) {
		results.push( {
			change : "ADDED",
			length : newArray.length - newArrayIndex,
			index : newArrayIndex
		} );
	}
	return results;
}
'';}}>>
[[SystemTheme|MenuFlex]]&nbsp;- <<tag PageTemplate " PageTemplate ">>&nbsp;- <<tag StyleSheet " StyleSheet ">>&nbsp;- [[ColorPalette]]

|>|>|line-height:30%;padding:0 0 0.5em 0;bgcolor(#9bd): <<gradient vert #eff3fa #9bd>>{{tiny{^^[[backstage|BackStageTweaks]]^^}}}\\
<br><br><br>{{floatleft{{{big{&nbsp; [[SiteTitle]]&nbsp;}}} - {{small{[[SiteSubtitle]]}}}}}}>>\\
{{center{[[TopMenu|SiteMenu]]}}}|
|vertical-align:top;width:13%; <br><<tag Menu " MainMenu ">> |vertical-align:top;width:70%; {{spacer{[[ViewTemplate]] \\
{{small{[[EditTemplate]]}}} }}}<br>{{tiny{[[DefaultTiddlers]] \\
<hr>@@display:block;height:20em;overflow:auto;{{left{<<tiddler Configuration##LorumIpsum>>}}}@@}}} |width:15%; \\
[[SideBarOptions]] <br><br> |
|~|~|bgcolor(#eff3fa): {{small{[[OptionsPanel]]}}} <br>{{tiny{[[AdvancedOptions]]}}} |
|~|~|bgcolor(#eee): <<tiddler Configuration##SideBarTabs>> |
|>|>|padding:0; {{small{[[Footer]]}}} |

[[StyleSheetColors]]&nbsp; - [[StyleSheetLayout]]&nbsp; - [[StyleSheetPrint]]&nbsp; - [[SiteUrl]]&nbsp; - <<slider chkPlug Configuration##Plug Plugins "whow all plugins and scripts">>/%
!Plug
{{whiteGray{<<tabs txtplugin
Plugins "for disabling plugins" Configuration##Plugin
"on demand" "enabling plugins" "run"
remote "loading remote plugins" "Load"
Scripts "inline scripts" Configuration##Script
Favlets "bookmarklets" Configuration##Favlet
Htmls "html scripts" Configuration##Html>>}}}
!SideBarTabs
[[SideBarTabs]]
|borderless tiny|k
|vertical-align:top; [[Timeline|TabTimeline]] |vertical-align:top; <br>[[Tags|TabTags]] <br>\\
 |vertical-align:top; [[All|TabAll]] |<br>[[More|TabMore]] \\
[[Missing|TabMoreMissing]] <br>[[Orphans|TabMoreOrphans]] <br>[[Shadowed|TabMoreShadowed]] |
!Plugin
<<tiddler List##Title with: systemConfig>>
!Script
<<tiddler List##Title with: script>>
!Favlet
<<tiddler List##Title with: favlet>>
<<tiddler favlet>>
!Html
<<tiddler List##Title with: htm>>
!LorumIpsum
<html><h1>"heading 1"</h1></html>
Aenean eros arcu, condimentum nec, dapibus ut, tincidunt sit amet, urna. Quisque viverra, eros sed imperdiet iaculis, est risus facilisis quam, id malesuada arcu nulla luctus urna. Nullam et est. Vestibulum velit sem, faucibus cursus, dapibus vestibulum, pellentesque et, urna. Donec luctus. Donec lectus. Aliquam eget eros facilisis tortor feugiat sollicitudin. Integer lobortis vulputate sapien. Sed iaculis erat ac nunc. Etiam eu enim. Mauris ipsum urna, rhoncus at, bibendum sit amet, euismod eget, dolor.
----
<html><h2>"heading 2"</h2></html>
<html><h3>"heading 3"</h3></html>
{{cola{
#This is a numbered list item
##This is a numbered list item
*This is a list item
> This is a blockquote
}}}{{colb{
|>|>| !This is a header |h
|column1|column2|column3|
|row2| row2 |row2|
|column1|column2|column3|
|row2| row2 |row2|
}}}{{clear{
{{floatright{And this an external [[link|http://www.tiddlywiki.com/]].}}}{{floatleft{This is a link to a [[StyleSheet]] tiddler.}}}{{center{<<tag button>>}}}}}}
!0
%/
/%
|Name| CookieManager|
|Source| http://menuflex.tiddlyspot.com/#CookieManager - abandoned: http://www.TiddlyTools.com/#CookieManager|
|Version| 1.0.2|
|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| script|
|Requires| InlineJavascriptPlugin|
|Description| Review/add/delete option cookies and save current option values to CookieJar tiddler for 'sticky' settings. -  Important: Don't ask the original author for support to this abandoned script, before having installed the latest version of CookieManagerPlugin first.|

Usage: <<tiddler CookieManager>>

view/set/delete your current TW cookie values, as well as providing a button to "bake cookies", which will automatically generate the contents of the CookieJar for all current cookie-based options.   You can then edit the CookieJar to remove any lines that set unwanted fixed-value options (so that the normal cookie-based values will still be used for those options).

The code contained in the CookieJar is wrapped in a conditional so that the fixed-value options are only applied for a specific username.  That way, when you publish or share your document with others, YOUR fixed-value options are not applied, and the normal cookie-based options will still be used for everyone else.

Also, each time you "bake cookies", they are *appended* to the CookieJar, so that any previous values are not automatically
discarded, but are instead simply *overridden* by the newer values. After you bake a new batch of cookies, you will probably want to edit the CookieJar to remove any "stale cookies" or merge the old and new options into a single block to simplify code (for readability as well as saving a little tiddler storage space). 

Revision History
2007.06.28 - in bakeCookies(), pass tiddler.fields to saveTiddler() to preserve any custom fields on the CookieJar tiddler
%/{{smallform{<html><form style="display:inline;margin:0;padding:0"><select style="width:99%" name="list"
	onchange="this.form.val.value=this.value.length?config.options[this.value]:'';"><!--
--></select><br>
<input type="text" style="width:98%;margin:0;" name="val" title="enter an option value"><br>
<input type="button" style="width:33%;margin:0;" value="get" title="refresh list"
	onclick="cookieManager.setCookieEditorList(this.form.list);"><!--
--><input type="button" style="width:33%;margin:0;" value="set" title="save cookie value"
	onclick="var opt=this.form.list.value; var v=this.form.val.value; config.options[opt]=opt.substr(0,3)=='txt'?v:(v.toLowerCase()=='true'); saveOptionCookie(opt);cookieManager.setCookieEditorList(this.form.list);"><!--
--><input type="button" style="width:33%;margin:0;" value="del" title="remove cookie"
	onclick="var ex=new Date(); ex.setTime(ex.getTime()-1000); document.cookie=this.form.list.value+'=novalue; path=/; expires='+ex.toGMTString(); cookieManager.setCookieEditorList(this.form.list);"><br>
<input type="button" style="width:50%;margin:0;" value="bake cookies" title="save current cookie-based option values into the CookieJar tiddler"
	onclick="return cookieManager.bakeCookies(this,false)"><!--
--><input type="button" style="width:50%;margin:0;" value="bake all options" title="save ALL option values (including NON-COOKIE values) into the CookieJar tiddler"
	onclick="return cookieManager.bakeCookies(this,true)"><!--
--></form></html><script>

cookieManager= {
	bakeCookies:
	function(here,all) {
		var title='CookieJar';
		var tid=store.getTiddler(title);
		var who=config.options.txtUserName;
		var when=new Date();
		var tags=['systemConfig'];
		if (all) { 
			var opts=new Array();
			for (var i in config.options) if (i.substr(0,3)=='chk'||i.substr(0,3)=='txt') opts.push(i);
			opts.sort();
		}
		else var opts=cookieManager.getCookieList();
		var text=tid?tid.text:'';
		text+='\n// '+opts.length+(all?' options':' cookies')+' saved ';
		text+=when.formatString('on DDD, MMM DDth YYYY at 0hh:0mm:0ss');
		text+=' by '+who+'//\n';
		text+='//^^(edit/remove username check and/or individual option settings as desired)^^//\n';
		text+='//{{{\n';
		text+='if (config.options.txtUserName=="'+who+'") {\n';
		for (i=0; i<opts.length; i++) {
			if (opts[i].substr(0,3)=='chk')
				text+='\tconfig.options.'+opts[i]+'='+config.options[opts[i]]+';\n';
			if (opts[i].substr(0,3)=='txt')
				text+='\tconfig.options.'+opts[i]+'="'+config.options[opts[i]]+'";\n';
		}
		text+='}\n//}}}\n';
		store.saveTiddler(title,title,text,who,when,tags,tid?tid.fields:null);
		story.displayTiddler(story.findContainingTiddler(this),title);
		story.refreshTiddler(title,null,true);
		displayMessage(opts.length+(all?' options':' cookies')+' have been saved in '+title+'.  Please review all stored settings.');
		return false;
	},
	getCookieList:
	function() {
		var cookies = { };
		if (document.cookie != "") {
			var p = document.cookie.split("; ");
			for (var i=0; i < p.length; i++) {
				var pos=p[i].indexOf("=");
				if (pos==-1) cookies[p[i]]="";
				else cookies[p[i].substr(0,pos)]=unescape(p[i].slice(pos+1));
			}
		}
		var opt=new Array(); for (var i in config.options) if (cookies[i]) opt.push(i); opt.sort();
		return opt;
	},
	setCookieEditorList:
	function(list) {
		var opt=cookieManager.getCookieList();
		var sel=list.selectedIndex;
		while (list.options.length > 1) { list.options[1]=null; } // clear list (except for header item)
		list.options[0]=new Option("There are "+opt.length+" cookies...","",false,false);
		if (!opt.length) { list.form.val.value=""; return; } // no cookies
		var c=1;
		for(var i=0; i<opt.length; i++) {
			var txt="";
			if  (opt[i].substr(0,3)=="chk")
				txt+="["+(config.options[opt[i]]?"x":"_")+"] ";
			txt+=opt[i];
			list.options[c++]=new Option(txt,opt[i],false,false);
		}
		list.selectedIndex=sel>0?sel:0;
		list.form.val.value=sel>0?config.options[list.options[sel].value]:"";
	}
}
// INITIALIZATION
cookieManager.setCookieEditorList(place.lastChild.firstChild.list); 
</script>}}}
<html><a href="javascript:R=prompt('#Rows','');if(R){C=prompt('#Columns','');}if(R&&C){T='<xmp><table cellpadding=\'1\' cellspacing=\'1\' border=\'0\'>\n';for(J=0;J<R;J++){T+='  <tr>\n';for(K=0;K<C;K++){T+='    <td></td>\n'}T+='  </tr>\n'}T+='</table></xmp>';win=open('','','');with(win.document){write(T);void(close())}}else{void(null)}"<span>html table</span></a></html>
{{whitespace{<<breadcrumbs [[<html><br>  </html>]] [[<br>  ]]>>}}}
[[BrowseMenu]] [[MakeTable]] [[AppendToTiddler]] [[EditBar]]

[[WhatsThis]] [[Configuration]]
{{whitespace{
//__[[MenuFlex:|menuFlex]]__//            <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" Menu ok>> [[Menu]]
                        <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" HowTo ok>> [[HowTo]]
                     <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" "SiteMenu##LEFT" ok "" 8em>>[[SiteMenu]]
                  <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" StyleSheet ok>>[[StyleSheet]]
               <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" MenuFlex ok>> [[MenuFlex]]
            <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" ExtraMenu ok>> [[ExtraMenu]]
         <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" Template3 ok>> [[Template3]]
      <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" Template2 ok>> [[Template2]]
   <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" PageTemplate ok>> [[PageTemplate]]
<<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" FloatingFooter ok>> [[FloatingFooter]]
----
//__[[Html Scripts:|htm]]__//        <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" Pop ok>> [[Pop]]
                        <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" Switch ok>> [[Switch]]
                     <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" ToolMenu ok>> [[Tools|ToolMenu]]
                  <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" BrowseMenu ok "" 50em>> [[Browse|BrowseMenu]]
               <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" EditBar ok "" 30em>> [[EditBar]]
            <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" MakeTable ok "" 40em>> [[MakeTable]]
         <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" MicroCalc ok>> [[MicroCalc]]
      <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" Load ok>> [[LoadPlugins|Load]]
   <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" AppendToTiddler ok>> [[AppendTiddler|AppendToTiddler]]
<<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" InsertCharacter ok "" 20em>> [[InsertCharacter]]
----
//__[[Favlets:|favlet]]__//               <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" TestStyle ok>> [[TestStyle]]
                        <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;"  SortTable ok>> [[SortTable]]
                     <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" WordCount ok>> [[WordCount]]
                  <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" YourSearch ok>> [[YourSearch]]
               <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" favlets##RenameTag ok>> [[RenameTag|favlets]]
            <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" favlets##DeleteTagged ok>> [[DeleteTagged|favlets]]
         <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" favlets##ViewAsHtml ok>> [[ViewAsHtml|favlets]]
      <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" GoogleSearch ok>> [[GoogleSearch]]
   <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" TransposeTable ok>> [[TransposeTable]]
<<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" SetDefaultTiddler ok>> [[SetDefaultTiddler]]
----

    <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" HowTo ok>> [[GettingStarted|HowTo]]
 <<tiddler Pop##Right with: "&nbsp; &nabla; &nbsp;" WelcomeToTiddlyspot ok>> [[WelcomeToTiddlyspot]]}}}
/%
!minor

!0
%/
/***
|Name|[[DoubleClickEditBundle]] ''packed''|
|Author|[[SaqImtiaz]]|
|Description|Adds double-click-to-edit to transcluded tiddlers and tabs|
|Source|http://tw.lewcid.org/|
***/
//{{{
config.macros.tiddler.onTiddlerMacroDblClick=function(e){if(!e){var e=window.event}var _3=resolveTarget(e);var _4=this.getAttribute("source");if((version.extensions.PartTiddlerPlugin)&&(_4.indexOf("/")!=-1)){if(!oldFetchTiddler.call(this,[_4])){_4=_4.slice(0,_4.lastIndexOf("/"))}}story.displayTiddler(_3,_4,2,false,null);e.cancelBubble=true;if(e.stopPropagation){e.stopPropagation()}return false};var oldTiddlerHandler=config.macros.tiddler.handler;config.macros.tiddler.handler=function(_5,_6,_7){oldTiddlerHandler.apply(this,arguments);_5.lastChild.setAttribute("source",_7[0]);_5.lastChild.ondblclick=this.onTiddlerMacroDblClick};
//}}}
//{{{
Story.prototype.onTabDblClick=function(e){if(!e){var e=window.event}var _3=resolveTarget(e);var _4=this.getAttribute("source");if((version.extensions.PartTiddlerPlugin)&&(_4.indexOf("/")!=-1)){if(!oldFetchTiddler.call(this,[_4])){return false}}story.displayTiddler(_3,_4,2,false,null);e.cancelBubble=true;if(e.stopPropagation){e.stopPropagation()}return false};config.macros.tabs.switchTab=function(_5,_6){var _7=_5.getAttribute("cookie");var _8=null;var _9=_5.childNodes;for(var t=0;t<_9.length;t++){if(_9[t].getAttribute&&_9[t].getAttribute("tab")==_6){_8=_9[t];_8.className="tab tabSelected"}else{_9[t].className="tab tabUnselected"}}if(_8){if(_5.nextSibling&&_5.nextSibling.className=="tabContents"){_5.parentNode.removeChild(_5.nextSibling)}var _b=createTiddlyElement(null,"div",null,"tabContents",null);_5.parentNode.insertBefore(_b,_5.nextSibling);var _c=_8.getAttribute("content");_b.setAttribute("source",_c);_b.ondblclick=story.onTabDblClick;wikify(store.getTiddlerText(_c),_b,null,store.getTiddler(_c));if(_7){config.options[_7]=_6;saveOptionCookie(_7)}}};
//}}}
/***
|''Name:''|DropDownMenuPlugin|
|''Description:''|Create dropdown menus from unordered lists|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#DropDownMenuPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.1|
|''Date:''|11/04/2007|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.5|

!!Usage:
* create a two-level unordered list using wiki syntax, and place {{{<<dropMenu>>}}} on the line after it.
* to create a vertical menu use {{{<<dropMenu vertical>>}}} instead.
* to assign custom classes to the list, just pass them as parameters to the macro {{{<<dropMenu className1 className2 className3>>}}}

!!Features:
*Supports just a single level of drop-downs, as anything more usually provides a poor experience for the user.
* Very light weight, about 1.5kb of JavaScript and 4kb of CSS.
* Comes with two built in css 'themes', the default horizontal and vertical. 

!!Customizing:
* to customize the appearance of the menu's, you can either add a custom class as described above or, you can edit the CSS via the StyleSheetDropDownMenu shadow tiddler.

!!Examples:
* [[DropDownMenuDemo]]

***/
// /%
//!BEGIN-PLUGIN-CODE
config.macros.dropMenu={

	dropdownchar: "",

	handler : function(place,macroName,params,wikifier,paramString,tiddler){
		list = findRelated(place.lastChild,"UL","tagName","previousSibling");
		if (!list)
			return;
		addClass(list,"suckerfish");
		if (params.length){
			addClass(list,paramString);
		}
		this.fixLinks(list);
	},
	
	fixLinks : function(el){
		var els = el.getElementsByTagName("li");
		for(var i = 0; i < els.length; i++) {
			if(els[i].getElementsByTagName("ul").length>0){
				var link = findRelated(els[i].firstChild,"A","tagName","nextSibling");
				if(!link){
					var ih = els[i].firstChild.data;
					els[i].removeChild(els[i].firstChild);
					var d = createTiddlyElement(null,"a",null,null,ih+this.dropdownchar,{href:"javascript:;"});
					els[i].insertBefore(d,els[i].firstChild);
				}
				else{
					link.firstChild.data = link.firstChild.data + this.dropdownchar;
					removeClass(link,"tiddlyLinkNonExisting");
				}
			}
			els[i].onmouseover = function() {
				addClass(this, "sfhover");
			};
			els[i].onmouseout = function() {
				removeClass(this, "sfhover");
			};
		}
	}	
};

config.shadowTiddlers["StyleSheetDropDownMenuPlugin"] = 
	 "/*{{{*/\n"+
	 "/***** LAYOUT STYLES -  DO NOT EDIT! *****/\n"+
	 "ul.suckerfish, ul.suckerfish ul {\n"+
	 "	margin: 0;\n"+
	 "	padding: 0;\n"+
	 "	list-style: none;\n"+
	 "	line-height:1.4em;\n"+
	 "}\n\n"+
	 "ul.suckerfish  li {\n"+
	 "	display: inline-block; \n"+
	 "	display: block;\n"+
	 "	float: left; \n"+
	 "}\n\n"+
	 "ul.suckerfish li ul {\n"+
	 "	position: absolute;\n"+
	 "	left: -999em;\n"+
	 "}\n\n"+
	 "ul.suckerfish li:hover ul, ul.suckerfish li.sfhover ul {\n"+
	 "	left: auto;\n"+
	 "}\n\n"+
	 "ul.suckerfish ul li {\n"+
	 "	float: none;\n"+
	 "	border-right: 0;\n"+
	 "	border-left:0;\n"+
	 "}\n\n"+
	 "ul.suckerfish a, ul.suckerfish a:hover {\n"+
	 "	display: block;\n"+
	 "}\n\n"+
	 "ul.suckerfish li a.tiddlyLink, ul.suckerfish li a, #mainMenu ul.suckerfish li a {font-weight:bold;}\n"+
	 "/**** END LAYOUT STYLES *****/\n"+
	 "\n\n"+
	 "/**** COLORS AND APPEARANCE - DEFAULT *****/\n"+
	 "ul.suckerfish li a {\n"+
	 "	padding: 0.5em 1.5em;\n"+
	 "	color: #FFF;\n"+
	 "	background: #0066aa;\n"+
	 "	border-bottom: 0;\n"+
	 "	font-weight:bold;\n"+
	 "}\n\n"+
	 "ul.suckerfish li:hover a, ul.suckerfish li.sfhover a{\n"+
	 "	background: #00558F;\n"+
	 "}\n\n"+
	 "ul.suckerfish li:hover ul a, ul.suckerfish li.sfhover ul a{\n"+
	 "	color: #000;\n"+
	 "	background: #eff3fa;\n"+
	 "	border-top:1px solid #FFF;\n"+
	 "}\n\n"+
	 "ul.suckerfish ul li a:hover {\n"+
	 "	background: #e0e8f5;\n"+
	 "}\n\n"+
	 "ul.suckerfish li a{\n"+
	 "	width:9em;\n"+
	 "}\n\n"+
	 "ul.suckerfish ul li a, ul.suckerfish ul li a:hover{\n"+
	 "	display:inline-block;\n"+
	 "	width:9em;\n"+
	 "}\n\n"+
	 "ul.suckerfish li {\n"+
	 "	border-left: 1px solid #00558F;\n"+
	 "}\n"+
	 "/***** END COLORS AND APPEARANCE - DEFAULT *****/\n"+
	 "\n\n"+
	 "/***** LAYOUT AND APPEARANCE: VERTICAL *****/\n"+
	 "ul.suckerfish.vertical li{\n"+
	 "	width:10em;\n"+
	 "	border-left: 0px solid #00558f;\n"+
	 "}\n\n"+
	 "ul.suckerfish.vertical ul li, ul.suckerfish.vertical li a, ul.suckerfish.vertical li:hover a, ul.suckerfish.vertical li.sfhover a {\n"+
	 "	border-left: 0.8em solid #00558f;\n"+
	 "}\n\n"+
	 "ul.suckerfish.vertical li a, ul.suckerfish.vertical li:hover a, ul.suckerfish.vertical li.sfhover a,  ul.suckerfish.vertical li.sfhover a:hover{\n"+
	 "	width:8em;\n"+
	 "}\n\n"+
	 "ul.suckerfish.vertical {\n"+
	 "	width:10em; text-align:left;\n"+
	 "	float:left;\n"+
	 "}\n\n"+
	 "ul.suckerfish.vertical li a {\n"+
	 "	padding: 0.5em 1em 0.5em 1em;\n"+
	 "	border-top:1px solid  #fff;\n"+
	 "}\n\n"+
	 "ul.suckerfish.vertical, ul.suckerfish.vertical ul {\n"+
	 "	line-height:1.4em;\n"+
	 "}\n\n"+
	 "ul.suckerfish.vertical li:hover ul, ul.suckerfish.vertical li.sfhover ul { \n"+
	 "	margin: -2.4em 0 0 10.9em;\n"+
	 "}\n\n"+
	 "ul.suckerfish.vertical li:hover ul li a, ul.suckerfish.vertical li.sfhover ul li a {\n"+
	 "	border: 0px solid #FFF;\n"+
	 "}\n\n"+
	 "ul.suckerfish.vertical li:hover a, ul.suckerfish.vertical li.sfhover a{\n"+
	 "	padding-right:1.1em;\n"+
	 "}\n\n"+
	 "ul.suckerfish.vertical li:hover ul li, ul.suckerfish.vertical li.sfhover ul li {\n"+
	 "	border-bottom:1px solid  #fff;\n"+
	 "}\n\n"+
	 "/***** END LAYOUT AND APPEARANCE: VERTICAL *****/\n"+
	 "/*}}}*/";
store.addNotification("StyleSheetDropDownMenuPlugin",refreshStyles);
//!END-PLUGIN-CODE
// %/
{{indent{
* MenuFlex
** <<tiddler List##Title with: menuFlex>>
* HtmlScripts
** <<tiddler List##Title with: htm>>
* Favlets
** <<tiddler List##Title with: favlet>>
* All Tags
** <<allTags>>
* System
** <<closeAll>>
** <<permaview>>
** <<newTiddler focus:"title" tag:"neu">>
** <<newJournal "YY 0MM DD - ddd">>
** <<tiddler GoogleSearch>>
** <<tiddler Pop##Right with: " load.." Load "load additional plugins">>
** <<tiddler Pop##Right with: " Optionen.." OptionsPanel "Optionen von TiddlyWiki ändern">>
** <<saveChanges>>
*  • Menu Flex
** {{x{
<<tiddler AccordionMenu##1>>}}}
<<dropMenu vertical>>}}}
/%
Name: EditBar
Source: http://menuflex.tiddlyspot.com/#EditBar - originally: http://www.TiddlyTools.com/#QuickEditPackage
Version: 2.4.3
Author: Eric Shulman (modified by Wolfgang)
License: http://www.TiddlyTools.com/#LegalStatements
Requires: EditBarPlugin; optional: EditBarTools
Description: Quickly insert TiddlyWiki tiddler links or common formatting sequences directly into tiddler content. - This is a modified version of QuickEditPackage. Important: Don't ask the original author for support to this variant script, before you haven't verified it by installing instead the latest version of the full QuickEditPackage.

Usage (in EditTemplate): <div macro='tiddler EditBar with: show'></div>
where "show" is an OPTIONAL keyword to force the toolbar to be displayed regardless of the current 'toggle' state. See [[QuickEditPackage]] for additional installation options

CUSTOM DEFINITIONS BEGIN HERE...
= = = = = = = = = = = = = = = = = = = =
!customList
htm heading 1
<html><h1>"$1"</h1></html>
----
htm heading 2
<html><h2>"$1"</h2></html>
----
htm heading 3
<html><h3>"$1"</h3></html>
----
enclose bookmarklet
<html><a href="$1"<span></span></a></html>
----
convert inline script
<<tiddler {{ $1 '';}}>>
----
popup - with [[Pop]]
<<tiddler Pop##Show with: label TiddlerName tooltip buttonClass width popupClass>>
----
● bulleted list level 1
*$1
----
○ bulleted list level 2
**$1
----
■ bulleted list level 3
***$1
----
timestamp
$[[enter a date|{{new Date().formatString('DDD, MMM DDth, YYYY hh12:0mm:0ssam')}}]]
----
scrollbox
@@display:block;height:10em;overflow:auto;$1@@@@display:block;text-align:right;^^scroll for more...^^@@
----
nested slider
+++[$1]<<tiddler $1>>===
----
big red
@@font-size:28pt;color:red;$1@@
----
!end

TOOLBAR DEFINITIONS BEGIN HERE...
= = = = = = = = = = = = = = = = = = = =

%/{{hidden small center quickEdit{<<tiddler {{
var here=story.findContainingTiddler(place);if(here)var tid=here.getAttribute('tiddler');var show='$1'!='$'+'1'||config.options.chkShowEditBar||tid=='EditBar';place.style.display=show?'block':'none';
'';}}>>/%

**** FORMAT ****
%/<html><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="plain text (remove ALL formatting)" accesskey="P" onclick="var e=config.quickEdit.getField(this); if (e) e.focus(); var txt=config.quickEdit.getSelection(e); config.quickEdit.setSelection(e,wikifyPlainText(txt)); return false;">&nbsp;-&nbsp;</a></html>/%
%/<html><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="''bold''" accesskey="B" onclick="config.quickEdit.wrapSelection(this,'\x27\x27','\x27\x27'); return false;">&nbsp;B&nbsp;</a></html>/%
%/<html><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="//italics//" accesskey="I" onclick="config.quickEdit.wrapSelection(this,'//','//'); return false;">&nbsp;I&nbsp;</a></html>/%
%/<html><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="__underline__" accesskey="U" onclick="config.quickEdit.wrapSelection(this,'__','__'); return false;">&nbsp;U&nbsp;</a></html> &nbsp;/%  SPACER

%/<html><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="''quoted''" accesskey="Q" onclick="config.quickEdit.wrapSelection(this,'\x22','\x22'); return false;">&nbsp;Q&nbsp;</a></html>/%
%/<html><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="@@highlight@@" accesskey="H" onclick="config.quickEdit.wrapSelection(this,'@@','@@'); return false;">&nbsp;H&nbsp;</a></html>/%
%/<html><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="--strikethrough--" accesskey="S" onclick="config.quickEdit.wrapSelection(this,'--','--'); return false;">&nbsp;S&nbsp;</a></html>/%
%/<html><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="[[forced link]]" accesskey="L" onclick="config.quickEdit.wrapSelection(this,'[[',']]'); return false;">&nbsp;L&nbsp;</a></html> &nbsp;/%  SPACER

%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="format text" onclick="var p=Popup.create(this);if (!p) return false;p.className+=' sticky smallform';var s=createTiddlyElement(p,'select');s.button=this;s.options[0]=new Option('select text format...','');
s.options[s.length]=new Option('CSS class wrapper','{{$1{,}}},Enter a CSS classname');s.options[s.length-1].title='CSS class wrapper - {{classname classname etc{...}}}';
s.options[s.length]=new Option('inline CSS styles','@@$1,@@,Enter CSS (attribute:value;attribute:value;...;)');s.options[s.length-1].title='inline CSS styles - @@attr:value;attr:value;...@@';
s.options[s.length]=new Option('superscript','^^,^^');s.options[s.length-1].title='^^superscript^^';
s.options[s.length]=new Option('subscript','~~,~~');s.options[s.length-1].title='~~subscript~~';
s.options[s.length]=new Option('heading 1','\n!,\n');s.options[s.length-1].title='H1 heading - !';
s.options[s.length]=new Option('heading 2','\n!!,\n');s.options[s.length-1].title='H2 heading - !!';
s.options[s.length]=new Option('heading 3','\n!!!,\n');s.options[s.length-1].title='H3 heading - !!!';
s.options[s.length]=new Option('heading 4','\n!!!!,\n');s.options[s.length-1].title='H4 heading - !!!!';
s.options[s.length]=new Option('heading 5','\n!!!!!,\n');s.options[s.length-1].title='H5 heading - !!!!!';
s.options[s.length]=new Option('HTML','<html><hide linebreaks>,<\x2fhtml>');s.options[s.length-1].title='HTML syntax - <html><hide linebreaks>...<\x2fhtml>';
s.options[s.length]=new Option('plain text','<nowiki>,<\x2fnowiki>');s.options[s.length-1].title='nowiki syntax - <nowiki>...<\x2fnowiki>';
s.options[s.length]=new Option('blockquote','\<\<\<\n,\n\<\<\<');s.options[s.length-1].title='indented blockquote - \<\<\<';
s.options[s.length]=new Option('monospaced','{{{,}}}');s.options[s.length-1].title='inline monospaced text - {{{...}}}';
s.options[s.length]=new Option('monospaced text box','\n{{{\n,\n}}}');s.options[s.length-1].title='multi-line monospaced text box - {{{...}}}';
s.options[s.length]=new Option('hidden comment','/% , %/');s.options[s.length-1].title='comment (invisible content) - /%...%/';
s.options[s.length]=new Option('css comment','/* , */');s.options[s.length-1].title='comment (style sheet) - /*...*/';
s.options[s.length]=new Option('css code','\n/*{{{*/\n,\n/*}}}*/');s.options[s.length-1].title='multiline monospaced css box - /*{{{*/.../*}}}*/';
s.options[s.length]=new Option('visible comment','\n/***\n,\n***/');s.options[s.length-1].title='code comment (visible content) - /***...***/';
s.options[s.length]=new Option('javascript code','\n//{{{\n,\n//}}}');s.options[s.length-1].title='multiline monospaced code box - //{{{...//}}}';
s.options[s.length]=new Option('hidden javascript','///% , //%/');s.options[s.length-1].title='code (invisible javascript) - ///%...//%/';
s.size=s.length;s.onclick=function(){ if (!this.value.length) return;var parts=this.value.split(',');var prefix=parts[0];var suffix=parts[1];var ask=parts[2];if(ask){var val=prompt(ask);if(!val){Popup.remove();return false;}prefix=prefix.replace(/\$1/g,val);suffix=suffix.replace(/\$1/g,val);}config.quickEdit.wrapSelection(this.button,prefix,suffix);Popup.remove();return false;};s.onkeyup=function(ev){var k=(ev||window.event).keyCode;if(k==13)this.onclick();if(k==27)Popup.remove();};Popup.show(p,false);s.focus();return config.quickEdit.processed(event);">form</a></html>/%

**** CUSTOM ****
!help
Reminders:

Custom formats are stored as an "HR-separated list" in [[EditBar]], where the first line of each list item is the text 'label' to show in the droplist, followed by one or more lines of wiki content to be inserted into the tiddler source.

Substitution markers can be used to dynamically insert values into the formatted output: $1 inserts the tiddler editor's current selected text. $[[message|default value]] interactively prompts for a value to be inserted. $[[message|$1]] uses the selected text as the default value. $[[message|{{javascript}}]] calculates the default value using javascript code.
!end help
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="custom defined formats" onclick="var p=Popup.create(this); if (!p) return false; p.className+=' sticky smallform';var s=createTiddlyElement(p,'select');s.button=this;s.options[0]=new Option('select a custom format...','');var items=store.getTiddlerText('EditBar##customList','').split('\n----\n');for(var i=0;i<items.length;i++){if(!items[i].length)continue;var lines=items[i].split('\n');var label=lines.shift();var val=lines.join('\n');s.options[s.length]=new Option(label,val);s.options[s.length-1].title=val;}s.options[s.length]=new Option('[Edit custom formats...]','_edit');s.options[s.length-1].title='add/change custom format definitions...';s.size=Math.min(s.length,15);s.onclick=function(){if(!this.value.length)return;if(this.value=='_edit'){alert(store.getTiddlerText('EditBar##help'));story.displayTiddler(story.findContainingTiddler(this.button),'EditBar',DEFAULT_EDIT_TEMPLATE);}else{var e=config.quickEdit.getField(this.button);if(!e)return false;e.focus();var txt=config.quickEdit.getSelection(e);replaceSelection(e,this.value.replace(/\$\x31/g,txt).replace(/\$\[\[[^\]]+\]\]/g,function(t){x=t.substr(3,t.length-5).split('|');var msg=x[0];var def=x[1]||'';if(def.startsWith('{{')){try{def=eval(def.substr(2,def.length-4))}catch(ex){showException(ex)}}return prompt(msg,def)||'';}));}Popup.remove();return false;};s.onkeyup=function(ev){var k=(ev||window.event).keyCode;if(k==13)this.onclick();if(k==27)Popup.remove();};Popup.show();s.focus();return config.quickEdit.processed(event);">more</a></html>/%

**** ALIGNMENT ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="align text" onclick="var p=Popup.create(this);if (!p) return false;p.className+=' sticky smallform';var s=createTiddlyElement(p,'select');s.button=this;s.options[0]=new Option('select text alignment...','');
s.options[s.length]=new Option('left','left');s.options[s.length-1].title='{{left{...}}}';
s.options[s.length]=new Option('center','center');s.options[s.length-1].title='{{center{...}}}';
s.options[s.length]=new Option('right','right');s.options[s.length-1].title='{{right{...}}}';
s.options[s.length]=new Option('justify','justify');s.options[s.length-1].title='{{justify{...}}}';
s.options[s.length]=new Option('indent','indent');s.options[s.length-1].title='{{indent{...}}}';
s.options[s.length]=new Option('float left','floatleft');s.options[s.length-1].title='{{floatleft{...}}}';
s.options[s.length]=new Option('float right','floatright');s.options[s.length-1].title='{{floatright{...}}}';
s.options[s.length]=new Option('no bullets list','nobullets li');s.options[s.length-1].title='{{nobullets{...}}}';
s.size=s.length;s.onclick=function(){if(!this.value.length)return;config.quickEdit.wrapSelection(this.button,'{{'+this.value+'{','}}}');Popup.remove();return false;};s.onkeyup=function(ev){var k=(ev||window.event).keyCode;if(k==13)this.onclick();if(k==27)Popup.remove();};Popup.show(p,false);s.focus();return config.quickEdit.processed(event);">lign</a></html>/%

**** COLOR ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="text/background color - @@color:#RGB;background-color:#RGB;...@@" onclick="var p=Popup.create(this,null,'popup sticky smallform');if(!p)return false;p.style.padding='2px';function hex(d){return '0123456789ABCDEF'.substr(d,1);}var fg=createTiddlyElement(p,'select');fg.button=this;fg.style.width='12em';fg.options[0]=new Option('text color...','');fg.options[1]=new Option('\xa0 or enter a value','_ask');fg.options[2]=new Option('\xa0 or use default color','');for(var r=0;r<16;r+=3)for(var g=0;g<16;g+=3)for(var b=0;b<16;b+=3){var label=hex(r)+hex(g)+hex(b);fg.options[fg.length]=new Option(label,'#'+label);fg.options[fg.length-1].style.color='#'+label;}fg.onchange=function(){var val=this.value;if(val=='_ask'){val=prompt('Enter a CSS color value');if(!val||!val.length)return false;}this.options[0].value=val;this.options[0].text=val.length?'text:'+val:'text color...';var bg=this.nextSibling;for(var i=3;i<bg.options.length;i++)bg.options[i].style.color=val;var preview=this.nextSibling.nextSibling.nextSibling;var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');if(!t.length)t='~AaBbCcDdEeFfGgHhIiJj 1234567890';var fg=this.value;if(fg.length)fg='color:'+fg+';';var bg=this.nextSibling.value;if(bg.length)bg='background-color:'+bg+';';if(fg.length||bg.length)t='@@'+fg+bg+t+'@@';removeChildren(preview);wikify(t,preview);this.selectedIndex=0;return false;};var bg=createTiddlyElement(p,'select');bg.button=this;bg.style.width='12em';bg.options[0]=new Option('background color...','');bg.options[1]=new Option('\xa0 or enter a value','_ask');bg.options[2]=new Option('\xa0 or use default color','');for(var r=0;r<16;r+=3)for(var g=0;g<16;g+=3)for(var b=0;b<16;b+=3){var label=hex(15-r)+hex(15-g)+hex(15-b);bg.options[bg.length]=new Option(label,'#'+label);bg.options[bg.length-1].style.backgroundColor='#'+label;}bg.onchange=function(){var val=this.value;if(val=='_ask'){val=prompt('Enter a CSS color value');if(!val||!val.length)return false;}this.options[0].value=val;this.options[0].text=val.length?'background:'+val:'background color...';var fg=this.previousSibling;for(var i=3;i<fg.options.length;i++)fg.options[i].style.backgroundColor=val;var preview=this.nextSibling.nextSibling;var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');if(!t.length)t='~AaBbCcDdEeFfGgHhIiJj 1234567890';var fg=this.previousSibling.value;if(fg.length)fg='color:'+fg+';';var bg=this.value;if(bg.length)bg='background-color:'+bg+';';if(fg.length||bg.length)t='@@'+fg+bg+t+'@@';removeChildren(preview);wikify(t,preview);this.selectedIndex=0;return false;};var b=createTiddlyElement(p,'input',null,null,null,{type:'button'});b.button=this;b.value='ok';b.style.width='4em';b.onclick=function(){var fg=this.previousSibling.previousSibling.value;if(fg.length)fg='color:'+fg+';';var bg=this.previousSibling.value;if(bg.length)bg='background-color:'+bg+';';var t=config.quickEdit.getSelection(config.quickEdit.getField(this.button));t=t.replace(/^@@(color\:.+;)?(background-color\:.+;)?/,'').replace(/@@$/,'');if(fg.length||bg.length)config.quickEdit.setSelection(this.button,'@@'+fg+bg+t+'@@');Popup.remove();return false;};var preview=createTiddlyElement(p,'div',null,'viewer');var s=preview.style;s.border='1px solid';s.margin='2px';s.width='24em';s.padding='3px';s.MozBorderRadius='3px';s.overflow='hidden';s.textAlign='center';s.whiteSpace='normal';var t=config.quickEdit.getSelection(config.quickEdit.getField(this));wikify(t.length?t:'~AaBbCcDdEeFfGgHhIiJj 1234567890',preview);Popup.show(p,false);event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;">dye</a></html>/%

**** FONT ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="set font-family CSS attribute - @@font-family:facename;...@@" onclick="var p=Popup.create(this);if(!p)return false;p.className+=' sticky smallform';var s=createTiddlyElement(p,'select');s.button=this;s.options[0]=new Option('select a font family...','');var fonts=store.getTiddlerText('EditBarToolsTools##fontList','').split('\n');for(var i=0;i<fonts.length;i++){if(!fonts[i].length)continue;s.options[s.length]=new Option(fonts[i],fonts[i]);s.options[s.length-1].style.fontFamily=fonts[i];}s.options[s.length]=new Option('[Edit font list...]','_edit');s.options[s.length-1].title='enter fonts,one per line...';s.size=Math.min(s.length,15);s.onclick=function(){if(this.value=='_edit')story.displayTiddler(story.findContainingTiddler(this.button),'EditBarTools',DEFAULT_EDIT_TEMPLATE);elseconfig.quickEdit.wrapSelection(this.button,'@@font-family:\x22'+this.value+'\x22;','@@');Popup.remove();return false;};s.onkeyup=function(ev){var k=(ev||window.event).keyCode;if(k==13)this.onclick();if(k==27)Popup.remove();};Popup.show(p,false);s.focus();return config.quickEdit.processed(event);">font</a></html> &nbsp;/%  SPACER

**** MORE TOOLS ****
%/<<tiddler EditBarTools>> &nbsp;/%  SPACER
%/<<tiddler Select>><<tiddler Pop##Show with: sym InsertCharacter ok "" "insert custom symbols>><<tiddler ResizeBox>>}}}
/***
|Name| EditBarPlugin|
|Source| http://www.TiddlyTools.com/#QuickEditPlugin|
|Documentation| http://www.TiddlyTools.com/#QuickEditPlugin|
|Version| 2.4.3|
|Author| Eric Shulman (modified by Wolfgang)|
|License| http://www.TiddlyTools.com/#LegalStatements|
|Type| plugin|
|Description| Support functions for ~QuickEdit package: styles, utility functions, and 'toggleQuickEdit' command. - This is a modified version of QuickEditPackage. Important: Don't ask the original author for support to this variant script, before you haven't verified it by installing instead the latest version of the full QuickEditPackage.|
!!!!!Code
***/
//{{{
version.extensions.QuickEditPlugin= {major: 2, minor: 4, revision: 3, date: new Date(2009,6,11)};

// SET STYLESHEET
setStylesheet("\
.quickEdit a { border:2px outset ButtonFace; padding:0px 3px !important; \
	-moz-border-radius:.5em; -webkit-border-radius:.5em; \
	-moz-appearance:button !important; -webkit-appearance:push-button !important; \
	background-color:ButtonFace; color:ButtonText !important;  \
	line-height:200%; font-weight:normal; } \
.quickEdit a:hover { border: 2px inset ButtonFace; background-color:ButtonFace; }\
", "quickEditStyles");

// REMOVE COOKIE
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

// UTILITY FUNCTIONS
config.quickEdit = {
	processed: function(ev) { ev=ev||window.event;
		ev.cancelBubble=true;
		if(ev.stopPropagation) ev.stopPropagation();
		return false;
	},
	keyup: function(ev){ var k=(ev||window.event).keyCode;
		if (k==13) this.onclick();
		if (k==27) Popup.remove();
	},
	getField: function(where) {
		var here=story.findContainingTiddler(where); if (!here) return null;
		var e=story.getTiddlerField(here.getAttribute("tiddler"),"text");
		if (e&&e.getAttribute("edit")=="text") return e;
		return null;
	},
	setSelection: function(where,newtext) {
		var e=this.getField(where); if (!e) return false;
		e.focus(); replaceSelection(e,newtext);
		return false;
	},
	wrapSelection: function(where,before,after) {
		var e=this.getField(where); if (!e) return false;
		e.focus(); replaceSelection(e,before+config.quickEdit.getSelection(e)+after);
		return false;
	},
	getSelection: function(e) {
		var seltext="";
		if (e&&e.setSelectionRange)
			seltext=e.value.substr(e.selectionStart,e.selectionEnd-e.selectionStart);
		else if (document.selection) {
			var range = document.selection.createRange();
			if (range.parentElement()==e) seltext=range.text
		}
		return seltext;
	},
	promptForFilename: function(msg,path,file) {
		if(window.Components) { // moz
			try {
				netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
				var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
				var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
				picker.init(window, msg, nsIFilePicker.modeOpen);
				var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
				thispath.initWithPath(path);
				picker.displayDirectory=thispath;
				picker.defaultExtension='jpg';
				picker.defaultString=file;
				picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterImages);
				if (picker.show()!=nsIFilePicker.returnCancel)
					var result="file:///"+picker.file.persistentDescriptor.replace(/\\/g,'/');
			}
			catch(e) { alert('error during local file access: '+e.toString()) }
		}
		else { // IE
			try { // XP only
				var s = new ActiveXObject('UserAccounts.CommonDialog');
				s.Filter='All files|*.*|JPG files|*.jpg|GIF files|*.gif|PNG files|*.png|';
				s.FilterIndex=1; // default to JPG
				s.InitialDir=path;
				s.FileName=file;
				if (s.showOpen()) var result=s.FileName;
			}
			catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE
		}
		return result;
	}
}
//}}}
//{{{
if (config.options.chkShowEditBar===undefined) config.options.chkShowEditBar=false;
config.commands.toggleEditBar = {
	hideReadOnly: true,
	getText: function() { return config.options.chkShowEditBar?'\u221Abar':'bar'; },

	tooltip: 'show EditBar toolbar buttons',
	handler: function(event,src,title) {
		config.options.chkShowEditBar=!config.options.chkShowEditBar;
		config.macros.option.propagateOption("chkShowEditBar","checked", config.options.chkShowEditBar,"input");
		if (config.options.chkShowEditBar) saveOptionCookie("chkShowEditBar");
		else removeCookie("chkShowEditBar");
		src.innerHTML=config.commands.toggleEditBar.getText();
		story.forEachTiddler(function(t,e){if (story.isDirty(t)) refreshElements(e);});
		return false;
	}
};
//}}}
// // COPIED FROM [[StickyPopupPlugin]] TO ELIMINATE PLUGIN DEPENDENCY
//{{{
if (config.options.chkStickyPopups==undefined) config.options.chkStickyPopups=false;
Popup.stickyPopup_onDocumentClick = function(ev)
{
	// if click is in a sticky popup, ignore it so popup will remain visible
	var e = ev ? ev : window.event; var target = resolveTarget(e);
	var p=target; while (p) {
		if (hasClass(p,"popup") && (hasClass(p,"sticky")||config.options.chkStickyPopups)) break;
		else p=p.parentNode;
	}
	if (!p) // not in sticky popup (or sticky popups disabled)... use normal click handling
		Popup.onDocumentClick(ev);
	return true;
};
try{removeEvent(document,"click",Popup.onDocumentClick);}catch(e){};
try{addEvent(document,"click",Popup.stickyPopup_onDocumentClick);}catch(e){};
//}}}
/%
Name: EditBarTools
Source: http://menuflex.tiddlyspot.com/#EditBarTools - originally: http://www.TiddlyTools.com/#QuickEditPackage
Version: 2.4.3
Author: Eric Shulman (modified by Wolfgang)
License: http://www.TiddlyTools.com/#LegalStatements
Requires: EditBarPlugin, EditBar
Description: Quickly insert TiddlyWiki tiddler links or common formatting sequences directly into tiddler content. - This is a modified version of QuickEditPackage. Important: Don't ask the original author for support to this variant script, before you haven't verified it by installing instead the latest version of the full QuickEditPackage.

Usage:
EditTools: <<tiddler EditBarTools>>
OR
EditTemplate: <span class='toolbar' macro='tiddler EditBarTools'></span>

CUSTOM DEFINITIONS BEGIN HERE...
= = = = = = = = = = = = = = = = = = = =
!fontList
Arial,helvetica,sans-serif
Times New Roman,times,serif
Courier,monospaced
Lucida Sans
Comic Sans MS
Mistral,vaughan
Palatino Linotype
Sylfaen
DejaVu
!end

TOOLBAR DEFINITIONS BEGIN HERE...
= = = = = = = = = = = = = = = = = = = =

**** REPLACE ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="find/replace selected text with replacement text" onclick="var here=story.findContainingTiddler(this);if(!here)return false;var e=config.quickEdit.getField(here);var s=config.quickEdit.getSelection(e);var p=Popup.create(this,null,'popup sticky smallform');if(!p)return false;var t=createTiddlyElement(p,'input');t.onfocus=function(){this.select()};t.value=s.length?s:'enter target text';var r=createTiddlyElement(p,'input');r.onfocus=function(){this.select()};r.value='enter replacement text';var tid=here.getAttribute('tiddler');var b=createTiddlyElement(p,'button',null,null,'?',{tid:tid});b.style.width='2em';b.title='FIND/FIND NEXT target text';b.onclick=function(ev){var e=story.getTiddlerField(this.getAttribute('tid'),'text');if(!e||e.getAttribute('edit')!='text')return;var t=this.previousSibling.previousSibling;var tv=t.value.replace(/\\t/mg,'\t').unescapeLineBreaks();e.focus();if(e.setSelectionRange){var newstart=e.value.indexOf(tv,e.selectionStart+1);if(newstart==-1)newstart=e.value.indexOf(tv);if(newstart==-1){alert('\u0022'+t.value+'\u0022 not found');t.focus();return;}e.setSelectionRange(newstart,newstart+tv.length);var linecount=e.value.split('\n').length;var thisline=e.value.substr(0,e.selectionStart).split('\n').length;e.scrollTop=Math.floor((thisline-1-e.rows/2)*e.scrollHeight/linecount);}else if(document.selection){var range=document.selection.createRange();if(range.parentElement()==e){range.collapse(false);var found=false;try{found=range.findText(v,e.value.length,4)}catch(e){}if(found)range.select();else{alert('\u0022'+t.value+'\u0022 not found');t.focus();}}}};b=createTiddlyElement(p,'button',null,null,'=',{tid:tid});b.style.width='2em';b.title='REPLACE selected text';b.onclick=function(ev){var e=story.getTiddlerField(this.getAttribute('tid'),'text');if(!e||e.getAttribute('edit')!='text')return;var t=this.previousSibling.previousSibling.previousSibling;var r=this.previousSibling.previousSibling;var rv=r.value.replace(/\\t/mg,'\t').unescapeLineBreaks();if((e.selectionStart!==undefined && e.selectionEnd==e.selectionStart)||(document.selection && document.selection.createRange().text==''))this.previousSibling.click();if((e.selectionStart!==undefined && e.selectionEnd==e.selectionStart)||(document.selection && document.selection.createRange().text=='')){t.focus();return;}e.focus();replaceSelection(e,rv);};b=createTiddlyElement(p,'button',null,null,'+',{tid:tid});b.style.width='2em';b.title='REPLACE selected text AND FIND NEXT target text';b.onclick=function(ev){this.previousSibling.click();this.previousSibling.previousSibling.click();};b=createTiddlyElement(p,'button',null,null,'!',{tid:tid});b.style.width='2em';b.title='REPLACE ALL occurrences of target text';b.onclick=function(ev){var e=story.getTiddlerField(this.getAttribute('tid'),'text');if(!e||e.getAttribute('edit')!='text')return;var t=this.previousSibling.previousSibling.previousSibling.previousSibling.previousSibling;var r=this.previousSibling.previousSibling.previousSibling.previousSibling;var tv=t.value.replace(/\\t/mg,'\t').unescapeLineBreaks();var rv=r.value.replace(/\\t/mg,'\t').unescapeLineBreaks();if(!tv.length){alert('Please enter the target text');t.focus();return;}var m='This will replace all occurrences of:\n\n'+tv+'\n\nwith:\n\n'+rv+'\n\nAre you sure?';if(!confirm(m)){r.focus();r.select();return;}e.value=e.value.replace(new RegExp(tv.escapeRegExp(),'gm'),rv);e.focus();e.select();Popup.remove();};Popup.show();if(!s.length){t.focus();t.select()}else{r.focus();r.select()}event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;">seek</a></html>/%

**** SPLIT TIDDLER ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="move selection to new tiddler and insert link, embedded tiddler, or slider" onclick="var p=Popup.create(this);if(!p)return false;p.className+=' sticky smallform';p.style.whiteSpace='nowrap';var i=createTiddlyElement(p,'input');i.defaultValue='Enter a new tiddler title';i.onfocus=function(){this.select()};var s=createTiddlyElement(p,'select');s.button=this;s.options[0]=new Option('select type...','');s.options[0].title='select split type';s.options[1]=new Option('link','link');s.options[1].title='replace with [[TiddlerName]]';s.options[2]=new Option('embed','embed');s.options[2].title='replace with \<\<tiddler TiddlerName\>\>';s.options[3]=new Option('slider','slider');s.options[3].title='replace with \<\<slider \u0022\u0022 [[TiddlerName]] [[label]] [[tooltip]]\>\>';s.onchange=function(){if(s.previousSibling.value==s.previousSibling.defaultValue){alert('A tiddler title is required');s.selectedIndex=0;s.previousSibling.focus();return false;}var tid=s.previousSibling.value;if(store.tiddlerExists(tid)&& !confirm(config.messages.overwriteWarning.format([tid]))){s.previousSibling.focus();return false;}switch(s.value){case 'link':var newtxt='[['+tid+']]';break;case 'embed':var newtxt='\<\<tiddler [['+tid+']]\>\>';break;case 'slider':var label=prompt('Enter a slider label',tid);if(!label){Popup.remove();return false;}var tip=prompt('Enter a slider tooltip',label);if(!tip){Popup.remove();return false;}var newtxt='\<\<slider \u0022\u0022 [['+tid+']] [['+label+']] [['+tip+']]\>\>';break;}var txt=config.quickEdit.getSelection(config.quickEdit.getField(this.button));store.saveTiddler(tid,tid,txt,config.options.txtUserName,new Date(),[],{});story.displayTiddler(story.findContainingTiddler(this.button),tid);config.quickEdit.setSelection(this.button,newtxt);Popup.remove();return false;};Popup.show(p,false);event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;">split</a></html>/%

**** SORT LINES ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="sort lines of text" onclick="var p=Popup.create(this);if(!p)return false;p.className+=' sticky smallform';var s=createTiddlyElement(p,'select');s.button=this;s.options[0]=new Option('select sort order...','');s.options[s.length]=new Option('ascending','A');s.options[s.length-1].title='ascending';s.options[s.length]=new Option('descending','D');s.options[s.length-1].title='descending';s.size=s.length;s.onclick=function(){if(!this.value.length)return;var e=config.quickEdit.getField(this.button);if(!e)return false;var lines=config.quickEdit.getSelection(e).split('\n').sort();if(this.value=='D')lines=lines.reverse();replaceSelection(e,lines.join('\n'));e.focus();Popup.remove();return false;};s.onkeyup=function(ev){var k=(ev||window.event).keyCode;if(k==13)this.onclick();if(k==27)Popup.remove();};Popup.show(p,false);s.focus();return config.quickEdit.processed(event);">sort</a></html>/%

**** CONVERT ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="convert between tab-separated, comma-separated data and wiki table formats" onclick="var e=config.quickEdit.getField(this);if(e)e.focus();var txt=config.quickEdit.getSelection(e);if(txt.indexOf(',')+txt.indexOf('\t')+txt.indexOf('|')==-3){alert('Please select text containing tabs,commas,or TiddlyWiki table syntax.');return false;}var p=Popup.create(this);if(!p)return false;p.className+=' sticky smallform';var s=createTiddlyElement(p,'select');s.button=this;s.options[0]=new Option('select a converter...','');if(txt.indexOf(',')!=-1){s.options[s.length]=new Option('commas -> table','commasToTable');s.options[s.length]=new Option('commas -> tabs','commasToTabs');}if(txt.indexOf('\t')!=-1){s.options[s.length]=new Option('tabs -> table','tabsToTable');s.options[s.length]=new Option('tabs -> commas','tabsToCommas');}if(txt.indexOf('|')!=-1){s.options[s.length]=new Option('table -> tabs','tableToTabs');s.options[s.length]=new Option('table -> commas','tableToCommas');}s.size=s.length;s.onclick=function(){if(!this.value.length)return;var e=config.quickEdit.getField(this.button);if(!e)return false;e.focus();var txt=config.quickEdit.getSelection(e);switch(this.value){case 'tabsToTable':txt=txt.replace(/\t/g,'|').replace(/^|$/g,'|');txt=txt.replace(/\n/g,'|\n|').replace(/^\|$/g,'');break;case 'tableToTabs':txt=txt.replace(/\t/g,' ').replace(/\|/g,'\t');txt=txt.replace(/^\t/g,'').replace(/\t$/g,'');txt=txt.replace(/\n\t/g,'\n').replace(/\t\n/g,'\n');break;case 'commasToTable':txt=txt.replace(/,/g,'|').replace(/^|$/g,'|');txt=txt.replace(/\n/g,'|\n|').replace(/^\|$/g,'');break;case 'tableToCommas':txt=txt.replace(/,/g,' ').replace(/\|/g,',');txt=txt.replace(/^,/g,'').replace(/,$/g,'');txt=txt.replace(/\n,/g,'\n').replace(/,\n/g,'\n');break;case 'tabsToCommas':txt=txt.replace(/\t/g,',');break;case 'commasToTabs':txt=txt.replace(/,/g,'\t');break;}replaceSelection(e,txt);Popup.remove();return false;};s.onkeyup=function(ev){var k=(ev||window.event).keyCode;if(k==13)this.onclick();if(k==27)Popup.remove();};Popup.show(p,false);s.focus();return config.quickEdit.processed(event);"
>|,tab</a></html> &nbsp;/% (SPACER)

**** INSERT LINK ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="add a link to a tiddler or external file - [[link text|TiddlerName]]" onclick="var p=Popup.create(this);if(!p)return false;p.className+=' sticky smallform';var s2=createTiddlyElement(p,'select');s2.title='filter by tag';s2.options[0]=new Option('filter by tag...','');s2.options[s2.length]=new Option('[all tiddlers]','');var tags=store.getTags();for(var t=0;t<tags.length;t++)s2.options[s2.length]=new Option(tags[t][0],tags[t][0]);s2.onchange=function(){var tag=this.value;var tids=tag.length?store.getTaggedTiddlers(tag,'title'):store.getTiddlers('title');var list=this.nextSibling.nextSibling;while(list.length)list.options[0]=null;var prompt='select a tiddler or file...';if(tag.length)prompt='select a tagged tiddler ['+tids.length+' matches]...';list.options[0]=new Option(prompt,'');if(!tag.length)list.options[list.length]=new Option('[browse for file...]','_file');for(var t=0;t<tids.length;t++){list.options[list.length]=new Option(tids[t].title,tids[t].title);list.options[list.length-1].title=tids[t].getSubtitle();}list.size=Math.min(list.length,10);list.selectedIndex=0;list.focus();this.style.width=list.offsetWidth+'px';if(!tag.length)this.selectedIndex=0;};createTiddlyElement(p,'br');var s=createTiddlyElement(p,'select');s.button=this;s.title='select a tiddler or file';s.options[0]=new Option('select a tiddler or file...','');s.options[s.length]=new Option('[browse for file...]','_file');var tids=store.getTiddlers('title');for(var t=0;t<tids.length;t++){s.options[s.length]=new Option(tids[t].title,tids[t].title);s.options[s.length-1].title=tids[t].getSubtitle();}s.size=Math.min(s.length,10);s.onclick=function(){if(!this.value.length)return false;var title=this.value;var txt=title;if(title=='_file'){title=config.quickEdit.promptForFilename('Select a file',getLocalPath(document.location.href),'');if(!title){this.selectedIndex=0;this.focus();return false;}var txt=title.substr(title.lastIndexOf('/')+1);}var txt=prompt('Enter the text to display for this link',txt);if(!txt){this.selectedIndex=0;this.focus();return false;}config.quickEdit.setSelection(this.button,'[['+txt+'|'+title+']]');Popup.remove();return false;};s.onkeyup=function(ev){var k=(ev||window.event).keyCode;if(k==13)this.onclick();if(k==27)Popup.remove();};Popup.show(p,false);s2.style.width=s.offsetWidth+'px';s.focus();return config.quickEdit.processed(event);">link</a></html>/%

**** INSERT TIDDLER OR FILE ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="insert content from another tiddler or external file" onclick="var p=Popup.create(this);if(!p)return false;p.className+=' sticky smallform';var s2=createTiddlyElement(p,'select');s2.title='filter by tag';s2.options[0]=new Option('filter by tag...','');s2.options[s2.length]=new Option('[all tiddlers]','');var tags=store.getTags();for(var t=0;t<tags.length;t++)s2.options[s2.length]=new Option(tags[t][0],tags[t][0]);s2.onchange=function(){var tag=this.value;var tids=tag.length?store.getTaggedTiddlers(tag,'title'):store.getTiddlers('title');var list=this.nextSibling.nextSibling;while(list.length)list.options[0]=null;var prompt='select a tiddler or file...';if(tag.length)prompt='select a tagged tiddler ['+tids.length+' matches]...';list.options[0]=new Option(prompt,'');if(!tag.length)list.options[list.length]=new Option('[browse for file...]','_file');for(var t=0;t<tids.length;t++){list.options[list.length]=new Option(tids[t].title,tids[t].title);list.options[list.length-1].title=tids[t].getSubtitle();}list.size=Math.min(list.length,10);list.selectedIndex=0;list.focus();this.style.width=list.offsetWidth+'px';if(!tag.length)this.selectedIndex=0;};createTiddlyElement(p,'br');var s=createTiddlyElement(p,'select');s.button=this;s.title='select a tiddler or file';s.options[0]=new Option('select a tiddler or file...','');s.options[s.length]=new Option('[browse for file...]','_file');var tids=store.getTiddlers('title');for(var t=0;t<tids.length;t++){s.options[s.length]=new Option(tids[t].title,tids[t].title);s.options[s.length-1].title=tids[t].getSubtitle();}s.size=Math.min(s.length,10);s.onclick=function(){if(!this.value.length)return false;if(this.value=='_file'){var fn=config.quickEdit.promptForFilename('Enter/select a text file',getLocalPath(document.location.href),'');if(!fn)return false;var txt=loadFile(getLocalPath(fn));if(!txt){alert('Error:unable to read contents from \0027'+fn+'\0027');return;}}else var txt=store.getTiddlerText(this.value);if(!txt){displayMessage(this.value+' not found');this.selectedIndex=0;this.focus();return false;}config.quickEdit.setSelection(this.button,txt);Popup.remove();return false;};s.onkeyup=function(ev){var k=(ev||window.event).keyCode;if(k==13)this.onclick();if(k==27)Popup.remove();};Popup.show(p,false);s2.style.width=s.offsetWidth+'px';s.focus();return config.quickEdit.processed(event);">set</a></html>/%

**** INSERT MACRO ****
You can add guideText to your own plugin-defined macros by using the following javascript syntax: config.macros.macroName.guideText="guide text goes here";
%/<<tiddler {{
/* SET MACRO GUIDE TEXT (for built-in core macros) (11/17 - TBD - incomplete list) */
config.macros.edit.guideText="fieldname #rows";
config.macros.view.guideText="fieldname (link,wikified,date) format";
config.macros.slider.guideText="cookie TiddlerName label tooltip";
config.macros.option.guideText="(txtCookieName,chkCookieName)";
config.macros.tiddler.guideText="TiddlerName with: params...";
""; /* must return blank to suppress output */ }}>>/%
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="add a macro - \<\<macroName ...\>\>" onclick="var p=Popup.create(this);if(!p)return false;p.className+=' sticky smallform';var s=createTiddlyElement(p,'select');s.button=this;s.options[0]=new Option('select a macro...','');var macros=[];for(var m in config.macros)if(config.macros[m].handler)macros.push(m);macros.sort();for(var i=0;i<macros.length;i++){var m=macros[i];var help=config.macros[m].guideText;if(!help)help='';else help=' '+help;s.options[s.length]=new Option(m,m+help);s.options[s.length-1].title='\<\<'+m+help+'\>\>';}s.size=Math.min(s.length,15);s.onclick=function(){if(!this.value.length)return;config.quickEdit.setSelection(this.button,'\<\<'+this.value+'\>\>');Popup.remove();return false;};s.onkeyup=function(ev){var k=(ev||window.event).keyCode;if(k==13)this.onclick();if(k==27)Popup.remove();};Popup.show(p,false);s.focus();return config.quickEdit.processed(event);">mac</a></html>/%

**** INSERT IMAGE ****
%/<html><hide linebreaks><a href="javascript:;" class="tiddlyLink" tabindex="-1" title="embed an image (jpg/gif/png) - [img[tooltip|URL]] or [img[tooltip|path/to/file.ext]]" onclick="var fn=config.quickEdit.promptForFilename('Enter/select an image file',getLocalPath(document.location.href),'');if(!fn)return false;var h=document.location.href;var p=decodeURIComponent(h.substr(0,h.lastIndexOf('/')+1));if(fn.startsWith(p))fn=fn.substr(p.length);var tip=prompt('Enter a tooltip for this image','');if(!tip)tip='';else tip+='|';return config.quickEdit.setSelection(this,'[img['+tip+fn+']]');">img</a></html> &nbsp;
{{nobullets{{{PseudoStory{<<tiddler [[Diagonally]]>>}}}}}}
<<tiddler SiteMenu##LEFT>>
<<tiddler SiteMenu##CENTER>>
<<tiddler SiteMenu##Right2>>
<html><a href="javascript:void(eval(decodeURIComponent(%22(function(){try{%2520q%253Ddocument.getSelection()%253B%2520for(i%253D0%253B%2520i%253Cframes.length%253B%2520i%252B%252B)%257Bq%253Dframes%255Bi%255D.document.getSelection()%253B%2520if(q)break%253B%2520%257Dif(!q)void(q%253Dprompt('Search%2520Google%2520using%2520these%2520keywords%253A'%252C''))%253B%2520if(q)void(open('http%253A%252F%252Fwww.google.com%252Fsearch%253Fq%253D'%252Bescape(q)%252C''%252C''))%253B%2520return%2520false%253B%2520}catch(e){alert(e.description||e.toString())}})()%22)))"<span>google</span></a></html>
<<runTiddler TagGridPlugin>><<tagGrid "" "" "" "" "" eeeeff 3333ff open "" colorall sortrows sortcolumns>>
/***
|Name|GridPlugin|
|Source|http://www.TiddlyTools.com/#GridPlugin|
|Documentation|http://www.TiddlyTools.com/#GridPluginInfo|
|Version|2.0.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1.3|
|Type|plugin|
|Description|Display/edit slices, sections and fields in a grid (table) for a 'birds-eye' view of your document|
!!!!!Documentation
>see [[GridPluginInfo]]
!!!!!Revisions
<<<
2009.09.26 [2.0.6] fixed setSlice() for existing slices with empty values
|please see [[GridPluginInfo]] for additional revision details|
2007.01.30 [0.0.1] started
<<<
!!!!!Code
***/
//{{{
version.extensions.GridPlugin= {major: 2, minor: 0, revision: 6, date: new Date(2009,9,26)};

config.macros.grid= {
	sizeSliceName: 'TiddlerSize', // fake slice to show # of bytes in tiddler 
	noColsMsg: '@@display:block;border:1px solid;there are no columns to display@@',
	showHeaders:'&#x25BA;&#x25BA;&#x25BA;',
	showHeadersTip:'show column headings',
	hideHeaders:'&#x25C4;&#x25C4;&#x25C4;',
	hideHeadersTip:'hide column headings',
	slicesRE: /(?:^\|\s*[\'\/]*~?(\w+)\:?[\'\/]*\s*\|\s*(.*?)\s*\|$)/gm,
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var edit=params.contains('edit') && !readOnly; // no editing if readOnly
		var wiki=params.contains('wikify');
		var inline=params.contains('inline');
		if (inline) var heads=true;
		var all=params.contains('all');
		params=paramString.parseParams('name',null,true,false,true); // for NAMED VALUES
		var filter=getParam(params,'filter',''); // core or MatchTagsPlugin tag filter syntax
		if (filter.length && !filter.startsWith('[tag[')) filter='[tag['+filter+']]';
		var tags=this.getList(getParam(params,'tags'),true); // older "match at least one tag" syntax
		if (tags.length) filter='[tag['+tags.join(']][tag[')+']]'+filter;
		var names=this.getList(getParam(params,'columns')); // slices/sections/fields to use as columns
		var clip=getParam(params,'clip',0); // 0=no clipping
		var width=getParam(params,'width','auto');
		var rc=this.getRowsAndCols(filter,names,all);
		if (!rc.cols.length) wikify(this.noColsMsg,place);
		else this.renderTable(place,rc.rows,rc.cols,inline,heads,wiki,edit,clip,width);
	},
	getList: function(t,gettags) {
		var items=(t||'').readBracketedList();
		for (var i=0;i<items.length;i++) { var item=items[i];
			// replace item with list based on item prefix:
			// +name  contents of tiddler (space-separated list)
			// @name  slices/tags,
			// @!name sections
			// @=name fields
			if ('@+'.indexOf(item.substr(0,1))!=-1) {
				var title=item.substr(1); var type=title.substr(0,1);
				if ('=!'.indexOf(type)!=-1) title=title.substr(1);
				if (title=='here')
					title=story.findContainingTiddler(place).getAttribute('tiddler');
				var tid=store.getTiddler(title); if (tid) {
					var list=[];
					if (item.substr(0,1)=='+') list=tid.text.readBracketedList();  // contents
					else if (gettags) list=tid.tags; // tags
					else if (type=='!') list=this.getSections(tid.title);  // sections
					else if (type=='=') list=this.getFields(tid.title); // fields
					else for (var s in this.getSlices(tid.title)) list.push(s);  // slices
					items.splice(i,1); // remove item
					for (var j=0;j<list.length;j++,i++) items.splice(i,0,list[j]); // add list
				}
			}
		}
		return items;
	},
	getRowsAndCols: function(filter,names,all) {
		var rows=[]; var cols=[]; // get rows (tiddlers) and columns (slices)
		var tiddlers=filter&&filter.length?store.filterTiddlers(filter):store.getTiddlers();
		for (i=0; i<tiddlers.length; i++) {
			var slices=this.getSlices(tiddlers[i].title);
			var include=false; for (var s in slices) { cols.pushUnique(s); include=true; }
			if (include||all) rows.push(tiddlers[i].title);
		}
		rows=rows.sort();
		// use specified list instead of collected slice names
		if (names.length) var cols=names;
		return {rows:rows,cols:cols};
	},
	renderTable: function(place,rows,cols,inline,heads,wiki,edit,clip,width) {
		var span=createTiddlyElement(place,'span')
		span.innerHTML=this.generateTable(rows,cols,inline,heads,wiki,edit,clip,width)
		// replace TD content with wikified elements
		var tds=span.getElementsByTagName('td');
		for (var t=0; t<tds.length; t++) {
			if (hasClass(tds[t],'wiki')) {
				var txt=getPlainText(tds[t]);
				if (hasClass(tds[t],'grid_heading')) txt='[['+txt+']]';
				removeChildren(tds[t]);
				wikify(txt,tds[t]);
			}
		}
	},
	generateTable: function(rows,cols,inline,heads,wiki,edit,clip,width) {
		var out= "<html><table style='border:0;padding:0;spacing:0;"
			+"border-collapse:collapse;width:"+width+"'>";

		// column headings
		out+=	 "<tr style='border:0;vertical-align:bottom'>"
			+"<td style='text-align:right;border:0'>"
			+"<a href='javascript:;' style='font-size:80%;'"
			+"	title='"+(heads?this.hideHeadersTip:this.showHeadersTip)+"'"
			+"	onclick='return config.macros.grid.toggleHeaders("
			+"		this,event,"+(heads?"true":"false")+")'>"
			+(heads?this.hideHeaders:this.showHeaders)
			+"</a>"
			+"</td>";
		for (var i=0;i<cols.length;i++) {
			out+=	 "<td style='text-align:center;cursor:pointer;"
				+"	border:0;padding-left:2px;padding-right:2px;' "
				+"<span style='display:"+(heads?"block":"none")+"'>"
				+cols[i].replace(/^[=!]/,'')
				+"</span></td>";
		}
		out+="</tr>";

		// row heading format ('fake' tiddler link)
		// %0=cell width, %1=tiddler name, %2='wiki' classname (optional), %3='inline' classname (optional)
		var head="<td style='text-align:right;border:0;padding-right:2px;white-space:nowrap;%0;'>"
			+"<a href='javascript:;' tid=\"%1\" class='grid_heading %2 %3' "
			+"onclick='story.displayTiddler("
			+"	this,this.getAttribute(\"tid\"));return false'>%1</a></td>";

		// row value format
		// %0=bgcolor, %1=cellwidth, %2=cell alignment, %3=tiddler name
		// %4=slice/section/field name, %5=tooltip, %6='wiki' classname (optional),
		// %7='inline' classname (optional), %8=cell content value
		var cell="<td style='background-color:%0;border:1px solid;%1;%2;' tid=\"%3\" ";
		if (edit) cell+="onclick='return config.macros.grid.editInPlace("
			+"this,event,this.getAttribute(\"tid\"),\"%4\");' ";
		cell+="title=\"%5\" class='grid_content %6 %7'>%8</td>";

		// generate rows
		for (var i=0;i<rows.length;i++) {
			var tiddlersrc=rows[i].replace(/"/g,"&#x22;");
			out+="<tr style='border:0;vertical-align:top'>";
			out+=head.format([inline?'width:1%':'',tiddlersrc,wiki?'wiki':'',inline?'inline':'']);
			for (var j=0;j<cols.length;j++) { var c=cols[j];
				var val=this.get(rows[i],c);
				var content="&nbsp;";
				if (val.length && inline) {
					content=val.htmlEncode();
					if (c=='=text'||clip) // truncate
						content=val.substr(0,clip||500)
							+(val.length>(clip||500)?"...":"");
					if (c=='=text') // format tiddler source
						content='<html><code style="line-height:100%">'
							+content.replace(/\n/g,'<br>')
							+'</code></html>';
				}
				var title=this.showName(tiddlersrc,c)+(!inline?'='+val:'');
				out+=cell.format([
					val.length&&!inline?'#999':'transparent', !inline?'width:1em;':'',
					inline&&!isNaN(parseFloat(val))?'text-align:right !important;':'',
					tiddlersrc, c, title, wiki?'wiki':'', inline?'inline':'', content]);
			}
			out+='</tr>';
		}
		out+="</table></html>";
		return out;
	},
	showName: function(tid,name) {
		if (name==this.sizeSliceName) var fmt='%0 - size (in bytes)'; // fake slice
		var fmt=(name.substr(0,1)=='=')?'%1@%0':(name.substr(0,1)=='!')?'%1##%0':'%0::%1';
		return fmt.format([tid,name.replace(/^[=!]/,'')]);
	},
	toggleHeaders: function(here,event,defOpen) {
		if (here.expanded==undefined) here.expanded=defOpen;
		var ex=here.expanded=!here.expanded; 
		here.innerHTML=ex?this.hideHeaders:this.showHeaders;
		here.title=ex?this.hideHeadersTip:this.showHeadersTip;
		var cells=here.parentNode.parentNode.getElementsByTagName('td');
		for (i=1; i<cells.length; i++) cells[i].firstChild.style.display=ex?'inline':'none';
		event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;
	},
	editInPlace: function(here,event,tid,name) {
		if (here.editing) return false; // already editing, don't re-init
		if (name==this.sizeSliceName) return false; // read-only fake slice
		var v=this.get(tid,name); // current value
		var lines=v.split('\n').length;
		var title=this.showName(tid,name);
		var style=lines>1?'font-size:90%;width:99%;':'font-size:100%;width:95%;line-height:100%;'
		var maxlines=Math.min(lines,config.options['txtMaxEditRows']); // for textarea
		var html=lines>1?'<textarea rows='+maxlines:'<input type="text"';
		html   +=' tid="'+tid.replace(/"/g,'&#x22;')+'"'
			+' name="'+name.replace(/"/g,'&#x22;')+'"'
			+' style="margin:0px;padding:1px 0px 1px 3px;border:0;'+style+'"'
			+' title="'+title+' (ENTER=submit, ESC=cancel)"'
			+' onblur="config.macros.grid.blur(this,event)"'
			+' onkeydown="config.macros.grid.keydown(this,event)"';
		html+=lines>1?'></textarea>':'>';
		here.editing=true;
		here.setAttribute('savedWidth',here.style.width);
		here.setAttribute('savedPadding',here.style.padding);
		here.setAttribute('savedColor',here.style.backgroundColor);
		if (!hasClass(here,'inline')) here.style.width='99%';
		here.style.padding='0px'; 
		here.style.backgroundColor='#fff';
		here.innerHTML=html;
		var ta=here.firstChild; ta.value=v; ta.focus(); ta.select();
		event.cancelBubble=true;if(event.stopPropagation)event.stopPropagation();return false;
	},
	keydown: function(here,ev) { ev=ev||window.event;
		var tid=here.getAttribute('tid');
		var name=here.getAttribute('name');
		if (ev.keyCode==27) {
			var currval=this.get(tid,name);
			if (here.value==currval) { here.blur(); return false; }
			here.asking=true; // prevents blur handling during confirm()
			var discard=confirm('OK to discard changes to '+this.showName(tid,name)+'?');
			here.asking=false;
			if (discard) { here.value=currval; here.blur(); }
			return false;
		}
		else if (ev.keyCode==13 && !ev.ctrlKey) {
			this.set(tid,name,here.value);
			here.blur();
			return false;
		}
	},
	blur: function(here,ev) { ev=ev||window.event;
		if (here.asking) return false;
		var tid=here.getAttribute('tid');
		var name=here.getAttribute('name');
		var currval=this.get(tid,name);
		var msg=this.showName(tid,name)+' has changed... OK to save changes?';
		if (here.value!=currval && confirm(msg))
			{ this.set(tid,name,here.value); currval=this.get(tid,name); }
		var target=here.parentNode;
		target.editing=false;
		target.style.backgroundColor=target.getAttribute('savedColor');
		target.style.padding=target.getAttribute('savedPadding');
		target.style.width=target.getAttribute('savedWidth');
		if (name=='=text') currval='<html><code>'+currval.substr(0,500).replace(/\\n/g,'<br>')+'</code></html>';
		if (hasClass(target,'wiki')) { removeChildren(target); wikify(currval,target); }
		else target.innerHTML=hasClass(target,'inline')?currval:'&nbsp;';
	},
	get: function(tid,name) {
		if (name.substr(0,1)=='=') var v=store.getValue(tid,name.substr(1)); // field
		else if (name.substr(0,1)=='!') var v=store.getTiddlerText(tid+'##'+name.substr(1));  // section
		else if (name==this.sizeSliceName) var v=store.getTiddlerText(tid,'').length.toString();  // fake slice
		else var v=store.getTiddlerSlice(tid,name); // real slice
		return v||'';
	},
	set: function(tid,name,val) {
		if (val==this.get(tid,name)) return false; // unchanged... do nothing
		if (name.substr(0,1)=='=') // field
			{  name=name.substr(1); store.setValue(tid,name,val); }
		else if (name.substr(0,1)=='!') // section
			{  name=name.substr(1); this.setSection(tid,name,val); }
		else // slice
			{ this.setSlice(tid,name,val); }
		displayMessage(this.showName(tid,name)+' has been updated');
		return false;
	},
	setSection: function(tid,name,newval) {
		var t=store.getTiddler(tid); if (!t) { var t=new Tiddler(); t.text=''; }
		var oldval=this.get(tid,name).escapeRegExp();
		var pattern=new RegExp('(.*!{1,6}'+name+'\\n)'+oldval+'((?:\\n!{1,6}|$).*)');
		var newText=t.text.replace(pattern,'$1'+newval+'$2');
		var who=config.options.txtUserName; var when=new Date();
		if (config.options.chkForceMinorUpdate) { var who=t.modifier; var when=t.modified; }
		store.saveTiddler(tid,tid,newText,who,when,t.tags,t.fields);
		story.refreshTiddler(tid,null,true);
	},
	setSlice: function(tid,name,newval) {
		var t=store.getTiddler(tid); if (!t) { var t=new Tiddler(); t.text=''; }
		var oldval=this.get(tid,name)||'';
		var pattern="((?:^|\\n)\\|\\s*[\\'\\/]*~?(?:"
			+name.escapeRegExp()
			+")\\:?[\\'\\/]*\\s*\\|\\s*)(?:"
			+oldval.escapeRegExp()
			+")(\\s*\\|(?:\\n|$))";
		var match=t.text.match(new RegExp(pattern));
		if (match) {
			var pos=t.text.indexOf(match[0]);
			var newText=t.text.substr(0,pos)
				+match[1]+newval+match[2]
				+t.text.substr(pos+match[0].length);
		} else { // create new slice at start of tiddler or after last existing slice (if any)
			var match=t.text.match(this.slicesRE); if (match) var last=match[match.length-1];
			var pos=last?t.text.indexOf(last)+last.length+1:0; 
			var newText=t.text.substr(0,pos)+'|'+name+'|'+newval+'|\n'+t.text.substr(pos);
		}
		var who=config.options.txtUserName; var when=new Date();
		if (config.options.chkForceMinorUpdate) { var who=t.modifier; var when=t.modified; }
		store.saveTiddler(tid,tid,newText,who,when,t.tags,t.fields);
		story.refreshTiddler(tid,null,true);
	},
	getSlices: function(tid) {
		var slices = {};
		var text = store.getTiddlerText(tid,'');
		slices[this.sizeSliceName]=text.length.toString();  // fake slice
		this.slicesRE.lastIndex = 0;
		do {
			var m = this.slicesRE.exec(text);
			if (m) { if (m[1]) slices[m[1]] = m[2]; else slices[m[3]] = m[4]; }
		} while(m);
		return slices;
	},
	getSections: function(tid) {
		var s=[];
		var t=store.getTiddlerText(tid,'');
		var p=/(?:^|\n)!{1,6}([^\n]*)\n/gm;
		do { var m=p.exec(t); if (m) { s.push(m[1]); } } while(m);
		return s;
	},
	getFields: function(tid) {
		var t=store.getTiddler(tid); if (!t) return [];
		var fields=['=created','=modified','=modifier','=text','=tags'];
		for (var f in t.fields) fields.push('='+f);
		return fields;
	}
};
//}}}
/***
|Name:|HideWhenPlugin|
|Description:|Allows conditional inclusion/exclusion in templates|
|Version:|3.1 ($Rev: 3919 $)|
|Date:|$Date: 2008-03-13 02:03:12 +1000 (Thu, 13 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}
***/
//{{{

window.hideWhenLastTest = false;

window.removeElementWhen = function(test,place) {
	window.hideWhenLastTest = test;
	if (test) {
		removeChildren(place);
		place.parentNode.removeChild(place);
	}
};


merge(config.macros,{

	hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( eval(paramString), place);
	}},

	showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !eval(paramString), place);
	}},

	hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAny(params), place);
	}},

	showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAny(params), place);
	}},

	hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);
	}},

	showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);
	}},

	hideWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title == params[0], place);
	}},

	showWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title != params[0], place);
	}},

	'else': { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !window.hideWhenLastTest, place);
	}}

});

//}}}

{{whiteGray{
<<tabs txtHowto "Set up" "Set up a blank TiddlyWiki with all the functionality of the menu at the top" HowTo##Set
"Site Menu" "Changes to the SiteMenu - the top menu here" HowTo##Site
"Menu" "Changes to the Menu tiddler" HowTo##Menu
"Template" "Changes to the TemplateBody tiddler" HowTo##Template
"Trim" "Delete what isn't essential to the menu switching feature to the left" HowTo##Trim>>}}}/%
!Set

<html><hide linebreaks><h3>&iquest; Set up a blank ~TiddlyWiki with all the functionality of the menu at the top ?</h3></html>

Import all tiddlers tagged with<<tag menuFlex {{"menuFlex ("+store.getTaggedTiddlers("menuFlex").length +")"}}>>via the backstage import utility. None of the tags are needed. If you want to remove superfluous buttons (ie. search, tagging..) or make some setting stick between sessions, additionally add [[zConfig]] with a systemConfig tag, adapt it to your need, save and reload.
You may take some of the main menus too, and use them as templates for your own. There is also an easier to setup version with only one systemTheme tiddler available at http://flextheme.tiddlyspot.com/.
>To modify the extended menus you need some ~TiddlyWiki specific background knowledge, particularly about [[transclusion|http://tiddlywiki.org/wiki/Transclusion]].
!Site
<html><h2>"Changes to the SiteMenu (the top menu here):"</h2></html>
<<tabs siteMenu
"Define Button & Tiddlers" "Change the button label and which tiddlers are displayed on a menu switch" HowTo##Label
"Remove & Move" "Remove or move top menu items of the SiteMenu" HowTo##Move
"Open Tiddlers alone" "A button to open tiddlers without a menu switch" HowTo##Open>>/%
!Label

<html><h3>"&iquest; Change the button label and which tiddlers are displayed on a menu switch ?"</h3></html>
#Open the tiddler SiteMenu, find the respective tiddler transclusion macros under its {{{!LEFT}}} section and make changes to their parameters accordingly: <br>{{{<<tiddler Menu##A with: "parameter 1" parameter2 "parameter 3">>}}} <br>{{whitespace{      {{{parameter 1}}}  is the label of the button visible in the top menu.
      {{{parameter2}}}   the tiddler title of the tiddler to be invoked in the tiddler display area.
      {{{parameter 3}}}   the description appearing in a popup on hovering over the button.
           (Use quotes for titles or labels containing spaces.)
                &iexcl; For popups with [[Pop]] the same scheme is used,
                which is different to the original [[ShowPopup|http://www.TiddlyTools.com/#ShowPopup]] !}}}
##For a switch to open a group of tiddlers the second parameter is for the name of a specific tiddler, which lists the tiddlers to be opened in double square brackets.
##And for the option of listing these tiddlers as parameters them self: from the second to the ninth - except the third - are possible.
#Make further necessary modifications (ie. whether already displayed tiddlers are also closed) in the [[Menu]] tiddler, and as explained further below.
!Move

<html><h3>"&iquest; Remove or move top menu items of the SiteMenu ?"</h3></html>
#After opening the tiddler SiteMenu you could delete parts of it, for example the part in the middle, by deleting this line under the {{{!Top}}} section: <br>{{{ {{center{<<tiddler SiteMenu##CENTER>>}}}}}} <br>- together with all further transcluded sections in the SiteMenu tiddler.
#For moving items at the left side of the site menu you can change their order under section {{{!LEFT}}}, etc. ..
!Open

<html><h3>"&iquest; A button to open tiddlers without a menu switch ?"</h3></html>
#Open the tiddler SiteMenu and create tiddler transclusion macros, as in these examples: <br>{{{<<tiddler Switch##OpenGroup with: label Default2>>}}} and/or <br>{{{<<tiddler Switch##CloseOpenGroup with: label Default3>>}}} and/or <br>{{{<<tiddler Switch##OpenGroup2 with: label TestStyle YourSearch SortTable>>}}} <br>(for this last you have to change the number of placeholders to the number of tiddlers to be opened in its section of [[Switch]] tiddler.)
#To open a tiddler without menu switch or clearing: <br>{{{[[ ☺ |... just joking]]}}}
!0

!Menu
<html><h2>"Changes to the Menu tiddler:"</h2></html>
<<tabs meNu
"Close & Open Tiddlers" "Whether tiddlers are closed and/or opened on a menu switch" HowTo##Close
"Onmouseover" "Change the menu switch from 'on mouse over' to 'on click', or to the opposite" HowTo##Onclick>>/%
!Close

<html><h3>"&iquest; Whether tiddlers are closed and/or opened on a menu switch ?"</h3></html>

Open the tiddler [[Menu]] where you can find one paragraph for each menu item each beginning with a unique header (ie. !A, !B, !C...)
>Be extremely careful while making changes to html scripts, as in the [[Menu]] and TemplateBody section of the MenuFlex tiddler, only one apostrophe missing and it won't work! Therefore, leave the default backup function on during customizations.
Look at the end of a paragraph where you can find this statement: <br>{{{document.getElementById('mainMenuZ').style.display='none';}}} <br>or the same ending with {{{'block';}}}

After which one of the following declarations have to be exchanged precisely, to give the respective results with a menu switch:
##No change to the tiddler display area: <br>{{{return false;}}}
##Only refresh the tiddler display, to adapt to a narrowed main menu (does not work with shadowed tiddlers): <br>{{{story.refreshTiddler(getAttribute('tiddler'),null,true);}}}
##Close all visible tiddlers (except those in edit mode): <br>{{{story.closeAllTiddlers();}}}
##Leave visible tiddlers open and open one new: <br>{{{story.displayTiddler(null,'$2');}}}
##Close all visible tiddlers and open one new tiddler: <br>{{{story.closeAllTiddlers(); story.displayTiddler(null,'$2');}}}
##Open a group of tiddlers indicated in an unique tiddler: (as it is done with DefaultTiddlers): <br>{{{story.displayTiddlers(null,store.getTiddlerText('$2').readBracketedList());}}}
##Close all visible tiddlers and open a group of tiddlers indicated in a default tiddler: <br>{{{story.closeAllTiddlers(); story.displayTiddlers(null,store.getTiddlerText('$2').readBracketedList());}}}
##Close ... and open some tiddlers indicated by parameters in SiteMenu (delete placeholders for less than 7): <br>{{{story.closeAllTiddlers(); story.displayTiddlers(null,['$2','$4','$5','$6','$7','$8','$9']);}}}
!Onclick

<html><h3>"&iquest; Change the menu switch from 'on mouse over' to 'on click', or to the opposite ?"</h3></html>

In the first line of the concerned paragraph within the [[Menu]] tiddler change {{{onmouseover}}} to {{{onclick}}}, or accordingly to the reverse.
!0

!Template
<html><h2>"Changes to the TemplateBody section in the MenuFlex tiddler:"</h2></html>
<<tabs templBody
"Define Menus" "Indicate which menus appear in the main menu area on a menu switch " HowTo##Define
"Add Menus" "Add more menu switching items (additional to 13 already defined)" HowTo##More>>/%
!Define

<html><h3>"&iquest; Indicate which menus appear in the main menu area on a menu switch ?"</h3></html>

Open the MenuFlex tiddler in edit mode and find the {{{!TemplateBody}}} section, which contains for each item a paragraph, like in this example: {{whitespace{
     }}}{{{<div id='mainMenuA' style=""  refresh='content' force='true' tiddler='MenuTitle ondblclick="story.displayTiddler(null,'MenuTitle', DEFAULT_EDIT_TEMPLATE)">}}}

&nbsp;&nbsp;&nbsp;{{{mainMenuA}}} is the unique id which corresponds to its respective parts in the [[Menu]] and style definitions of the StyleSheet tiddler.
#the first {{{MenuTitle}}} is the tiddler title of the tiddler containing the invoked menu, change accordingly.
#with the second {{{MenuTitle}}} just before {{{DEFAULT_EDIT_TEMPLATE}}} you can indicate any tiddler opening in the display area in edit mode, whenever the background of the particular menu is double clicked.
**If this function is not needed, you could remove this last part of each paragraph: <br>{{{ondblclick="story.displayTiddler(null,'MenuTitle', DEFAULT_EDIT_TEMPLATE)"}}}
*Here tiddler titles have to be in camel case.
!More
<html><h3>"&iquest; Add more menu switching items (additional to 9 already defined):"</h3></html>
#Copy and paste more item paragraphs in the TemplateBody section of the MenuFlex tiddler just below the last one: <br>{{{<div id='mainMenuJ' style="" refresh='content' force='true' tiddler='MenuTitle'
ondblclick="story.displayTiddler(null,'MenuTitle', DEFAULT_EDIT_TEMPLATE)"></div>}}}, <br>- change the menu id by using the next not used letter.
#Open the [[Menu]] tiddler and add <br>{{{document.getElementById('mainMenuJ').style.display='none';}}} <br>at the end of //each// paragraph, just before their last declarations (which are listed above in "Whether tiddlers are closed and/or...?).
#In the new and last paragraph change within the new declaration for mainMenuJ: <br>{{{.style.display ='none';}}} to {{{.style.display='block';}}}.
**All menu paragraphs should contain declarations for each of the other menus.
**There should only remain one declaration in each paragraph ending with {{{.style.display='block';}}}.
**All other menu item declarations within the same paragraph should end with {{{.style.display='none';}}}.
#Add the following to already existing declarations in the StyleSheet tiddler: <br>{{{#mainMenuJ{display:none}}}}<br>{{{#mainMenuK{display:none}}}}<br>{{{...}}}
#Adapt menu title buttons and the tiddlers to be invoked in the SiteMenu as explained further above.
!0

!Trim

<html><h3>"&iquest; Delete what isn't essential to the menu switching feature to the left:"</h3></html>

The following tiddlers aren't needed for changing menus with buttons in the top menu:
**FloatingFooter - a partial replication of SiteMenu at the bottom to the right
**[[HowTo]] - this help tiddler
**[[Pop]] - an extended version of [[ShowPopup|http://www.tiddlytools.com/#ShowPopup]] for creating nested popups and selectively opening on mouse over
**[[Switch]] - containing html scripts for hiding or displaying different menus, templates, opening group of tiddlers, etc.
**[[Template2]], [[3|Template3]] together with their additional headers section in the MenuFlex tiddler - further page layouts defining more top menus to switch to

Removing all listed tiddlers would remove 20 kilobytes, still leaving about 30 kilobytes by its core. On the other hand you may choose to import [[StickyPopupPlugin|http://www.tiddlytools.com/#StickyPopupPlugin]] (with a systemConfig tag needed) for making more interactions within popups possible. Or install EditBarPlugin, which due to dependency already contains StickyPopupPlugin.
For deleting the search box or/and the hover menu at the bottom remove the respective lines from [[Template2]] and TemplateBody section of MenuFlex tiddler:
{{indent{{{{<span refresh='content' tiddler='FloatingFooter' ondblclick="story.displayTiddler(null,'FloatingFooter', DEFAULT_EDIT_TEMPLATE)"></span>}}}
{{{<div id='bottomLeft' macro='search' style='position:fixed;z-index:1;left:0;bottom:0;'></div>}}}}}}
For not including the additional mode switch no need tor [[Template2]] and [[3|Template3]].

With 26 main menus defined the [[Menu]] tiddler would rise to 44 kb alone. Each menu less decreases it exponentially due to the kind of its contained html. With only four, as in the original [[MenuMore|http://oldcat.googlegroups.com/web/MenuMoreEn.html?gda=j8YRpUAAAACZpqdPZP85_wXX8V_YfXizhQoYbyNEKl0KhW4NFxy3V2G1qiJ7UbTIup-M2XPURDTb654oTp4ejupRWMqnTFyP]] it would amount to only 1 ½ kb. Therefore, you may delete whole sections, and declarations in all paragraphs, for menus you don't need - as well as their corresponding parts in the TemplateBody section and StyleSheet tiddler.

Or use the alternative [[extra menu method|http://double.tiddlyspot.com/]] depending on InlineJavascriptPlugin, which doesn't increases file size in itself and any number of menus defined.
!0
%/
!tab-selected
data:image/gif;base64,R0lGODlhAQBkAPcAAN69vee9vefGxu/Ozu/W1vfe3v/n5//v7//39////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ywAAAAAAQBkAAAIIAATCESA4IABAwUKEBggoCGAhxAjSpxIsaLFixgzUgwIADs=
!tab-unselected
data:image/gif;base64,R0lGODlhAQBkAPMPALa2trm5ub29vb+/v8TExMbGxsvLy9HR0dfX19vb29zc3OHh4efn5+vr6+zs7O7u7iH5BAAAAAAALAAAAAABAGQAAAQW8D3X2FIJHVPIEAEgjmRpnmiqrqwZAQA7
! TREEVIEW DEFAULT
!file.gif
data:image/gif;base64,R0lGODlhDwAOAIMAAGpsYoy3oamMQdS9fDmJdP////9tcH98X4DgrxJSSIAaTwADyJDgJ4CsZcAAwAAADCH5BAMAAA4ALAAAAAAPAA4AAARE0DlBK5VYisL7EJnWeV+4jcWggthmvMbIimg3T0WgHwXA3ada4cZ7FQ4A3zHDEy4xvIEuQCBwDkznU9IUYqGHsHgsiQAAOw==
!folder.gif
data:image/gif;base64,R0lGODlhEAAOAIMAAJdaH+C6eP/inq1zLf/////Sg59oJMOHNLw6mCkMTGXFpv/vOQfvQMQGAGzAw0JQKyH5BAMAAA0ALAAAAAAQAA4AAARAsMlJq7336IPnICAxdIdgFkGwadQRviE3lWZtA9RgD3zvNzpT0HYaGQqFAXLJHDUASabU+VRKl1SJYcvtdr6NCAA7
!folder-closed.gif
data:image/gif;base64,R0lGODlhEAAOAIMAAJdaH+C6eP/inq1zLf/////Sg59oJMOHNAABAOCvAFhgfBpPAAIsfOAnAKxlfP//fCH5BAMAAA0ALAAAAAAQAA4AAAQ9sMlJq7336IPnICAxdIdgFkGwadQRviE3lWZtA9Rg78Lo8TafxFAoGo8GCuDILOAmgEHT+JwYrthsZ9uIAAA7
!treeview-default.gif
data:image/gif;base64,R0lGODlhYACFAPcAAAAAAICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAABgAIUAAAj/AP8JHEiwoMGDCBMqXMjwH4CHABRCbEixosWLBCNi3Mixo0WNHkOKFAlypMmTKFOqPBmgpUuXK2OKDHCQpsybG206HKgTp8+GOkH2/EkUIU2ID//RXFq0KcGgPJ1KfTpQ6NSrQwVmvfrzpVeuYMOKVTq2rFmnW8+qXTsyLVuSb4uWjBq34USJSetynIvRrd6qfwMLHszV60vCIbf6RcxQMeOOjh/ndIiULFPJFCNjtqh5c+aanjkbbhm6tNTFplOvRK26tUnWpvm6Xigbdty7CXGrls3ZM+/ZwIMLjzua9HC6BW2Hhqr1OHKrzskijchU+WPmZKNjt7658/Di3KOLox9Pvrx5ir+jp8dcOXfe1uuP1xYff/j88/iVFhfvXfh2/oA1px1lE1X3XYDZOfffgAaFJxl4+UUo4YTO1SechcFhSJhuB3EYW4QazhYihSS2BiGDyQHYoIopDjidZQkC119wM8oImnb7lajjjjz+NSJ8IALnYUbv9aiag0YyhmSSf52o4I1ProgiVS5WZqB/UB5X42xbuuYkk2CGKeaYZJY5W0AAOw==
!treeview-black.gif
data:image/gif;base64,R0lGODlhYACFAPcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAABgAIUAAAj/AP8JHEiwoMGDCBMqXMjwH4CHABRCbEixosWLBCNi3Mixo0WNHkOKFAlypMmTKFOqPAmx5cOVMEkeLBmz5seBIGna3LkwJ06eQBlGdOmwZdCjGX8K1In0qM+lTaNCNchU6k6XRq1araoVKdeuQb+C5Sl2rM2yZmOiTRuS6Vq2Hd3CxThR4kuqcy++Rbg3b9+8gAMLBou17mCTcg8jnql4Md7GMokShbwxMeW4jC9jfqy5cuG/nTmHljl6JOjSolFzPK1aaWuhmV/3jB3aMN+7BVmb1e0QNW/ZwIMLF/z5N2TLw3O7Nt74ae/keCVnhe6cueLq0FNPzY7zM/fv4MOLnR+/m7z21tNn4gaOnHv77O+p0zb/nHxx8fGTYw+/H/xQo5PJt511h/X3XX7D3Uffggw26GB9CxLYmYS7racehWNhSJmGxz3o4YcK+jcffCMKqBx/RU0UoH4lsnieiyf6592HNNZoY20Octicfhbm1qOJEeYoZIM6BhbigS0mmKRwCDKZ4ksrKvmilDEiOSWTM96o5ZZcdunll2AaFBAAOw==
!treeview-gray.gif
data:image/gif;base64,R0lGODlhYACFAPcAAAAAAICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAABgAIUAAAj/AP8JHEiwoMGDCBMqXMjwH4CHABRCbEixosWLBCNi3Mixo0WNHkOKFAlypMmTKFOqPBmgpUuXK2OKDHCQpsybG206HKgTp8+GOkH2/EkUIU2ID/+9HFq0aFCeTaMafCqQqVSnNa9qXfpSq9eqX8OCFfvVKlmsZ7emVbv2ZkmobWW+HRu34kSJSafW/RjS7N6Dc/8KHkw4LVeYhUda9ZvY4uLGM7NC9ngUqdKuky8+zsxxM2eMnj87PsxYNMPSpimiTn2adV/XlGF3XA07MG3XtlPfTbib4O29gR3rlk28uPHjVUkjl1zwd2qqSpfrFShUenOHlpdah+7cNHfrvpmDqyfdHbz58+jTqzcZHH1705Z55y2e+3x98/fB518ffT159KFtN1B1531XIHYTaSedgeYxOJ542ynH34QUVmjhThW+h99xvQE2H3Ea6mdhiBeWWKCEDUK4oIrLBbgiUhEp2CKLyLk443QNomjijjz2mBmJ0gG5nJCTdViQkTdSWB5xS8rWJGxPivbfgTg+WKWAV76YHWZJhkfldV96meNhPpZp5plopqnmmggFBAA7
!treeview-red.gif
data:image/gif;base64,R0lGODlhYACFAPcAAAAAAPV2dgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAABgAIUAAAj/AP8JHEiwoMGDCBMqXMjwH4CHABRCbEixosWLBCNi3Mixo0WNHkOKFAlypMmTKFOqPBmgpUuXK2OKDHCQpsybG206HKgTp8+GOkH2/EkUIU2ID/+9HFq0aFCeTaMafCqQqVSnNa9qXfpSq9eqX8OCFfvVKlmsZ7emVbv2ZkmobWW+HRu34kSJSafW/RjS7N6Dc/8KHkw4LVeYhUda9ZvY4uLGM7NC9ngUqdKuky8+zsxxM2eMnj87PsxYNMPSpimiTn2adV/XlGF3XA07MG3XtlPfTbib4O29gR3rlk28uPHjVUkjl1zwd2qqSpfrFShUenOHlpdah+7cNHfrvpmDqyfdHbz58+jTqzcZHH1705Z55y2e+3x98/fB518ffT159KFtN1B1531XIHYTaSedgeYxOJ542ynH34QUVmjhThW+h99xvQE2H3Ea6mdhiBeWWKCEDUK4oIrLBbgiUhEp2CKLyLk443QNomjijjz2mBmJ0gG5nJCTdViQkTdSWB5xS8rWJGxPivbfgTg+WKWAV76YHWZJhkfldV96meNhPpZp5plopqnmmggFBAA7
!treeview-famfamfam.gif
data:image/gif;base64,R0lGODlhYACFAPcAAAAAADFrGDlzIUJzIVKEMXOcY71CAL1KANZaCMZaId5rIfdzAPd7GIS1Y4y9Y5S1e++EQvetc5S1jKW9nLXWlLXGrbnSpN6lhOetjOe1lO+1lNbnvf/Stf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAABgAIUAAAj/AP8JHEiwoMGDCBMqXMjwH4CHABRCbEixosWLBCNi3Mixo0WNHkOKFAlypMmTKFOqXMmypcuXMGPKnCnQQoECBCbQ3JmwQgMKGxwQeMCzKEECFCh0cOBAgNGnSDtIpRDgqdEBDhp0aNDUalEJBBxQEErUK08JAwIMkGC2rdu3cOPKnUu3Ls2SdlvizVtxosSHfDfuDYxyMOHDiBMrXsy4sdsMCQwkuOCYYwYFGjhEUJChMsYEGiAwYAAhgeeLBjhI7cDAwGmLCSIwWLAAgenXFDEkmI3gAGXcFCFL/g28uPHjyJMrl7icoeHKfhNGB/68ucDq1rNr3869u1WbOHVy3fcJlCx3pEqZOt0edWrV7Vi1cl2vHaxY89zRqmXrvb///wAGOBB2zRG4GETVTYebgcoxmJyDyEEo4IQUHgdeTt2RF9RQ5yW1VFfsKeUed/FtBWJ9YY3FYX5prVXhizDGeJiExtFYnI18KWiQjqfhuCCAPsoo5JBE8iTcZN1dltlmnW0Hmmik3aZdaqu1xl1ss9UmZXa68eZbkpEhWeSYZJapUpA9AhkhYNKxaeabcMYp55yMHUmcdkpqxtmVoY1WGndUSmWlk7LRZht3Xdb2JXd20unoo5BGKumkBwUEADs=
!treeview-blackline.gif
data:image/gif;base64,R0lGODlhEADwBvcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQAPAGAAj/AP8JHPgPAMGDCA0iXFiQ4UKFDglCjChwIkWLETE61MgQgMePHx9SlDhyIEeRJRumPJkwpcqSLA/GJLnS5UyTNnPW3AlTZ0+eI29W9BmU6EWjGZFuVNqRKcqfUIsCPTo1adWlV5tmfSo1KlWvVsFiFauVLNevXdOiXRtWbVu2Y93GhVtWbl26Z9/qnbv3bt+8fAP7FQx4sOHCiFtuVWyWsd3EMp06xjv5b2XClw9nhkyzceTFnz13fry5dGjSpymntrwac2vNrznjBD1adW3Wt13nhr1b9lDas0UHR93bdPHYxofbVo6buW7nvKH7fkncpfXr2LNr3869e/TfwsFX/xe/nHxz88/Rf6denv159+nhrxcqfzr9+5KR6z/OX3py9fbl1x+A/9VXIH7AEbiffwsqOKCBDUL4IILhScjghAJeqKGDG1rI4YcehkjheCJmCOKI7aH4norxsTifiSUmGGOFLgYoY40HwohjhDtieKOOQP4oJI1BEjkkiT12mOSJRSLZZIpPrhhli1O+eCSUV0qZJZVbWmnkl052aSOYWJKppZlcoullmGqOyeabZcJ5ppxp0rlmnHjOmWede96p5598AupnoIQOaqibfSIqqKKFMnpojmJC2qakdjpqKaWJYrqopo1y+iiPVV4KaqSjTlpqpZ6K6qOpq6J6aqavbv8aa6ezftoqrLfKmiutu9qqZKipBlurqr+S2iuxTBpbLKvLunqssM8OC22zuFKrq7W8Yutrssxy66y2yM74rbfVknutudmiu6245bJ7rrvpwrvukvKGS++9wEqrb7T8gjutuvbm2y/A/9ZbML7KEryvvwsrPLDBDUP8MMLdSszwxAJfrLHDG1vM8cceh0zxuCJnDPLI7aL8rsrxsjyvySUnHHPFLgcsc80Hw4xzxDtjfLPOQP8sNM1BEz00yT13nPTJRSPddMpPrxx1y1O/fDTUV0udNdVbW2301053bTPYWJOttdlco+112GqPzfbbZcN9ttxp07123HjPnXfde9//rffffAPud+CED264230jLrjihTN+eM5iQ9625HY7bjnliWO+uOaNc/44z1VfDnrko09eeuWei+6z6aujfnrmr28ee+ezf9467LfLnjvtu9uudOipB1+76r+T3jvxTBtfPOvLu3688M8PD33zuFOvu/W8Y+978sxz77z2yM/8vffVk3+9+dmjv7345bN/vvvpw7/+0vKHT//9wEuvf/T8gz+9+vbLX/8A+L/6FRB/yiPg/vy3QAUO0IANhOADEdg9CTJwggK8oAYduEELcvCDHgwhBccnwgyCcITtQ+H7VBg/Fs7PhCVMYAwr6MIAyrCGB4QhDiO4QwzeUIdA/KEQMmkYRCIOkYQ97GAST1hEJDYxhU9cYRRbOMUXHhGKV5RiFqm4RSsa8YtO7KINaQgSkAQEADs=
!treeview-grayline.gif
data:image/gif;base64,R0lGODlhEADwBvcAAAAAAICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQAPAGAAj/AP8JHPgvAMGDCA0iXFiQ4UKFDglCjChwIkWLETE61MgwgMePHx9SlDhyIEeRJRumPJkwpcqSLA/GJLnS5UyTNnPW3AlTZ0+eI29W9BmU6EWjGZFuVNqRKcqfUIsCPTo1adWlV5tmfSo1KlWvVsFiFauVLNevXdOiXRtWbVu2Y93GhVtWbl26Z9/qnbv3bt+8fAP7FQx4sOHCiFtuVWyWsd3EMp06xjv5b2XClw9nhkyzceTFnz13fry5dGjSpymntrwac2vNrznjBD1adW3Wt13nhr1b9lDas0UHR93bdPHYxofbVo6buW7nvKH7fkncpfXr2LNr3869e/TfwsFX/xe/nHxz88/Rf6denv159+nhrxcqfzr9+5KR6z/OX3py9fbl1x+A/9VXIH7AEbiffwsqOKCBDUL4IILhScjghAJeqKGDG1rI4YcehkjheCJmCOKI7aH4norxsTifiSUmGGOFLgYoY40HwohjhDtieKOOQP4oJI1BEjkkiT12mOSJRSLZZIpPrhhli1O+eCSUV0qZJZVbWmnkl052aSOYWJKppZlcoullmGqOyeabZcJ5ppxp0rlmnHjOmWede96p5598AupnoIQOaqibfSIqqKKFMnpojmJC2qakdjpqKaWJYrqopo1y+iiPVV4KaqSjTlpqpZ6K6qOpq6J6aqavbv8aa6ezftoqrLfKmiutu9qqZKipBlurqr+S2iuxTBpbLKvLunqssM8OC22zuFKrq7W8Yutrssxy66y2yM74rbfVknutudmiu6245bJ7rrvpwrvukvKGS++9wEqrb7T8gjutuvbm2y/A/9ZbML7KEryvvwsrPLDBDUP8MMLdSszwxAJfrLHDG1vM8cceh0zxuCJnDPLI7aL8rsrxsjyvySUnHHPFLgcsc80Hw4xzxDtjfLPOQP8sNM1BEz00yT13nPTJRSPddMpPrxx1y1O/fDTUV0udNdVbW2301053bTPYWJOttdlco+112GqPzfbbZcN9ttxp07123HjPnXfde9//rffffAPud+CED264230jLrjihTN+eM5iQ9625HY7bjnliWO+uOaNc/44z1VfDnrko09eeuWei+6z6aujfnrmr28ee+ezf9467LfLnjvtu9uudOipB1+76r+T3jvxTBtfPOvLu3688M8PD33zuFOvu/W8Y+978sxz77z2yM/8vffVk3+9+dmjv7345bN/vvvpw7/+0vKHT//9wEuvf/T8gz+9+vbLX/8A+L/6FRB/yiPg/vy3QAUO0IANhOADEdg9CTJwggK8oAYduEELcvCDHgwhBccnwgyCcITtQ+H7VBg/Fs7PhCVMYAwr6MIAyrCGB4QhDiO4QwzeUIdA/KEQMmkYRCIOkYQ97GAST1hEJDYxhU9cYRRbOMUXHhGKV5RiFqm4RSsa8YtO7KINaQgSkAQEADs=
!treeview-redline.gif
data:image/gif;base64,R0lGODlhEADwBvcAAAAAAPV2dgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAQAPAGAAj/AP8JHPgvAMGDCA0iXFiQ4UKFDglCjChwIkWLETE61MgwgMePHx9SlDhyIEeRJRumPJkwpcqSLA/GJLnS5UyTNnPW3AlTZ0+eI29W9BmU6EWjGZFuVNqRKcqfUIsCPTo1adWlV5tmfSo1KlWvVsFiFauVLNevXdOiXRtWbVu2Y93GhVtWbl26Z9/qnbv3bt+8fAP7FQx4sOHCiFtuVWyWsd3EMp06xjv5b2XClw9nhkyzceTFnz13fry5dGjSpymntrwac2vNrznjBD1adW3Wt13nhr1b9lDas0UHR93bdPHYxofbVo6buW7nvKH7fkncpfXr2LNr3869e/TfwsFX/xe/nHxz88/Rf6denv159+nhrxcqfzr9+5KR6z/OX3py9fbl1x+A/9VXIH7AEbiffwsqOKCBDUL4IILhScjghAJeqKGDG1rI4YcehkjheCJmCOKI7aH4norxsTifiSUmGGOFLgYoY40HwohjhDtieKOOQP4oJI1BEjkkiT12mOSJRSLZZIpPrhhli1O+eCSUV0qZJZVbWmnkl052aSOYWJKppZlcoullmGqOyeabZcJ5ppxp0rlmnHjOmWede96p5598AupnoIQOaqibfSIqqKKFMnpojmJC2qakdjpqKaWJYrqopo1y+iiPVV4KaqSjTlpqpZ6K6qOpq6J6aqavbv8aa6ezftoqrLfKmiutu9qqZKipBlurqr+S2iuxTBpbLKvLunqssM8OC22zuFKrq7W8Yutrssxy66y2yM74rbfVknutudmiu6245bJ7rrvpwrvukvKGS++9wEqrb7T8gjutuvbm2y/A/9ZbML7KEryvvwsrPLDBDUP8MMLdSszwxAJfrLHDG1vM8cceh0zxuCJnDPLI7aL8rsrxsjyvySUnHHPFLgcsc80Hw4xzxDtjfLPOQP8sNM1BEz00yT13nPTJRSPddMpPrxx1y1O/fDTUV0udNdVbW2301053bTPYWJOttdlco+112GqPzfbbZcN9ttxp07123HjPnXfde9//rffffAPud+CED264230jLrjihTN+eM5iQ9625HY7bjnliWO+uOaNc/44z1VfDnrko09eeuWei+6z6aujfnrmr28ee+ezf9467LfLnjvtu9uudOipB1+76r+T3jvxTBtfPOvLu3688M8PD33zuFOvu/W8Y+978sxz77z2yM/8vffVk3+9+dmjv7345bN/vvvpw7/+0vKHT//9wEuvf/T8gz+9+vbLX/8A+L/6FRB/yiPg/vy3QAUO0IANhOADEdg9CTJwggK8oAYduEELcvCDHgwhBccnwgyCcITtQ+H7VBg/Fs7PhCVMYAwr6MIAyrCGB4QhDiO4QwzeUIdA/KEQMmkYRCIOkYQ97GAST1hEJDYxhU9cYRRbOMUXHhGKV5RiFqm4RSsa8YtO7KINaQgSkAQEADs=
!treeview-famfamfam-line.gif
data:image/gif;base64,R0lGODlhAQABAPcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAABAAEAAAgEAP8FBAA7
! TREEVIEW BOOK
!openbook.gif
data:image/gif;base64,R0lGODlhEAAQANU5AKat0evq6d7d3Zy12tji9pKp16WkuXZ/q7O2xo2MjLi4qoOczby8rLS0s8G/u7i2prKxr6WnpJKp2MbU8cTEw7/P772+rFx6tnCLws/b8+bl5cPG09fh9b/Arru4uK+smfPy6Tlcoqyxr9HQzq2yss/b9LK0p8bT8XCLw4Oczv//+0lqq8jIyD5Uf2aAtMrO4XRzcy5Sm6WkoZ6z3tnZ2Ts7O0RERMPDw////////wAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADkALAAAAAAQABAAAAaqwBoqRywajbUU7EgkJAzFWqGwLN5gCcABmqvNCJ7qNSL4bA63rqSEI8GuAhzugUAUbrXFSS6CxeUmLwEzNjUYFXI0DjRyOAovNIQ1FxOJECyNDJCSKxlyIzKYchabhSEcOBoUoY0dpTUxBDgCDaxyLwCDNjctMQMBNDIvOAEAAC8ghDm8vsEsMgChNCrKy70DMjIDLtzc1dYuMS4tvTHmLTZGNzbsN+7v7kEAOw==
!book.gif
data:image/gif;base64,R0lGODlhEAAOAOZcAGpqc32HqGBlif7+/qXf+pzO5o2a6Jil8urw+mZzx4aT4v78/uHp+pys9Jun9G16zZC5zZmm84+d65Gd7Gt5zYqa5Wl2ypaj8Ovt7HKA03uI2aOvrtHP0Kapq2BrtFZlwWRxx4KRqWNnflddgpSg7oOQ3298z1ppw19twYeU5Jej8ff3+aKswo6a6XqH2V1qwEBOQ1RhuHF+0FhnvZyo9Pj3+md1yVFbmn+M3Fpnvn6K266xr3yj0IWVzZejrMzOzWBuxJuv74GO34SR4T9TRmFwyoqW5bCzsml0t5CSoEdepWpqdHZ7mnaD1mNwxXiI63iF15Of7VNhuE5dtHWC03d4gGBwzlpee52p9mVkZ0hWr3B5lv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFwALAAAAAAQAA4AAAeZgFyCg1wBW1mEiYKGERMKAoqLWlhYFwZCVJCEPj2UWA5RKRomTppcAFcEDZQqLSVNFi9SV4IAT1sEQTQkRjoyIDNTSiOnVlpbBQcSQ1AUKDEeRVqIV8bIFTgZCTlIH0RbLILVxxAuD0AnWiJJCAyD41s8NjdbHAMrG4jvxkshPwMYjmSpoqgakwU1OgyMJAhGlR0LGQ6KmCgQADs=
!0
/***
|Name|ImageMapPlugin|
|Source|http://www.TiddlyTools.com/#ImageMapPlugin|
|Documentation|http://www.TiddlyTools.com/#ImageMapPluginInfo|
|Version|1.2.2|
|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||
|Description|apply image maps ('hotspots') with links to tiddlers|
!!!!!Documentation
>see [[ImageMapPluginInfo]]
!!!!!Revisions
<<<
2009.05.27 [1.2.2] improved autoscroll for {{{<<mapMaker>>}}} textarea
2009.05.14 [1.2.1] added cursor changes
see [[ImageMapPluginInfo]] for additional revision details
2009.05.09 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.ImageMapPlugin= {major: 1, minor: 2, revision: 2, date: new Date(2009,5,27)};
//}}}
//{{{
config.macros.imageMap = {
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		// image element must immediately precede macro
		var img=place.lastChild; if (!img||img.nodeName!='IMG') return;
		var map=params[0]; var items=store.getTiddlerText(map,'').split('\n----\n'); if (!items) return;
		var out=['<MAP NAME="'+map+'">'];
		var fmt='<AREA SHAPE="POLY" TIDDLER="%0" COORDS="%1" TITLE="%2" ALT="%2" ONCLICK="%3" STYLE="%4">';
		var click="story.displayTiddler(story.findContainingTiddler(this),this.getAttribute('tiddler'));";
		var style='cursor:pointer';
		for (var i=0; i<items.length; i++) {
			var lines=items[i].split('\n'); var tid=lines.shift(); var coords=lines.join('');
			var tip=store.tiddlerExists(tid)?store.getTiddler(tid).getSubtitle():tid;
			out.push(fmt.format([tid,coords,tip,click,style]));
		}
		out.push('</MAP>');
		createTiddlyElement(place,'span').innerHTML=out.join('');
		img.setAttribute('isMap',true);
		img.setAttribute('useMap','#'+map);
		img.style.border=0;
	}
}
//}}}
//{{{
config.macros.mapMaker= {
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var img=place.lastChild; // image element must immediately precede macro
		if (!img||img.nodeName!='IMG') return;
		img.onmousemove=function(ev){ ev=ev||window.event;
			var mX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
			var mY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
			var ta=this.nextSibling.getElementsByTagName('textarea')[0];
			var lines=ta.value.split('\n'); var last=lines.length?lines.length-1:0;
			var vals=lines[last].split(','); vals.pop(); vals.pop(); lines[last]=vals.join(',');
			lines[last]+=(lines[last].length?',':'')+(mX-findPosX(this))+','+(mY-findPosY(this));
			ta.value=lines.join('\n');
			ta.scrollTop=ta.scrollHeight-ta.offsetHeight+this.emH*2;
			ta.scrollLeft=lines[last].length*this.emW-ta.offsetWidth;
			ta.focus();
		};
		img.onmouseout=function(ev){ ev=ev||window.event;
			var ta=this.nextSibling.getElementsByTagName('textarea')[0];
			var lines=ta.value.split('\n'); var last=lines.length?lines.length-1:0;
			var vals=lines[last].split(','); vals.pop(); vals.pop(); lines[last]=vals.join(',');
			ta.value=lines.join('\n');
			ta.scrollTop=ta.scrollHeight-ta.offsetHeight+this.emH*2;
			ta.scrollLeft=lines[last].length*this.emW-ta.offsetWidth;
		};
		img.onmouseover=img.onclick=function(ev) { ev=ev||window.event;
			var mX=!config.browser.isIE?ev.pageX:(ev.clientX+findScrollX());
			var mY=!config.browser.isIE?ev.pageY:(ev.clientY+findScrollY());
			var ta=this.nextSibling.getElementsByTagName('textarea')[0];
			ta.value+=(ta.value.length?',':'')+(mX-findPosX(this))+','+(mY-findPosY(this));
			var lines=ta.value.split('\n'); var last=lines.length?lines.length-1:0;
			ta.scrollTop=ta.scrollHeight-ta.offsetHeight+this.emH*2;
			ta.scrollLeft=lines[last].length*this.emW-ta.offsetWidth;
			ta.focus();
		}
		img.style.border='1px solid #999';
		img.style.cursor='crosshair';
		var map=params[0]||'';
		var s=createTiddlyElement(place,'div');
		s.style.height=s.style.width='1em';
		img.emW=s.offsetWidth; img.emH=s.offsetHeight; // get font metrics (for auto scrolling)
		s.style.height=s.style.width='';
		s.innerHTML+='<div class="toolbar">'
			+'<a href="javascript:;" '
			+'onclick="config.macros.mapMaker.load(this.parentNode.nextSibling)">load map</a>'
			+'<a href="javascript:;" '
			+'onclick="config.macros.mapMaker.save(this.parentNode.nextSibling)">save map</a>'
			+'</div>'
			+'<textarea rows="8" style="display:block;clear:both;width:100%;" tiddler="'+map+'">'
			+store.getTiddlerText(map,'')
			+'</textarea>';
	},
	load: function(ta) {
		var tid=prompt('Enter a tiddler title:',ta.getAttribute('tiddler')||'');
		if (!tid||!tid.length) return; // cancelled by user
		ta.value=store.getTiddlerText(tid,''); ta.setAttribute('tiddler',tid);
		return false;
	},
	save: function(ta) {
		var tid=prompt('Enter a tiddler title:',ta.getAttribute('tiddler')||'NewImageMap');
		while (tid && tid.length && store.tiddlerExists(tid)) {
			if(confirm(config.messages.overwriteWarning.format([tid]))) break;
			var tid=prompt('Enter a different tiddler title:',tid);
		}
		if (!tid||!tid.length) return; // cancelled by user
		store.saveTiddler(tid,tid,ta.value,config.options.txtUserName,new Date(),['imageMap'],{});
		story.displayTiddler(null,tid);
		displayMessage('image map saved to: '+tid);
		ta.setAttribute('tiddler',tid);
		return false;
	}
}
//}}}
<<runTiddler ImageMapPlugin>>[img[http://dl.getdropbox.com/u/241006/images/WickedProblems.jpeg]]<<imageMap ImageMenu##inicial>>
{{center small{[[Skye|http://tinyurl.com/mrxaqt]]}}}/%
!inicial
Wicked Problems
1,68,88,69,90,95,1,101
----
Peak Minerals
102,0,102,15,169,16,170,1
----
Dessertification
105,16,105,32,175,31,175,16
----
Peak Oil
106,32,106,49,144,49,145,32
----
Peak Water
104,49,105,66,160,64,158,49
----
Peak Soils
104,67,106,82,157,83,157,67
----
Climate Change
103,83,104,100,177,99,177,81
----
Financial Chaos
106,100,106,116,176,118,178,99,182,102
----
Social Unrest
104,117,106,133,171,134,171,117
----
Health Epidemics
104,134,106,150,186,152,184,133
----
Population
106,151,106,168,165,169,167,151,150,155
!0
%/
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.5|
|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||
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2009.04.11 [1.9.5] pass current tiddler object into wrapper code so it can be referenced from within 'onclick' scripts
2009.02.26 [1.9.4] in $(), handle leading '#' on ID for compatibility with JQuery syntax
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 5, date: new Date(2009,4,11)};

config.formatters.push( {
	name: "inlineJavascript",
	match: "\\<script",
	lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?(?: key=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",

	handler: 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 src=lookaheadMatch[1];
			var label=lookaheadMatch[2];
			var tip=lookaheadMatch[3];
			var key=lookaheadMatch[4];
			var show=lookaheadMatch[5];
			var code=lookaheadMatch[6];
			if (src) { // external script library
				var script = document.createElement("script"); script.src = src;
				document.body.appendChild(script); document.body.removeChild(script);
			}
			if (code) { // inline code
				if (show) // display source in tiddler
					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
				if (label) { // create 'onclick' command link
					var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
					var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
					link.code="function _out(place,tiddler){"+fixup+"\n};_out(this,this.tiddler);"
					link.tiddler=w.tiddler;
					link.onclick=function(){
						this.bufferedHTML="";
						try{ var r=eval(this.code);
							if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
								var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
							if(this.bufferedHTML.length)
								s.innerHTML=this.bufferedHTML;
							if((typeof(r)==="string")&&r.length) {
								wikify(r,s,null,this.tiddler);
								return false;
							} else return r!==undefined?r:false;
						} catch(e){alert(e.description||e.toString());return false;}
					};
					link.setAttribute("title",tip||"");
					var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
					URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
					URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
					link.setAttribute("href",URIcode);
					link.style.cursor="pointer";
					if (key) link.accessKey=key.substr(0,1); // single character only
				}
				else { // run script immediately
					var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
					var c="function _out(place,tiddler){"+fixup+"\n};_out(w.output,w.tiddler);";
					try	 { var out=eval(c); }
					catch(e) { out=e.description?e.description:e.toString(); }
					if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
				}
			}
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
	}
} )
//}}}

// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
	if(limit > 0) text = text.substr(0,limit);
	var wikifier = new Wikifier(text,formatter,null,tiddler);
	return wikifier.wikifyPlain();
}
//}}}

// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
//}}}
{{floatleft tiny{<<tiddler Switch##Edit with: InsertCharacter>>}}}<html><hide linebreaks>
<form name="FindAndInsertForm1" OnClick="addedBit=FindAndInsertForm1.insertText.value;lfe=window.lastFocusedElement;se=lfe.selectionEnd;sl=lfe.selectionEnd-lfe.selectionStart;lfe.value=lfe.value.substring(0,lfe.selectionStart)+addedBit+lfe.value.substring(se);lfe.focus();lfe.selectionStart=se+addedBit.length-sl;lfe.selectionEnd=se+addedBit.length-sl;">
<INPUT type=hidden name="insertText"><div>
<INPUT TYPE="button" NAME="fileName" value="	" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#9998;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#9786;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#10003;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&times;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="[[" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="]]" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="|" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="~" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="^" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="*" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="#" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="<<" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value=">>" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="{{{" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="}}}" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="\" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&mdash;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&larr;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&uarr;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&darr;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&rarr;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&harr;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&uArr;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&dArr;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&lArr;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&rArr;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&iexcl;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&iquest;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&ldquo;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&rdquo;" 
OnClick="FindAndInsertForm1.insertText.value=this.value"' class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&alpha;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&beta;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&gamma;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&micro;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#247;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&frac14;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&frac12;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&frac34;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&permil;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&deg;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&sup1;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&sup2;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&sup3;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&bull;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&sum;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#10003;" 
OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#256;" 
OnClick="FindAndInsertForm1.insertText.value=this.value"' class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#257;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#298;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#299;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#362;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#363;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#7692;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#7693;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#7734;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#7735;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#7744;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#7745;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#7746;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#7747;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#7748;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#7749;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#7750;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#7751;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#7788;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#7789;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#209;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="&#241;" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"><INPUT TYPE="button" NAME="fileName" value="<br>" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"></div></form></form></html><<tiddler {{
    if (window.trackingFocus!=true) {
        window.lastFocusedElement = null;
        window.focusedElement = null;
        window.trackingFocus = true;
        document.addEventListener("focus", function(event) {
            if ((event.target.type=='textarea') && (event.target.name!='tabSepTable'))
                window.lastFocusedElement = event.target
            }, true);
    }
'';}}>>
/*{{{*/
 .treeview, .treeview ul{padding:0;margin:0;list-style:none}
.treeview ul{background-color: white;margin-top:4px}

.treeview .hitarea{background: url([[Ico##treeview-default.gif]]) -64px -25px no-repeat;height: 16px;width:16px;margin-left:-16px;float:left;cursor:pointer}
/* fix for IE6 */
* html .hitarea{display:inline;float:none}
.treeview li{margin:0;padding:3px 0pt 3px 16px}
.treeview a.selected{background-color:#eee}
#treecontrol{margin:1em 0;display: none}
.treeview .hover{color:red;cursor:pointer}

.treeview li{background:url([[Ico##treeview-redline.gif]]) 0 0 no-repeat}
.treeview li.collapsable, .treeview li.expandable{background-position: 0 -176px}
.treeview .expandable-hitarea{background-position: -80px -3px}
.treeview li.last{background-position: 0 -1766px}

.treeview li.lastCollapsable, .treeview li.lastExpandable{background-image: url([[Ico##treeview-default.gif]]);}  
.treeview li.lastCollapsable { background-position: 0 -111px}
.treeview li.lastExpandable { background-position: -32px -67px}
.treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea{background-position:0}

.treeview-red li { background-image: url([[Ico##treeview-redline.gif]]); }

.treeview-red .hitarea, .treeview-red li.lastCollapsable, .treeview-red li.lastExpandable {background-image:url([[Ico##treeview-red.gif]]); } 

.treeview-black li { background-image: url([[Ico##treeview-blackline.gif]]); }

.treeview-black .hitarea, .treeview-black li.lastCollapsable, .treeview-black li.lastExpandable { background-image:url([[Ico##treeview-black.gif]]); }  

.treeview-gray li { background-image: url([[Ico##treeview-grayline]); }

.treeview-gray .hitarea, .treeview-gray li.lastCollapsable, .treeview-gray li.lastExpandable { background-image: url([[Ico##treeview-gray.gif]]); } 

.treeview-famfamfam li { background-image: url([[Ico##treeview-famfamfam-line.gif]]); }

.treeview-famfamfam .hitarea, .treeview-famfamfam li.lastCollapsable, .treeview-famfamfam li.lastExpandable { background-image: url([[Ico##treeview-famfamfam.gif]]);}
.filetree li { padding: 3px 0 2px 16px; }
.filetree span.folder, .filetree span.file { padding: 1px 0 1px 16px; display: block; }

.filetree span.file{background: url([[Ico##file.gif]]) 0 0 no-repeat;}
/*}}}*/
[[TreeviewFolder]]
/%
!Title
<script>var list=[];var tids=store.getTaggedTiddlers("$1");if (!tids.length) return;var out='';for(var t=0;t<tids.length; t++)out+=" [[%0]] &nbsp;\n ".format([tids[t].title]);return out;</script>
!Pop
<script>var list=[];var tids=store.getTaggedTiddlers("$1");if (!tids.length) return;var out='';for(var t=0;t<tids.length; t++)out+=" <<tiddler Pop##Show enter replacement text with: [[%0]] [[%0]] ok>> \n".format([tids[t].title]);return out;</script>
!AndPop
<script>var list=[];var tids=store.getTaggedTiddlers("$1");if (!tids.length) return;var out='|borderless|k\n';for(var t=0;t<tids.length; t++)out+="| [[%0]]|@@maxWidth:50em;<<tiddler Pop##One with: &nbsp;&rarr;&nbsp; [[%0]] ok '' 35em>>@@|\n".format([tids[t].title]);return out;</script>
!Embed
<script>var list=[];var tids=store.getTaggedTiddlers("$1");if (!tids.length) return;var out='';for(var t=0;t<tids.length; t++)out+=" <<tiddler [[%0]]>> \n".format([tids[t].title]);return out;</script>
!AndEmbed
<script>var list=[];var tids=store.getTaggedTiddlers("$1");if (!tids.length) return;var out='|borderless|k\n';for(var t=0;t<tids.length; t++)out+="| [[%0]]|&nbsp;&rarr;&nbsp;|<<tiddler [[%0]]>>|\n".format([tids[t].title]);return out;</script>
!out
$1
!
%/
/%
Name: InstantBookmarklets
Source: http://www.TiddlyTools.com/#InstantBookmarklets
Version: 2.0.0
Author: Eric Shulman
License: http://www.TiddlyTools.com/#LegalStatements
Description: instantly create bookmarklets by dragging onclick links to the browser toolbar
See: [[InlineJavascriptPluginInfo]] for bookmarklet authoring documentation

%/<<tiddler LoadRemotePlugin with:
	[[UploadPlugin]]
	[[Load UploadPlugin from svn.TiddlyWiki.org repository]]
	[[http://svn.tiddlywiki.org/Trunk/contributors/BidiX/plugins/UploadPlugin.js]]
	[[window.story.displayTiddler(null,'WelcomeToTiddlyspot')]]
	[[version.extensions.UpoadPlugin!=undefined]]
>>
<<tiddler LoadRemotePlugin with:
	[[ImportTiddlersPlugin]]
	[[Load ImportTiddlersPlugin from svn.TiddlyWiki.org repository]]
	[[http://svn.tiddlywiki.org/Trunk/contributors/EricShulman/plugins/ImportTiddlersPlugin.js]]
	[[window.story.displayTiddler(null,"ImportTiddlers")]]
	[[version.extensions.ImportTiddlersPlugin!=undefined]]
	[[window.story.displayTiddler(null,"ImportTiddlers")]]
	[[ImportTiddlersPluginConfig]]
>>
<<tiddler LoadRemotePlugin with:
	[[ExportTiddlersPlugin]]
	[[Load ExportTiddlersPlugin from svn.TiddlyWiki.org repository]]
	[[http://svn.tiddlywiki.org/Trunk/contributors/EricShulman/plugins/ExportTiddlersPlugin.js]]
	[[window.story.displayTiddler(null,"ExportTiddlers")]]
	[[version.extensions.ExportTiddlersPlugin!=undefined]]
	[[window.story.displayTiddler(null,"ExportTiddlers")]]
	[[ExportTiddlersPluginConfig]]
>>
<<tiddler LoadRemotePlugin with:
	[[TiddlerTweakerPlugin]]
	[[Load TiddlerTweakerPlugin from svn.TiddlyWiki.org repository]]
	[[http://svn.tiddlywiki.org/Trunk/contributors/EricShulman/plugins/TiddlerTweakerPlugin.js]]
	[[window.story.displayTiddler(null,'TiddlerTweaker')]]
	[[version.extensions.TiddlerTweakerPlugin!=undefined]]
>>
<<tiddler LoadRemotePlugin with:
	[[RearrangeTiddlersPlugin]]
	[[Load RearrangeTiddlersPlugin from www.TiddlyTools.com]]
	[[http://www.TiddlyTools.com/plugins/RearrangeTiddlersPlugin.js]]
	[[window.story.forEachTiddler(function(t,e){window.story.refreshTiddler(t,null,true)}); window.refreshDisplay()]]
	[[Story.prototype.rearrangeTiddlersHijack_refreshTiddler!=undefined]]
>>
<<tiddler LoadRemotePlugin with:
	[[YourSearchPlugin]]
	[[Load YourSearchPlugin from tiddlywiki.abego-software.de]]
	[[http://tiddlywiki.abego-software.de/archive/YourSearchPlugin/Plugin-YourSearch-src.2.1.1.js]]
	[[window.refreshPageTemplate()]]
	[[version.extensions.YourSearchPlugin!=undefined]]
>>
<<tiddler LoadRemotePlugin with:
	[[Firefox Privilege Manager]]
	[[Load Firefox Privilege Manager from svn.TiddlyWiki.org repository]]
	[[http://svn.tiddlywiki.org/Trunk/contributors/XavierVerges/plugins/FirefoxPrivilegesPlugin.js]]
	[[config.macros.firefoxPrivileges.onload()]]
	[[config.macros.firefoxPrivileges!=undefined]]
	[[backstage.switchTab("firefoxPrivileges")]]
>>
<<tiddler LoadRemotePlugin with:
	[[Jash (JAvascript SHell)]]
	[[Load Jash (JAvascript SHell) from www.billyreisinger.com/jash]]
	[[http://www.billyreisinger.com/jash/source/latest/Jash.js]]
	[[window.jash.close()]]
	[[window.jash!=undefined]]
>>
/%
!info
|Name|LoadRemotePlugin|
|Source|http://www.TiddlyTools.com/#LoadRemotePlugin|
|Version|2.0.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|Load a plugin from a remote .js URL|
Usage
<<<
{{{
<<tiddler LoadRemotePlugin with: "label" "tip" "URL"
	"onloadfunction" "preloadedtest" "onrunfunction" "configoverlay">>
}}}
*''label'' and ''tip''<br>command link text and tooltip
*''URL''<br>location of .js (i.e., the remotely stored plugin file)
*''onloadfunction''<br>js code invoked after loading remote plugin (can be used to init values, display tiddlers, etc)
*''preloadedtest''<br>js expression evaluated to test if plugin has already been loaded
*''onrunfunction''<br>js code invoked //instead of onloadfunction// when plugin is already loaded
*''configoverlay''<br>name of tiddler containing js code with additional custom settings, tweaks, etc.
<<<
Examples
<<<
{{{
<<tiddler LoadRemotePlugin##show with:
	[[ImportTiddlersPlugin]]
	[[Load ImportTiddlersPlugin from svn.TiddlyWiki.org repository]]
	[[http://svn.tiddlywiki.org/Trunk/contributors/EricShulman/plugins/ImportTiddlersPlugin.js]]
	[[window.story.displayTiddler(null,"ImportTiddlers")]]
	[[version.extensions.ImportTiddlersPlugin!=undefined]]
	[[window.story.displayTiddler(null,"ImportTiddlers")]]
	[[ImportTiddlersPluginConfig]]
>>
}}}
<<<
!end

!show
<html><nowiki><a href="javascript:;" title="$2"
onmouseover="
	this.href='javascript:void(eval(decodeURIComponent(%22(function(){try{('
	+encodeURIComponent(encodeURIComponent(this.onclick))
	+')()}catch(e){alert(e.description?e.description:e.toString())}})()%22)))';"
onclick="
	if ('$5'!='$'+'5' && ($5)) {
		clearMessage();
		if ('$6'!='$'+'6' && '$6'.length) {$6;} else {$4;}
		displayMessage('$1 is already installed.');
		return false;
	}
	var s=document.createElement('script');
	s.src='$3';
	s.onerror=function() {
		clearMessage();
		displayMessage('Could not load $1 from');
		displayMessage(this.src,this.src);
	};
	s.onload=function() { 
		clearMessage();
		{$4;}
		if ('$7'!='$'+'7' && '$7'.length) {
			try { eval(store.getTiddlerText('$7','')); }
			catch(e) { displayMessage(e.description||e.toString()); }
		}
		displayMessage('$1 has been loaded from');
		displayMessage(this.src,this.src);
	};
	s.onreadystatechange=function()  /* for IE */
		{ if(this.readyState=='complete') this.onload(); };
	document.getElementsByTagName('head')[0].appendChild(s);
	return false;
">$1</a></html>
!end
%/<<tiddler {{var src='LoadRemotePlugin';src+(tiddler&&tiddler.title==src?'##info':'##show');}}
	with: [[$1]] [[$2]] [[$3]] [[$4]] [[$5]] [[$6]] [[$7]]>>
/% A modification of Eric Shulman's http://www.tiddlytools.com/faq.html#FAQ_CreateTiddlersFromForms for various columns and to append rows.
%/{{floatright small{<<tiddler CreateHtmlTable>>}}}{{wrappingClass{<<tabs makeTable
 Tiddler "create tiddler" "MakeTable##0"
 "with 1" "create 1 columns" MakeTable##1
 2 "create 2 columns" MakeTable##2
 3 "create 3 columns" MakeTable##3
 4 "create 4 columns" MakeTable##4
 5 "create 5 columns" MakeTable##5
 6 "create 6 columns" MakeTable##6
 7 "create 7 columns" MakeTable##7
 "8 columns" "create 8 columns" MakeTable##8>>}}}/%
!0
<html><hide linebreaks><!-- see HTMLFormattingPlugin --><form action="javascript:;"
	onsubmit="
		/* validate new title */
		var t=this.title.value;
		if (!t.length || t==this.title.defaultValue)
			{ alert('A title is required'); this.title.focus(); return false; }
		if (store.tiddlerExists(t) && !confirm(config.messages.overwriteWarning.format([t])))
			{ this.title.focus(); return false; }

		/* get current tiddler (if any) */
		var tid=store.getTiddler(t);
		var who=tid?tid.modifier:config.options.txtUserName;
		var when=tid?tid.modified:new Date();
		var txt=tid?tid.text:'';
		var tags=tid?tid.tags:[];
		var fields=tid?tid.fields:{};

		/* get form values and construct new tiddler text */
		var fmt='%0';
		var newtxt=fmt.format([this.field1.value]);

		/* insert new text at marker (or end, if no marker) */
		var marker='/*MARKER*/';
		if (txt.indexOf(marker)==-1) txt=txt+newtxt;
		else txt=txt.replace(new RegExp(marker.escapeRegExp()),newtxt+marker);

		/* get new tags and add to existing tags (if any) */
		var newtags=this.tagsfield.value.readBracketedList();
		for (var i=0; i<newtags.length; i++) tags.pushUnique(newtags[i]);

		/* write and show tiddler */
		store.saveTiddler(t,t,txt, who, when, tags, fields);
		story.displayTiddler(story.findContainingTiddler(this),t);
		return false;">
Title <input name="title" value="enter a title" style="width:91%;" onfocus="this.select()"><br>
<textarea name="field1" rows=5 style="width:99%;" onfocus="this.select()">text goes here</textarea><br><input name="tagsfield" value="[[space-separated tags go here]]" style="width:75%;" onfocus="this.select()"><input type="submit" value="add tiddler"></form></html>
!1
<html><form action="javascript:;" onsubmit="var t=this.title.value;if(!t.length || t==this.title.defaultValue){alert('A title is required');this.title.focus();return false;}if(store.tiddlerExists(t)&& !confirm(config.messages.overwriteWarning.format([t]))){this.title.focus();return false;}var tid=store.getTiddler(t);var who=tid?tid.modifier:config.options.txtUserName;var when=tid?tid.modified:new Date();var txt=tid?tid.text:'';var tags=tid?tid.tags:[];var fields=tid?tid.fields:{};var fmt='|%0|\n%1';var newtxt=fmt.format([this.field1.value,this.field2.value]);var marker='/*MARKER*/';if(txt.indexOf(marker)==-1)txt=txt+newtxt;else txt=txt.replace(new RegExp(marker.escapeRegExp()),newtxt+marker);var newtags=this.tagsfield.value.readBracketedList();for(var i=0;i<newtags.length;i++)tags.pushUnique(newtags[i]);store.saveTiddler(t,t,txt,who,when,tags,fields);story.displayTiddler(story.findContainingTiddler(this),t);return false;"> Title <input name="title" value="enter a title" style="width:39%;" onfocus="this.select()"> Field1 <input name="field1" value="field1 value" style="width:39%;" onfocus="this.select()"><br><textarea name="field2" rows=5 style="width:99%;"></textarea><br><input name="tagsfield" value="tags.." style="width:75%;" onfocus="this.select()"><input type="submit" value="add tiddler"></form></html>
!2
<html><form action="javascript:;" onsubmit="var t=this.title.value;if(!t.length || t==this.title.defaultValue){alert('A title is required');this.title.focus();return false;}if(store.tiddlerExists(t)&& !confirm(config.messages.overwriteWarning.format([t]))){this.title.focus();return false;}var tid=store.getTiddler(t);var who=tid?tid.modifier:config.options.txtUserName;var when=tid?tid.modified:new Date();var txt=tid?tid.text:'';var tags=tid?tid.tags:[];var fields=tid?tid.fields:{};var fmt='|%0|%1|\n%2';var newtxt=fmt.format([this.field1.value,this.field2.value,this.field3.value]);var marker='/*MARKER*/';if(txt.indexOf(marker)==-1)txt=txt+newtxt;else txt=txt.replace(new RegExp(marker.escapeRegExp()),newtxt+marker);var newtags=this.tagsfield.value.readBracketedList();for(var i=0;i<newtags.length;i++)tags.pushUnique(newtags[i]);store.saveTiddler(t,t,txt,who,when,tags,fields);story.displayTiddler(story.findContainingTiddler(this),t);return false;"> Title <input name="title" value="enter a title" style="width:22%;" onfocus="this.select()"> Field1 <input name="field1" value="field1 value" style="width:22%;" onfocus="this.select()"> Field2 <input name="field2" value="field2 value" style="width:22%;" onfocus="this.select()"><br><textarea name="field3" rows=5 style="width:99%;"></textarea><br><input name="tagsfield" value="tags.." style="width:75%;" onfocus="this.select()"><input type="submit" value="add tiddler"></form></html>
!3
<html><form action="javascript:;" onsubmit="var t=this.title.value;if(!t.length || t==this.title.defaultValue){alert('A title is required');this.title.focus();return false;}if(store.tiddlerExists(t)&& !confirm(config.messages.overwriteWarning.format([t]))){this.title.focus();return false;}var tid=store.getTiddler(t);var who=tid?tid.modifier:config.options.txtUserName;var when=tid?tid.modified:new Date();var txt=tid?tid.text:'';var tags=tid?tid.tags:[];var fields=tid?tid.fields:{};var fmt='|%0|%1|%2|\n%3';var newtxt=fmt.format([this.field1.value,this.field2.value,this.field3.value,this.field4.value]);var marker='/*MARKER*/';if(txt.indexOf(marker)==-1)txt=txt+newtxt;else txt=txt.replace(new RegExp(marker.escapeRegExp()),newtxt+marker);var newtags=this.tagsfield.value.readBracketedList();for(var i=0;i<newtags.length;i++)tags.pushUnique(newtags[i]);store.saveTiddler(t,t,txt,who,when,tags,fields);story.displayTiddler(story.findContainingTiddler(this),t);return false;"><input name="title" value="enter a title" style="width:23%;" onfocus="this.select()"><input name="field1" value="field1 value" style="width:24%;" onfocus="this.select()"><input name="field2" value="field2 value" style="width:24%;" onfocus="this.select()"><input name="field3" value="field3 value" style="width:24%;" onfocus="this.select()"><br><textarea name="field4" rows=5 style="width:99%;"></textarea><br><input name="tagsfield" value="tags.." style="width:75%;" onfocus="this.select()"><input type="submit" value="add tiddler"></form></html>
!4
<html><form action="javascript:;" onsubmit="var t=this.title.value;if(!t.length || t==this.title.defaultValue){alert('A title is required');this.title.focus();return false;}if(store.tiddlerExists(t)&& !confirm(config.messages.overwriteWarning.format([t]))){this.title.focus();return false;}var tid=store.getTiddler(t);var who=tid?tid.modifier:config.options.txtUserName;var when=tid?tid.modified:new Date();var txt=tid?tid.text:'';var tags=tid?tid.tags:[];var fields=tid?tid.fields:{};var fmt='|%0|%1|%2|%3|\n%4';var newtxt=fmt.format([this.field1.value,this.field2.value,this.field3.value,this.field4.value,this.field5.value]);var marker='/*MARKER*/';if(txt.indexOf(marker)==-1)txt=txt+newtxt;else txt=txt.replace(new RegExp(marker.escapeRegExp()),newtxt+marker);var newtags=this.tagsfield.value.readBracketedList();for(var i=0;i<newtags.length;i++)tags.pushUnique(newtags[i]);store.saveTiddler(t,t,txt,who,when,tags,fields);story.displayTiddler(story.findContainingTiddler(this),t);return false;"><input name="title" value="enter a title" style="width:18%;" onfocus="this.select()"><input name="field1" value="field1 value" style="width:19%;" onfocus="this.select()"><input name="field2" value="field2 value" style="width:19%;" onfocus="this.select()"><input name="field3" value="field3 value" style="width:19%;" onfocus="this.select()"><input name="field4" value="field4 value" style="width:19%;" onfocus="this.select()"><br><textarea name="field5" rows=5 style="width:99%;"></textarea><br><input name="tagsfield" value="tags.." style="width:75%;" onfocus="this.select()"><input type="submit" value="add tiddler"></form></html>
!5
<html><form action="javascript:;" onsubmit="var t=this.title.value;if(!t.length || t==this.title.defaultValue){alert('A title is required');this.title.focus();return false;}if(store.tiddlerExists(t)&& !confirm(config.messages.overwriteWarning.format([t]))){this.title.focus();return false;}var tid=store.getTiddler(t);var who=tid?tid.modifier:config.options.txtUserName;var when=tid?tid.modified:new Date();var txt=tid?tid.text:'';var tags=tid?tid.tags:[];var fields=tid?tid.fields:{};var fmt='|%0|%1|%2|%3|%4|\n%5';var newtxt=fmt.format([this.field1.value,this.field2.value,this.field3.value,this.field4.value,this.field5.value,this.field6.value]);var marker='/*MARKER*/';if(txt.indexOf(marker)==-1)txt=txt+newtxt;else txt=txt.replace(new RegExp(marker.escapeRegExp()),newtxt+marker);var newtags=this.tagsfield.value.readBracketedList();for(var i=0;i<newtags.length;i++)tags.pushUnique(newtags[i]);store.saveTiddler(t,t,txt,who,when,tags,fields);story.displayTiddler(story.findContainingTiddler(this),t);return false;"><input name="title" value="title" style="width:15%;" onfocus="this.select()"><input name="field1" value="field1" style="width:15%;" onfocus="this.select()"><input name="field2" value="field2" style="width:15%;" onfocus="this.select()"><input name="field3" value="field3" style="width:16%;" onfocus="this.select()"><input name="field4" value="field4" style="width:16%;" onfocus="this.select()"><input name="field5" value="field5" style="width:16%;" onfocus="this.select()"><br><textarea name="field6" rows=5 style="width:99%;"></textarea><br><input name="tagsfield" value="tags.." style="width:75%;" onfocus="this.select()"><input type="submit" value="add tiddler"></form></html>
!6
<html><form action="javascript:;" onsubmit="var t=this.title.value;if(!t.length || t==this.title.defaultValue){alert('A title is required');this.title.focus();return false;}if(store.tiddlerExists(t)&& !confirm(config.messages.overwriteWarning.format([t]))){this.title.focus();return false;}var tid=store.getTiddler(t);var who=tid?tid.modifier:config.options.txtUserName;var when=tid?tid.modified:new Date();var txt=tid?tid.text:'';var tags=tid?tid.tags:[];var fields=tid?tid.fields:{};var fmt='|%0|%1|%2|%3|%4|%5|\n%6';var newtxt=fmt.format([this.field1.value,this.field2.value,this.field3.value,this.field4.value,this.field5.value,this.field6.value,this.field7.value]);var marker='/*MARKER*/';if(txt.indexOf(marker)==-1)txt=txt+newtxt;else txt=txt.replace(new RegExp(marker.escapeRegExp()),newtxt+marker);var newtags=this.tagsfield.value.readBracketedList();for(var i=0;i<newtags.length;i++)tags.pushUnique(newtags[i]);store.saveTiddler(t,t,txt,who,when,tags,fields);story.displayTiddler(story.findContainingTiddler(this),t);return false;"><input name="title" value="title" style="width:13%;" onfocus="this.select()"><input name="field1" value="field1" style="width:13%;" onfocus="this.select()"><input name="field2" value="field2" style="width:13%;" onfocus="this.select()"><input name="field3" value="field3" style="width:13%;" onfocus="this.select()"><input name="field4" value="field4" style="width:13%;" onfocus="this.select()"><input name="field5" value="field5" style="width:13%;" onfocus="this.select()"><input name="field6" value="field6" style="width:14%;" onfocus="this.select()"><br><textarea name="field7" rows=5 style="width:99%;"></textarea><br><input name="tagsfield" value="tags.." style="width:75%;" onfocus="this.select()"><input type="submit" value="add tiddler"></form></html>
!7
<html><form action="javascript:;" onsubmit="var t=this.title.value;if(!t.length || t==this.title.defaultValue){alert('A title is required');this.title.focus();return false;}if(store.tiddlerExists(t)&& !confirm(config.messages.overwriteWarning.format([t]))){this.title.focus();return false;}var tid=store.getTiddler(t);var who=tid?tid.modifier:config.options.txtUserName;var when=tid?tid.modified:new Date();var txt=tid?tid.text:'';var tags=tid?tid.tags:[];var fields=tid?tid.fields:{};var fmt='|%0|%1|%2|%3|%4|%5|%6|\n%7';var newtxt=fmt.format([this.field1.value,this.field2.value,this.field3.value,this.field4.value,this.field5.value,this.field6.value,this.field7.value,this.field8.value]);var marker='/*MARKER*/';if(txt.indexOf(marker)==-1)txt=txt+newtxt;else txt=txt.replace(new RegExp(marker.escapeRegExp()),newtxt+marker);var newtags=this.tagsfield.value.readBracketedList();for(var i=0;i<newtags.length;i++)tags.pushUnique(newtags[i]);store.saveTiddler(t,t,txt,who,when,tags,fields);story.displayTiddler(story.findContainingTiddler(this),t);return false;"><input name="title" value="title" style="width:11%;" onfocus="this.select()"><input name="field1" value="field1" style="width:11%;" onfocus="this.select()"><input name="field2" value="field2" style="width:11%;" onfocus="this.select()"><input name="field3" value="field3" style="width:11%;" onfocus="this.select()"><input name="field4" value="field4" style="width:11%;" onfocus="this.select()"><input name="field5" value="field5" style="width:12%;" onfocus="this.select()"><input name="field6" value="field6" style="width:12%;" onfocus="this.select()"><input name="field7" value="field7" style="width:12%;" onfocus="this.select()"><br><textarea name="field8" rows=5 style="width:99%;"></textarea><br><input name="tagsfield" value="tags.." style="width:75%;" onfocus="this.select()"><input type="submit" value="add tiddler"></form></html>
!8
<html><form action="javascript:;" onsubmit="var t=this.title.value;if(!t.length || t==this.title.defaultValue){alert('A title is required');this.title.focus();return false;}if(store.tiddlerExists(t)&& !confirm(config.messages.overwriteWarning.format([t]))){this.title.focus();return false;}var tid=store.getTiddler(t);var who=tid?tid.modifier:config.options.txtUserName;var when=tid?tid.modified:new Date();var txt=tid?tid.text:'';var tags=tid?tid.tags:[];var fields=tid?tid.fields:{};var fmt='|%0|%1|%2|%3|%4|%5|%6|%7|\n%8';var newtxt=fmt.format([this.field1.value,this.field2.value,this.field3.value,this.field4.value,this.field5.value,this.field6.value,this.field7.value,this.field8.value,this.field9.value]);var marker='/*MARKER*/';if(txt.indexOf(marker)==-1)txt=txt+newtxt;else txt=txt.replace(new RegExp(marker.escapeRegExp()),newtxt+marker);var newtags=this.tagsfield.value.readBracketedList();for(var i=0;i<newtags.length;i++)tags.pushUnique(newtags[i]);store.saveTiddler(t,t,txt,who,when,tags,fields);story.displayTiddler(story.findContainingTiddler(this),t);return false;"><input name="title" value="title" style="width:10%;" onfocus="this.select()"><input name="field1" value="field1" style="width:10%;" onfocus="this.select()"><input name="field2" value="field2" style="width:10%;" onfocus="this.select()"><input name="field3" value="field3" style="width:10%;" onfocus="this.select()"><input name="field4" value="field4" style="width:10%;" onfocus="this.select()"><input name="field5" value="field5" style="width:10%;" onfocus="this.select()"><input name="field6" value="field6" style="width:10%;" onfocus="this.select()"><input name="field7" value="field7" style="width:10%;" onfocus="this.select()"><input name="field8" value="field8" style="width:10%;" onfocus="this.select()"><br><textarea name="field9" rows=5 style="width:99%;"></textarea><br><input name="tagsfield" value="tags.." style="width:75%;" onfocus="this.select()"><input type="submit" value="add tiddler"></form></html>
!end
%/
<script src="http://www.dynamicdrive.com/dynamicindex1/treeview/lib/jquery.cookie.js" type="text/javascript"></script>
<script>
/*
 * Treeview 1.4 - jQuery plugin to hide and show branches of a tree
 * 
 * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/
 * http://docs.jquery.com/Plugins/Treeview
 *
 * Copyright (c) 2007 Jörn Zaefferer
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Revision: $Id: jquery.treeview.js 4684 2008-02-07 19:08:06Z joern.zaefferer $
 *
 */

;(function($) {

	$.extend($.fn, {
		swapClass: function(c1, c2) {
			var c1Elements = this.filter('.' + c1);
			this.filter('.' + c2).removeClass(c2).addClass(c1);
			c1Elements.removeClass(c1).addClass(c2);
			return this;
		},
		replaceClass: function(c1, c2) {
			return this.filter('.' + c1).removeClass(c1).addClass(c2).end();
		},
		hoverClass: function(className) {
			className = className || "hover";
			return this.hover(function() {
				$(this).addClass(className);
			}, function() {
				$(this).removeClass(className);
			});
		},
		heightToggle: function(animated, callback) {
			animated ?
				this.animate({ height: "toggle" }, animated, callback) :
				this.each(function(){
					jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
					if(callback)
						callback.apply(this, arguments);
				});
		},
		heightHide: function(animated, callback) {
			if (animated) {
				this.animate({ height: "hide" }, animated, callback);
			} else {
				this.hide();
				if (callback)
					this.each(callback);				
			}
		},
		prepareBranches: function(settings) {
			if (!settings.prerendered) {
				// mark last tree items
				this.filter(":last-child:not(ul)").addClass(CLASSES.last);
				// collapse whole tree, or only those marked as closed, anyway except those marked as open
				this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide();
			}
			// return all items with sublists
			return this.filter(":has(>ul)");
		},
		applyClasses: function(settings, toggler) {
			this.filter(":has(>ul):not(:has(>a))").find(">span").click(function(event) {
				toggler.apply($(this).next());
			}).add( $("a", this) ).hoverClass();
			
			if (!settings.prerendered) {
				// handle closed ones first
				this.filter(":has(>ul:hidden)")
						.addClass(CLASSES.expandable)
						.replaceClass(CLASSES.last, CLASSES.lastExpandable);
						
				// handle open ones
				this.not(":has(>ul:hidden)")
						.addClass(CLASSES.collapsable)
						.replaceClass(CLASSES.last, CLASSES.lastCollapsable);
						
	            // create hitarea
				this.prepend("<div class=\"" + CLASSES.hitarea + "\"/>").find("div." + CLASSES.hitarea).each(function() {
					var classes = "";
					$.each($(this).parent().attr("class").split(" "), function() {
						classes += this + "-hitarea ";
					});
					$(this).addClass( classes );
				});
			}
			
			// apply event to hitarea
			this.find("div." + CLASSES.hitarea).click( toggler );
		},
		treeview: function(settings) {
			
			settings = $.extend({
				cookieId: "treeview"
			}, settings);
			
			if (settings.add) {
				return this.trigger("add", [settings.add]);
			}
			
			if ( settings.toggle ) {
				var callback = settings.toggle;
				settings.toggle = function() {
					return callback.apply($(this).parent()[0], arguments);
				};
			}
		
			// factory for treecontroller
			function treeController(tree, control) {
				// factory for click handlers
				function handler(filter) {
					return function() {
						// reuse toggle event handler, applying the elements to toggle
						// start searching for all hitareas
						toggler.apply( $("div." + CLASSES.hitarea, tree).filter(function() {
							// for plain toggle, no filter is provided, otherwise we need to check the parent element
							return filter ? $(this).parent("." + filter).length : true;
						}) );
						return false;
					};
				}
				// click on first element to collapse tree
				$("a:eq(0)", control).click( handler(CLASSES.collapsable) );
				// click on second to expand tree
				$("a:eq(1)", control).click( handler(CLASSES.expandable) );
				// click on third to toggle tree
				$("a:eq(2)", control).click( handler() ); 
			}
		
			// handle toggle event
			function toggler() {
				$(this)
					.parent()
					// swap classes for hitarea
					.find(">.hitarea")
						.swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
						.swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
					.end()
					// swap classes for parent li
					.swapClass( CLASSES.collapsable, CLASSES.expandable )
					.swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
					// find child lists
					.find( ">ul" )
					// toggle them
					.heightToggle( settings.animated, settings.toggle );
				if ( settings.unique ) {
					$(this).parent()
						.siblings()
						// swap classes for hitarea
						.find(">.hitarea")
							.replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
							.replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
						.end()
						.replaceClass( CLASSES.collapsable, CLASSES.expandable )
						.replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
						.find( ">ul" )
						.heightHide( settings.animated, settings.toggle );
				}
			}
			
			function serialize() {
				function binary(arg) {
					return arg ? 1 : 0;
				}
				var data = [];
				branches.each(function(i, e) {
					data[i] = $(e).is(":has(>ul:visible)") ? 1 : 0;
				});
				$.cookie(settings.cookieId, data.join("") );
			}
			
			function deserialize() {
				var stored = $.cookie(settings.cookieId);
				if ( stored ) {
					var data = stored.split("");
					branches.each(function(i, e) {
						$(e).find(">ul")[ parseInt(data[i]) ? "show" : "hide" ]();
					});
				}
			}
			
			// add treeview class to activate styles
			this.addClass("treeview");
			
			// prepare branches and find all tree items with child lists
			var branches = this.find("li").prepareBranches(settings);
			
			switch(settings.persist) {
			case "cookie":
				var toggleCallback = settings.toggle;
				settings.toggle = function() {
					serialize();
					if (toggleCallback) {
						toggleCallback.apply(this, arguments);
					}
				};
				deserialize();
				break;
			case "location":
				var current = this.find("a").filter(function() { return this.href.toLowerCase() == location.href.toLowerCase(); });
				if ( current.length ) {
					current.addClass("selected").parents("ul, li").add( current.next() ).show();
				}
				break;
			}
			
			branches.applyClasses(settings, toggler);
				
			// if control option is set, create the treecontroller and show it
			if ( settings.control ) {
				treeController(this, settings.control);
				$(settings.control).show();
			}
			
			return this.bind("add", function(event, branches) {
				$(branches).prev()
					.removeClass(CLASSES.last)
					.removeClass(CLASSES.lastCollapsable)
					.removeClass(CLASSES.lastExpandable)
				.find(">.hitarea")
					.removeClass(CLASSES.lastCollapsableHitarea)
					.removeClass(CLASSES.lastExpandableHitarea);
				$(branches).find("li").andSelf().prepareBranches(settings).applyClasses(settings, toggler);
			});
		}
	});
	
	// classes used by the plugin
	// need to be styled via external stylesheet, see first example
	var CLASSES = $.fn.treeview.classes = {
		open: "open",
		closed: "closed",
		expandable: "expandable",
		expandableHitarea: "expandable-hitarea",
		lastExpandableHitarea: "lastExpandable-hitarea",
		collapsable: "collapsable",
		collapsableHitarea: "collapsable-hitarea",
		lastCollapsableHitarea: "lastCollapsable-hitarea",
		lastCollapsable: "lastCollapsable",
		lastExpandable: "lastExpandable",
		last: "last",
		hitarea: "hitarea"
	};
	
	// provide backwards compability
	$.fn.Treeview = $.fn.treeview;
	
})(jQuery);
</script>
/%
!	Available options for the tiddlers display area
No change to the tiddler display
	return false;
Refresh the present tiddler display only
	story.refreshTiddler(getAttribute('tiddler'),null,true);
Close all visible tiddlers:
	story.closeAllTiddlers();
Leave visible tiddlers open and adding one new
	story.displayTiddler(null,'$2');
Close all visible tiddlers and open one new tiddler
	story.closeAllTiddlers(); story.displayTiddler(null,'$2');
Open a group of tiddlers indicated in a default tiddler
	story.displayTiddlers(null,store.getTiddlerText('$2').readBracketedList());
Close all visible tiddlers and open a group of tiddlers indicated in a default tiddler
	story.closeAllTiddlers(); story.displayTiddlers(null,store.getTiddlerText('$2').readBracketedList());
Close all visible tiddlers and open a group of tiddlers indicated by parameters (8 in this example)
	story.closeAllTiddlers(); story.displayTiddlers(null,['$2','$4','$5','$6','$7','$8','$9']);
!A
<html><a href="javascript:;" title="$3" onmouseover="if (story) {
document.getElementById('mainMenuA').style.display='block';
document.getElementById('mainMenuB').style.display='none';
document.getElementById('mainMenuC').style.display='none';
document.getElementById('mainMenuD').style.display='none';
document.getElementById('mainMenuE').style.display='none';
document.getElementById('mainMenuF').style.display='none';
document.getElementById('mainMenuG').style.display='none';
document.getElementById('mainMenuH').style.display='none';
document.getElementById('mainMenuI').style.display='none';
document.getElementById('mainMenuJ').style.display='none';
story.displayTiddler(null,'$2');}">$1</a></html>
!B
<html><a href="javascript:;" title="$3" onclick="if (story) {
document.getElementById('mainMenuB').style.display='block';
document.getElementById('mainMenuA').style.display='none';
document.getElementById('mainMenuC').style.display='none';
document.getElementById('mainMenuD').style.display='none';
document.getElementById('mainMenuE').style.display='none';
document.getElementById('mainMenuF').style.display='none';
document.getElementById('mainMenuG').style.display='none';
document.getElementById('mainMenuH').style.display='none';
document.getElementById('mainMenuI').style.display='none';
document.getElementById('mainMenuJ').style.display='none';;
story.closeAllTiddlers(); story.displayTiddler(null,'$2');}">$1</a></html>
!C
<html><a href="javascript:;" title="$3" onclick="if (story) {
document.getElementById('mainMenuC').style.display='block';
document.getElementById('mainMenuA').style.display='none';
document.getElementById('mainMenuB').style.display='none';
document.getElementById('mainMenuD').style.display='none';
document.getElementById('mainMenuE').style.display='none';
document.getElementById('mainMenuF').style.display='none';
document.getElementById('mainMenuG').style.display='none';
document.getElementById('mainMenuH').style.display='none';
document.getElementById('mainMenuI').style.display='none';
document.getElementById('mainMenuJ').style.display='none';
story.displayTiddler(null,'$2');}">$1</a></html>
!D
<html><a href="javascript:;" title="$3" onclick="if (story) {
document.getElementById('mainMenuD').style.display='block';
document.getElementById('mainMenuA').style.display='none';
document.getElementById('mainMenuB').style.display='none';
document.getElementById('mainMenuC').style.display='none';
document.getElementById('mainMenuE').style.display='none';
document.getElementById('mainMenuF').style.display='none';
document.getElementById('mainMenuG').style.display='none';
document.getElementById('mainMenuH').style.display='none';
document.getElementById('mainMenuI').style.display='none';
document.getElementById('mainMenuJ').style.display='none';
story.closeAllTiddlers(); story.displayTiddler(null,'$2');}">$1</a></html>
!E
<html><a href="javascript:;" title="$3" onclick="if (story) {
document.getElementById('mainMenuE').style.display='block';
document.getElementById('mainMenuA').style.display='none';
document.getElementById('mainMenuB').style.display='none';
document.getElementById('mainMenuC').style.display='none';
document.getElementById('mainMenuD').style.display='none';
document.getElementById('mainMenuF').style.display='none';
document.getElementById('mainMenuG').style.display='none';
document.getElementById('mainMenuH').style.display='none';
document.getElementById('mainMenuI').style.display='none';
document.getElementById('mainMenuJ').style.display='none';
	story.displayTiddler(null,'$2');
}">$1</a></html>
!F
<html><a href="javascript:;" title="$3" onclick="if (story) {
document.getElementById('mainMenuF').style.display='block';
document.getElementById('mainMenuA').style.display='none';
document.getElementById('mainMenuB').style.display='none';
document.getElementById('mainMenuC').style.display='none';
document.getElementById('mainMenuD').style.display='none';
document.getElementById('mainMenuE').style.display='none';
document.getElementById('mainMenuG').style.display='none';
document.getElementById('mainMenuH').style.display='none';
document.getElementById('mainMenuI').style.display='none';
document.getElementById('mainMenuJ').style.display='none';
	story.refreshTiddler(getAttribute('tiddler'),null,true);
}">$1</a></html>
!G
<html><a href="javascript:;" title="$3" onclick="if (story) {
document.getElementById('mainMenuG').style.display='block';
document.getElementById('mainMenuA').style.display='none';
document.getElementById('mainMenuB').style.display='none';
document.getElementById('mainMenuC').style.display='none';
document.getElementById('mainMenuD').style.display='none';
document.getElementById('mainMenuE').style.display='none';
document.getElementById('mainMenuF').style.display='none';
document.getElementById('mainMenuH').style.display='none';
document.getElementById('mainMenuI').style.display='none';
document.getElementById('mainMenuJ').style.display='none';
	story.refreshTiddler(getAttribute('tiddler'),null,true);
}">$1</a></html>
!H
<html><a href="javascript:;" title="$3" onclick="if (story) {
document.getElementById('mainMenuH').style.display='block';
document.getElementById('mainMenuA').style.display='none';
document.getElementById('mainMenuB').style.display='none';
document.getElementById('mainMenuC').style.display='none';
document.getElementById('mainMenuD').style.display='none';
document.getElementById('mainMenuE').style.display='none';
document.getElementById('mainMenuF').style.display='none';
document.getElementById('mainMenuG').style.display='none';
document.getElementById('mainMenuI').style.display='none';
document.getElementById('mainMenuJ').style.display='none';
	story.refreshTiddler(getAttribute('tiddler'),null,true);
}">$1</a></html>
!I
<html><a href="javascript:;" title="$3" onclick="if (story) {
document.getElementById('mainMenuI').style.display='block';
document.getElementById('mainMenuA').style.display='none';
document.getElementById('mainMenuB').style.display='none';
document.getElementById('mainMenuC').style.display='none';
document.getElementById('mainMenuD').style.display='none';
document.getElementById('mainMenuE').style.display='none';
document.getElementById('mainMenuF').style.display='none';
document.getElementById('mainMenuG').style.display='none';
document.getElementById('mainMenuH').style.display='none';
document.getElementById('mainMenuJ').style.display='none';
	story.refreshTiddler(getAttribute('tiddler'),null,true);
}">$1</a></html>
!J
<html><a href="javascript:;" title="$3" onclick="if (story) {
document.getElementById('mainMenuJ').style.display='block';
document.getElementById('mainMenuA').style.display='none';
document.getElementById('mainMenuB').style.display='none';
document.getElementById('mainMenuC').style.display='none';
document.getElementById('mainMenuD').style.display='none';
document.getElementById('mainMenuE').style.display='none';
document.getElementById('mainMenuF').style.display='none';
document.getElementById('mainMenuG').style.display='none';
document.getElementById('mainMenuH').style.display='none';
document.getElementById('mainMenuI').style.display='none';
	story.refreshTiddler(getAttribute('tiddler'),null,true);
}">$1</a></html>
!0
%/
|Name|MenuFlex|
|Author|Changing menu by [[oc|http://b-oo-k.net/blog/]], variable width menu by [[FND|http://cleanlayout.tiddlyspot.com/]], scripts by [[ELS|http://www.TiddlyTools.com]], [[Soares|http://www.math.ist.utl.pt/~psoares/addons.html]], [[Gray|http://twhelp.tiddlyspot.com/]]|
|Description|switches and widens left menu and may open tiddler simultaneously|
|Source|http://menuflex.tiddlyspot.com/|
|Requires|<<tag menuFlex>>|
|PageTemplate|PageTemplate|
|ViewTemplate|##ViewTemplate|
|EditTemplate|##EditTemplate|
|StyleSheet|StyleSheet|
!TemplateBody
<!--{{{-->
<div id='outer'><div id='sidemenu'>
<div id='mainMenuA' style="display:block" refresh='content' force='true' tiddler='SwitchMenu'
ondblclick="story.displayTiddler(null,'SwitchMenu', DEFAULT_EDIT_TEMPLATE)"></div>
<div id='sidemenuA'>
<div id='mainMenuB' refresh='content' force='true' tiddler='BrowseMenu'
ondblclick="story.displayTiddler(null,'BrowseMenu', DEFAULT_EDIT_TEMPLATE)"</div>

<div id='mainMenuC' refresh='content' force='true' tiddler='SideBarTabs'
ondblclick="story.displayTiddler(null,'SideBarTabs', DEFAULT_EDIT_TEMPLATE)"></div>

<div id='mainMenuD' refresh='content' force='true' tiddler='TabMenu'
ondblclick="story.displayTiddler(null,'TabMenu', DEFAULT_EDIT_TEMPLATE)"></div>

<div id='mainMenuE' refresh='content' force='true' tiddler='SliderMenu'
ondblclick="story.displayTiddler(null,'SliderMenu', DEFAULT_EDIT_TEMPLATE)"></div>

<div id='mainMenuF' refresh='content' force='true' tiddler='CrumbsMenu'
ondblclick="story.displayTiddler(null,'CrumbsMenu', DEFAULT_EDIT_TEMPLATE)"></div>

<div id='mainMenuG' refresh='content' force='true' tiddler='CloudMenu'
ondblclick="story.displayTiddler(null,'CloudMenu', DEFAULT_EDIT_TEMPLATE)"></div>

<div id='mainMenuH' refresh='content' force='true' tiddler='TagTree'
ondblclick="story.displayTiddler(null,'TagTree', DEFAULT_EDIT_TEMPLATE)"></div>

<div id='mainMenuI' refresh='content' force='true' tiddler='TreeMenu'
ondblclick="story.displayTiddler(null,'TreeMenu', DEFAULT_EDIT_TEMPLATE)"></div>

<div id='mainMenuJ' refresh='content' force='true' tiddler='AccordionMenu'
ondblclick="story.displayTiddler(null,'AccordionMenu', DEFAULT_EDIT_TEMPLATE)"></div>

</div>
</div>
</div>
<div id='sidebar'>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
</div>
<div id='messageArea' ondblclick='clearMessage();return false;'></div>
<div id='displayArea' ondblclick="story.displayTiddler(null,'New Tiddler', DEFAULT_EDIT_TEMPLATE)">
<div id='extraMenu' refresh='content' tiddler='ExtraMenu'></div>
<div id='tiddlerDisplay'></div>
</div>
<div id='pageFooter' refresh='content' tiddler='MenuFlex##Footer'>
</div>
<div id='bottomLeft' macro='search' style='position:fixed;z-index:1;left:0;bottom:0;'></div>
<!--}}}-->
!TemplateHeader
<!--{{{-->
<div id='header' class='header' macro='gradient vert [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]] [[ColorPalette::PrimaryMid]]'>
<div id='searchBar' class=searchBar macro='search " s e a r c h"'></div>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='MenuFlex##SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='MenuFlex##SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='MenuFlex##SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='MenuFlex##SiteSubtitle'></span>
</div>
</div>
<!--}}}-->
!Header2
<!--{{{-->
<div id='header' class='header' macro='gradient vert [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]] [[ColorPalette::PrimaryMid]]'>
<div id='searchBar' class=searchBar macro='search " s e a r c h"'></div>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='MenuFlex##SiteTitle2'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='MenuFlex##SiteSubtitle2'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='MenuFlex##SiteTitle2'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='MenuFlex##SiteSubtitle2'></span>
</div>
</div>
<!--}}}-->
!Header3
<!--{{{-->
<div id='header' class='header' macro='gradient vert [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]] [[ColorPalette::PrimaryMid]]'>
<div id='searchBar' class=searchBar macro='search " s e a r c h"'></div>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='MenuFlex##SiteTitle3'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='MenuFlex##SiteSubtitle3'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='MenuFlex##SiteTitle3'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='MenuFlex##SiteSubtitle3'></span>
</div>
</div>
<!--}}}-->
!ViewTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></div>
<div class='tagged' style="clear:right" macro='tags'></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='viewer' style="clear:right" macro='view text wikified'></div>
<div class='tagging' macro='tagging'></div>
<div class='tagClear'></div>
<!--}}}-->
!EditTemplate
<!--{{{-->
<span class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler toggleEditBar'></span>
<div class='title' macro='view title'</div>
<div macro='annotations'></div>
<span class='editor-jk'>
<span class='editor' macro='edit title' style='float: left; width: 30%;'></span>&nbsp;&nbsp;
<span macro='tagChooser'></span><span macro='edit tags'></span>
</span>
<span macro='tiddler EditBar'></span>
<div class='editor' style='clear: both;' macro='edit text'></div>
<!--}}}-->
!SiteTitle
<<tiddler Pop##One with: MenuFlex MenuFlex##1 ok>>
!SiteTitle2
<<tiddler Pop##One with: "Menus a 'la card" MenuFlex##2c ok>>
!SiteTitle3
<<tiddler Pop##One with: "TiddlyTools a 'la card" MenuFlex##2c ok>>/%
!1
<<tiddler Pop##Pops with: MenuFlex>>
<<tiddler Pop##Two with: PageTemplate MenuFlex##2a ok>>
<<tiddler Pop##Two with: StyleSheet MenuFlex##2b ok>>
<<tiddler Pop##Two with: Menus MenuFlex##2c ok>>
!2a
<<tiddler Pop##Pops with: PageTemplate>>
<<tiddler Pop##Three with: SiteMenu MenuFlex##3a ok>>
<<tiddler Pop##Three with: Template2 MenuFlex##3b ok>>
<<tiddler Pop##Three with: TemplateBody MenuFlex##3c ok>>
!2b
  <<tiddler Pop##Pops with: StyleSheet>>
!2c
  <<tiddler Pop##Pops with: Menu>>
!3a
 <<tiddler Pop##Pops with: SiteMenu>>
!3b
 <<tiddler Pop##Pops with: Template2>>
!3c
 <<tiddler Pop##Pops with: TemplateBody>> 
!0
%/
!SiteSubtitle
//&nbsp; html & css tiddly tweaks - live with least systemConfig tags// <<tiddler YourSearch>>
!SiteSubtitle2
//&nbsp; visual navigation with selected plugins// <<tiddler YourSearch>>
!SiteSubtitle3
//&nbsp; navigation with [[TiddlyTools|http://www.tiddlytools.com]] plugins// <<tiddler YourSearch>>
!Footer
Powered by [[TiddlyWiki|http://www.tiddlywiki.com]] <<version>>. Changing menu by [[oc|http://b-oo-k.net/blog/]]. Variable width menu by [[FND|http://cleanlayout.tiddlyspot.com/]]. Scripts by [[ELS|http://www.TiddlyTools.com]], [[Soares|http://www.math.ist.utl.pt/~psoares/addons.html]], [[Gray|http://twhelp.tiddlyspot.com/]] ../%
!0
%/
/%
!info
|Name|MicroBrowser|
|Source|http://www.TiddlyTools.com/#MicroBrowser|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|Type|transclusion|
|Description|simplified browser-in-browser with bookmarks|
Usage
<<<
{{{
<<tiddler MicroBrowser>>
<<tiddler MicroBrowser with: TiddlerName>>
}}}
*''TiddlerName'' (optional, default='MiniBrowserList') contains an ~HR-separated list of bookmarks (1st line=list text, 2nd line=URL).  
* For additional features, including support for embedded video and flash players, please see [[MiniBrowserPlugin]].
<<<
Example
<<<
{{{<<tiddler MicroBrowser>>}}}
<<tiddler MicroBrowser##show>>
<<<
!end
!show
{{smallform{<html><nowiki><style>
	#tiddlerMicroBrowser .tagged {display:none;}
</style>
<form style='display:inline;margin:0;padding:0;white-space:nowrap;' onsubmit='return false;'><!--
	--><input type='button' value='<' title='back' style='width:3%'
		onclick='try{this.form.nextSibling.history.go(-1)}catch(e){window.history.go(-1)}'><!--
	--><input type='button' value='>' title='forward' style='width:3%'
		onclick='try{this.form.nextSibling.history.go(+1)}catch(e){window.history.go(+1)}'><!--
	--><input type='button' value='+' title='refresh'style='width:3%'
		onclick='try{this.form.nextSibling.location.reload()}catch(e){;}'><!--
	--><input type='button' value='x' title='stop'style='width:3%'
		onclick='window.stop()'><!--
	--><select name='bookmarks' size='1' style='width:25%'
		onchange='this.form.url.value=this.value; this.form.go.click();'><!--
	--><option value=''>bookmarks...</option><!--
	--></select><!--
	--><input type='button' value='edit' title='edit the bookmarks list' style='width:6%'
		onclick='story.displayTiddler(null,this.form.bookmarks.getAttribute("tiddler"),2)'><!--
	--><input type='text' name='url' size='60' value='' style='width:39%'
		onfocus='this.select()'><!--
	--><input type='button' value='go' name='go' title='view URL' style='width:6%'
		onclick="var f=this.form; var i=this.form.nextSibling;
			var u=f.url.value.replace(/^\s*|\s*$/g,"");
			if (!u.length) u=f.url.value=f.bookmarks.value.replace(/^\s*|\s*$/g,"");
			if (u.length) { f.done.disabled=false; i.style.display='block'; i.src=u; }
			else { f.done.disabled=true; i.style.display='none'; i.src=''; }
		"><!--
	--><input type='button' value='open' title='open a separate tab/window' style='width:6%'
		onclick='if (this.form.url.value.length) window.open(this.form.url.value)'><!--
	--><input type='button' value='done' name='done' disabled title='disconnect from URL' style='width:6%'
		onclick="this.form.done.disabled=true; var i=this.form.nextSibling; i.style.display='none'; i.src='';"><!--
	--></div></form><iframe src='' width='100%' height='480' 
		style='display:none;background:#fff;border:1px solid;'></iframe>
</html><<tiddler {{
	var list=place.lastChild.getElementsByTagName('form')[0].bookmarks;
	while (list.options[1]) list.options[1]=null;
	var tid='$1'; if(tid=='$'+'1') tid='MiniBrowserList';
	list.setAttribute('tiddler',tid);
	var parts=store.getTiddlerText(tid,'').split('\n----\n');
	for (var p=0; p<parts.length; p++) {
		var lines=parts[p].split('\n');
		var label=lines.shift()||''; // 1st line=display text
		var value=lines.shift()||''; // 2nd line=item value
		var indent=value&&value.length?'\xa0\xa0':'';
		list.options[list.length]=new Option(indent+label,value);
	}
''}}>>}}}
!end
%/<<tiddler {{var src='MicroBrowser'; src+(tiddler&&tiddler.title==src?'##info':'##show');}}
	with: [[$1]]>>
/%
!info
|Name|MicroCalc|
|Source|http://www.TiddlyTools.com/#MicroCalc|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|simple calculator using javascript eval() function|
Usage
<<<
{{{
<<tiddler MicroCalc>>
<<tiddler MicroCalc with: width>>
*''width'' (optional) is a CSS measurement (default=auto)
}}}
<<<
Example
>{{{<<tiddler MicroCalc with: 300px>>}}}
><<tiddler MicroCalc##show with: 300px>>
!end
!show
<html><nowiki>
<form action="javascript:;" style="width:$1;display:block;white-space:nowrap;margin:0;padding:0;"><!--
--><input name="input" value="0" style="width:70%;text-align:right;"
	title="INPUT: enter a JavaScript expression, function, or object/variable name"
	onfocus="this.select()"
	onkeyup="if (event.keyCode==13) {this.form.go.click(); return false;}"><!--
--><input name="go" type="button" value="=" style="width:10%"
	title="CALCULATE: evaluate input and display results"
	onclick="var i=this.form.input; var o=this.form.output; var val=i.value; var res='';
		try{res=eval(val);i.value=res}catch(e){res=e.description||e.toString()};
		o.value+=(o.value.length?'\n':'')+val+'\n='+res;
		o.style.display='block'; o.scrollTop=o.scrollHeight;
		i.select();i.focus();"><!--
--><input name="memstore" type="button" value="m" style="width:10%"
	title="MEMORY STORE: save input to temporary memory"
	onclick="var f=this.form; f.memory.value=f.input.value;
		f.memory.parentNode.style.display='block'"><!--
--><input name="clear" type="button" value="c" style="width:10%" 
	title="CLEAR: erase history and reset input"
	onclick="var i=this.form.input; var o=this.form.output;
		o.value='';o.style.display='none';
		i.value='0';i.select();i.focus();"><!--
--><div style="display:none"><!--
--><input name="memory" value="0" style="width:70%;text-align:right;"
	title="MEMORY: temporarily store input during calculations"><!--
--><input name="meminsert" type="button" value="mi" style="width:10%"
	title="MEMORY INSERT: append memory value to current input"
	onclick="var i=this.form.input;
		i.value+=this.form.memory.value; i.select();i.focus();"><!--
--><input name="memrecall" type="button" value="mr" style="width:10%"
	title="MEMORY RECALL: replace current input with memory value "
	onclick="var i=this.form.input;
		i.value=this.form.memory.value; i.select();i.focus();"><!--
--><input name="memclear" type="button" value="mc" style="width:10%"
	title="MEMORY CLEAR: clear temporary memory"
	onclick="var f=this.form; f.memory.value='0';
		f.memory.parentNode.style.display='none';
		f.input.select();f.input.focus();"><!--
--></div><!--
--><textarea name="output" rows=5 style="width:99%;display:none;text-align:right;"
	title="HISTORY: previous inputs and calculated results"></textarea><!--
--></form></html>
!end
%/<<tiddler {{tiddler&&tiddler.title=='MicroCalc'?'MicroCalc##info':'MicroCalc##show'}}
	with: {{'$1'!='$'+'1'?'$1':'auto'}}>>
{{accordionEffect nobullets{+++*[Menu Flex|show/hide menu]...<<tiddler SiteMenu##menuFlex>>===+++*[Html Scripts|show/hide menu]...<<tiddler SiteMenu##htm>>===+++*[Favlets|show/hide menu]...<<tiddler SiteMenu##favlet>>===+++*[All Tags|show/hide menu]...<<tiddler SiteMenu##tags>>===+++*[ • Menu Flex|show/hide menu]...<<tiddler NestedMenu##1>>===}}}/%
!1
{{accordionTwo{
+++*[PageTemplate|show/hide menu]...<<tiddler SliderMenu##1a>>===
+++*[StyleSheet|show/hide menu]...<<tiddler SliderMenu##1b>>===
+++*[Menu|show/hide menu]...<<tiddler SliderMenu##1c>>==={{button whitespace{
          [[How To ?|HowTo]]}}}}}}
!0
%/
/***
|Name|NestedSlidersPlugin|
|Source|http://www.TiddlyTools.com/#NestedSlidersPlugin|
|Documentation|http://www.TiddlyTools.com/#NestedSlidersPluginInfo|
|Version|2.4.9|
|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|show content in nest-able sliding/floating panels, without creating separate tiddlers for each panel's content|
!!!!!Documentation
>see [[NestedSlidersPluginInfo]]
!!!!!Configuration
<<<
<<option chkFloatingSlidersAnimate>> allow floating sliders to animate when opening/closing
>Note: This setting can cause 'clipping' problems in some versions of InternetExplorer.
>In addition, for floating slider animation to occur you must also allow animation in general (see [[AdvancedOptions]]).
<<<
!!!!!Revisions
<<<
2008.11.15 - 2.4.9 in adjustNestedSlider(), don't make adjustments if panel is marked as 'undocked' (CSS class).  In onClickNestedSlider(), SHIFT-CLICK docks panel (see [[MoveablePanelPlugin]])
|please see [[NestedSlidersPluginInfo]] for additional revision details|
2005.11.03 - 1.0.0 initial public release.  Thanks to RodneyGomes, GeoffSlocock, and PaulPetterson for suggestions and experiments.
<<<
!!!!!Code
***/
//{{{
version.extensions.NestedSlidersPlugin= {major: 2, minor: 4, revision: 9, date: new Date(2008,11,15)};

// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkFloatingSlidersAnimate===undefined)
	config.options.chkFloatingSlidersAnimate=false; // avoid clipping problems in IE

// default styles for 'floating' class
setStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \
	background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

config.formatters.push( {
	name: "nestedSliders",
	match: "\\n?\\+{3}",
	terminator: "\\s*\\={3}\\n?",
	lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\@\\[\\>]*\\^)?)?(\\*)?(\\@)?(?:\\{\\{([\\w]+[\\s\\w]*)\\{)?(\\[[^\\]]*\\])?(\\[[^\\]]*\\])?(?:\\}{3})?(\\#[^:]*\\:)?(\\>)?(\\.\\.\\.)?\\s*",
	handler: function(w)
		{
			lookaheadRegExp = new RegExp(this.lookahead,"mg");
			lookaheadRegExp.lastIndex = w.matchStart;
			var lookaheadMatch = lookaheadRegExp.exec(w.source)
			if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
			{
				var defopen=lookaheadMatch[1];
				var cookiename=lookaheadMatch[2];
				var header=lookaheadMatch[3];
				var panelwidth=lookaheadMatch[4];
				var transient=lookaheadMatch[5];
				var hover=lookaheadMatch[6];
				var buttonClass=lookaheadMatch[7];
				var label=lookaheadMatch[8];
				var openlabel=lookaheadMatch[9];
				var panelID=lookaheadMatch[10];
				var blockquote=lookaheadMatch[11];
				var deferred=lookaheadMatch[12];

				// location for rendering button and panel
				var place=w.output;

				// default to closed, no cookie, no accesskey, no alternate text/tip
				var show="none"; var cookie=""; var key="";
				var closedtext=">"; var closedtip="";
				var openedtext="<"; var openedtip="";

				// extra "+", default to open
				if (defopen) show="block";

				// cookie, use saved open/closed state
				if (cookiename) {
					cookie=cookiename.trim().slice(1,-1);
					cookie="chkSlider"+cookie;
					if (config.options[cookie]==undefined)
						{ config.options[cookie] = (show=="block") }
					show=config.options[cookie]?"block":"none";
				}

				// parse label/tooltip/accesskey: [label=X|tooltip]
				if (label) {
					var parts=label.trim().slice(1,-1).split("|");
					closedtext=parts.shift();
					if (closedtext.substr(closedtext.length-2,1)=="=")	
						{ key=closedtext.substr(closedtext.length-1,1); closedtext=closedtext.slice(0,-2); }
					openedtext=closedtext;
					if (parts.length) closedtip=openedtip=parts.join("|");
					else { closedtip="show "+closedtext; openedtip="hide "+closedtext; }
				}

				// parse alternate label/tooltip: [label|tooltip]
				if (openlabel) {
					var parts=openlabel.trim().slice(1,-1).split("|");
					openedtext=parts.shift();
					if (parts.length) openedtip=parts.join("|");
					else openedtip="hide "+openedtext;
				}

				var title=show=='block'?openedtext:closedtext;
				var tooltip=show=='block'?openedtip:closedtip;

				// create the button
				if (header) { // use "Hn" header format instead of button/link
					var lvl=(header.length>5)?5:header.length;
					var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,buttonClass,title);
					btn.onclick=onClickNestedSlider;
					btn.setAttribute("href","javascript:;");
					btn.setAttribute("title",tooltip);
				}
				else
					var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider,buttonClass);
				btn.innerHTML=title; // enables use of HTML entities in label

				// set extra button attributes
				btn.setAttribute("closedtext",closedtext);
				btn.setAttribute("closedtip",closedtip);
				btn.setAttribute("openedtext",openedtext);
				btn.setAttribute("openedtip",openedtip);
				btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
				btn.defOpen=defopen!=null; // save default open/closed state (boolean)
				btn.keyparam=key; // save the access key letter ("" if none)
				if (key.length) {
					btn.setAttribute("accessKey",key); // init access key
					btn.onfocus=function(){this.setAttribute("accessKey",this.keyparam);}; // **reclaim** access key on focus
				}
				btn.setAttribute("hover",hover?"true":"false");
				btn.onmouseover=function(ev) {
					// optional 'open on hover' handling
					if (this.getAttribute("hover")=="true" && this.sliderPanel.style.display=='none') {
						document.onclick.call(document,ev); // close transients
						onClickNestedSlider(ev); // open this slider
					}
					// mouseover on button aligns floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this,this.sliderPanel);
				}

				// create slider panel
				var panelClass=panelwidth?"floatingPanel":"sliderPanel";
				if (panelID) panelID=panelID.slice(1,-1); // trim off delimiters
				var panel=createTiddlyElement(place,"div",panelID,panelClass,null);
				panel.button = btn; // so the slider panel know which button it belongs to
				btn.sliderPanel=panel; // so the button knows which slider panel it belongs to
				panel.defaultPanelWidth=(panelwidth && panelwidth.length>2)?panelwidth.slice(1,-1):"";
				panel.setAttribute("transient",transient=="*"?"true":"false");
				panel.style.display = show;
				panel.style.width=panel.defaultPanelWidth;
				panel.onmouseover=function(event) // mouseover on panel aligns floater position with button
					{ if (window.adjustSliderPos) window.adjustSliderPos(this.parentNode,this.button,this); }

				// render slider (or defer until shown) 
				w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
				if ((show=="block")||!deferred) {
					// render now if panel is supposed to be shown or NOT deferred rendering
					w.subWikify(blockquote?createTiddlyElement(panel,"blockquote"):panel,this.terminator);
					// align floater position with button
					if (window.adjustSliderPos) window.adjustSliderPos(place,btn,panel);
				}
				else {
					var src = w.source.substr(w.nextMatch);
					var endpos=findMatchingDelimiter(src,"+++","===");
					panel.setAttribute("raw",src.substr(0,endpos));
					panel.setAttribute("blockquote",blockquote?"true":"false");
					panel.setAttribute("rendered","false");
					w.nextMatch += endpos+3;
					if (w.source.substr(w.nextMatch,1)=="\n") w.nextMatch++;
				}
			}
		}
	}
)

function findMatchingDelimiter(src,starttext,endtext) {
	var startpos = 0;
	var endpos = src.indexOf(endtext);
	// check for nested delimiters
	while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {
		// count number of nested 'starts'
		var startcount=0;
		var temp = src.substring(startpos,endpos-1);
		var pos=temp.indexOf(starttext);
		while (pos!=-1)  { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }
		// set up to check for additional 'starts' after adjusting endpos
		startpos=endpos+endtext.length;
		// find endpos for corresponding number of matching 'ends'
		while (startcount && endpos!=-1) {
			endpos = src.indexOf(endtext,endpos+endtext.length);
			startcount--;
		}
	}
	return (endpos==-1)?src.length:endpos;
}
//}}}
//{{{
window.onClickNestedSlider=function(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);
	while (theTarget && theTarget.sliderPanel==undefined) theTarget=theTarget.parentNode;
	if (!theTarget) return false;
	var theSlider = theTarget.sliderPanel;
	var isOpen = theSlider.style.display!="none";

	// if SHIFT-CLICK, dock panel first (see [[MoveablePanelPlugin]])
	if (e.shiftKey && config.macros.moveablePanel) config.macros.moveablePanel.dock(theSlider,e);

	// toggle label
	theTarget.innerHTML=isOpen?theTarget.getAttribute("closedText"):theTarget.getAttribute("openedText");
	// toggle tooltip
	theTarget.setAttribute("title",isOpen?theTarget.getAttribute("closedTip"):theTarget.getAttribute("openedTip"));

	// deferred rendering (if needed)
	if (theSlider.getAttribute("rendered")=="false") {
		var place=theSlider;
		if (theSlider.getAttribute("blockquote")=="true")
			place=createTiddlyElement(place,"blockquote");
		wikify(theSlider.getAttribute("raw"),place);
		theSlider.setAttribute("rendered","true");
	}

	// show/hide the slider
	if(config.options.chkAnimate && (!hasClass(theSlider,'floatingPanel') || config.options.chkFloatingSlidersAnimate))
		anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
	else
		theSlider.style.display = isOpen ? "none" : "block";

	// reset to default width (might have been changed via plugin code)
	theSlider.style.width=theSlider.defaultPanelWidth;

	// align floater panel position with target button
	if (!isOpen && window.adjustSliderPos) window.adjustSliderPos(theSlider.parentNode,theTarget,theSlider);

	// if showing panel, set focus to first 'focus-able' element in panel
	if (theSlider.style.display!="none") {
		var ctrls=theSlider.getElementsByTagName("*");
		for (var c=0; c<ctrls.length; c++) {
			var t=ctrls[c].tagName.toLowerCase();
			if ((t=="input" && ctrls[c].type!="hidden") || t=="textarea" || t=="select")
				{ try{ ctrls[c].focus(); } catch(err){;} break; }
		}
	}
	var cookie=theTarget.sliderCookie;
	if (cookie && cookie.length) {
		config.options[cookie]=!isOpen;
		if (config.options[cookie]!=theTarget.defOpen) window.saveOptionCookie(cookie);
		else window.removeCookie(cookie); // remove cookie if slider is in default display state
	}

	// prevent SHIFT-CLICK from being processed by browser (opens blank window... yuck!)
	// prevent clicks *within* a slider button from being processed by browser
	// but allow plain click to bubble up to page background (to close transients, if any)
	if (e.shiftKey || theTarget!=resolveTarget(e))
		{ e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); }
	Popup.remove(); // close open popup (if any)
	return false;
}
//}}}
//{{{
// click in document background closes transient panels 
document.nestedSliders_savedOnClick=document.onclick;
document.onclick=function(ev) { if (!ev) var ev=window.event; var target=resolveTarget(ev);

	if (document.nestedSliders_savedOnClick)
		var retval=document.nestedSliders_savedOnClick.apply(this,arguments);
	// if click was inside a popup... leave transient panels alone
	var p=target; while (p) if (hasClass(p,"popup")) break; else p=p.parentNode;
	if (p) return retval;
	// if click was inside transient panel (or something contained by a transient panel), leave it alone
	var p=target; while (p) {
		if ((hasClass(p,"floatingPanel")||hasClass(p,"sliderPanel"))&&p.getAttribute("transient")=="true") break;
		p=p.parentNode;
	}
	if (p) return retval;
	// otherwise, find and close all transient panels...
	var all=document.all?document.all:document.getElementsByTagName("DIV");
	for (var i=0; i<all.length; i++) {
		 // if it is not a transient panel, or the click was on the button that opened this panel, don't close it.
		if (all[i].getAttribute("transient")!="true" || all[i].button==target) continue;
		// otherwise, if the panel is currently visible, close it by clicking it's button
		if (all[i].style.display!="none") window.onClickNestedSlider({target:all[i].button})
		if (!hasClass(all[i],"floatingPanel")&&!hasClass(all[i],"sliderPanel")) all[i].style.display="none";
	}
	return retval;
};
//}}}
//{{{
// adjust floating panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel) {
	if (hasClass(panel,"floatingPanel") && !hasClass(panel,"undocked")) {
		// see [[MoveablePanelPlugin]] for use of 'undocked'
		var rightEdge=document.body.offsetWidth-1;
		var panelWidth=panel.offsetWidth;
		var left=0;
		var top=btn.offsetHeight; 
		if (place.style.position=="relative" && findPosX(btn)+panelWidth>rightEdge) {
			left-=findPosX(btn)+panelWidth-rightEdge; // shift panel relative to button
			if (findPosX(btn)+left<0) left=-findPosX(btn); // stay within left edge
		}
		if (place.style.position!="relative") {
			var left=findPosX(btn);
			var top=findPosY(btn)+btn.offsetHeight;
			var p=place; while (p && !hasClass(p,'floatingPanel')) p=p.parentNode;
			if (p) { left-=findPosX(p); top-=findPosY(p); }
			if (left+panelWidth>rightEdge) left=rightEdge-panelWidth;
			if (left<0) left=0;
		}
		panel.style.left=left+"px"; panel.style.top=top+"px";
	}
}
//}}}
//{{{
// TW2.1 and earlier:
// hijack Slider stop handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function()
	{ this.coreStop.apply(this,arguments); this.element.style.overflow = "visible"; }

// TW2.2+
// hijack Morpher stop handler so sliderPanel/floatingPanel overflow is visible after animation has completed
if (version.major+.1*version.minor+.01*version.revision>=2.2) {
	Morpher.prototype.coreStop = Morpher.prototype.stop;
	Morpher.prototype.stop = function() {
		this.coreStop.apply(this,arguments);
		var e=this.element;
		if (hasClass(e,"sliderPanel")||hasClass(e,"floatingPanel")) {
			// adjust panel overflow and position after animation
			e.style.overflow = "visible";
			if (window.adjustSliderPos) window.adjustSliderPos(e.parentNode,e.button,e);
		}
	};
}
//}}}
<!--{{{-->
[[MenuFlex##TemplateHeader]]
<div id='controlBar' class='controlBar' macro='gradient vert [[ColorPalette::PrimaryMid]] [[ColorPalette::PrimaryLight]]'>
<div refresh='content' tiddler='SiteMenu##TOP'></div>
</div>
[[MenuFlex##TemplateBody]]
<div style="position:fixed;z-index:1001;bottom:.1em;right:.1em;cursor:pointer;font-size:9pt;">
<a href="javascript:window.scrollTo(0,0)" title="scroll to top of page">&#x25b2</a>
</div>
<!--}}}-->
/%
Name: Pop
Source: http://menuflex.tiddlyspot.com/#Pop - originally: http://www.TiddlyTools.com/#ShowPopup
Version: 1.2.0
Author: Eric Shulman (modified by Wolfgang)
License: http://www.TiddlyTools.com/#LegalStatements
Description: Display tiddler content in a TW popup upon hover. - ShowPopup adapted to open 'on mouse over', to the right and nestled. Important: Don't ask the original author for support to this variant transclusion, before you haven't verified it by installing instead the latest version of ShowPopup.
Usage: <<tiddler ShowPopup with: label TiddlerName tooltip buttonClass width popupClass>>

!Show
<html><a href="javascript:;" class="$4" title="$3" onclick="var p=Popup.create(this); if(!p)return; p.className+='$6'!='$'+'6'?' $6':''; var d=createTiddlyElement(p,'div'); var s=d.style; s.whiteSpace='normal'; s.width='$5'!='$'+'5'?'$5':'auto'; s.padding='2px'; wikify(store.getTiddlerText('$2',''),d); Popup.show(); event.cancelBubble=true; if(event.stopPropagation)event.stopPropagation(); return(false);">$1</a></html>
!Down
<html><a href="javascript:;" class="$4" title="$3" onmouseover="var p=Popup.create(this); if(!p)return; p.className+='$6'!='$'+'6'?' $6':''; var d=createTiddlyElement(p,'div'); var s=d.style; s.whiteSpace='normal'; s.width='$5'!='$'+'5'?'$5':'auto'; s.padding='2px'; wikify(store.getTiddlerText('$2',''),d); Popup.show(); event.cancelBubble=true; if(event.stopPropagation)event.stopPropagation(); return(false);">$1</a></html>
!Right
<html><a href="javascript:;" class="$4" title="$3" onclick="var p=Popup.create(this); if(!p)return; p.className+='$6'!='$'+'6'?' $6':''; var d=createTiddlyElement(p,'div'); var s=d.style; s.whiteSpace='normal'; s.width='$5'!='$'+'5'?'$5':'auto'; s.padding='2px'; wikify(store.getTiddlerText('$2',''),d); Popup.show('top','right'); event.cancelBubble=true; if(event.stopPropagation)event.stopPropagation(); return(false);">$1</a></html>
!One
<html><a href="javascript:;" class="$4" title="$3" onmouseover="var p=Popup.create(this); if(!p)return; p.className+='$6'!='$'+'6'?' $6':''; var d=createTiddlyElement(p,'div'); var s=d.style; s.whiteSpace='normal'; s.width='$5'!='$'+'5'?'$5':'auto'; s.padding='2px'; wikify(store.getTiddlerText('$2',''),d); Popup.show('top','right'); event.cancelBubble=true; if(event.stopPropagation)event.stopPropagation(); return(false);">$1</a></html>
!Two
<html><a href="javascript:;" class="$4" title="$3" onmouseover="var p=Popup.create(this); if(!p)return; p.className+='$6'!='$'+'6'?' $6':''; var d=createTiddlyElement(p,'div'); var s=d.style; s.whiteSpace='normal'; s.width='$5'!='$'+'5'?'$5':'auto'; s.padding='2px'; wikify(store.getTiddlerText('$2',''),d); Popup.show('top','right'); event.cancelBubble=true; if(event.stopPropagation)event.stopPropagation(); return(false);">$1</a></html>
!Three
<html><a href="javascript:;" class="$4" title="$3" onmouseover="var p=Popup.create(this); if(!p)return; p.className+='$6'!='$'+'6'?' $6':''; var d=createTiddlyElement(p,'div'); var s=d.style; s.whiteSpace='normal'; s.width='$5'!='$'+'5'?'$5':'auto'; s.padding='2px'; wikify(store.getTiddlerText('$2',''),d); Popup.show('top','right'); event.cancelBubble=true; if(event.stopPropagation)event.stopPropagation(); return(false);">$1</a></html>
!Four
<html><a href="javascript:;" class="$4" title="$3" onmouseover="var p=Popup.create(this); if(!p)return; p.className+='$6'!='$'+'6'?' $6':''; var d=createTiddlyElement(p,'div'); var s=d.style; s.whiteSpace='normal'; s.width='$5'!='$'+'5'?'$5':'auto'; s.padding='2px'; wikify(store.getTiddlerText('$2',''),d); Popup.show('top','right'); event.cancelBubble=true; if(event.stopPropagation)event.stopPropagation(); return(false);">$1</a></html>
!Titles
<<tiddler List##out with:{{var tids=store.getTaggedTiddlers("$1");var out='';for(var t=0;t<tids.length; t++)out+="[[%0]]\n;".format([tids[t].title]);out;}}>>
!Pops
<<tiddler Pop##Titles with:$1>>[[$1]]
!end
%/
/%
Name: QuickMenu
Source: http://menuflex.tiddlyspot.com/#QuickMenu - originally: http://www.TiddlyTools.com/#TiddlerTweaker%20FaqViewer%20MultiSelectSampleScript
Author: Eric Shulman (modified by Wolfgang
License: http://www.TiddlyTools.com/#LegalStatements
Type: Html
Description: View tiddlers or select multiple tiddlers to display, edit, delete or calculate their size. -  This is a modified version of MultiSelectSampleScript, combined with parts of TiddlerTweaker and FaqViewer with dependency to InlneJavascriptPlugin eliminated. Important: Don't ask the original author for support to these abandoned variant scripts, before you haven't verified it by installing instead the latest version of these Plugins.

%/{{smallform{<html><form style="display:inline"><!--
--><table style="padding:0;margin:0;border:0;width:100%"><tr valign="top" style="padding:0;margin:0;border:0"><td  style="text-align:center;white-space:nowrap;width:100%;padding:0;margin:0;border:0"><!--
	--><select multiple name=list size="6" style="width:99.9%" 
		title="use click, shift-click and/or ctrl-click to select multiple tiddler titles"
		onclick="fastview.selecttiddlers(this)"
		onchange='var target=this.form.parentNode.nextSibling; removeChildren(target); wikify("<br>\<\<tiddler [["+this.value+"]]\>\>",target); target.style.display=this.value.length?"block":"none"; this.form.done.disabled=!this.value.length;'><!--
	--></select><!--
	--><!--
--></td><td style="white-space:nowrap;padding:0;margin:0;border:0;width:1%"><!--
	--><table border=0 style="width:99%;padding:0;margin:0;border:0;"><tr style='padding:0;border:0;'><td style="padding:1px;border:0;white-space:nowrap"><!--
	--><div style="margin-top:0em;text-align:center"><!--
	--><i>sort by:</i><br><input type=button name=sortby value="title"
		onclick="fastview.init(this.form,this.value)"><br><!--
	--><input type=button name=sortby value="date"
		onclick="fastview.init(this.form,this.value)"><br><!--
	--><input type=button name=sortby value="size"
		onclick="fastview.init(this.form,this.value)"><br><!--
	--><!--
--></td><td style="white-space:nowrap;padding:0;margin:0;border:0;width:1%"><!--
	--><table border=0 style="width:99%;padding:0;margin:0;border:0;"><tr style='padding:0;border:0;'><td style="padding:1px;border:0;white-space:nowrap"><!--
	--><div style="margin-top:0em;text-align:center"><!--
	--><i>choose:</i><br><!--
	--><input type=button name="display" disabled title="display tiddlers" value='open'
		onclick="fastview.displaytiddlers(this)"><br><!--
	--><input type=button name="edit" disabled title="edit tiddlers" value='edit'
		onclick="fastview.editiddlers(this)"><br><!--
	--><input type=button name="del" disabled title="delete tiddlers" value='erase'
		onclick="fastview.deltiddlers(this)"><!--
	--><!--
--></td><td style="white-space:nowrap;padding:0;margin:0;border:0;width:1%"><!--
	--><table border=0 style="width:99%;padding:0;margin:0;border:0;"><tr style='padding:0;border:0;'><td style="padding:1px;border:0;white-space:nowrap"><!--
	--><div style="margin-top:0em;text-align:center"><!--
	--><input type=button name="done" disabled value="done"
		title="hide current tiddler preview" 
		onclick="var target=this.form.parentNode.nextSibling; removeChildren(target); target.style.display='none';this.form.list.selectedIndex=0;"><br><!--
	--><input type=button name="stats" title="tiddler totals" disabled value='bytes'
		onclick="fastview.stats(this)"><br><!--
	--><input type=text size=1 title="choose list height" value="6" onfocus="this.select()" style="width:45%" 
		onchange="this.form.list.size=this.value; this.form.list.multiple=(this.value>1);"><br><!--
	--><input type=button title="set list height" value='&#8629;'
		onclick="fastview.init(this.form,this.form.sortby.value)"><!-
	--></div><!--
--></td></tr></table><!--
--></form></html><<tiddler {{
window.fastview = {
	init: // load tiddler titles into multi-select listbox
	function(form,sortby) { 
		while (form.list.options[0]) form.list.options[0]=null; // empty current list content
		var tids=store.getTiddlers(sortby);
		if (sortby=="size")
			tids.sort(function(a,b) {return a.text.length < b.text.length ? +1 : (a.text.length == b.text.length ? 0 : -1);});
		for (i=0; i<tids.length; i++) {
			var label=tids[i].title; var value=tids[i].title;
			if (sortby=="date") {
				label=tids[tids.length-i-1].modified.formatString("YY.0MM.0DD 0hh:0mm - ")+tids[tids.length-i-1].title;
				value=tids[tids.length-i-1].title;
			}
			if (sortby=="size") label="["+tids[i].text.length+"] "+label;
			form.list.options[form.list.length]=new Option(label,value,false,false);
		}
		form.stats.disabled=form.del.disabled=form.display.disabled=form.edit.disabled=true;
	},

	selecttiddlers: // enable/disable tweaker fields based on number of items selected
	function(here) { 
		// count how many tiddlers are selected
		var list=here.form.list; var c=0; for (i=0;i<list.length;i++) if (list.options[i].selected) c++;
		here.form.del.disabled=(c==0);
		here.form.display.disabled=(c==0);
		here.form.edit.disabled=(c==0);
		here.form.stats.disabled=(c==0);
		var msg=(c==0)?'select tiddlers:':(c+' tiddler'+(c!=1?'s':'')+' selected');
		here.previousSibling.firstChild.innerHTML=msg;
	},
	
	displaytiddlers: 
	function(here) {
		var form=here.form; var list=form.list;	var tids=[];
		for (i=0; i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert("please select at least one tiddler"); return; }
		story.displayTiddlers(story.findContainingTiddler(form),tids)
	},

	editiddlers: 
	function(here) {
		var form=here.form; var list=form.list;	var tids=[];
		for (i=0; i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert("please select at least one tiddler"); return; }
		story.displayTiddlers(story.findContainingTiddler(form),tids,DEFAULT_EDIT_TEMPLATE);
	},

	deltiddlers: 
	function(here) {
		var form=here.form; var list=form.list;	var tids=[];
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert("please select at least one tiddler"); return; }
		if (!confirm("Are you sure you want to delete these tiddlers:\n\n"+tids.join(', '))) return;
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			if (tid.tags.contains("systemConfig"))
				if (!confirm("'"+tid.title+"' is tagged with 'systemConfig'.\n\nRemoving this tiddler may cause unexpected results.  Are you sure?"))
					continue;
			store.removeTiddler(tid.title);
		}
		this.init(form,form.sortby.value);
	},

	stats: 
	function(here) {
		var form=here.form; var list=form.list; var tids=[]; var out=''; var tot=0;
		var target=document.getElementById("FastView_stats");
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert("please select at least one tiddler"); return; }
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			out+='[['+tid.title+']] '+tid.text.length+'\n'; tot+=tid.text.length;
		}
		var avg=tot/tids.length;
		out=tot+' bytes in '+tids.length+' selected tiddlers ('+avg+' bytes/tiddler)\n<<<\n'+out+'<<<';
		removeChildren(target);
		target.innerHTML="<hr><font size=-2><a href='javascript:;' style='text-align:left' onclick='this.parentNode.parentNode.style.display=\"none\"'>close&nbsp;&nbsp;</a></font>";
		wikify(out,target);
		target.style.display="block";
	}
}
// get THIS form...
var here=place.lastChild.firstChild;
// tweaker might be wrappered in a surrounding form (e.g., TidIDE) , so...
while(here && here.nodeName.toLowerCase()!="form") here=here.parentNode; // find containing form
// initialize tweaker controls
fastview.init(here,here.sortby.value);
'';}}>><html><span id="FastView_stats" style="display:none"></span></html>{{hidden wrap{/% this content is replaced by onchange handler above %/}}}}}}
<<runTiddler RelatedTiddlersPlugin>>{{smallform{<<relatedTiddlers MenuFlex hideform "">>}}}
/***
|Name|RelatedTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#RelatedTiddlersPlugin|
|Version|1.1.8|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|InlineJavascriptPlugin, NestedSlidersPlugin, StyleSheetShortcuts|
|Description|starting from a selected tiddler, display a list and/or tree of linked or transcluded tiddlers|
!!!!!Usage
<<<
Starting from a specified tiddler (default=current tiddler), {{{<<relatedTiddlers>>}}} recursively follows the internal links[] data to find all other tiddlers that are related to it by linking (e.g., {{{[[TiddlerName]]}}}) or used as macro parameter (e.g., {{{<<tiddler TiddlerName>>}}}).

The results can be displayed as a simple flat list of related tiddler titles, or as an indented tree diagram that shows the specific connections between the related tiddlers, and can be helpful for identifying clusters of interdependent tiddlers or simply generating an on-the-fly site map for quick discovery and navigation through complex or unfamiliar document content. 
//{{{
<<relatedTiddlers TiddlerName hideform "exclude list">>
//}}}
*''TiddlerName'' (optional)<br>specifies the starting tiddler (and hides the 'select a tiddler' form controls).  Use keyword ''here'' to specify the current tiddler.
*''hideform'' (optional)<br>when present, suppress display of 'select tiddler' droplist and buttons.
*''"exclude list"'' (optional)<br>space-separated list of tiddlers whose links should not be followed.  Use quotes or double-square brackets to ensure list is processed as a single parameter.
The plugin also defines two functions that can be called externally (from other plugins or scripts) to generate and retrieve either a list of links or a formatted "tree view":
>{{{var list=config.macros.relatedTiddlers.getList(start,exclude,callback);}}}
>{{{var tree=config.macros.relatedTiddlers.getTree(start,exclude,callback);}}}
where ''start'' and 'exclude'' are the same as the macro parameters described above, plus an optional reference to a callback function that allows you to generate an alternative list/tree, based on application-specific data (such tiddler references contained in tags or custom fields), rather than using the default "links" list, like this:
>{{block{
{{{
window.myCallback=function(tiddler) {
	var list=[];
	// ... fill the list based on the specified tiddler ...
	return list;
}
}}}
}}}
The function takes a tiddler object as input, and returns a list of tiddler titles that are //directly// linked (or otherwise related) to that specific tiddler.  {{{getList()}}} and {{{getTree()}}} then use this information to find all the //indirect// connections between tiddlers to produce the list or tree output.
<<<
!!!!!Configuration
<<<
<<option chkRelatedTiddlersShowList>> show list display
<<option chkRelatedTiddlersShowTree>> show tree display
<<option chkRelatedTiddlersZoom>> enable autosizing of tree display //(aka, "zoom" or "shrink-and-grow")//
don't follow links contained in these tiddlers: <<option txtRelatedTiddlersExclude>>
<<<
!!!!!Examples
<<<
{{smallform{<<relatedTiddlers>>}}}

Using getList()/getTree() public API from other scripts/plugins:
><script show>
	var start="About";
	var exclude=config.options.txtRelatedTiddlersExclude.readBracketedList();
	var callback=null;
	var list=config.macros.relatedTiddlers.getList(start,exclude,callback);
	var tree=config.macros.relatedTiddlers.getTree(start,exclude,callback);
	return "There are "+list.length+" tiddlers related to [["+start+"]]...\n"+tree;
</script>
<<<
!!!!!Revisions
<<<
2009.09.29 [1.1.8] in findRelatedTiddlers(), fixed recursion when using non-null callback
2007.11.11 [1.1.7] in findRelatedTiddlers(), refactored into separate getlinks(),<br>and added param for optional callback function that can be used to return an alternative set of links.<br>Also added API functions, getTree() and getList() for use by other scripts
2007.07.13 [1.1.6] performance optimizations, more code cleanup
2007.07.10 [1.1.5] extensive code cleanup
2007.07.08 [1.1.0] converted from inline script
2007.06.29 [1.0.0] started (as inline script)
<<<
!!!!!Code
***/
//{{{
version.extensions.RelatedTiddlersPlugin={major: 1, minor: 1, revision: 8, date: new Date(2009,9,29)};

// initialize 'autozoom' and 'exclude' tree options (defaults are not to zoom, and to follow all links)
if (config.options.chkRelatedTiddlersZoom===undefined)
	config.options.chkRelatedTiddlersZoom=false;
if (config.options.txtRelatedTiddlersExclude===undefined)
	config.options.txtRelatedTiddlersExclude='GettingStarted DefaultTiddlers';
if (config.options.chkRelatedTiddlersShowList===undefined)
	config.options.chkRelatedTiddlersShowList=true;
if (config.options.chkRelatedTiddlersShowTree===undefined)
	config.options.chkRelatedTiddlersShowTree=false;

config.macros.relatedTiddlers={
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {

		// create form with unique DOM element ID (using current timestamp)... permits multiple form instances
		var now=new Date().getTime();
		var span=createTiddlyElement(place,"span");
		span.innerHTML=this.form.format(["relatedTiddlers_form"+now]);
		var form=span.getElementsByTagName("form")[0]; // find form that we just created
		var target=createTiddlyElement(span,"div"); // create target block in which generated output will be placed

		// initialize droplist contents (all tiddlers except hidden ones)
		var tids=store.getTiddlers('title','excludeLists');
		for (i=0; i<tids.length; i++) form.list.options[form.list.options.length]=new Option(tids[i].title,tids[i].title,false,false);

		// initialize exclude field (space-separated list)
		if (config.options.txtRelatedTiddlersExclude) form.exclude.value=config.options.txtRelatedTiddlersExclude;

		// set starting tiddler, form display, and/or exclude list from macro params (if present) and then show the results!
		var root="";
		var hide=false;
		var exclude=config.options.txtRelatedTiddlersExclude;
		if (params[0]) root=params[0]; // TiddlerName
		if (params[1]) hide=(params[1].toLowerCase()=="hideform"); // keyword: "hideform" or "showform" (default)
		if (params[2]) exclude=params[2]; // list of tiddlers whose links should not be followed
		if (root=="here") { var tid=story.findContainingTiddler(place); if (tid) root=tid.getAttribute("tiddler"); }
		if (store.tiddlerExists(root)) {
			// NOTE:  don't hide form when running IE, where putting initial focus on hidden form creates an error
			if (!config.browser.isIE) form.style.display=hide?"none":"block"; // show/hide the controls
			form.list.value=root; // set the root
			form.exclude.value=exclude; // set 'exclude' field
			form.get.click(); // DISPLAY INITIAL RESULTS (if tiddler is selected)
		}
	},
	form:
		"<form id='%0' action='javascript:;' style='display:inline;margin:0;padding:0;' onsubmit='return false'><!-- \
		--><span class='fine' style='float:left;vertical-align:bottom;width:39.5%;'><i>find all tiddlers related to:</i></span><!-- \
		--><span class='fine' style='float:left;vertical-align:bottom;'><i>exclude links contained in:</i></span><!-- \
		--><div style='clear:both'><!-- \
		--><select name=list size=1 style='width:39.5%' onchange='this.form.get.click()'><!-- \
		--><option value=''>select a tiddler...</option><!-- \
		--></select><!-- \
		--><input type='text' option='txtRelatedTiddlersExclude' name='exclude' value='' style='width:40%' \
			title='enter the names of tiddlers whose links should NOT be followed' \
			onkeyup='if (event.keyCode==13) { this.blur(); this.form.get.click(); }'  \
			onchange='config.options[this.getAttribute(\"option\")]=this.value;saveOptionCookie(this.getAttribute(\"option\"));'><!-- \
		--><input type=button name=get value='get related' style='width:10%'  \
			onclick='config.macros.relatedTiddlers.show(this.form,this.form.nextSibling);'><!-- \
		--><input type=button name=done value='done' disabled style='width:10%'  \
			onclick='this.form.list.selectedIndex=0; this.form.get.click();'><!-- \
		--></div><!-- \
		--></form>",
	styles:
		".relatedTiddlers blockquote \
			{ border-left:1px dotted #999; margin:0 25px; padding-left:.5em; font-size:%0%; line-height:115%; } \
		.relatedTiddlers .borderleft \
			{ margin:0; padding:0; margin-left:1em; border-left:1px dotted #999; padding-left:.5em; } \
		.relatedTiddlers .fourcolumns \
			{ display:block; -moz-column-count:4; -moz-column-gap:1em; -moz-column-width:25%} \
		.relatedTiddlers a \
			{ font-weight:normal; } \
		.relatedTiddlers .bold, .relatedTiddlers .bold a \
			{ font-weight:bold; } \
		.relatedTiddlers .floatright \
			{ float:right; } \
		.relatedTiddlers .clear \
			{ clear:both; }	",
	toggleform:
		"{{floatright{<html><a href='javascript:;' class='button' title='show/hide tiddler selection droplist and buttons' \
		onclick='var here=story.findContainingTiddler(this); var tid=here?here.getAttribute(\"tiddler\"):\"\"; \
			var f=document.getElementById(\"%0\"); var hide=(f.style.display!=\"none\"); \
			f.style.display=hide?\"none\":\"inline\"; this.innerHTML=hide?\"show form\":\"hide form\"; return false;'>%1</a></html>}}}",
	treecheck:
		"{{floatright{@@display:none;<<option chkRelatedTiddlersShowTree>>@@<html><a href='javascript:;' class='button' onclick='this.parentNode.previousSibling.firstChild.click(); return false;'>tree view</a></html>}}}",
	tree:
		"{{clear{\n----\n}}} \
		{{floatright small{<<option chkRelatedTiddlersZoom>>autosize tree display}}} \
		{{fine{\n''tiddlers linked from or included by'' [[%0]]\n}}}%1",
	listcheck:
		"{{floatright{@@display:none;<<option chkRelatedTiddlersShowList>>@@<html><a href='javascript:;' class='button' onclick='this.parentNode.previousSibling.firstChild.click(); return false;'>list view</a></html>}}}",
	list:
		"{{clear{\n----\n}}} \
		{{fine{\n''tiddlers containing links to'' [[%0]]\n}}} \
		{{small fourcolumns borderleft{\n%1}}} \
		{{fine{\n''tiddlers linked from or included by'' [[%0]]\n}}} \
		{{borderleft{\n \
			{{fine{\n''bold''=//direct links//, plain=//indirect links//, ''...''=//links not followed//}}} \
			{{small fourcolumns{\n%2}}} \
		}}}",
	skipped:
		"<html><span title='links from %0 have NOT been followed'>...</span></html>",
	mouseover: function(ev) {
		this.saveSize=this.style.fontSize;
		this.style.fontSize='100%';
		this.style.borderLeftStyle='solid';
	},
	mouseout: function(ev) {
		this.style.fontSize=this.saveSize;
		this.style.borderLeftStyle='dotted';
	},
	findRelatedTiddlers: function(tid,tids,treeout,level,exclude,callback) { 
		// recursively build list of related tids (links and includes FROM the root tiddler) and generate treeview output
		var t=store.getTiddler(tid);
		if (!t || tids.contains(tid)) return tids; // tiddler already in results (or missing tiddler)... just return current results
		tids.push(t.title); // add tiddler to results
		var skip=exclude && exclude.contains(tid);
		treeout.text+=level+"[["+tid+"]]"+(skip?this.skipped.format([tid]):"")+"\n";
		if (skip) return tids; // branch is pruned... don't follow links
		var links=callback?callback(t):this.getLinks(t);
		for (var i=0; i<links.length; i++) tids=this.findRelatedTiddlers(links[i],tids,treeout,level+">",exclude,callback);
		return tids;
	},
	getLinks: function(tiddler) {
		if (!tiddler.linksUpdated) tiddler.changed();
		return tiddler.links;
	},
	getTree: function(start,exclude,callback) {
		// get related tiddlers and generate blockquote-indented tree output
		var list=[]; var tree={text:""}; var level="";
		list=this.findRelatedTiddlers(start,list,tree,level,exclude,callback);
		return tree.text;
	},
	getList: function(start,exclude,callback) {
		// get related tiddlers and generate blockquote-indented tree output
		var list=[]; var tree={text:""}; var level="";
		list=this.findRelatedTiddlers(start,list,tree,level,exclude,callback);
		return list;
	},
	show: function(form,target) {
		removeChildren(target); form.done.disabled=true; // clear any existing output and disable 'done' button
		var start=form.list.value; if (!start.length) return; // get selected starting tiddler.  If blank value (heading), do nothing

		// get related tiddlers and generate blockquote-indented tree output
		var rels=[]; var treeview={text:""}; var level="";
		var exclude=config.options.txtRelatedTiddlersExclude.readBracketedList();
		var rels=this.findRelatedTiddlers(start,rels,treeview,level,exclude);
		rels.shift(); // remove self from list
		rels.sort(); // sort titles alphabetically

		// generate list output
		var tid=store.getTiddler(start);
		var relsview=""; for (t=0; t<rels.length; t++) {
			relsview+=tid.links.contains(rels[t])?("{{bold{[["+rels[t]+"]]}}}"):("[["+rels[t]+"]]");
			if (exclude && exclude.contains(rels[t])) relsview+=this.skipped.format([rels[t]]);
			relsview+="\n";
		}
	
		// get references TO the root tiddler, add to related tiddlers and generate refsview output
		var refs=[]; var referers=store.getReferringTiddlers(start);
		for(var r=0; r<referers.length; r++)
			if(referers[r].title!=start && !referers[r].tags.contains("excludeLists")) refs.push(referers[r].title);
		var refcount=refs.length; var relcount=rels.length; // remember individual counts
		for (var r=0; r<refs.length; r++) rels.pushUnique(refs[r]); // combine lists without duplicates
		var total=rels.length; // get combined total
		var refsview="[["+refs.sort().join("]]\n[[")+"]]\n";
	
		// set custom blockquote styles for treeview
		setStylesheet(this.styles.format([config.options.chkRelatedTiddlersZoom?80:100]),'relatedTiddlers_styles');

		// assemble and render output
		var summary=(total?(total+" tiddler"+(total==1?" is":"s are")):"There are no tiddlers")+" related to: [["+start+"]]";
		var list=this.list.format([start,refsview.length?refsview:"//none//",relsview.length?relsview:"//none//"]);
		var tree=this.tree.format([start,treeview.text]);
		var toggle=this.toggleform.format([form.id,(form.style.display=='none'?'show form':'hide form')]);
		var sep="{{floatright{ | }}}";
		var showList=total && config.options.chkRelatedTiddlersShowList;
		var showTree=relcount && config.options.chkRelatedTiddlersShowTree;
		var out="{{relatedTiddlers{"+toggle+(relcount?sep+this.treecheck:"")+(total?sep+this.listcheck:"")+summary+(showList?list:"")+(showTree?tree:"")+"}}}";
		wikify(out,target);
		form.done.disabled=false; // enable 'done' button

		// add mouseover/mouseout handling to blockquotes (for autosizing)
		var blocks=target.getElementsByTagName("blockquote");
		for (var b=0; b<blocks.length; b++)
			{ blocks[b].onmouseover=this.mouseover; blocks[b].onmouseout=this.mouseout; }

		// add side-effect to checkboxes so that display is refreshed when a checkbox state is changed
		var checks=target.getElementsByTagName("input");
		for (var c=0; c<checks.length; c++) {
			if (checks[c].type.toLowerCase()!="checkbox") continue;
			checks[c].coreClick=checks[c].onclick; // save standard click handler
			checks[c].formID=form.id; // link checkbox with correponding form
			checks[c].onclick=function() { this.coreClick.apply(this,arguments); document.getElementById(this.formID).get.click(); }
		}
	}
}
//}}}
/%
%/<html><a href="javascript:function resize(w){try{var areas=w.document.getElementsByTagName('textarea');for(i=0;A=areas[i];i++){A.cols*=0.7;A.rows*=0.7;if(document.all&&!w.opera){A.runtimeStyle.height=DS(A.currentStyle.height);A.runtimeStyle.width=DS(A.currentStyle.width);}}for(var i=0;F=w.frames[i];i++){resize(F);}}catch(e){}}function DS(s){var c=parseInt(s);if(!isNaN(c)){var u=s.replace(c,'');if(u.indexOf('%')>=0)return s;return ((c*0.7)+u);}}resize(window);"<span>&nbsp;-&nbsp;</span></a></html>/%

%/<html><a href="javascript:function resize(w){try{var areas=w.document.getElementsByTagName('textarea');for(i=0;A=areas[i];i++){A.cols*=1.5;A.rows*=1.5;if(document.all&&!w.opera){A.runtimeStyle.height=DS(A.currentStyle.height);A.runtimeStyle.width=DS(A.currentStyle.width);}}for(var i=0;F=w.frames[i];i++){resize(F);}}catch(e){}}function DS(s){var c=parseInt(s);if(!isNaN(c)){var u=s.replace(c,'');if(u.indexOf('%')>=0)return s;return ((c*1.5)+u);}}resize(window);"<span>&nbsp;+&nbsp;</span></a></html>
/***
|Name|RunTiddlerPlugin|
|Source|http://www.TiddlyTools.com/#RunTiddlerPlugin|
|Version|1.2.1|
|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||
|Description|command to invoke tiddler content as if tagged with systemConfig (i.e., a plugin)|
!!!!!Usage/Example
<<<
Toolbar command:
>{{{<<toolbar runTiddler>>}}} (in tiddler content)
>{{{<span class='toolbar' macro='toolbar runTiddler'></span>}}} (in ViewTemplate definition)
><<toolbar runTiddler>>
>when clicked, invokes the current tiddler as javascript code
Macro function:
>{{{<<runTiddler TiddlerName>>}}} or {{{<<runTiddler TiddlerName label tip>>}}}
>if only a TiddlerName is provided, the specified tiddler is automatically invoked as javascript code as soon as the macro is rendered.  If //optional// ''label'' and ''tip'' parameters are present, a command link is created that, when clicked, invokes the specified tiddler as javascript code.
<<<
!!!!!Revisions
<<<
2008.09.01 [1.2.1] fixed return value from command handler to prevent IE from attempt to leave the page
2008.08.26 [1.2.0] added optional label and tooltip params to macro (creates 'onclick' button to invoke specified tiddler)
2008.08.26 [1.1.0] added {{{<<runTiddler TiddlerName>>}}} macro to invoke specified tiddler
2007.09.27 [1.0.0] toolbar command based on run button functionality from TidIDEPlugin
<<<
!!!!!Code
***/
//{{{
version.extensions.RunTiddlerPlugin= {major: 1, minor: 2, revision: 1, date: new Date(2008,9,1)};
//}}}
//{{{
config.commands.runTiddler = {
	text: 'run',
	tooltip: 'evaluate tiddler content as systemConfig (plugin) javascript code',
	warning: "Warning!!  Processing '%0' as a systemConfig (plugin) tiddler may produce unexpected results! Are you sure you want to proceed?",
	completed: "%0: Processing completed",
	handler: function(event,src,title) {
		var here=story.findContainingTiddler(src); if (!here) return;
		return this.invoke(here.getAttribute("tiddler"),true,false);
	},
	invoke: function(tid,ask,quiet) {
		if (ask && !confirm(this.warning.format([tid]))) return false;
		var text=store.getTiddlerText(tid); if (!text) return false;
		try { window.eval(text); if (!quiet) displayMessage(config.commands.runTiddler.completed.format([tid])); }
		catch(ex) { displayMessage(config.messages.pluginError.format([exceptionText(ex)])); }
		return false;
	}
};
//}}}
//{{{
config.macros.runTiddler = {
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var tid=params[0];
		var label=params[1];
		var tip=params[2]||config.commands.runTiddler.tooltip;
		if (!label) config.commands.runTiddler.invoke(tid,false,true);
		else createTiddlyButton(place,label,tip,function(){
			return config.commands.runTiddler.invoke(this.getAttribute("tid"),true,false);
		},"button").setAttribute("tid",tid);
	}
}
//}}}
<html><a href="javascript:javascript:void(eval(decodeURIComponent(%22(function(){try{%2520%2520%2520%2520%2520%2520%2520%2520%2520var%2520here%253Dstory.findContainingTiddler(place)%253B%2520if%2520(!here)%2520return%2520false%253B%2520%2520%2520%2520%2520%2520%2520%2520%2520var%2520e%253Dstory.getTiddlerField(here.getAttribute(%2522tiddler%2522)%252C%2522text%2522)%253B%2520%2520%2520%2520%2520%2520%2520%2520%2520if%2520(!e%257C%257Ce.getAttribute(%2522edit%2522)!%253D%2522text%2522)%2520return%2520false%253B%2520%2520%2520%2520%2520%2520%2520%2520%2520e.select()%253B%2520e.focus()%253B%2520%2520%2520%2520%2520%2520%2520%2520%2520return%2520false%253B%2520}catch(e){alert(e.description||e.toString())}})()%22)))">pick</a></html>
/% http://www.tiddlytools.com/ - abandoned %/<html><a href="javascript:void(eval(decodeURIComponent(%22(function(){try{var%2520tids%253D%255B%255D%253Bstory.forEachTiddler(function(title%252Celement)%257Btids.push(String.encodeTiddlyLink(title))%257D)%253Btids%253Dtids.join(%2522%2520%2522)%253Bif%2520(!confirm(%2522DefaultTiddler%2520will%2520be%2520set%2520to%253A%255Cn%255Cn%25250%255Cn%255CnIs%2520it%2520OK%2520to%2520proceed%253F%2522.format(%255Btids%255D)))%2520return%253Bvar%2520t%253Dstore.getTiddler(%2522DefaultTiddler%2522)%253Bstore.saveTiddler(t.title%252Ct.title%252Ctids%252Cconfig.options.txtUserName%252Cnew%2520Date()%252Ct.tags)%253Bstory.refreshTiddler(%2522DefaultTiddler%2522%252Cnull%252Ctrue)%253BdisplayMessage(%2522DefaultTiddler%2520has%2520been%2520updated%2522)%253B}catch(e){alert(e.description||e.toString())}})()%22)))"<span>set default</span></a></html>
/%
Name: ShowRecentChanges
Source: http://menuflex.tiddlyspot.com/#ShowRecentChanges - abandoned: http://www.TiddlyTools.com/#ShowRecentChanges
Version: 1.1.0
Author: Eric Shulman
License: http://www.TiddlyTools.com/#LegalStatements
CoreVersion: 2.1
Requires: InlineJavascriptPlugin
Description: Select a tiddler from a droplist of recently changed tiddlers. displays tiddler info with source excerpt. -  Important: Don't ask the original author for support to this abandoned script, before having installed the latest version of RecentChangesPlugin first.

usage: <<tiddler ShowRecentChanges>> or <<tiddler ShowRecentChanges with: #ofdays>>

"# of days" is optional, and specifies the period of time (in DAYS) to show in the list
(default is to show the past 10 days)

%/{{smallform{<script>
	var tiddlers=store.getTiddlers('modified','excludeLists').reverse();
	var out='<html><form>';
	out+='<select size=1 name="list" style="width:69.5%" ';
	out+='	onchange="this.form.goto.disabled=this.form.edit.disabled=this.form.preview.disabled=!this.value.length; var target=this.parentNode.parentNode.nextSibling; removeChildren(target); if (!this.value.length) { target.style.display=\'none\'; this.form.preview.value=\'preview\'; } else if (target.style.display==\'block\') { wikify(\'<\'+\'<tiddler [[\'+this.value+\']]>\'+\'>\',target); target.style.display=\'block\'; this.form.preview.value=\'done\'; }">';
	var days=10; if ("$"+"1"!="$1") days="$1";
	var timelimit=(new Date()).getTime()-86400000*days;
	for (var count=0; count<tiddlers.length && tiddlers[count].modified>timelimit; count++);
	out+='<option value="">';
	out+=count+' tiddlers have changed since ';
	out+=new Date(timelimit).formatString("DDD, MMM DDth YYYY 0hh:0mm");
	out+=' ('+days+' days)';
	out+='</option>';
	for (var i=0; i<count; i++) { var t=tiddlers[i];
		out+='<option value="'+t.title+'">';
		out+=t.modified.formatString('YYYY.0MM.0DD 0hh:0mm')+' - '+t.title;
		out+='</option>\n';
	}
	out+='</select>';
	out+='<input type="button" name="goto" value="goto" disabled title="view selected tiddler" style="width:10%" ';
	out+='	onclick="var target=this.parentNode.parentNode.nextSibling; removeChildren(target); target.style.display=\'none\'; this.form.preview.value=\'preview\'; story.displayTiddler(story.findContainingTiddler(this),this.form.list.value);">';
	out+='<input type="button" name="edit" value="edit" disabled title="edit selected tiddler" style="width:10%" ';
	out+='	onclick="var target=this.parentNode.parentNode.nextSibling; removeChildren(target); target.style.display=\'none\'; this.form.preview.value=\'preview\'; story.displayTiddler(story.findContainingTiddler(this),this.form.list.value,DEFAULT_EDIT_TEMPLATE);">';
	out+='<input type="button" name="preview" value="preview" disabled title="show/hide tiddler preview" style="width:10%" ';
	out+='	onclick="var target=this.parentNode.parentNode.nextSibling; if (this.value==\'preview\') { removeChildren(target); wikify(\'<\'+\'<tiddler [[\'+this.form.list.value+\']]>\'+\'>\',target); target.style.display=this.form.list.value.length?\'block\':\'none\'; this.value=\'done\'; } else { removeChildren(target); target.style.display=\'none\'; this.value=\'preview\'; }">';
	out+='</form></html>';
	return out;
</script>{{viewer hidden wrap{}}}<script>
	place.lastChild.style.height='15em';
	place.lastChild.style.overflow='auto';
</script>}}}
/%
Name: ShowSlices
Source: http://menuflex.tiddlyspot.com/#ShowSlices - originally: http://www.TiddlyTools.com/#ShowSlices
Version: 0.5.0
Author: Eric Shulman (modified by Wolfgang)
License: http://www.TiddlyTools.com/#LegalStatements
CoreVersion: 2.1.3
Type: script
Requires: InlineJavascriptPlugin, NestedSlidersPlugin
Description: View values for all tiddler slices. - Important: Don't ask the original author for support to this abandoned script, before having installed the latest version of ShowSlices first.
%/<<tiddler HideTiddlerTags>>{{smallform small{<html><form><!--
	--><select name="tidlist" size=1 style="width:70%" 
		onchange="this.form.done.disabled=(this.value.length==0); var target=this.form.parentNode.nextSibling.nextSibling.nextSibling; removeChildren(target); wikify(this.value,target);">
		<option value="">select a tiddler...</option>
	</select><input type="text" name="re" style="width:23%" title="tiddler slice pattern (store.slicesRE)"
		onblur="store.slicesRE=new RegExp(this.value,'gm');"><input type="button" name="done" value="done" style="width:6%" disabled 
		onclick="var target=this.form.parentNode.nextSibling.nextSibling.nextSibling; removeChildren(target);this.disabled=true"></form></html>{{floatright small wrap{+++[view grid][hide grid]...
		{{fine{<<grid>>}}}===<<tiddler {{
		place.lastChild.id="ShowSlices_gridpanel";
	'';}}>>}}}<script>

	// redefine default value from 2.1.3 core to eliminate overly broad 'non-table' format for slices
	/********** SKIP THIS FOR NOW... USE CORE SLICE RE DEFINITION
	if (!window.showSlices_init) {
		// CORE: store.slicesRE = /(?:[\'\/]*~?(\w+)[\'\/]*\:[\'\/]*\s*(.*?)\s*$)|(?:\|[\'\/]*~?(\w+)\:?[\'\/]*\|\s*(.*?)\s*\|)/gm
		// TABLE-FORMAT ONLY: store.slicesRE = /(?:^\|[\'\/]*~?(\w+)\:?[\'\/]*\|\s*(.*?)\s*\|$)/gm
		window.showSlices_init=true;
	}
	*********/

	// initialize form field
	var form=place.lastChild.previousSibling.firstChild;
	var re=store.slicesRE.toString();
	re=re.substring(1,re.length-3); // strip delimiters/flags from re
	form.re.value=re;

	// define slice filter (only report indicated slices)
	var filter={ Name:1, Source:1, Version:1, Author:1, License:1,
		CoreVersion:1, Type:1, Requires:1, Overrides:1, Description:1 };
	var filter=null; // show all defined slices - remove this line to use pre-defined filter

	var allslices=[]; // will be filled with names of all slices from all tiddlers
	var slicefmt='\'\'"""%0"""\'\'\n&nbsp;&nbsp;%1\n'; // indented format
	var slicefmt='| %0|%1|\n'; // table format - remove this line to use indented format
	var slicefmt='\'\'%0=\'\'%1\n'; // var=val format - remove this line to use indented format
	var tiddlers=store.getTiddlers("modified");
	for (i=tiddlers.length-1; i>=0; i--) {
		var tid=tiddlers[i];
		var slices=store.calcAllSlices(tid.title);
		var sliceout=[]; var slicecount=0;
		for (var s in filter?filter:slices) {
			sliceout.push(slicefmt.format([s,slices[s]?slices[s]:'-']));
			if (slices[s] || !filter) slicecount++;
			if (slices[s]) allslices.pushUnique(s);
		}
		if (slicecount) form.tidlist.options[form.tidlist.length]=new Option(tid.title+"("+slicecount+")","<<<\n"+sliceout.join('')+"<<<\n",false,false);
	}
	var out="{{small wrap{There are %0 slice names used in this document.  +++[view list...][hide list...]>...{{small{\n%1\n}}}===\n"
	return out.format([allslices.length,"#"+allslices.join('\n#')]);
</script>@@display:block;/%replace with dynamic content%/@@}}}<<tiddler {{
	place.insertBefore(document.getElementById("ShowSlices_gridpanel"),null);
'';}}>>
/%
Name: ShowUnsavedChanges
Source: http://menuflex.tiddlyspot.com/#ShowUnsavedChanges - abandoned: http://www.TiddlyTools.com/#ShowUnsavedChanges
Version: 1.0.1
Author: Eric Shulman
License: http://www.TiddlyTools.com/#LegalStatements
Requires: NestedSlidersPlugin, InlineJavascriptPlugin
Optional: LoadTiddlersPlugin, NewDocumentPlugin
Overrides: TiddlyWiki.prototype.setDirty
Description: Droplist of tiddlers that have changed since the last time the document was saved with GOTO and REVERT buttons. - Important: Don't ask the original author for support to this abandoned script, before having installed the latest version of UnsavedChangesPlugin first.
%/{{smallform{<script>
// hijack store.setDirty() function (force display update after saving the file)
// note: do NOT hijack the prototype function.  This hijack should only be applied to
// the main 'store' instance only (i.e., don't refresh when loading temporary store
// as part of ImportTiddlers processing
if (store.showUnsavedHijack_setDirty==undefined) {
	store.showUnsavedHijack_setDirty=store.setDirty;
	store.setDirty = function(flag) {
		var refresh=this.isDirty() && !flag; // 'dirty' to 'clean', force a refresh...
		this.showUnsavedHijack_setDirty.apply(this,arguments); // but change the flag first.
		if (refresh) {
			config.options.lastSaved=new Date(); // remember save time
			refreshDisplay(); // finally, update the display
		}
	}
}
// get the tiddlers sorted by date - INCLUDE ALL TIDDLERS (even hidden ones!!)
var tiddlers=store.getTiddlers("modified");
// track date/time of last file save (initialize to last tiddler change)
if (config.options.lastSaved==undefined)
	config.options.lastSaved=tiddlers[tiddlers.length-1].modified;
// If no tiddlers have changed, DO NOTHING.
if (tiddlers[tiddlers.length-1].modified<=config.options.lastSaved) return;
// find the unsaved tiddlers
var count=0; var list="";
var item='<option value="%0">%1 - %0</option>';
for (var i=tiddlers.length-1; i>=0; i--) {
	if (tiddlers[i].modified<=config.options.lastSaved) break;
	list+=item.format([tiddlers[i].title,
		tiddlers[i].modified.formatString('YYYY.0MM.0DD 0hh:0mm:0ss')]);
	count++;
}
// display the dropdown list wrapped in a slider
var out='';
var label='There %0 %1 unsaved tiddler%2...'.format([count==1?'is':'are',count,count==1?'':'s'])
out+='+++(unsaved)['+label+'|show/hide a list of changed tiddlers]...';
out+='<html><form style="display:inline">';
out+='<select size="1" name="list" title="select a tiddler to view" ';
out+='	onchange="var v=this.value; if (!v.length) return;';
out+='		story.displayTiddler(null,v);';
out+='		window.scrollTo(0,ensureVisible(document.getElementById(story.idPrefix+v)));">';
out+=list;
out+='</select>';
out+='<input type="button" value="goto"';
out+='	onclick="var v=this.form.list.value; if (!v.length) return; story.displayTiddler(null,v);';
out+='	var t=document.getElementById(story.idPrefix+v); if (t) window.scrollTo(0,ensureVisible(t));">';
out+='<input type="button" value="revert" title="import the last saved version of this tiddler"';
out+='	onclick="var v=this.form.list.value; if (!v.length) return;';
out+='	var t=\'<\'+\'<loadTiddlers [[tiddler:\'+v+\']] \'+document.location.href+\' confirm force noreport>\'+\'>\';';
out+='	var e=document.getElementById(\'executeRevert\'); if (e) e.parentNode.removeChild(e);';
out+='	e=document.createElement(\'span\'); e.id=\'executeRevert\'; wikify(t,e);">';
out+='</form></html>';
if (!readOnly) {
	out+='\n{{small{';
	out+='<<saveChanges>>';
	if (config.macros.newDocument) out+=' | <<newDocument ask all>>'; // NewDocumentPlugin
	if (config.macros.upload) out+=' | <<upload>>'; // UploadPlugin
	if (config.macros.emptyTrash && store.getTaggedTiddlers("Trash").length) out+=' | <<emptyTrash>>'; // TrashPlugin
	out+='}}}';
}
out+='===';
return out;
</script>}}}
<<closeAll>>
<<permaview>>
<<refreshDisplay>>
<<newTiddler>>
<<newJournal "YYYY MMM DD" "journal">>
<<saveChanges>>
{{x{<<showWhen version.extensions.UploadPlugin == undefined>>}}}{{x{<<else>><<tiddler TspotSidebar>>}}}
<<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
<<tabs txtMainTab "" "" "" "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "More" "Shadowed tiddlers" TabMoreShadowed "Tags" "All tags" TabTags>>
/%
!TOP
{{floatright{<<tiddler SiteMenu##RIGHT>>}}}
{{floatleft{<<tiddler SiteMenu##LEFT>>}}}
{{center{<<tiddler SiteMenu##CENTER>>}}}
!Top2
{{floatright{<<tiddler SiteMenu##Right2>>}}}
{{floatleft{<<tiddler SiteMenu##Left2>>}}}
{{center{<<tiddler SiteMenu##Center2>>}}}
!Top3
{{floatright{<<tiddler SiteMenu##Right2>>}}}
{{floatleft{<<tiddler SiteMenu##Left3>>}}}
{{center{<<tiddler SiteMenu##Center3>>}}}
!================================================end TOP

!LEFT
<<tiddler Switch##Sidemenu>>
//<<tiddler Menu##A with:Start HowTo "start again">>//
<<tiddler Menu##B with: Tabs HowTo "show tab buttons">>
<<tiddler Menu##C with: Slidetab Menu "show tab slider">>
<<tiddler Menu##D with: Slidetabtwin MenuFlex "show tab slider two">>
<<tiddler Menu##E with: Slider StyleSheet "show sliders">>
//<<tiddler Pop##Down with: extra SiteMenu##More ok>>//
<<tiddler Switch##Extra>>
!Left2
<<tiddler Switch##Sidemenu>>
<<tiddler Menu##F with: Crumbs BreadcrumbsPlugin "show breadcrumbs">>
<<tiddler Menu##G with: Cloud TagCloudPlugin "show tag cloud">>
<<tiddler Menu##H with: Tagtree TagTreePlugin "show tag structure">>
<<tiddler Menu##I with: Treeview TreeviewPluginPlugin2 "show tree structure">>
<<tiddler Menu##J with: Accordion AccordionMenuPlugin "show accordion menu">>
//<<tiddler Pop##Down with: extra SiteMenu##More ok>>//
<<tiddler Switch##Extra>>
!Left3
<<tiddler Switch##Sidemenu>>
<<tiddler SiteMenu##extra with: "$1" Nested "$3" NestedMenu "show nested menu">>
<<tiddler SiteMenu##extra with: "$1" Image "$3" ImageMenu "show image menu">>
<<tiddler SiteMenu##extra with: "$1" Toc  "$3" TocMenu "show tables of content">>
<<tiddler SiteMenu##extra with: "$1" Linked "$3" RelatedMenu "show link structure">>
<<tiddler SiteMenu##extra with: "$1" Slices "$3" SliceMenu "show slice menu">>
<<tiddler SiteMenu##extra with: "$1" Grid "$3" GridMenu "show grid menu">>
//<<tiddler Pop##Down with: extra SiteMenu##More ok>>//
<<tiddler Switch##Extra>>
!More
<<tiddler Pop##One with: "+ plugins" SiteMenu##more1 ok>>
<<tiddler Pop##One with: "TT plugins" SiteMenu##more2 ok>>//
<<tiddler SiteMenu##extra with: "$1" Configuration "$3" Configuration "show configuration visualization">>
<<tiddler SiteMenu##extra with: "$1" "Edit Options" "$3" SideBarOptions "show edit options">>
<<tiddler SiteMenu##extra with: "$1" Timeline "$3" TabTimeline "show timeline">>
<<tiddler SiteMenu##extra with: $1 Shadowed $3 TabMoreShadowed "show shadowed tiddlers">>
<<tiddler SiteMenu##extra with: "$1" Alphabetical "$3" TabAll "show more tools">>
<<tiddler SiteMenu##extra with: "$1" "All Tags" "$3" TabTags "show more tools">>
!more1
<<tiddler SiteMenu##extra with: "$1" Browse "$3" BrowseMenu "show tiddler, web and file browsers">>
<<tiddler SiteMenu##extra with: "$1" Tools "$3" ToolMenu "show more tools">>
<<tiddler SiteMenu##extra with: "$1" Cloud "$3" CloudMenu "show more tools">>
<<tiddler SiteMenu##extra with: "$1" Tagtree "$3" TagTree "show more tools">>
<<tiddler SiteMenu##extra with: "$1" Treeview "$3" TreeMenu "show more tools">>
<<tiddler SiteMenu##extra with: "$1" Dropdown "$3" DropMenu "show more tools">>
<<tiddler SiteMenu##extra with: "$1" Accordion "$3" AccordionMenu "show more tools">>
<<tiddler SiteMenu##extra with: "$1" TestTiddler "$3" TestTiddler "show more tools">>
!more2
<<tiddler SiteMenu##extra with: "$1" Crumbs "$3" CrumbsMenu "show more tools">>
<<tiddler SiteMenu##extra with: "$1" Nested "$3" NestedMenu "show more tools">>
<<tiddler SiteMenu##extra with: "$1" Image "$3" ImageMenu "show more tools">>
<<tiddler SiteMenu##extra with: "$1" Toc "$3" TocMenu "show more tools">>
<<tiddler SiteMenu##extra with: "$1" Linked "$3" RelatedMenu "show more tools">>
<<tiddler SiteMenu##extra with: "$1" Slices "$3" SliceMenu "show more tools">>
<<tiddler SiteMenu##extra with: "$1" Grid "$3" GridMenu "show more tools">>
!extra
<script label="$2" title="$5">
var updatePseudoStory = function(container, source) {
	var t = store.getTiddler(container);
	// change transclusion source
	var pattern = /({{PseudoStory{<<tiddler \[\[)(.+?)(]]>>}}})/;
	var text = t.text.replace(pattern, "$1" + source + "$3");
	store.saveTiddler(t.title, t.title, text, t.modifier, t.modified, t.tags, t.fields, false, t.created);
};
updatePseudoStory("ExtraMenu","$4");
</script>
!0
{{PseudoStory{<<tiddler [[Cookie]]>>}}}
!================================================end LEFT

!CENTER
<<tiddler Switch##Tiddler>>
//<<tiddler Pop##Down with: MenuFlex SiteMenu##menuFlex ok>>
<<tiddler Pop##Down with: Html SiteMenu##htm ok>>
<<tiddler Pop##Down with: Favlet SiteMenu##favlet ok>>
<<tiddler Pop##Down with: crumbs CrumbsMenu ok "" "" list>>//
!menuFlex
<<tiddler List##Title with:menuFlex>>
!htm
<<tiddler List##Title with:htm>>
!favlet
<<tiddler List##Title with:favlet>>
!Center2
<<tiddler Switch##Tiddler>>
//<<tiddler Pop##Down with: Html SiteMenu##htm2 ok>>
<<tiddler Pop##Down with: Favlet SiteMenu##favlet2 ok>>
<<tiddler Pop##Down with: crumbs CrumbsMenu ok>>////
<<tiddler Switch##Footer>>
!htm2
<<tiddler Pop##One with: Append AppendToTiddler ok "" 30em>>
<<tiddler Pop##One with: Browse MicroBrowser ok "" 50em>>
<<tiddler Pop##One with: TiddlerFromCSV TiddlersFromCSV ok "" 40em>>
<<tiddler Pop##One with: EditBar EditBar ok>>
<<tiddler Pop##One with: EditBarTools EditBarTools ok>>
<<tiddler Pop##One with: InsertCharacter InsertCharacter ok "" 50em>>
<<tiddler Pop##One with: MakeTable MakeTable ok "" 40em>>
<<tiddler Pop##One with: MicroCalc MicroCalc ok "" 30em>>
<<tiddler Pop##One with: ShowLocalDirectory ShowLocalDirectory ok>>
<<tiddler Pop##One with: SplitTiddler SplitTiddler ok>>
<<tiddler Pop##One with: Switch Switch ok>>
<<tiddler Pop##One with: ToolMenu ToolMenu ok>>
<<tiddler Pop##One with: WordCount WordCount ok>>
!favlet2
<<tiddler CreateHtmlTable>>
<<tiddler GoogleSearch>>
<<tiddler SetDefaultTiddler>>
<<tiddler SlayerOffice>>
<<tiddler SortTable>>
<<tiddler TestStyle>>
<<tiddler TransposeTable>>
<<tiddler WordCount>>
<<tiddler YourSearch>>
<<tiddler favlets>>
!Center3
<<tiddler Switch##Tiddler>>
//<<tiddler Pop##Down with: Html SiteMenu##htm3 ok>>
<<tiddler Pop##Down with: Favlet SiteMenu##favlet3 ok>>
<<tiddler Pop##Down with: Script SiteMenu##script3 ok>>//
<<tiddler Switch##Footer>>
!htm3
<<tiddler List##AndPop with: htm>>
!favlet3
<<tiddler List##AndEmbed with: favlet>>
!script3
<<tiddler List##AndPop with: script>>
!================================================end CENTER

!RIGHT
<<tiddler Switch##Header>>
<<tiddler Switch##Home with: home>>
//<<tiddler Pop##Down with: mode Switch##Page>>
<<tiddler Pop##Down with: more SiteMenu##morePops ok>>//
<<tiddler Switch##Sidebar>>
!Right2
<<tiddler Switch##Header>>
//<<tiddler Pop##Down with: mode Switch##Page>>
<<tiddler Pop##Down with: edit SiteMenu##edit "fast access to editing features" "" "9em">>//
<<tiddler Switch##Sidebar>>
!morePops
<<tiddler Pop##One with: "Edit Options" SiteMenu##edit "fast access to editing features" "" "9em">>
<<tiddler Pop##One with: "More Options" OptionsPanel "change TiddlyWiki advanced options" "" "14em">>
<<tiddler Pop##One with: "All Tags" SiteMenu##tags "show all tags" ok>>
<<tiddler Pop##One with: "Quick Pick" QuickMenu ok "" 32em>>
<<tiddler Pop##One with: Timeline TabTimeline "show the history" ok button>>
<<tiddler Pop##One with: Shadowed TabMoreShadowed "show shadowed tiddlers" ok>>
<<tiddler Pop##One with: "Alphabetical" TabAll "show all tiddlers alphabetically ordered" ok>>
!edit
<<closeAll>>
<<permaview>>
<<refreshDisplay>>
<<newTiddler>>
<<newJournal "YYYY MMM DD" "journal">>
<<saveChanges>>
{{x{<<showWhen version.extensions.UploadPlugin == undefined>>}}}{{x{<<else>><<tiddler TspotSidebar>>}}}
<<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
!tags
<<allTags excludeLists SiteMenu>>
!================================================end RIGHT

%/
/% http://slayeroffice.com/ %/<html><a href="javascript:s=document.body.appendChild(document.createElement('script'));s.id='fs';s.language='javascript';void(s.src='http://slayeroffice.com/tools/suite/suite.js');"<span>favlets suite</span></a></html>
{{tiny{<<runTiddler GridPlugin>><<grid tags:[[system systemConfig systemTheme script favlet bookmarklet htm]] columns:[[Author Description TiddlerSize]] inline wikify edit>>}}}
/* TeamTasks tabs by PhilHawksworth http://www.hawksworx.com/playground/TeamTasks/ */
/*{{{*/
#mainMenuC div.tabContents{background-color:transparent;overflow:auto;border:solid 0px #aaa;padding-top:0.5em}
#mainMenuC div.txtMainTab{}
#mainMenuC div.txtMainTab div.tabset{background-color:[[ColorPalette::PrimaryLight]];color:[[ColorPalette::PrimaryPale]];padding:0; /* float:left; */ border-right:solid 1px #aaa}
#mainMenuC div.txtMainTab div.tabset a.tab{display:block;padding:0.2em 1.5em;text-align:right;background-color:[[ColorPalette::PrimaryLight]];border-bottom:solid 1px #aaa;margin:0}
#mainMenuC div.txtMainTab div.tabset a.tabSelected{background-color:[[ColorPalette::PrimaryMid]];border-top:solid 0px #aaa;color:#fff}
#mainMenuC div.txtMainTab div.tabset a.tab:hover{background-color:[[ColorPalette::PrimaryMid]]}

#mainMenuD div.txtSlideTab{}
#mainMenuD div.txtSlideTab div.tabset{background-color:[[ColorPalette::PrimaryLight]];color:[[ColorPalette::PrimaryPale]];padding:0;float:left;border-right:solid 1px #aaa;margin-left:-.5em}
#mainMenuD div.txtSlideTab div.tabset a.tab{display:block;padding:0.2em 1.5em;text-align:right;background-color:[[ColorPalette::PrimaryLight]];border-bottom:solid 1px #aaa;margin:0}
#mainMenuD div.txtSlideTab div.tabset a.tabSelected{background-color:[[ColorPalette::PrimaryMid]];border-top:solid 0px #aaa;color:#fff}
#mainMenuD div.txtSlideTab div.tabset a.tab:hover{background-color:[[ColorPalette::PrimaryMid]]}

#mainMenuD div.tabContents{background-color:transparent;overflow:auto;border:solid 0px #aaa;padding-top:0.5em;margin-right:-1em}
#mainMenuD div.txtSlideTab ul{list-style:none;margin:0.5em 0 0 0;padding:0}
#mainMenuD div.txtSlideTab ul li{padding:0 10px}
#mainMenuD div.txtSlideTab ul li a{font-weight:normal;line-height:1.3em;margin:0.2em 0}
#mainMenuD div.txtSlideTab ul li.listTitle{border-top:solid 0px #bbc;padding:0.3em 0 0.2em 5px;font-size:1.3em;color:#bbc}
#mainMenuD div.txtSlideTab ul li.listLink {margin:0}
#mainMenuD div.txtSlideTab ul:first-child li.listTitle{border:solid 0 #ccc}
/*}}}*/
{{accordionEffect nobullets{
<<slider hTm  SwitchMenu "Switch Menus" "show/hide menu">>/%
%/<<slider mFl SiteMenu##menuFlex "Menu Flex" "show/hide menu">>/%
%/<<slider hTm  SiteMenu##htm "Html Scripts" "show/hide menu">>/%
%/<<slider wKl SiteMenu##favlet Favlets "show/hide menu">>/%
<<slider tAg SiteMenu##tags "All Tags "show/hide menu">>
%/<<slider aCm SliderMenu##1 " • Menu Flex" "show/hide menu">>}}}/%
!1
{{accordionTwo{
<<slider pTl SliderMenu##1a " PageTemplate" "show/hide menu">><<slider pTl SliderMenu##1b " StyleSheet" "show/hide menu">><<slider mEn SliderMenu##1c " Menu" "show/hide menu">>{{button whitespace{          [[How To ?|HowTo]]}}}}}}
!1a
{{accordionThree whitespace{{{button{
     <<tiddler Pop##Right with: PageTemplate SliderMenu##2 ok>>}}}{{button{
     <<tiddler Pop##Right with: SiteMenu SliderMenu##2a ok>>}}}{{button{
     <<tiddler Pop##Right with: Template2 SliderMenu##2b ok>>}}}{{button{
     <<tiddler Pop##Right with: TemplateBody SliderMenu##2c ok>>}}}}}}
!1b
{{accordionThree whitespace{{{button{
     <<tiddler Pop##Right with: StyleSheet SliderMenu##2d ok>>}}}}}}
!1c
{{accordionThree whitespace{{{button{
     <<tiddler Pop##Right with: Menu SliderMenu##2e ok>>}}}}}}
!2
 <<tiddler Pop##Pops with: PageTemplate>>
!2a
 <<tiddler Pop##Pops with: SiteMenu>>
!2b
 <<tiddler Pop##Pops with: Template2>>
!2c
 <<tiddler Pop##Titles with: TemplateBody>> 
!2d
 <<tiddler Pop##Pops with: StyleSheet>>
!2e
 <<tiddler Pop##Pops with: Menu>> 
!0
%/
/*AccordionEffect by oc ( http://b-oo-k.net/blog/ ) http://b-oo-k.net/TiddlyWiki/Simple2.html */
/*{{{*/
.accordionEffect .button{display:block;color:[[ColorPalette::PrimaryPale]];text-align:left;font-weight:bold; line-height:140%;border-top:solid 1px #bbb;border-left:solid 1px #bbb;border-right:solid 1px #888;border-bottom:solid 1px #888;background:[[ColorPalette::PrimaryLight]];margin-left:-.3em;padding:0 21px 1px 20px;}
.accordionEffect .button:hover{color:[[ColorPalette::Background]];border-top:solid 1px #bdf;border-left:solid 1px #bdf;border-right:solid 1px #8ac;border-bottom:solid 1px #8ad;background:[[ColorPalette::PrimaryMid]];padding:1px 20px 0 21px;}

.accordionTwo .button{display:block;color:[[ColorPalette::PrimaryMid]];text-align:left;font-weight:bold; line-height:140%;border-top:solid 1px #bbb;border-left:solid 1px #bbb;border-right:solid 1px #888;border-bottom:solid 1px #888;background:#9bd;margin-left:-.3em;padding:0 21px 1px 30px;}
.accordionTwo .button:hover{color:[[ColorPalette::Background]];border-top:solid 1px #79b;border-left:solid 1px #79b;border-right:solid 1px #bdf;border-bottom:solid 1px #bdf;background:#8ad;padding:1px 20px 0 31px;}

.accordionThree .button{display:block;color:[[ColorPalette::TertiaryPale]];text-align:left;font-weight:bold; line-height:140%;border-top:solid 1px #bbb;border-left:solid 1px #bbb;border-right:solid 1px #888;border-bottom:solid 1px #888;background:[[ColorPalette::TertiaryLight]];margin-left:-.3em;padding:0 21px 1px 40px;}
.accordionThree .button:hover{color:[[ColorPalette::Background]];border-top:solid 1px #bdf;border-left:solid 1px #bdf;border-right:solid 1px #8ac;border-bottom:solid 1px #8ad;background:[[ColorPalette::TertiaryMid]];padding:1px 20px 0 41px;}
/*}}}*/
<html><a href="javascript:function toArray (c){var a, k;a=new Array;for (k=0; k<c.length; ++k)a[k]=c[k];return a;}function insAtTop(par,child){if(par.childNodes.length) par.insertBefore(child, par.childNodes[0]);else par.appendChild(child);}function countCols(tab){var nCols, i;nCols=0;for(i=0;i<tab.rows.length;++i)if(tab.rows[i].cells.length>nCols)nCols=tab.rows[i].cells.length;return nCols;}function makeHeaderLink(tableNo, colNo, ord){var link;link=document.createElement('a');link.href='javascript:sortTable('+tableNo+','+colNo+','+ord+');';link.appendChild(document.createTextNode((ord>0)?'a':'d'));return link;}function makeHeader(tableNo,nCols){var header, headerCell, i;header=document.createElement('tr');for(i=0;i<nCols;++i){headerCell=document.createElement('td');headerCell.appendChild(makeHeaderLink(tableNo,i,1));headerCell.appendChild(document.createTextNode('/'));headerCell.appendChild(makeHeaderLink(tableNo,i,-1));header.appendChild(headerCell);}return header;}g_tables=toArray(document.getElementsByTagName('table'));if(!g_tables.length) alert(%22This page doesn't contain any tables.%22);(function(){var j, thead;for(j=0;j<g_tables.length;++j){thead=g_tables[j].createTHead();insAtTop(thead, makeHeader(j,countCols(g_tables[j])))}}) ();function compareRows(a,b){if(a.sortKey==b.sortKey)return 0;return (a.sortKey < b.sortKey) ? g_order : -g_order;}function sortTable(tableNo, colNo, ord){var table, rows, nR, bs, i, j, temp;g_order=ord;g_colNo=colNo;table=g_tables[tableNo];rows=new Array();nR=0;bs=table.tBodies;for(i=0; i<bs.length; ++i)for(j=0; j<bs[i].rows.length; ++j){rows[nR]=bs[i].rows[j];temp=rows[nR].cells[g_colNo];if(temp) rows[nR].sortKey=temp.innerHTML;else rows[nR].sortKey=%22%22;++nR;}rows.sort(compareRows);for (i=0; i < rows.length; ++i)insAtTop(table.tBodies[0], rows[i]);}"<span>sort table</span></a></html>
/%
Name: SplitTextIntoTiddlers
Source: http://marksbasement.Tiddlyspot.com/#SplitTextIntoTiddlers
Version: 0.0.2
Author: Mark S.
CoreVersion: 2.5.2 or later
Description: Split long text into individual tiddlers suitable for use in TiddlyPocket book
Requires: StyleSheetShortcuts for appearance
Usage: Paste text to be split into text area box. Select how many characters you want per page. This is an upper limit, as the script will attempt to make the page break at the last word before the specified number of characters. Select how many pages you want to be created. Select the stem name that you want to use for the resulting tiddlers. If you are going generate more than 10 tiddlers, you might also want to specify the padding for the output so that the resulting tiddlers can be split correctly. Then press the submit button to run. After a few seconds, the tiddlers that are generated should appear in your timeline. The script will not open them in the display area, in case you are creating a lot. If the stem name you select represents an actual tiddler, then that tiddler will be used as a template for tags, fields, user name, and date. Any text that could not be cut into the specified number of tiddlers remains in the text box, so that you can then specify a second stem name and run the process again if so desired.
 
%/{{smallform{
<html><hide linebreaks><nowiki><form action="javascript:;"
	onsubmit='
  var tiddlerStem = this.stem.value ;  // Tiddlers to be created will each start with this name
   var splitAfter = parseInt(this.unitCount.value) ; // Split data every x characters or every x lines
   var spin = 1 ; // Keeps track of tiddler extension number 
   var data = this.txtData.value ;
   var maxPage = parseInt(this.maxPage.value) ;
   var numPad   = parseInt(this.numPad.value ) ;

   var splitType = "noneoftheabove" ;   
   for(var i=0;i<2;i++) { // YOU WILL NEED TO CHANGE THIS IF YOU ADD RADIO BUTTONS
         if(this.splitType[i].checked) {splitType = this.splitType[i].value; break;}
   }

    var tid=store.getTiddler(tiddlerStem);
    var who=tid?tid.modifier:config.options.txtUserName;
    var when=tid?tid.modified:new Date();
    var tags=tid?tid.tags:[];
    var fields=tid?tid.fields:{};

//alert("x"+splitType+"x") ;
   if(splitType=="char") {
   while(data.length && spin <= maxPage ) {
     var newTitle  = tiddlerStem + String.zeroPad(spin,numPad) ;
     var chunk = data.slice(0,Math.min(splitAfter,data.length)) ;
     var lastWord = chunk.search(/\w\S*$/)  ;
     if (lastWord > data.length && lastWord > -1 ) {
      chunk = data.slice(0,lastWord) ;
      } else {
        lastWord = chunk.length ;
      } 
     store.saveTiddler(newTitle, newTitle, chunk, who, when, tags, fields); ;
     data = data.slice(lastWord,data.length) ;
     spin++ ;
  }
  this.txtData.value = data ;
  } // SPLIT BY CHAR ROUTINE

  if(splitType=="line") {
    var lines = data.split(/\n/g) ;
     var startPt = 0 ;
     var endPt = Math.min(lines.length,splitAfter) ;
    for(var pageNum=0;pageNum<maxPage;pageNum++) {
//alert("start %0 end %1".format([startPt,endPt])) ;
         if ( ! lines.length || startPt > lines.length || startPt==endPt) break ;
         var pageText = lines.slice(startPt,endPt).join("\n") ;
         var newTitle  = tiddlerStem + String.zeroPad(pageNum+1,numPad) ;
         store.saveTiddler(newTitle, newTitle, pageText, who, when, tags, fields); ;
         startPt += splitAfter ;
         endPt = Math.min(lines.length,endPt+splitAfter) ;
    }
    if(startPt <= endPt) { this.txtData.value = lines.slice(startPt,endPt).join("\n") } else
this.txtData.value = "" ;
  } // SPLIT BY LINE ROUTINE
//wikify(data,place) ; 
return false ;
'>
<table class="borderless" width="80%">

  <tr><td colspan="2"><b>Text to be split</b><br>
      <textarea name="txtData" cols="50" rows="10" ></textarea></td></tr>

  <tr><td  width="100" ><b>Tiddler Stem name:&nbsp;</b></td> <td><input name="stem" type="text" size="30" value="TiddlerToBe"></td></tr>

  <tr><td  width="100" ><b>Divide by:&nbsp;</b></td><td>
<input name="splitType" type="radio"  checked value="char"
onchange="jQuery('#lblCount').text('Char.s per page:');this.form.unitCount.value='400';"
>Char. Count&nbsp;
<input name="splitType" type="radio"                value="line"  onchange="jQuery('#lblCount').text('Lines per page:');this.form.unitCount.value='20'">Line Count&nbsp;
</td></tr>

  <tr><td  width="100" ><b><span id="lblCount">Char.s per page:</span>&nbsp;</b></td><td><input name="unitCount" type="text" size="5" value="400"></td></tr>

  <tr><td  width="100" ><b>Maximum # of pages:&nbsp;</b></td><td><input name="maxPage" type="text" size="5" value="8"></td></tr>

 <tr><td  width="100" ><b># of digits to pad:</b></td><td><input name="numPad" type="text" size="5" value="1"></td></tr>
</table>

<input type="submit" value="Split Text">
</form></html>
/%
Name: SplitTiddler
Source: http://www.TiddlyTools.com/#SplitTiddler
Version: 1.5.1
Author: Eric Shulman
License: http://www.TiddlyTools.com/#LegalStatements
Description: use text pattern to split tiddler contents into separate tiddlers

%/{{small smallform{<html><hide linebreaks><form>
<table class='borderless' style='border:0;margin:0;'><tr style='border:0'>
<td style='width:33%;border:0;'>
	source tiddler:<br>
	<input name='src' value='enter tiddler title' onfocus='this.select()' style='width:98%' 
		title='title of tiddler containing source material'>
</td><td style='width:33%;border:0;'>
	item separator:<br>
	<input name='sep' value='\n----\n' onfocus='this.select()' style='width:98%' 
		title='character sequence used to separate source items'>
</td><td style='width:33%;border:0;'>
	add tags:<br>
	<input name='tags' value='' style='width:98%'
		title='space-separated tags for target tiddlers'>
</td></tr><tr style='border:0'>
<td colspan='3'  style='border:0'>
	<table style='width:100%;border:0;margin:0;'><tr style='border:0'>
	<td style='border:0'>
	target title format:<br>
	<input type='text' name='titleformat'  value='%0 - %1' style='width:99%';
		title='format for new tiddler titles'>
	</td><td style='border:0;'>
	output format:<br>
	<input name='format' value='%4' style='width:99%'
		title='format for target tiddler content'>
	</td></tr></table>
	<div style='text-align:center;font-size:80%;font-style:italic;padding-bottom:.3em'>
	%0=source title, %1=first line of item, %2=first word of item, %3=item number, %4=item content
	</div>
</td>
</tr><tr style='border:0'>
<td colspan='2' style='text-align:left;border:0;'>
	<input type='checkbox' name='warn' checked>confirm overwrites
	<input type='checkbox' name='show'>show tiddlers when done
</td><td style='text-align:right;border:0;'>
	<input type='button' value='split tiddler' style='width:100%;' onclick="
		var f=this.form;
		if (f.src.value==f.src.defaultValue)
			{ displayMessage('Please enter a tiddler title'); f.src.focus(); return false; }
		var start=new Date().getTime();
		var src=store.getTiddlerText(f.src.value);
		if (!src) { displayMessage('\u0027'+f.src.value+'\u0027 not found'); return false; }
		var tags=f.tags.value;
		var pieces=src.split(f.sep.value.unescapeLineBreaks());
		var parts=[]; for (var i=0; i<pieces.length; i++) if (pieces[i].length) parts.push(pieces[i]);
		var msg='Found '+parts.length+' items in \u0027'+f.src.value+'\u0027.  Press OK to proceed';
		if (!confirm(msg)) return false;
		if (parts.length) store.suspendNotifications();
		var tids=[];
		var warn=f.warn.checked;
		var fmt=f.format.value.unescapeLineBreaks();
		var pad=parts.length.toString().length;
		var srctitle=f.src.value;
		for (var p=0; p<parts.length; p++) {
			var txt=parts[p];
			var lines=txt.split('\n');
			var firstline=lines[0];
			var firstword=firstline.split(' ')[0];
			var itemnum=String.zeroPad(p+1,pad);
			if (f.titleformat.value.indexOf('%2')!=-1) /* if firstword is in title */
				{ var words=lines[0].split(' '); words.shift(); lines[0]=words.join(' '); var discard=!words.length; }
			if (f.titleformat.value.indexOf('%1')!=-1 || discard) /* if firstline is in title */
				lines.shift();
			var content=lines.join('\n');
			var tid=f.titleformat.value.format([srctitle,firstline,firstword,itemnum,content]);
			tid=tid.replace(/[\[\]\|]/g,'_');
			if (warn && store.tiddlerExists(tid) && !confirm(config.messages.overwriteWarning.format([tid]))) continue;
			txt=fmt.format([srctitle,firstline,firstword,itemnum,content]);
			store.saveTiddler(tid,tid,txt,config.options.txtUserName,new Date(),tags,{});
			tids.push(tid);
		}
		var elapsed=(new Date().getTime()-start)/1000;
		if (parts.length) store.resumeNotifications();
		if (tids.length) { 
			store.notifyAll();
			if (f.show.checked) story.displayTiddlers(story.findContainingTiddler(this),tids);
			displayMessage('created '+tids.length+' target tiddlers in '+elapsed+' seconds');
		}
	">
</td></tr></table>
</form></html>}}}
[[MenuFlex]]
/* Overflow style by FND - http://cleanlayout.tiddlyspot.com/ */
/*{{{*/
#outer{margin:auto} /* thanks to Morris Gray */
#sidemenu{position:static;float:left;width:auto;padding-left:.5em;font-size:1.1em;line-height:1.6em;text-align:left}
#sidebar{position:static;float:right;display:none;margin-right:3px;margin-left:1em;width:16em;font-size:0.9em}
#displayArea{overflow:hidden;margin:.7em .5em 0 0}
#displayArea{display:inline-block}
#displayArea{display:block}
#sidemenu{max-width:18em}
#sidemenu{max-width:480px}
* html #sidemenu{ /* IE6 */width: expression(this.clientWidth > 480 ? 480 : auto);}
/*}}}*/
/* [[MenuMore|menuFlex]] style by Ocat - http://tinyurl.com/59gpna */
/*{{{*/
/* Individual menus style */
#mainMenuA{margin:.5em .8em 0 0} /* switch menu */
#mainMenuB, #mainMenuB tabContents{margin-right:.7em} /* tabs */
#mainMenuC{margin:0 .8em 0 -.5em} /* slidetab */
#mainMenuD,#mainMenuD .tabContents{margin-right:.8em} /* slidetabtwin */
#mainMenuE{margin-left:-.2em;margin-right:.8em;text-align:right} /* slider */
#mainMenuF{text-align:right;margin-top:.5em;margin-right:1em} /* crumbs */
#mainMenuG{width:13em;text-align:center;margin:.5em 0 0 -.5em} /* cloud */
#mainMenuH{margin:1em .3em 0 0;font-size:80%} /* tagtree */
#mainMenuI{margin:.5em 0 0 -.5em;font-size:140%} /* treeview */
#mainMenuJ{margin:.1em .8em 0 -.8em} /* accordion */

#sidemenu{position:relative;float:left;background:transparent;display:block;height:100%}
#sidemenu ol,#sidemenu ul{font-size:.85em;line-height:110%;margin-left:0em;padding-left:.5em}
#sidemenuA{position:static;background:transparent;display:block;height:100%;line-height:1.5em;margin:0}
#mainMenuA{display:none}
#mainMenuB{display:none}
#mainMenuC{display:none}
#mainMenuD{display:none}
#mainMenuE{display:none}
#mainMenuF{display:none}
#mainMenuG{display:none}
#mainMenuH{display:none}
#mainMenuI{display:none}
#mainMenuJ{display:none}
#mainMenuK{display:none}
#pageFooter{background:transparent;border:0px;clear:both;color:#000;font-size:8px;margin:2em 0 20em 0;padding:0.5em 1em;text-align:center}
#pageFooter a{border-bottom:1px solid #fff;color:#555;font-weight:normal;text-decoration:none}
#pageFooter a:hover{background:transparent;border-bottom:1px solid #555;color:#555}
/*}}}*/
/*{{{*/
/* Controlbar, extraMenu, searchbar, bottom message area & scrollbars by FND */
#controlBar br, #sidebarOptions br, #floatingFooter br, #mainMenuJ br{display:none}
#controlBar{border:1px solid #888;font-weight:bold;font-style:normal;overflow:auto;padding:2px 0}
#controlBar a{border-right:1px solid #888;border-left:0;color:[[ColorPalette::PrimaryPale]];font-size:110%;padding:.5em}
#controlBar a:hover{color:[[ColorPalette::Background]]}
#searchBar{position:absolute;bottom:0;right:1em;z-index:1}
#searchBar .button,#bottomLeft .button{border:0}
/*}}}*/
/*{{{*/
#tiddlerDisplay{display:block;width:auto;overflow:hidden}
#extraMenu{float:left;max-width:40%;margin-right:.5em;padding-right:.5em;display:none}

/* style like a tiddler */
#extraMenu blockquote{border-left:3px solid [[ColorPalette::TertiaryDark]]}
#extraMenu code{color:[[ColorPalette::SecondaryDark]]}
#extraMenu hr{border:0;border-top:dashed 1px [[ColorPalette::TertiaryDark]];color:[[ColorPalette::TertiaryDark]]}
#extraMenu pre{background:[[ColorPalette::SecondaryPale]];border:1px solid [[ColorPalette::SecondaryLight]]}
#extraMenu table, table .twtable{border:2px solid [[ColorPalette::TertiaryDark]]}
#extraMenu td, #extraMenu tr, .twtable td, .twtable tr{border:1px solid [[ColorPalette::TertiaryDark]]}
#extraMenu th, #extraMenu thead td, .twtable th, .twtable thead td{background:[[ColorPalette::SecondaryMid]];border:1px solid [[ColorPalette::TertiaryDark]];color:[[ColorPalette::Background]]}
#extraMenu .button{border:1px solid [[ColorPalette::SecondaryMid]]}
#extraMenu .listTitle{list-style:none;margin-left:-2em}

/* Bottom message area */
#messageArea{background:#000;border:0;bottom:0;left:0;margin:0;opacity:0.5;padding:0;top:auto;width:100%}
#messageArea *{color:#FFF}
#messageArea div{padding:10px}
* html #messageArea{filter: alpha(opacity=50)}

/* Scrollbars */
#sidebarTabs .tabContents{max-height:35em;overflow:auto}
#sidebarTabs .tabContents .tabContents{max-height:30em !important}
.viewer{max-height:40em;overflow:auto}
/*}}}*/
/*{{{*/
/* ============== CUSTOM STYLE SHEET DEFINITIONS ============== */
body{position:static;font-size:.8em}
.headerShadow,.headerForeground{padding:2em 0 0 1em}
.headerShadow{left:1px;top:1px}
#backstageButton a{color:[[ColorPalette::PrimaryPale]]}
#backstageButton a:hover{background:transparent;color[[ColorPalette::Background]]}
#backstageArea,#backstageArea a{background:[[ColorPalette::PrimaryPale]]}
.toolbar,.tagged{display:inline;float:right;padding-bottom:0,padding-top:0;/*visibility:hidden*/}
.selected .toolbar,.selected .tagged{visibility:visible}
.tagged li, .tagging li{display:inline !important}
.tagging{float:right}
.tagging a{margin-right:.5em}
h3{margin-top:0em;margin-bottom:0em}
hr{height:0px;border:0;border-top:1px solid silver}
.viewer pre{background:#000;border:1px solid #660000;color:#fff}
.txtOptionInput{margin:0;font-size:0.9em;padding:2px;border:0px;background:#eef;}
.wrapClass .tab, .wrapClass .tabset, .wrapClass .tabContents{position:static;background:transparent !important;border:0px;margin-top:-.5em;padding-top:-.5em}
.cola{float:left;margin-left:10%;width:40%}
.colb{float:left;margin-left:5%; /* width:45% */}

/* Display area border's style by JulianKnight */
#tiddlerDisplay{-moz-border-radius:1em;background:#eef;/% margin:0 15.5em 0 12.5em;%/padding-bottom:.1em;padding-top:.5em}
.tiddler{-moz-border-radius:1em;background:#fff;border-bottom:3px solid #ccc;border-left:1px solid #ccc;border-right:3px solid#ccc;border-top:1px solid #ccc;margin:0 0.5em 0.5em 0.5em;padding:0.5em}

/* .popup li button,.popup li button:visited,.popup li button:hover,.popup li button:active{color:#000;line-height:12pt;}
.popup a{color:#000;font-size:9pt;font-weight:normal;line-height:18pt;padding:.5em} */

/* Popup style mainly of PopupTipsPlugin by BramChen */
.popup{white-space:nowrap;border:1px solid [[ColorPalette::PrimaryPale]];background:#cff;color:[[ColorPalette::Foreground]];overflow:auto;z-index:300; filter:alpha(opacity=90);-moz-opacity:0.9;opacity:0.9;max-height:35em}
.popup ul{list-style-type:none;margin-left:0em}
.popup ul li{margin-left:-3em}
.popup a{color:#000;font-weight:normal;font-size:9pt;line-height:16pt;padding:.3em}
.popup li button,.popup li button:visited,.popup li button:hover,.popup li button:active{color:#000}
.popup .button{border:0}

/* Dynamic and fixed style by YannPerrin */
html > body{overflow:scroll}
#contentWrapper > #sidebar > #sidebarTabs{height:2.5em;overflow:hidden}
#contentWrapper > #sidebar > #sidebarTabs:hover{height:auto;overflow:visible}
#controlBar > #sitemenu{position:static;top:0}

/* Floating Footer style by DawnAhukanna */
#floatingFooter{position:fixed;right:.8em;bottom:0px;text-align:right;color:#aaa;z-index:1001;padding:.1em}
#floatingFooter a{padding:0 .3em 0 .3em}
/*}}}*/
Mainly from [[StyleSheetShortcuts]] /* by EricShulman http://www.TiddlyTools.com/ */
/*{{{*/
.right{display:block;text-align:right}
.center{display:block;text-align:center}
.floatright{float:right}
.floatleft{float:left}
.clear{clear:both}
.space{line-height:160%}
.normal{font-size:9pt;line-height:120%}
.small{font-size:8pt;line-height:120%}
.tiny{font-size:6pt;line-height:120%}
.smallform{white-space:nowrap}
.smallform input,.smallform textarea,.smallform button,.smallform checkbox,.smallform radio,.smallform select{font-size:8pt}
.nobullets li{list-style-type:none;margin-left:-2em}
.indent{display:block;margin:0;padding:0;border:0;margin-left:2em}
.wrap{white-space:normal}
.hidden{display:none}
.show{display:inline !important}
.borderless, .borderless table, .borderless td, .borderless tr, .borderless th, .borderless tbody{border:0 !important;margin:0 !important;padding:0 !important}
.outline{display:block;padding:1em;-moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid}
.whitespace{white-space:pre}
.spacer{line-height:160%}
#tidIDE, .tidIDE input, .tidIDE textarea, .tidIDE button, .tidIDE checkbox, .tidIDE radio, .tidIDE select{font-family:DejaVu,Verdana;font-size:9pt}
.viewer li{padding-top:0.3em;padding-bottom:0.3em}
/*}}}*/

[[SliderStyle]]
[[TabsWhiteGray]]
[[TabButtonStyle]]
[[SlideTabStyle]]
[[JqueryTreeviewCSS]]
[[StyleSheetAccordionMenuPlugin]]
[[StyleSheetDropDownMenuPlugin]]
[[StyleSheetTagCloud]]
/*{{{*/
ul.accordion br{display:none}
ul.accordion,ul.accordion li,ul.accordion li ul{margin:0;padding:0;list-style-type:none;text-align:left}
ul.accordion li ul{display:none}
ul.accordion li.accordion-active ul{display:block}
ul.accordion li.accordion-active a{cursor:default}
ul.accordion li.accordion-active ul li a{cursor:pointer}
ul.accordion a{display:block;padding:0.3em 0.5em 0.3em 1em}
ul.accordion li a.tiddlyLink,ul.accordion li a.tiddlyLinkNonExisting,ul.accordion li a{font-weight:bold}
ul.accordion li a{background:[[ColorPalette::PrimaryMid]];color:#FFF;border-top:1px solid #fff}
ul.accordion li.accordion-active a,ul.accordion li a:hover{background:[[ColorPalette::PrimaryLight]];color:#FFF}
ul.accordion li ul li{display:inline-block;overflow:hidden}
ul.accordion li.accordion-active ul li{background:#eff3fa;color:#000;padding:0em}
ul.accordion li.accordion-active ul li div{padding:1em 1.5em;background:#eff3fa}
ul.accordion li.accordion-active ul a, ul.accordion li.accordion-active ul tiddlylink{background:#eff3fa;color:#000;padding:0.3em 0.5em 0.3em 1em;border:0}
ul.accordion li.accordion-active ul a:hover{background:#e0e8f5;color:#000}
/*}}}*/
/*{{{*/
/*** LAYOUT STYLES -  DO NOT EDIT! ***/
ul.suckerfish, ul.suckerfish ul{margin:0;padding:0;list-style:none;line-height:1.4em}
ul.suckerfish li{display:inline-block;display:block;float:left}
ul.suckerfish li ul{position:absolute;left:-999em}
ul.suckerfish li:hover ul, ul.suckerfish li.sfhover ul{left:auto;z-index:999}
ul.suckerfish ul li{float:none;border-right:0;border-left:0}
ul.suckerfish a, ul.suckerfish a:hover{display:block}
ul.suckerfish li a.tiddlyLink, ul.suckerfish li a, #mainMenu ul.suckerfish li a{font-weight:bold}
/*** END LAYOUT STYLES ***/

/*** COLORS AND APPEARANCE - DEFAULT ***/
ul.suckerfish li a{padding:0.4em 0.8em;color:#FFF;background:[[ColorPalette::PrimaryMid]];border-bottom:0;border-top:1px solid #fff;border-left:1px solid #fff;font-weight:bold}
ul.suckerfish li:hover a, ul.suckerfish li.sfhover a{background:[[ColorPalette::PrimaryLight]]}
ul.suckerfish li:hover ul a, ul.suckerfish li.sfhover ul a{color:#000;background:#eff3fa;border-top:1px solid #FFF}
ul.suckerfish ul li a:hover{background:#e0e8f5}
ul.suckerfish li a{width:auto}
ul.suckerfish ul li a, ul.suckerfish ul li a:hover{display:inline-block;width:auto}
ul.suckerfish li{border-left:1px solid #00558F}
/*** END COLORS AND APPEARANCE - DEFAULT ***/

/*** LAYOUT AND APPEARANCE: VERTICAL ***/
ul.suckerfish.vertical li{ width:10em;border-left:0px solid [[ColorPalette::PrimaryMid]]}
ul.suckerfish.vertical ul li, ul.suckerfish.vertical li a, ul.suckerfish.vertical li:hover a, ul.suckerfish.vertical li.sfhover a{ border-left:0.8em solid [[ColorPalette::PrimaryMid]]}
ul.suckerfish.vertical li a, ul.suckerfish.vertical li:hover a, ul.suckerfish.vertical li.sfhover a,  ul.suckerfish.vertical li.sfhover a:hover{ width:8em}
ul.suckerfish.vertical{width:10em;text-align:left;float:left}
ul.suckerfish.vertical li a{padding:.3em .5em .3em 1em;border-top:1px solid  #fff}
ul.suckerfish.vertical, ul.suckerfish.vertical ul{line-height:1.4em}
ul.suckerfish.vertical li:hover ul, ul.suckerfish.vertical li.sfhover ul{margin:-2.4em 0 0 10.9em}
ul.suckerfish.vertical li:hover ul li a, ul.suckerfish.vertical li.sfhover ul li a{border:0px solid #FFF}
ul.suckerfish.vertical li:hover a, ul.suckerfish.vertical li.sfhover a{ padding-right:1.1em}
ul.suckerfish.vertical li:hover ul li, ul.suckerfish.vertical li.sfhover ul li{border-bottom:1px solid  #fff}
/*** END LAYOUT AND APPEARANCE: VERTICAL ***/
/*}}}*/
Nav <<tiddler Switch##Nav>>
~RefreshDisplay: <<tiddler Switch##RefreshDisplay>>
Page: <<tiddler Switch##Page>>
Home: <<tiddler Switch##Home>>
Edit: <<tiddler Switch##Edit>>
~OpenGroup: <<tiddler Switch##OpenGroup>>
~CloseOpenGroup: <<tiddler Switch##CloseOpenGroup>>
~OpenGroup2: <<tiddler Switch##OpenGroup2>>
~CloseOpenGroup2: <<tiddler Switch##CloseOpenGroup2>>
Header: <<tiddler Switch##Header>>
Extra: <<tiddler Switch##Extra>>
Tiddler: <<tiddler Switch##Tiddler>>
Sidemenu: <<tiddler Switch##Sidemenu>>
Sidebar: <<tiddler Switch##Sidebar>>
Footer: <<tiddler Switch##Footer>>
/%
!Nav
<<tiddler Switch##Back>> <<tiddler Switch##Refresh>> <<tiddler Switch##Forward>>
!Refresh
<html><a href="javascript:;" title="redisplay current tiddler content" onclick="var here=story.findContainingTiddler(this);if(here)story.refreshTiddler(here.getAttribute('tiddler'),null,true);return false;">&nbsp;&#8635;&nbsp;</a></html>
!Back
<html><a href="javascript:;" title="navigate back" onclick="history.go(-1)">&laquo;</a></html>
!Forward
<html><a href="javascript:;" title="navigate forward" onclick="history.forward()">&raquo;</a></html>
!RefreshDisplay
<html><a href="javascript:;" onclick="var tid=story.forEachTiddler(function(t,e){story.refreshTiddler(t,null,true)});
refreshDisplay();return false;"<span>&nbsp;~&nbsp;</span></a></html>
!Page
<html><a href="javascript:;" title="show html menus" onclick="refreshPageTemplate('PageTemplate');">html only</a></html>
<html><a href="javascript:;" title="show plugin defined menus" onclick="refreshPageTemplate('Template2');">+ plugins</a></html>
<html><a href="javascript:;" title="show tiddlytool plugins menus only" onclick="refreshPageTemplate('Template3');">TT plugins</a></html>
!Home
<html><a href="javascript:;" tite="redisplay default tiddlers" onclick="story.closeAllTiddlers();restart();">$1</a></html>
!Edit
<html><a href="javascript:void(0)" onclick="story.displayTiddler(null,['$1'], DEFAULT_EDIT_TEMPLATE)">edit</a></html>
!OpenGroup
<html><a href="javascript:void(0)" onclick="story.displayTiddlers(null,store.getTiddlerText('$2').readBracketedList())">$1</a></html>
!CloseOpenGroup
<html><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,store.getTiddlerText('$2').readBracketedList())">$1</a></html>
!OpenGroup2
<html><a href="javascript:void(0)" onclick="story.displayTiddlers(null,['$2','$3','$4','$5','$6','$7','$8','$9'])">$1</a></html>
!CloseOpenGroup2
<html><a href="javascript:void(0)" onclick="story.closeAllTiddlers();story.displayTiddlers(null,['$2','$3','$4','$5','$6','$7','$8','$9'])">$1</a></html>
!Header
<html><span><a href="javascript:;" title="Show/hide the header" onclick="javascript:if(!document.getElementById('header').style.display || document.getElementById('header').style.display == 'block') { document.getElementById('header').style.display = 'none'; } else { document.getElementById('header').style.display = 'block'; } return false;">&nbsp;&#9653;&nbsp;</a></span></html>
!Extra
<html><span><a href="javascript:;" title="Show/hide the extra menu" onclick="javascript:if(!document.getElementById('extraMenu').style.display || document.getElementById('extraMenu').style.display == 'none') { document.getElementById('extraMenu').style.display = 'block'; } else { document.getElementById('extraMenu').style.display = 'none'; } return false;">&nbsp;&bull;&nbsp;</a></span></html>
!Tiddler
<html><span><a href="javascript:;" title="Show/hide the left side menu" onclick="javascript:if(!document.getElementById('extraMenu').style.maxWidth || document.getElementById('extraMenu').style.maxWidth == '40%') { document.getElementById('extraMenu').style.maxWidth = '100%'; document.getElementById('tiddlerDisplay').style.style.display = 'none'; } else { document.getElementById('extraMenu').style.maxWidth = '40%'; document.getElementById('tiddlerDisplay').style.style.display = 'none'; } return false;">&nbsp;&#9663;&nbsp;</a></html>
!Sidemenu
<html><span><a href="javascript:;" title="Show/hide the left side menu" onclick="javascript:if(!document.getElementById('sidemenu').style.display || document.getElementById('sidemenu').style.display == 'block') { document.getElementById('sidemenu').style.display = 'none'; document.getElementById('displayArea').style.marginLeft = '1em'; } else { document.getElementById('sidemenu').style.display = 'block'; document.getElementById('displayArea').style.marginLeft = '1em'; } return false;">&nbsp;&bull;&nbsp;</a></html>
!Sidebar
<html><span><a href="javascript:;" title="Show/hide the right side bar" onclick="javascript:if(!document.getElementById('sidebar').style.display || document.getElementById('sidebar').style.display == 'none') { document.getElementById('sidebar').style.display = 'block'; document.getElementById('displayArea').style.marginRight = '.5em'; } else { document.getElementById('sidebar').style.display = 'none'; document.getElementById('displayArea').style.marginRight = '.5em'; } return false;">&nbsp;&bull;&nbsp;</a></span></html>
!Footer
<html><span><a href="javascript:;" title="Show/hide the bottom menu" onclick="javascript:if(!document.getElementById('floatingFooter').style.display || document.getElementById('floatingFooter').style.display == 'block') { document.getElementById('floatingFooter').style.display = 'none'; } else { document.getElementById('floatingFooter').style.display = 'block'; } return false;">&nbsp;&#9663;&nbsp;</a></span></html>
!0
%/
<<tiddler Pop##Right with: "&nbsp;> " AccordionMenu ok>> <<tiddler SiteMenu##extra with: "$1" "Accordion" "$3" "AccordionMenu" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " TabTags ok>> <<tiddler SiteMenu##extra with: "$1" "All Tags" "$3" TabTags "show all tags">>
<<tiddler Pop##Right with: "&nbsp;> " TabAll>> <<tiddler SiteMenu##extra with: "$1" Alphabetical "$3" TabAll "show all alphabetical">>
<<tiddler Pop##Right with: "&nbsp;> " ButtonMenu ok "" 47em>> <<tiddler SiteMenu##extra with: "$1" "Browse" "$3" "ButtonMenu" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " CloudMenu ok>> <<tiddler SiteMenu##extra with: "$1" "Cloud" "$3" "CloudMenu" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " Configuration ok "" 60em>> <<tiddler SiteMenu##extra with: "$1" "Configure" "$3" "Configuration" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " CrumbsMenu ok>> <<tiddler SiteMenu##extra with: "$1" "Crumbs" "$3" "CrumbsMenu" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " Diagonally ok>> <<tiddler SiteMenu##extra with: "$1" "Diagonally" "$3" "Diagonally" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " DropMenu ok "" 25em>> <<tiddler SiteMenu##extra with: "$1" "Dropdown" "$3" "DropMenu" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " SideBarOptions ok>> <<tiddler SiteMenu##extra with: "$1" "Edit Options" "$3" SideBarOptions "show edit options">>
<<tiddler Pop##Right with: "&nbsp;> " GridMenu ok>> <<tiddler SiteMenu##extra with: "$1" "Grided" "$3" "GridMenu" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " ImageMenu ok>> <<tiddler SiteMenu##extra with: "$1" "Imaged" "$3" "ImageMenu" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " NestedMenu ok>> <<tiddler SiteMenu##extra with: "$1" "Nested" "$3" "NestedMenu" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " QuickMenu ok "" 25em>> <<tiddler SiteMenu##extra with: "$1" "Quick Pick" "$3" "QuickMenu" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " RelatedMenu ok>> <<tiddler SiteMenu##extra with: "$1" "Related" "$3" "RelatedMenu" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " TabMoreShadowed ok>> <<tiddler SiteMenu##extra with: $1 Shadowed $3 TabMoreShadowed "show shadowed tiddlers">>
<<tiddler Pop##Right with: "&nbsp;> " SliceMenu ok>> <<tiddler SiteMenu##extra with: "$1" "Slices" "$3" "SliceMenu" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " SliderMenu ok>> <<tiddler SiteMenu##extra with: "$1" "Sliders" "$3" "SliderMenu" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " TocMenu ok>> <<tiddler SiteMenu##extra with: "$1" "TOC" "$3" "TocMenu" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " TagTree ok>> <<tiddler SiteMenu##extra with: "$1" "Tagtree" "$3" "TagTree" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " TestTiddler ok>> <<tiddler SiteMenu##extra with: "$1" "Testing" "$3" "TestTiddler" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " TabTimeline ok>> <<tiddler SiteMenu##extra with: "$1" Timeline "$3" TabTimeline "show timeline">>
<<tiddler Pop##Right with: "&nbsp;> " ToolMenu ok>> <<tiddler SiteMenu##extra with: "$1" "Tools" "$3" "ToolMenu" "show menu">>
<<tiddler Pop##Right with: "&nbsp;> " SwitchMenu##Tree ok>> <<tiddler SiteMenu##extra with: "$1" "Treeview" "$3" "TreeMenu" "show menu">>/%
!Tree
:{{indent{<<tiddler TreeMenu>>}}}
!
%/
<html><style type="text/css">#extraMenu #tiddlerSym br{display:none}</style></html>
{{floatleft tiny{<<tiddler Switch##Edit with: Sym>>}}}
<<tiddler Sym##1
with:"	">><<tiddler Sym##1
with:"&#9998;">><<tiddler Sym##1
with:"&#9786;">><<tiddler Sym##1
with:"&times;">><<tiddler Sym##1
with:"&#10003;">><<tiddler Sym##1
with:"[[">><<tiddler Sym##1
with:"]]">><<tiddler Sym##1
with:"|">><<tiddler Sym##1
with:"~">><<tiddler Sym##1
with:"^">><<tiddler Sym##1
with:"*">><<tiddler Sym##1
with:"#">><<tiddler Sym##1
with:"<<">><<tiddler Sym##1
with:"\>\>">><<tiddler Sym##1
with:"{{{">><<tiddler Sym##1
with:"}}}">><<tiddler Sym##1
with:"\">><<tiddler Sym##1
with:"&mdash;">><<tiddler Sym##1
with:"&larr;">><<tiddler Sym##1
with:"&uarr;">><<tiddler Sym##1
with:"&darr;">><<tiddler Sym##1
with:"&rarr;">><<tiddler Sym##1
with:"&harr;">><<tiddler Sym##1
with:"&uArr;">><<tiddler Sym##1
with:"&dArr;">><<tiddler Sym##1
with:"&lArr;">><<tiddler Sym##1
with:"&rArr;">><<tiddler Sym##1
with:"&iexcl;">><<tiddler Sym##1
with:"&iquest;">><<tiddler Sym##1
with:"&ldquo;">><<tiddler Sym##1
with:"&rdquo;">><<tiddler Sym##1
with:"&alpha;">><<tiddler Sym##1
with:"&beta;">><<tiddler Sym##1
with:"&gamma;">><<tiddler Sym##1
with:"&micro;">><<tiddler Sym##1
with:"&#247;">><<tiddler Sym##1
with:"&frac14;">><<tiddler Sym##1
with:"&frac12;">><<tiddler Sym##1
with:"&frac34;">><<tiddler Sym##1
with:"&permil;">><<tiddler Sym##1
with:"&deg;">><<tiddler Sym##1
with:"&sup1;">><<tiddler Sym##1
with:"&sup2;">><<tiddler Sym##1
with:"&sup3;">><<tiddler Sym##1
with:"&bull;">><<tiddler Sym##1
with:"&sum;">><<tiddler Sym##1
with:"&#10003;">><<tiddler Sym##1
with:"&#256;">><<tiddler Sym##1
with:"&#257;">><<tiddler Sym##1
with:"&#298;">><<tiddler Sym##1
with:"&#299;">><<tiddler Sym##1
with:"&#362;">><<tiddler Sym##1
with:"&#363;">><<tiddler Sym##1
with:"&#7692;">><<tiddler Sym##1
with:"&#7693;">><<tiddler Sym##1
with:"&#7734;">><<tiddler Sym##1
with:"&#7735;">><<tiddler Sym##1
with:"&#7744;">><<tiddler Sym##1
with:"&#7745;">><<tiddler Sym##1
with:"&#7746;">><<tiddler Sym##1
with:"&#7747;">><<tiddler Sym##1
with:"&#7748;">><<tiddler Sym##1
with:"&#7749;">><<tiddler Sym##1
with:"&#7750;">><<tiddler Sym##1
with:"&#7751;">><<tiddler Sym##1
with:"&#7788;">><<tiddler Sym##1
with:"&#7789;">><<tiddler Sym##1
with:"&#209;">><<tiddler Sym##1
with:"&#241;">><<tiddler Sym##1
with:"<br>">><<tiddler {{
    if (window.trackingFocus!=true) {
        window.lastFocusedElement = null;
        window.focusedElement = null;
        window.trackingFocus = true;
        document.addEventListener("focus", function(event) {
            if ((event.target.type=='textarea') && (event.target.name!='tabSepTable'))
                window.lastFocusedElement = event.target
            }, true);
    }
'';}}>>/%
!1
<html><form name="FindAndInsertForm1" OnClick="addedBit=FindAndInsertForm1.insertText.value;lfe=window.lastFocusedElement;se=lfe.selectionEnd;sl=lfe.selectionEnd-lfe.selectionStart;lfe.value=lfe.value.substring(0,lfe.selectionStart)+addedBit+lfe.value.substring(se);lfe.focus();lfe.selectionStart=se+addedBit.length-sl;lfe.selectionEnd=se+addedBit.length-sl;"><INPUT type=hidden name="insertText"><div><INPUT TYPE="button" NAME="fileName" value="$1" OnClick="FindAndInsertForm1.insertText.value=this.value" class="insBtn"></div></form></form></html>
!0
%/
/* Tabs button style by MorrisGray http://twhelp.tiddlyspot.com/ */
/*{{{*/
.wrappingClass .tabContents{background:transparent !important;border:0px;margin-top:0;margin-bottom:.1em}
.wrappingClass .tabSelected, .popup .tabSelected{background:url([[Ico##tab-selected]]) repeat-x top left;top left;background-color:#fcb;font-size:1em;font-weight:normal;color:#a00;text-decoration:none;border:1px 1px 1px 1px solid #999}
.wrappingClass .tabUnselected, popup .tabSelected{background:url([[Ico##tab-unselected]]) repeat-x top left;top left;background-color:#eee;font-size:1em;font-weight:normal;color:#008;text-decoration:none;border-top:1px solid #999;border-right:1px solid #999}
.wrappingClass .tabset{/*text-align:center;*/padding:1% 0 0 0 !important}
.wrappingClass .tab{margin:0 0 0 2% !important;padding:1px 3px 1px 4px;-moz-border-radius: 3px 3px 3px 3px !important}
/*}}}*/
<<tabs txtSlideTab
"" "" ""
"Switch" "switch all menus" TabMenu##switch
"MenuFlex " "show all menuFlex theme tiddlers" TabMenu##menuFlex
"Menus " "show all main menus" TabMenu##Menu
"Html " "show all tiddlers with Html scrips" TabMenu##htm
"Favlet " "show all bookmarklets" TabMenu##favlet
"Timeline " "show timeline" TabTimeline
"All " "show all tiddlers" TabAll
"Tags " "show all tags" TabTags
"More " "shadowed tiddlers" TabMoreShadowed
"Edit " "show edit options" TabMenu##edit>>/%
!switch
<<tiddler SwitchMenu>>
*<<tiddler SiteMenu##extra with: "$1" "Accordion" "$3" "AccordionMenu" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Browsers" "$3" "BrowseMenu" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Buttons" "$3" "ButtonMenu" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Cloud" "$3" "CloudMenu" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Configuration" "$3" "Configuration" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Crumbs" "$3" "CrumbsMenu" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Dropdown" "$3" "DropMenu" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Grided" "$3" "GridMenu" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Imaged" "$3" "ImageMenu" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Main" "$3" "MainMenu" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Nested" "$3" "NestedMenu" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Quick Pick" "$3" "QuickMenu" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Related" "$3" "RelatedMenu" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Slices" "$3" "SliceMenu" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Sliders" "$3" "SliderMenu" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Tagtree" "$3" "TagTree" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Testing" "$3" "TestTiddler" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "TOC" "$3" "TocMenu" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Tools" "$3" "ToolMenu" "show menu">>
*<<tiddler SiteMenu##extra with: "$1" "Treeview" "$3" "TreeMenu" "show menu">>
!how
<<list filter "[tag[HowTo]] [tag[b.SiteMenu]] [tag[c.Menu]] [tag[d.TemplateBody]]">>
!menuFlex
<<list filter [tag[menuFlex]]>>
!Menu
<<list filter [tag[Menu]]>>
!htm
<<list filter [tag[htm]]>>
!favlet
<<list filter [tag[favlet]]>>
!edit
<<tiddler SideBarOptions>>
!0
%/
/***
|Name|TableOfContentsPlugin|
|Source|http://www.TiddlyTools.com/#TableOfContentsPlugin|
|Documentation|http://www.TiddlyTools.com/#TableOfContentsPluginInfo|
|Version|2.4.3|
|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|replace the standard tabbed contents list with a scrolling listbox|
When there are many tiddlers in a document, the standard 'tabbed list of tiddlers' in the right-hand sidebar can become very long, occupying a lot of page space and requiring a lot scrolling in order to locate and select a tiddler.  The TableOfContentsPlugin addresses this problem by replacing the standard tabbed list display with a single listbox/droplist control that uses a very small amount of page space, regardless of the number of tiddlers in the document.
!!!!!Documentation
>see [[TableOfContentsPluginInfo]]
!!!!!Configuration
<<option chkTOCShow>> display table of contents listbox
<<option chkTOCIncludeHidden>> include tiddlers tagged with <<tag excludeLists>> in listbox
listbox shows <<option txtTOCListSize>> lines, sorted by <<option txtTOCSortBy>>
!!!!!Revisions
<<<
2008.04.09 [2.4.3] restored config.options.chkTOCShow and onClickTOCMenu() handler
|please see [[TableOfContentsPluginInfo]] for additional revision details|
2005.06.13 [1.0.0] Initial Release (as adaptation - predates TiddlyWiki plugin architecture!!)
<<<
!!!!!Code
***/
//{{{
version.extensions.TableOfContentsPlugin= {major: 2, minor: 4, revision: 3, date: new Date(2008,4,9)};
//}}}

// // 1.2.x compatibility
//{{{
if (!window.story) window.story=window;
if (!store.getTiddler) store.getTiddler=function(title){return store.tiddlers[title]}
if (!store.addTiddler) store.addTiddler=function(tiddler){store.tiddlers[tiddler.title]=tiddler}
if (!store.deleteTiddler) store.deleteTiddler=function(title){delete store.tiddlers[title]}
//}}}

//{{{
// define defaults for cookie-based option values
if (config.options.txtTOCSortBy==undefined)	config.options.txtTOCSortBy="modified";
if (config.options.txtTOCListSize==undefined)	config.options.txtTOCListSize=19;
if (config.options.chkTOCShow==undefined)	config.options.chkTOCShow=true;
if (config.options.chkTOCIncludeHidden==undefined)	config.options.chkTOCIncludeHidden=false;

// define macro "tableOfContents" to render controls
config.macros.tableOfContents = { label: "contents" };
config.macros.tableOfContents.cmdMax=8; // index of maximum command item

config.macros.tableOfContents.css = '\
.TOC { padding:0.5em 1em 0.5em 1em; }\
.TOC a { padding:0em 0.25em 0em 0.25em; color:inherit; }\
.TOCList { width: 100%; font-size:8pt; margin:0em; }\
';

config.macros.tableOfContents.html = '\
<div style="text-align:right">\
	<span style="float:left">\
	<a href="JavaScript:;" id="TOCMenu" style="padding: 0em;"\
		onclick="onClickTOCMenu(this)" title="show/hide table of contents">%label%</a>\
	</span>\
	<a href="JavaScript:;" id="TOCSmaller" style="display:inline"\
		onclick="resizeTOC(this)" title="reduce list size">&#150;</a>\
	<a href="JavaScript:;" id="TOCLarger"style="display:inline"\
		onclick="resizeTOC(this)" title="increase list size">+</a>\
	<a href="JavaScript:;" id="TOCMaximize"style="display:inline"\
		onclick="resizeTOC(this)" title="maximize/restore list size">=</a>\
</div>\
';

config.macros.tableOfContents.handler = function(place,macroName,params) { 
	var parsedParams = new Array();
	parsedParams['label']=this.label;
	parsedParams['inline']=false;
	while (params.length>0) {
		if (params[0]=="label:none") parsedParams['label']="";
		else if (params[0].substr(0,6)=="label:") parsedParams['label']=params[0].substr(6);
		if (params[0].substr(0,7)=="prompt:") parsedParams['prompt']=params[0].substr(7);
		if (params[0].substr(0,8)=="padding:")parsedParams['padding']=params[0].substr(8);
		if (params[0].substr(0,7)=="margin:") parsedParams['margin']=params[0].substr(7);
		if (params[0].substr(0,5)=="sort:")   parsedParams['sortby']=params[0].substr(5);
		if (params[0].substr(0,5)=="date:")   parsedParams['date']=params[0].substr(5);
		if ((params[0]=="size:auto")||(params[0]=="size:0")) parsedParams['autosize']=true;
		else if (params[0] && (params[0].substr(0,5)=="size:")) parsedParams['requestedSize']=params[0].substr(5);
		if (params[0].substr(0,6)=="width:") parsedParams['width']=params[0].substr(6);
		if (params[0]=="hidelist") parsedParams['hidelist']=true;
		if (params[0]=="inline")   parsedParams['inline']=true;
		if (params[0]=="-title")   parsedParams['hide_title']=true;
		if (params[0]=="-date")    parsedParams['hide_date']=true;
		if (params[0]=="-author")  parsedParams['hide_author']=true;
		if (params[0]=="-creator") parsedParams['hide_creator']=true;
		if (params[0]=="-tags")    parsedParams['hide_tags']=true;
		if (params[0]=="-missing") parsedParams['hide_missing']=true;
		if (params[0]=="-orphans") parsedParams['hide_orphans']=true;
		if (params[0]=="-shadows") parsedParams['hide_shadows']=true;
		params.shift(); 
	}
	setStylesheet(config.macros.tableOfContents.css,"tableOfContents");
	var newTOC=createTiddlyElement(place,parsedParams['inline']?"span":"div",null,"TOC",null)
	if (parsedParams['margin'])	{ newTOC.style.margin=parsedParams['margin']; }
	if (parsedParams['padding'])	{ newTOC.style.padding=parsedParams['padding']; }
	if (parsedParams['label']!="") newTOC.innerHTML=config.macros.tableOfContents.html.replace(/%label%/,parsedParams['label']);
	var newTOCList=createTOCList(newTOC,parsedParams)
	refreshTOCList(newTOCList);
	store.addNotification(null,reloadTOCLists);	// reload listbox after every tiddler change
}

// IE needs explicit global scoping for functions/vars called from browser events
window.onChangeTOCList=onChangeTOCList;
window.onClickTOCList=onClickTOCList;
window.onDblClickTOCList=onDblClickTOCList;
window.reloadTOCLists=reloadTOCLists;
window.refreshTOCList=refreshTOCList;
window.onClickTOCMenu=onClickTOCMenu;
window.resizeTOC=resizeTOC;
	
function createTOCList(place,params) {
	var list = createTiddlyElement(place,"select",null,"TOCList",params['prompt'])
	list.params=params;
	list.onchange=onChangeTOCList;
	list.onclick=onClickTOCList;
	list.ondblclick=onDblClickTOCList;
	list.onkeyup=onKeyUpTOCList;
	list.style.display=config.options.chkTOCShow ? "block" : "none" ;
	list.sortBy=config.options.txtTOCSortBy;
	list.dateFormat="DD MMM YYYY";
	list.requestedSize=config.options.txtTOCListSize;
	list.expandall=false;
	list.cmdMax=config.macros.tableOfContents.cmdMax;
	if (params['hide_title'])   list.cmdMax--;
	if (params['hide_date'])    list.cmdMax--;
	if (params['hide_author'])  list.cmdMax--;
	if (params['hide_creator']) list.cmdMax--;
	if (params['hide_tags'])    list.cmdMax--;
	if (params['hide_missing']) list.cmdMax--;
	if (params['hide_orphans']) list.cmdMax--;
	if (params['hide_shadows']) list.cmdMax--;
	if (params['sortby'])       { list.sortBy=params['sortby']; list.noSortCookie=true; }
	if (params['date'])         { list.dateFormat=params['date']; }
	if (params['autosize'])     { list.autosize=true; list.noSizeCookie=true; }
	if (params['requestedSize']){ list.requestedSize=params['requestedSize']; list.noSizeCookie=true; }
	if (params['width'])        { list.style.width=params['width']; }
	if (params['hidelist'])     { list.style.display ="none" ; list.noShowCookie=true; }
	if (params['expandall'])    { list.expandall=true; }
	return list;
}

function onChangeTOCList() {
	var thisTiddler=this.options[this.selectedIndex].value;
	if ((this.size==1)&&(thisTiddler!='')&&(this.selectedIndex>this.cmdMax))
		story.displayTiddler(null,thisTiddler,1);
	refreshTOCList(this);
	return false;
}
function onClickTOCList(e) {
	if (!e) var e = window.event;
	if (this.size==1) return; // don't toggle display for droplist
	if (e.shiftKey) { this.expandall=!this.expandall; refreshTOCList(this);}
	e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation();
	return true;
}
function onDblClickTOCList(e) {
	if (!e) var e = window.event;
	var thisTiddler=this.options[this.selectedIndex].value;
	if ((thisTiddler!='')&&(this.selectedIndex>this.cmdMax))
		story.displayTiddler(null,thisTiddler,1);
	e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation();
	return false;
}
function onKeyUpTOCList(e) {
	if (!e) var e = window.event;
	if (e.keyCode!=13) return true;
	var thisTiddler=this.options[this.selectedIndex].value;
	if ((thisTiddler!='')&&(this.selectedIndex>this.cmdMax))
		story.displayTiddler(null,thisTiddler,1);
	e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation();
	return false;
}
function reloadTOCLists() {
	var all=document.all? document.all.tags("select") : document.getElementsByTagName("select");
	for (var i=0; i<all.length; i++)
		if (all[i].className=="TOCList")
			{ all[i].selectedIndex=-1; refreshTOCList(all[i]); }
}
 
function refreshTOCList(list) {
	var selectedIndex = list.selectedIndex;
	if (selectedIndex==-1) selectedIndex=0;
	var sortBy = list.sortBy;
	var showHidden = config.options.chkTOCIncludeHidden && !(config.options.chkHttpReadOnly && readOnly);

	if (selectedIndex==0) sortBy=list.sortBy;	// "nnn tiddlers" heading - use previous sort order
	else if (selectedIndex<=list.cmdMax)sortBy=list.value;
	else { if (list.options[list.selectedIndex].value=='') expandTOC(list); return; }

	list.sortBy = sortBy; // save current sort order
	if (!list.noSortCookie) { config.options.txtTOCSortBy=sortBy; saveOptionCookie("txtTOCSortBy"); }

	// get the list of tiddlers
	var tiddlers = [];
	switch (sortBy) {
		case "missing":	tiddlers=store.getMissingLinks(); break;
		case "tags": tiddlers=store.getTags(); break;
		case "orphans":	tiddlers=store.getOrphans(); break;
		case "shadows": for (var t in config.shadowTiddlers) tiddlers.push(t); tiddlers.sort();	break;
		default: tiddlers=store.getTiddlers(sortBy=='creator'?'modifier':sortBy,showHidden?'':'excludeLists'); break;
	}

	// clear current listbox contents
	while (list.length > 0) { list.options[0] = null; }
	list.saved=null;

	// add heading and control items to list
	var i=0;
	var theHeading=tiddlers.length+' tiddlers:';
	if (sortBy=='missing') theHeading=tiddlers.length+' missing tiddlers:';
	if (sortBy=='orphans') theHeading=tiddlers.length+' orphaned tiddlers:';
	if (sortBy=='tags')    theHeading=tiddlers.length+' tags:';
	if (sortBy=='shadows') theHeading=tiddlers.length+' shadow tiddlers:';
	var indent=String.fromCharCode(160)+String.fromCharCode(160);
	var sel=">";
	list.options[i++]=new Option(theHeading,'');
	function headerOpt(txt,val) { return new Option(((sortBy==val)?sel:indent)+' ['+txt+']',val); }
	if (!list.params['hide_title'])   list.options[i++]=headerOpt('by title','title');
	if (!list.params['hide_date'])    list.options[i++]=headerOpt('by date','modified');
	if (!list.params['hide_author'])  list.options[i++]=headerOpt('by author','modifier');
	if (!list.params['hide_creator']) list.options[i++]=headerOpt('by creator','creator');
	if (!list.params['hide_tags'])    list.options[i++]=headerOpt('by tags','tags');
	if (!list.params['hide_missing']) list.options[i++]=headerOpt('missing','missing');
	if (!list.params['hide_orphans']) list.options[i++]=headerOpt('orphans','orphans');
	if (!list.params['hide_shadows']) list.options[i++]=headerOpt('shadows','shadows');
	// output the tiddler list
	switch(sortBy) {
		case "title":
			for (var t = 0; t < tiddlers.length; t++)
				list.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title);
			break;
		case "modified":
		case "modifier":
		case "creator":
			if (sortBy=="modified") tiddlers.reverse(); // show newest first
			if (sortBy=="creator") { // sort by custom field with fallback value
				tiddlers.sort(function (a,b) {
					var v1=a.fields.creator||a.modifier;
					var v2=b.fields.creator||b.modifier;
					return (v1==v2)?0:(v1>v2?1:-1);
				});
			}
			var lastSection = "";
			for (var t = 0; t < tiddlers.length; t++){
				var tiddler = tiddlers[t];
				var theSection = "";
				var m=tiddler.modified;
				if (sortBy=="modified") theSection=m.getFullYear()+'.'+(m.getMonth()+1)+'.'+m.getDate();
				if (sortBy=="modifier") theSection = tiddler.modifier;
				if (sortBy=="creator") theSection=tiddler.fields['creator']||tiddler.modifier;
				if (theSection != lastSection) {
					lastSection = theSection;
					if (sortBy=="modified") theSection = m.formatString(list.dateFormat);
					list.options[i++] = new Option('+ '+theSection,"");
				}
				list.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title);
			}
			expandTOC(list);
			break;
		case "tags":
			// tagged tiddlers, by tag
			var tagcount=0;
			var lastTag = null;
			for (var t = 0; t < tiddlers.length; t++) {  // actually a list of tags, not tiddlers... 
				var theTag = tiddlers[t][0]; var tid=store.getTiddler(theTag);
				if (tid && tid.isTagged('excludeLists')) continue; // skip excluded tags
				var temp = store.getTaggedTiddlers(theTag);
				var tagged=[]; for (var q=0; q<temp.length; q++) // hide excluded tiddlers
					if (!temp[q].isTagged('excludeLists')) tagged.push(temp[q]); 
				if (tagged.length) { tagcount++;
					list.options[i++]=new Option('+ '+theTag+" ("+tagged.length+")","");
					for(var r=0; r<tagged.length; r++)
						list.options[i++]=
							new Option(indent+indent+tagged[r].title,tagged[r].title);
				}
			}
			// count untagged tiddlers
			var temp = store.getTiddlers("title");
			var c=0; for (var r=0; r<temp.length;r++) if (!temp[r].tags.length) c++;
			// create 'pseudo-tag' listing untagged tiddlers (if any)
			if (c>0) {
				list.options[i++] = new Option("+ untagged ("+c+")","");
				for (var r=0; r<temp.length;r++) if (!temp[r].tags.length)
					list.options[i++] = new
						Option(indent+indent+temp[r].title,temp[r].title);
			}
			list.options[0].text=tagcount+' tags:';
			expandTOC(list);
			break;
		case "missing": case "orphans": case "shadows":
			for (var t = 0; t < tiddlers.length; t++)
				list.options[i++] = new Option(tiddlers[t],tiddlers[t]);
			break;
	}
	list.selectedIndex=selectedIndex; // select current control item
	list.size = (list.autosize)?list.options.length:list.requestedSize;
}

// show/hide branch of TOCList based on current selection
function expandTOC(list) {
	var selectedIndex = list.selectedIndex;
	if (selectedIndex==-1) selectedIndex=0;
	var sortBy = list.sortBy;

	// don't collapse/expand list for alpha-sorted "flatlist" TOC contents
	// or list control items
	if ((sortBy=="title")||(sortBy=="missing")||(sortBy=="orphans")||(sortBy=="shadows")) return;
	if ((selectedIndex>0)&&(selectedIndex<=list.cmdMax)) return;

	// get current selected text/value and cache the 
	// complete list.  Then clear the current list contents
	var theText = list.options[selectedIndex].text;
	var theValue = list.options[selectedIndex].value;
	if (!list.saved) {
		list.saved=new Array();
		for (var i=0;i<list.length;i++) list.saved[i]=list.options[i];
	}
	while (list.length > 0) { list.options[0] = null; }

	// put back heading items until item text matches current selected heading
	var i=0;
	for (var t=0; t<list.saved.length; t++) {
		var opt=list.saved[t];
		if (list.expandall||(opt.value=='')||(i<=list.cmdMax)) list.options[i++] = opt;
		if (opt.text==theText) break;
	}
	selectedIndex=i-1;	// this is the NEW index of the current selected heading
	// put back items with value!='' until value==''
	for ( t++; t<list.saved.length; t++) {
		var opt=list.saved[t];
		if (list.expandall||opt.value!='') list.options[i++] = opt;
		if (opt.value=='') break;
	}
	// put back remaining items with value==''
	for ( ; t<list.saved.length; t++) {
		var opt=list.saved[t];
		if (list.expandall||opt.value=='') list.options[i++] = opt;
	}
	list.selectedIndex = selectedIndex;
	list.size = (list.autosize)?list.options.length:list.requestedSize;
}

// these functions process clicks on the 'control links' that are displayed above the listbox
function getTOCListFromButton(which) {
	var list = null;
	switch (which.id) {
		case 'TOCMenu':
			var theSiblings = which.parentNode.parentNode.parentNode.childNodes;
			var thePlace=which.parentNode.parentNode.parentNode.parentNode.parentNode.id;
			break;
		case 'TOCSmaller': case 'TOCLarger': case 'TOCMaximize':
			var theSiblings = which.parentNode.parentNode.childNodes;
			var thePlace=which.parentNode.parentNode.parentNode.parentNode.id;
			break;
	}
	for (var k=0; k<theSiblings.length; k++)
		if (theSiblings[k].className=="TOCList") { list=theSiblings[k]; break; }
	return list;
}
function onClickTOCMenu(which) {
	var list=getTOCListFromButton(which); if (!list) return;
	var opening = list.style.display=="none";
	if(config.options.chkAnimate) anim.startAnimating(new Slider(list,opening,false,"none"));
	else list.style.display = opening ? "block" : "none" ;
	if (!list.noShowCookie) { config.options.chkTOCShow = opening; saveOptionCookie("chkTOCShow"); }
	return(false);
}
function resizeTOC(which) {
	var list=getTOCListFromButton(which); if (!list) return;
	var size = list.size;
	if (list.style.display=="none")	// make sure list is visible
		if(config.options.chkAnimate) anim.startAnimating(new Slider(list,true,false,"none"));
		else list.style.display = "block" ;
	switch (which.id) {
		case 'TOCSmaller':	// decrease current listbox size
			if (list.autosize) { list.autosize=false; size=config.options.txtTOCListSize; }
			if (size==1)	break;
			size -= 1;	// shrink by one line
			list.requestedSize = list.size = size;
			break;
		case 'TOCLarger':	// increase current listbox size
			if (list.autosize) { list.autosize=false; size=config.options.txtTOCListSize; }
			if (size>=list.options.length)	break;
			size += 1;	// grow by one line
			list.requestedSize = list.size = size;
			break;
		case 'TOCMaximize':	// toggle autosize
			list.autosize  = (list.size!=list.options.length);
			list.size = (list.autosize)?list.options.length:list.requestedSize;
			break;
	}
	if (!list.noSizeCookie && !list.autosize)
		{ config.options.txtTOCListSize=size; saveOptionCookie("txtTOCListSize"); }
}
//}}}
/***
CSS by DaveBirss.
***/
/*{{{*/
.whiteGray .button{color:#666}
.whiteGray .tabContents{color:#000}
.whiteGray .tabContents .tiddlyLink{border:none;color:#999}
.whiteGray .tabSelected{background:#fff;border-bottom:0;border-left:solid 1px #ccc;border-right:solid 1px #ccc;border-top:solid 1px #ccc;color:#000}
.whiteGray .tabUnselected{background:#eee;border-bottom:0;border-left:solid 1px #ccc;border-right:solid 1px #ccc;border-top:solid 1px #ccc;color:#999}
.tabSelected, .whiteGray,.whiteGray .tabContents,.whiteGray .txtMoreTab .tabSelected,.whiteGray .txtMoreTab .tabContents{background:#fff}
.tabUnselected, .whiteGray .txtMoreTab .tabUnselected{background:#eee}
.whiteGray .tabContents .button:hover{background:#fff;color:#000}
.whiteGray .tabContents .tiddlyLink:hover{background:#fff;border:none;color:#000}
/*}}}*/
/***
|Name|TagCloudPlugin|
|Source|http://www.TiddlyTools.com/#TagCloudPlugin|
|Version|1.6.0|
|Author|Eric Shulman|
|Original Author|Clint Checketts|
|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||
|Description|present a 'cloud' of tags (or links) using proportional font display|
!Usage
<<<
{{{
<<cloud type action:... limit:... tag tag tag ...>>
<<cloud type action:... limit:... +TiddlerName>>
<<cloud type action:... limit:... =tagvalue>>
}}}
where:
* //type// is a keyword, one of:
** ''tags'' (default) - displays a cloud of tags, based on frequency of use
** ''links'' - displays a cloud of tiddlers, based on number of links //from// each tiddler
** ''references'' - displays a cloud of tiddlers, based on number of links //to// each tiddler
* ''action:popup'' (default) - clicking a cloud item shows a popup with links to related tiddlers<br>//or//<br> ''action:goto'' - clicking a cloud item immediately opens the tiddler corresponding to that item
* ''limit:N'' (optional) - restricts the cloud display to only show the N most popular tags/links
* ''tag tag tag...'' (or ''title title title'' if ''links''/''references'' is used)<br>shows all tags/links in the document //except// for those listed as macro parameters
* ''+TiddlerName''<br>shows tags/links read from a space-separated, bracketed list stored in a separate tiddler.
* ''=tagvalue'' (//only if type=''tags''//)<br>shows only tags that are themselves tagged with the indicated tag value (i.e., ~TagglyTagging usage)
//note: for backward-compatibility, you can also use the macro {{{<<tagCloud ...>>}}} in place of {{{<<cloud ...>>}}}//
<<<
!Examples
<<<
//all tags excluding<<tag systemConfig>>, <<tag excludeMissing>> and <<tag script>>//
{{{<<cloud systemConfig excludeMissing script>>}}}
{{groupbox{<<cloud systemConfig excludeMissing script>>}}}
//top 10 tags excluding<<tag systemConfig>>, <<tag excludeMissing>> and <<tag script>>//
{{{<<cloud limit:10 systemConfig excludeMissing script>>}}}
{{groupbox{<<cloud limit:10 systemConfig excludeMissing script>>}}}
//tags listed in// [[FavoriteTags]]
{{{<<cloud +FavoriteTags>>}}}
{{groupbox{<<cloud +FavoriteTags>>}}}
//links to tiddlers tagged with 'package'//
{{{<<cloud action:goto =package>>}}}
{{groupbox{<<cloud action:goto =package>>}}}
//top 20 most referenced tiddlers//
{{{<<cloud references limit:20>>}}}
{{groupbox{<<cloud references limit:20>>}}}
//top 20 tiddlers that contain the most links//
{{{<<cloud links limit:20>>}}}
{{groupbox{<<cloud links limit:20>>}}}
<<<
!Revisions
<<<
2009.02.26 [1.6.0] added {{{action:...}}} parameter to apply popup vs. goto action when clicking cloud items
2009.02.05 [1.5.0] added ability to show links or back-links (references) instead of tags and renamed macro to {{{<<cloud>>}}} to reflect more generalized usage.
2008.12.16 [1.4.2] corrected group calculation to prevent 'group=0' error
2008.12.16 [1.4.1] revised tag filtering so excluded tags don't affect calculations
2008.12.15 [1.4.0] added {{{limit:...}}} parameter to restrict the number of tags displayed to the top N most popular
2008.11.15 [1.3.0] added {{{+TiddlerName}}} parameter to include only tags that are listed in the indicated tiddler
2008.09.05 [1.2.0] added '=tagname' parameter to include only tags that are themselves tagged with the specified value (i.e., ~TagglyTagging usage)
2008.07.03 [1.1.0] added 'segments' property to macro object.  Extensive code cleanup
<<<
!Code
***/
//{{{
version.extensions.TagCloudPlugin= {major: 1, minor: 6 , revision: 0, date: new Date(2009,2,26)};
//Originally created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman
//Currently maintained and enhanced by Eric Shulman
//}}}
//{{{
config.macros.cloud = {
	tagstip: "%1 tiddlers tagged with '%0'",
	refslabel: " (%0 references)",
	refstip: "%1 tiddlers have links to '%0'",
	linkslabel: " (%0 links)",
	linkstip: "'%0' has links to %1 other tiddlers",
	groups: 9,
	init: function() {
		config.macros.tagCloud=config.macros.cloud; // for backward-compatibility
		config.shadowTiddlers.TagCloud='<<cloud>>';
		config.shadowTiddlers.StyleSheetTagCloud=
			'/*{{{*/\n'
			+'.tagCloud span {line-height: 3.5em; margin:3px;}\n'
			+'.tagCloud1{font-size: 80%;}\n'
			+'.tagCloud2{font-size: 100%;}\n'
			+'.tagCloud3{font-size: 120%;}\n'
			+'.tagCloud4{font-size: 140%;}\n'
			+'.tagCloud5{font-size: 160%;}\n'
			+'.tagCloud6{font-size: 180%;}\n'
			+'.tagCloud7{font-size: 200%;}\n'
			+'.tagCloud8{font-size: 220%;}\n'
			+'.tagCloud9{font-size: 240%;}\n'
			+'/*}}}*/\n';
		setStylesheet(store.getTiddlerText('StyleSheetTagCloud'),'tagCloudsStyles');
	},
	getLinks: function(tiddler) { // get list of links to existing tiddlers and shadows
		if (!tiddler.linksUpdated) tiddler.changed();
		var list=[]; for (var i=0; i<tiddler.links.length; i++) {
			var title=tiddler.links[i];
			if (store.isShadowTiddler(title)||store.tiddlerExists(title))
				list.push(title);
		}
		return list;
	},
	handler: function(place,macroName,params) {
		// unpack params
		var inc=[]; var ex=[]; var limit=0; var action='popup';
		var links=(params[0]&&params[0].toLowerCase()=='links'); if (links) params.shift();
		var refs=(params[0]&&params[0].toLowerCase()=='references'); if (refs) params.shift();
		if (params[0]&&params[0].substr(0,7).toLowerCase()=='action:')
			action=params.shift().substr(7).toLowerCase();
		if (params[0]&&params[0].substr(0,6).toLowerCase()=='limit:')
			limit=parseInt(params.shift().substr(6));
		if (params.length) {
			if (params[0].substr(0,1)=='+') { // get tag list from tiddler
				var inc=store.getTiddlerText(params[0].substr(1),'').readBracketedList();
			} else if (params[0].substr(0,1)=='=') { // get tag list using tagged tags
				var tagged=store.getTaggedTiddlers(params[0].substr(1));
				for (var t=0; t<tagged.length; t++) inc.push(tagged[t].title);
			} else ex=params; // exclude params
		}
		// get all items, include/exclude specific items
		var items=[];
		var list=(links||refs)?store.getTiddlers('title','excludeLists'):store.getTags();
		for (var t=0; t<list.length; t++) {
			var title=(links||refs)?list[t].title:list[t][0];
			if (links)	var count=this.getLinks(list[t]).length;
			else if (refs)	var count=store.getReferringTiddlers(title).length;
			else 		var count=list[t][1];
			if ((!inc.length||inc.contains(title))&&(!ex.length||!ex.contains(title)))
				items.push({ title:title, count:count });
		}
		if(!items.length) return;
		// sort by decending count, limit results (optional)
		items=items.sort(function(a,b){return(a.count==b.count)?0:(a.count>b.count?-1:1);});
		while (limit && items.length>limit) items.pop();
		// find min/max and group size
		var most=items[0].count;
		var least=items[items.length-1].count;
		var groupSize=(most-least+1)/this.groups;
		// sort by title and draw the cloud of items
		items=items.sort(function(a,b){return(a.title==b.title)?0:(a.title>b.title?1:-1);});
		var cloudWrapper = createTiddlyElement(place,'div',null,'tagCloud',null);
		for (var t=0; t<items.length; t++) {
			cloudWrapper.appendChild(document.createTextNode(' '));
			var group=Math.ceil((items[t].count-least)/groupSize)||1;
			var className='tagCloudtag tagCloud'+group;
			var tip=refs?this.refstip:links?this.linkstip:this.tagstip;
			tip=tip.format([items[t].title,items[t].count]);
			if (action=='goto') { // TAG/LINK/REFERENCES GOTO
				var btn=createTiddlyLink(cloudWrapper,items[t].title,true,className);
				btn.title=tip;
				btn.style.fontWeight='normal';
			} else if (!links&&!refs) { // TAG POPUP
				var btn=createTiddlyButton(cloudWrapper,items[t].title,tip,onClickTag,className);
				btn.setAttribute('tag',items[t].title);
			} else { // LINK/REFERENCES POPUP
				var btn=createTiddlyButton(cloudWrapper,items[t].title,tip,
					function(ev) { var e=ev||window.event; var cmt=config.macros.cloud;
						var popup = Popup.create(this);
						var title = this.getAttribute('tiddler');
						var count = this.getAttribute('count');
						var refs  = this.getAttribute('refs')=='T';
						var links = this.getAttribute('links')=='T';
						var label = (refs?cmt.refslabel:cmt.linkslabel).format([count]);
						createTiddlyLink(popup,title,true);
						createTiddlyText(popup,label);
						createTiddlyElement(popup,'hr');
						if (refs) {
							popup.setAttribute('tiddler',title);
							config.commands.references.handlePopup(popup,title);
						}
						if (links) {
							var tiddler = store.fetchTiddler(title);
							var links=config.macros.cloud.getLinks(tiddler);
							for(var i=0;i<links.length;i++)
								createTiddlyLink(createTiddlyElement(popup,'li'),
									links[i],true);
						}
						Popup.show();
						e.cancelBubble=true; if(e.stopPropagation) e.stopPropagation();
						return false;
					}, className);
				btn.setAttribute('tiddler',items[t].title);
				btn.setAttribute('count',items[t].count);
				btn.setAttribute('refs',refs?'T':'F');
				btn.setAttribute('links',links?'T':'F');
				btn.title=tip;
			}
		}
	}
};
//}}}
/***
|Name|TagGridPlugin|
|Source|http://www.TiddlyTools.com/#TagGridPlugin|
|Documentation|http://www.TiddlyTools.com/#TagGridPluginInfo|
|Version|1.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||
|Description|Generate a cross-referenced grid of tiddlers, based on tag values|
!!!!!Documentation
>see [[TagGridPluginInfo]]
!!!!!Revisions
<<<
2008.04.21 [1.7.0] added support for "filter:..." param to exclude tiddlers from grid
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info tiddler
2007.12.04 [*.*.*] update for TW2.3.0: replaced deprecated core functions, regexps, and macros
2007.07.24 [1.6.5] corrected handling for @TiddlerName with excluded tags, so that excluded tags are not actually removed from the @TiddlerName source tiddler.
|please see [[TagGridPluginInfo]] for additional revision details|
2006.10.05 [1.0.0] initial release (converted from prototype inline script)
<<<
!!!!!Code
***/
//{{{
version.extensions.TagGridPlugin= {major: 1, minor: 7, revision: 0, date: new Date(2008,4,21)};

config.macros.tagGrid= {
	verbose:false, // display debugging/performance feedback messages
	warn:true,	// display workload warning message before rendering
	threshold:300000, // workload warning threshold (workload=# of comparisons to perform)
	handler:
	function(place,macroName,params) {

		// get columns
		var columntags=params.shift(); var cols=[];
		if ((!columntags)||(columntags=="all")) // no param (or "all") - use all tags
			{ var all=store.getTags(); for (i=0;i<all.length;i++) cols.push(all[i][0]); }
		else if (columntags.substr(0,1)=="+") // get tag list from tiddler content
			{ var t=store.getTiddlerText(columntags.substr(1)); if (t&&t.length) cols=t.readBracketedList(); }
		else if (columntags.substr(0,1)=="@") // get tag list from tiddler tags
			{ var t=store.getTiddler(columntags.substr(1)); if (t&&t.tags) for (i=0;i<t.tags.length;i++) cols.push(t.tags[i]); }
		else if (columntags.substr(0,1)=="=")  // get names of "tagtiddlers" tagged with meta-tag
			{ var t=store.getTaggedTiddlers(columntags.substr(1)); for (i=0;i<t.length;i++) cols.push(t[i].title); }
		else cols=columntags.readBracketedList();
		if (!cols.length) { wikify("~TagGrid: no columns to display\n",place); return; }

		// exclude specific column tags
		if (params[0]&&params[0].substr(0,8)=="exclude:") {
			var ex=params.shift().substr(8).readBracketedList();
			for (x=0; x<ex.length; x++) {
				var i=cols.indexOf(ex[x]);
				if (i!=-1) cols.splice(i,1); // remove excluded tags
			}
		}

		// get rows
		var rowtags=params.shift(); var rows=[];
		if ((!rowtags)||(rowtags=="all")) // no param (or "all") - use all tags
			{ var all=store.getTags(); for (i=0;i<all.length;i++) rows.push(all[i][0]); }
		else if (rowtags.substr(0,1)=="+") // get tag list from tiddler content
			{ var t=store.getTiddlerText(rowtags.substr(1)); if (t&&t.length) rows=t.readBracketedList(); }
		else if (rowtags.substr(0,1)=="@") // get tag list from tiddler tags
			{ var t=store.getTiddler(rowtags.substr(1)); if (t&&t.tags) for (i=0;i<t.tags.length;i++) rows.push(t.tags[i]); }
		else if (rowtags.substr(0,1)=="=")  // get names of "tagtiddlers" tagged with meta-tag
			{ var t=store.getTaggedTiddlers(rowtags.substr(1)); for (i=0;i<t.length;i++) rows.push(t[i].title); }
		else rows=rowtags.readBracketedList();
		if (!rows.length) { wikify("~TagGrid: no rows to display\n",place); return; }

		// exclude specific row tags
		if (params[0]&&params[0].substr(0,8)=="exclude:") {
			var ex=params.shift().substr(8).readBracketedList();
		 	for (x=0; x<ex.length; x++) {
				var i=rows.indexOf(ex[x]);
				if (i!=-1) rows.splice(i,1); // remove excluded tags
			}
		}

		// get optional tiddler filter
		if (params[0]&&params[0].substr(0,7).toUpperCase()=="FILTER:")
			var filter=params.shift().substr(7);

		// get optional flag keywords and/or color gradient endpoints
		var defOpen=false;
		var colorAll=false;
		var sortRows=false;
		var sortColumns=false;
		var showInline=false;
		var p=params.shift();
		while (p) {
			switch (p.toUpperCase()) {
				case "OPEN":
					defOpen=true; break;
				case "COLORALL":
					colorAll=true; break;
				case "SORTROWS":
					sortRows=true; break;
				case "SORTCOLUMNS":
					sortColumns=true; break;
				case "INLINE":
					showInline=true; break;
				default:
					if (startcolor==undefined) var startcolor=p;
					else if (endcolor==undefined) var endcolor=p;
					else alert("unexpected parameter: '"+p+"'");
					break;
			}
			p=params.shift();
		}

		// get the tiddlers
		if (filter&&filter.length)
			var tiddlers=store.filterTiddlers(filter);
		else
			var tiddlers=store.getTiddlers("modified","excludeLists");

		// show "workload warning"... get permission to proceed...
		if (this.warn) {
			var workload=rows.length*cols.length*tiddlers.length;
			var warning="Cross-indexing %0 tiddlers in %1 row%3 by %2 column%4...\n(up to %5 comparisons MAY be needed)\n\n";
			warning+="This may take a while.  It is OK to proceed?";
			warning=warning.format([tiddlers.length,rows.length,cols.length,rows.length!=1?"s":"",cols.length!=1?"s":"",workload]);
			if (workload>this.threshold&&!confirm(warning)) { wikify("~TagGrid: display cancelled by user\n",place); return; }
		}

		// sort row and column tags in decending order, by frequency of use
		if (sortRows||sortColumns) {
			var tags=store.getTags(); var tagcount={}; for (i=0; i<tags.length; i++) tagcount[tags[i][0]]=tags[i][1];
			if (sortRows) rows.sort(function(a,b){return (!tagcount[a]||tagcount[a]<tagcount[b])?+1:(tagcount[a]==tagcount[b]?0:-1);});
			if (sortColumns) cols.sort(function(a,b){return (!tagcount[a]||tagcount[a]<tagcount[b])?+1:(tagcount[a]==tagcount[b]?0:-1);});
		}

		// cross-index tiddlers by tags, building lists of tiddler titles into grid[i][j] (sparse array)
		var time1=new Date();
		var grid=new Array();
		var max=0;  // track maximum cross-index value
		for (var t=0;t<tiddlers.length;t++) { // for each tiddler
			for (var i=0;i<tiddlers[t].tags.length;i++) { // for each tag in tiddler
				var row=rows.indexOf(tiddlers[t].tags[i]); if (row==-1) continue; // this tag not in rows
				if (!grid[row]) grid[row]=new Array(); // create row as needed
				for (var j=0;j<tiddlers[t].tags.length;j++) {  // for each tag in tiddler
					var col=cols.indexOf(tiddlers[t].tags[j]); if (col==-1) continue; // this tag not in columns
					if (!grid[row][col]) grid[row][col]=new Array(); // create cell
					grid[row][col].push("[["+tiddlers[t].title+"]]"); // add tiddler title to cell
					if (max<grid[row][col].length) max=grid[row][col].length; // check for new maximum
				}
			}
		}

		// compute gradient color map
		if (startcolor && endcolor) {
			var digits="0123456789ABCDEF";
			function hexToDec(s) // 2-digit conversion
				{ return digits.indexOf(s.substr(0,1).toUpperCase())*16+digits.indexOf(s.substr(1,1).toUpperCase()); }
			function decToHex(d) // 2-digit conversion
				{ return digits.substr(Math.floor(d/16),1)+digits.substr(d%16,1); }
			var steps=max;
			var startR=hexToDec(startcolor.substr(0,2));
			var startG=hexToDec(startcolor.substr(2,2));
			var startB=hexToDec(startcolor.substr(4,2));
			var endR=hexToDec(endcolor.substr(0,2));
			var endG=hexToDec(endcolor.substr(2,2));
			var endB=hexToDec(endcolor.substr(4,2));
			var rangeR=endR-startR;
			var rangeG=endG-startG;
			var rangeB=endB-startB;
			var stepR=rangeR/steps; if (stepR>0) stepR=Math.floor(stepR); else stepR=Math.ceil(stepR);
			var stepG=rangeG/steps; if (stepG>0) stepG=Math.floor(stepG); else stepG=Math.ceil(stepG);
			var stepB=rangeB/steps; if (stepB>0) stepB=Math.floor(stepB); else stepB=Math.ceil(stepB);
			var colors=[];
			colors[0]=startcolor;
			for (var i=1; i<steps; i++)
				colors[i]=decToHex(startR+stepR*i)+decToHex(startG+stepG*i)+decToHex(startB+stepB*i);
			colors[steps-1]=endcolor; // fixup for roundoff error
		}

		// generate HTML table containing popups (and optional inline links)
		var time2=new Date();
		var out="<html><table cellpadding='0' cellspacing='0' style='border:0;border-collapse:collapse'>";
		// column headings
		out+="<tr style='border:0;'><td style='text-align:right;border:0'>";
		out+="<a href='' style='font-size:80%;'";
		out+="	title='show all column headings'";
		out+="	onclick='return config.macros.tagGrid.toggleAllColumns(this,event,"+defOpen+")'>"+(defOpen?"&lt;&lt;&lt;":"&gt;&gt;&gt;")+"</a>";
		out+="</td>";
		for (var i=0;i<cols.length;i++) {
			out+="<td style='text-align:center;cursor:pointer;border:0;padding-left:2px;padding-right:2px' ";
			out+="	title='show/hide column heading' ";
			out+="	onclick='return config.macros.tagGrid.toggleColumn(this,event)'>";
			out+="<a href='' title='open tag tiddler'";
			if (!defOpen) out+="	style='display:none' ";
			out+="	onclick='story.displayTiddler(this,\""+cols[i]+"\");return false'>"+cols[i]+"</a>";
			out+="</td>";
		}
		out+="</tr>";
		for (var i=0;i<rows.length;i++) {
			// row heading
			var rowlink="<a href='' onclick='story.displayTiddler(this,\""+rows[i]+"\");return false'>"+rows[i]+"</a>";
			out +="<tr style='border:0'>";
			out +="<td style='text-align:right;border:0;padding-right:2px'>"+rowlink+"</td>";
			for (var j=0;j<cols.length;j++) {
				var content="";
				var bgcolor="transparent"; // default empty cell background
				if (colors && colorAll) bgcolor="#"+colors[0]; // empty cell background uses startcolor 
				var bordercolor=""; // default border color (inherits current CSS value)
				if (colors) bordercolor="#"+colors[Math.floor(colors.length/2-1)]; // border uses mid-tone color 
				var linkstyle=""; // use default unless background color is very light or very dark
				var cross=(grid[i]&&grid[i][j])?grid[i][j]:null;
				var hdr=rows[i]+(rows[i]!=cols[j]?(" + "+cols[j]):"");
				if (cross) {
					// cross-tagged list of tiddlers (in a popup)
					var label="<b>"+cross.length+"</b>";
					var tip=hdr;
					var list=cross.sort().join(' ').replace(/'/g,"\\'").replace(/"/g,'&quot;');
					var handler="return config.macros.tagGrid.popup(this,event,\'"+rows[i]+"\',\'"+cols[j]+"\',\'"+list+"\')";
					if (colors) {
						var c=colors[cross.length-1];
						bgcolor="#"+c;
						linkstyle="style='color:#000000 !important'";
						// invert link color if background is very light
						if (c.substr(0,2)<"60" || c.substr(2,2)<"60" || c.substr(4,2)<"60")
							linkstyle="style='color:#FFFFFF !important'";
					}
				} else {
					var label="&nbsp;-&nbsp;";
					var tip="create a new tiddler tagged with: "+hdr;
					var list="";
					var handler="var title=config.macros.newTiddler.title;";
					handler+="story.displayTiddler(this,title,DEFAULT_EDIT_TEMPLATE);";
					handler+="story.setTiddlerTag(title,\'"+rows[i]+"\',+1);";
					handler+="story.setTiddlerTag(title,\'"+cols[j]+"\',+1);";
					handler+="story.focusTiddler(title,\'text\');return(false);";
				}
				if (!showInline || !cross)
					content+='<a href="javascript:;" '+linkstyle+' onclick="'+handler+'" title="'+tip+'">'+label+'</a>';
				if (showInline && cross) {
					content+="<div "+linkstyle+"><span style='white-space:nowrap'>";
					content+=hdr+" ("+label+")";
					content+="</span></div><hr>";
					// list tiddler links inline in table cell
					for (t=0; t<cross.length; t++) {
						var title=cross[t].replace(/\[\[/g,'').replace(/\]\]/g,'');
						var handler="story.displayTiddler(null,'"+title+"');return false;"
						var tid=store.getTiddler(title);
						var author=tid.modifier;
						var date=tid.modified.toLocaleString();
						var tip=config.messages.tiddlerLinkTooltip.format([title,author,date]);
						if (t>0) content+="<br>";
						content+='<a href="javascript:;" '+linkstyle+' onclick="'+handler+'" title="'+tip+'">'+title+'</a>';
					}
					content+="<hr>";
					handler="var tids=\'"+list+"\'.readBracketedList();story.displayTiddlers(this,tids); return(false);"
					tip="display all tiddlers tagged with: "+hdr;
					content+='<a href="javascript:;" '+linkstyle+' onclick="'+handler+'" title="'+tip+'">open all...</a><br>';
					handler="var title=config.macros.newTiddler.title;";
					handler+="story.displayTiddler(this,title,DEFAULT_EDIT_TEMPLATE);";
					handler+="story.setTiddlerTag(title,\'"+rows[i]+"\',+1);";
					handler+="story.setTiddlerTag(title,\'"+cols[j]+"\',+1);";
					handler+="story.focusTiddler(title,'text'); return(false);"
					tip="create a new tiddler tagged with: "+hdr;
					content+='<a href="javascript:;" '+linkstyle+' onclick="'+handler+'" title="'+tip+'">new tiddler...</a>';
				}
				out+="<td style='background-color:"+bgcolor+";border:1px solid "+bordercolor+" !important;text-align:center'>"+content+"</td>";
			}
			out+="</tr>";
		}
		out+="</table>";
		out+="</html>";
		createTiddlyElement(place,"span").innerHTML=out;
		var time3=new Date();
		if (this.verbose) displayMessage("TagGrid: scan="+(time2-time1)+", generate table="+(time3-time2));
	},
	popup:
	function(here,event,row,col,list) {
		var tids=list.replace(/&quot;/g,'"').readBracketedList();
		var hdr=row+(row!=col?(" AND "+col):"");
		if (tids.length) {
			var p=Popup.create(here); if (!p) return;
			createTiddlyText(p,hdr);
			createTiddlyElement(p,'hr');
			for(var t=0; t<tids.length; t++) createTiddlyLink(createTiddlyElement(p,'li'),tids[t],true);
			createTiddlyElement(p,'hr');
			createTiddlyButton(createTiddlyElement(p,'li'),
				"open all...", "display all tiddlers tagged with: "+hdr,
				function(){story.displayTiddlers(null,tids); return(false);});
			var a=createTiddlyButton(createTiddlyElement(p,'li'),
				"new tiddler...", "create a new tiddler tagged with: "+hdr,
				function(){
					var title=config.macros.newTiddler.title;
					story.displayTiddler(this,title,DEFAULT_EDIT_TEMPLATE);
					story.setTiddlerTag(title,this.getAttribute("rowtag"),+1);
					story.setTiddlerTag(title,this.getAttribute("coltag"),+1);
					story.focusTiddler(title,"text");
					return(false);
				});
			a.setAttribute("rowtag",row);
			a.setAttribute("coltag",col);
			Popup.show();
		}
		event.cancelBubble = true;
		if (event.stopPropagation) event.stopPropagation();
		return(false);
	},
	toggleAllColumns:
	function(here,event,defOpen) {
		if (here.expanded==undefined) here.expanded=defOpen;
		var ex=here.expanded=!here.expanded; 
		here.innerHTML=ex?"&lt;&lt;&lt;":"&gt;&gt;&gt;";
		here.title=ex?'hide all column headings':'show all column headings';
		var cells=here.parentNode.parentNode.getElementsByTagName("td");
		for (i=1; i<cells.length; i++) cells[i].firstChild.style.display=ex?"inline":"none";
		event.cancelBubble = true;
		if (event.stopPropagation) event.stopPropagation();
		return(false);
	},
	toggleColumn:
	function(here,event) {
		here.firstChild.style.display=(here.firstChild.style.display=="none")?"inline":"none";
		event.cancelBubble = true;
		if (event.stopPropagation) event.stopPropagation();
		return(false);
	}
};
//}}}
<<runTiddler TagsTreePlugin>><<tagsTree MenuFlex >>
/***
|''Name:''|TagsTreePlugin|
|''Description:''|Displays tags hierachy as a tree of tagged tiddlers.<br>Can be used to create dynamic outline navigation.|
|''Version:''|1.0.1|
|''Date:''|Jan 04,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|
!Demo
On the plugin [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] :
*Try to tag some <<newTiddler>> with a tag displayed in the menu and edit MainMenu.
*Look at some tags like [[Plugins]] or [[menu]].
!Installation
#import the plugin,
#save and reload,
#optionally, edit TagsTreeStyleSheet.
! Usage
{{{<<tagsTree>>}}} macro accepts the following //optional// parameters.
|!#|!parameter|!description|!by default|
|1|{{{root}}}|Uses {{{root}}} tag as tree root|- In a //tiddler// content or template : uses the tiddler as root tag.<br>- In the //page// content or template (by ex MainMenu) : displays all untagged tags.|
|2|{{{excludeTag}}}|Excludes all such tagged tiddlers from the tree|Uses default excludeLists tag|
|3|{{{level}}}|Expands nodes until level {{{level}}}.<br>Value {{{0}}} hides expand/collapse buttons.|Nodes are collapsed on first level|
|4|{{{depth}}}|Hierachy depth|6 levels depth (H1 to H6 header styles)|
|5|{{{sortField}}}|Alternate sort field. By example : "index".|Sorts tags and tiddlers alphabetically (on their title)|
|6|{{{labelField}}}|Alertnate label field. By example : "label".|Displays tiddler's title|

!Useful addons
*[[FieldsEditorPlugin]] : //create//, //edit//, //view// and //delete// commands in toolbar <<toolbar fields>>.
*[[TaggerPlugin]] : Provides a drop down listing current tiddler tags, and allowing toggling of tags.
!Advanced Users
You can change the global defaults for TagsTreePlugin, like default {{{level}}} value or level styles, by editing or overriding the first config.macros.tagsTree attributes below.
!Code
***/
//{{{
config.macros.tagsTree = {
	expand : "+",
	collapse : "–",
	depth : 6,
	level : 1,
	sortField : "",	
	labelField : "",
	styles : ["h1","h2","h3","h4","h5","h6"],
	trees : {}
}

config.macros.tagsTree.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
	var root = params[0] ? params[0] : (tiddler ? tiddler.title : null);
	var excludeTag = params[1] ? params[1] : "excludeTagsTree";
	var level = params[2] ? params[2] : config.macros.tagsTree.level;
	var depth = params[3] ? params[3] : config.macros.tagsTree.depth;
	var sortField = params[4] ? params[4] : config.macros.tagsTree.sortField;
	var labelField = params[5] ? params[5] : config.macros.tagsTree.labelField;
	var showButtons = (level>0);
	var id = config.macros.tagsTree.getId(place);
	if (config.macros.tagsTree.trees[id]==undefined) config.macros.tagsTree.trees[id]={};
	config.macros.tagsTree.createSubTree(place,id,root,excludeTag,[],level>0 ? level : 1,depth, sortField, labelField,showButtons);
}

config.macros.tagsTree.createSubTree = function(place, id, root, excludeTag, ancestors, level, depth, sortField, labelField,showButtons){
	var childNodes = root ? this.getChildNodes(root, ancestors) : this.getRootTags(excludeTag);
	var isOpen = (level>0) || (!showButtons);
	if (root && this.trees[id][root]!=undefined) isOpen = this.trees[id][root]; 
	if (root && ancestors.length) {
		var t = store.getTiddler(root);
		if (childNodes.length && depth>0) {
			var wrapper = createTiddlyElement(place , this.styles[Math.min(Math.max(ancestors.length,1),6)-1],null,"branch");
			if (showButtons) {
				b = createTiddlyButton(wrapper, isOpen ? config.macros.tagsTree.collapse : config.macros.tagsTree.expand, null, config.macros.tagsTree.onClick);
				b.setAttribute("treeId",id);
				b.setAttribute("tiddler",root);					
			}
			createTiddlyText(createTiddlyLink(wrapper, root),t&&labelField ? t.fields[labelField] ? t.fields[labelField] : root : root);
		}
		else 
			createTiddlyText(createTiddlyLink(place, root,false,"leaf"),t&&labelField ? t.fields[labelField] ? t.fields[labelField] : root : root);
	}
	if (childNodes.length && depth) {
		var d = createTiddlyElement(place,"div",null,"subtree");
		d.style.display= isOpen ? "block" : "none";
		if (sortField)
			childNodes.sort(function(a, b){
				var fa=a.fields[sortField];
				var fb=b.fields[sortField];
				return (fa==undefined && fb==undefined) ? a.title < b.title ? -1 : a.title > b.title ? 1 : 0 : (fa==undefined && fb!=undefined) ? 1 :(fa!=undefined && fb==undefined) ? -1 : fa < fb ? -1 : fa > fb ? 1 : 0;
			})
		for (var cpt=0; cpt<childNodes.length; cpt++)
			this.createSubTree(d, id, childNodes[cpt].title, excludeTag, ancestors.concat(root), level-1, depth-1, sortField, labelField, showButtons);	
	}	
}

config.macros.tagsTree.onClick = function(e){
	var id = this.getAttribute("treeId");
	var tiddler = this.getAttribute("tiddler");	
	var n = this.parentNode.nextSibling;
	var isOpen = n.style.display != "none";
	if(config.options.chkAnimate && anim && typeof Slider == "function")
		anim.startAnimating(new Slider(n,!isOpen,null,"none"));
	else
		n.style.display = isOpen ? "none" : "block";
	this.firstChild.nodeValue = isOpen ? config.macros.tagsTree.expand : config.macros.tagsTree.collapse;
	config.macros.tagsTree.trees[id][tiddler]=!isOpen;
	return false;
}

config.macros.tagsTree.getChildNodes = function(root ,ancestors){
	var childs = store.getTaggedTiddlers(root);
	var result = new Array();
	for (var cpt=0; cpt<childs.length; cpt++)
		if (childs[cpt].title!=root && ancestors.indexOf(childs[cpt].title)==-1) result.push(childs[cpt]);
	return result;
}

config.macros.tagsTree.getRootTags = function(excludeTag){
	var tags = store.getTags(excludeTag);
	tags.sort(function(a,b) {return a[0].toLowerCase() < b[0].toLowerCase() ? -1 : (a[0].toLowerCase() == b[0].toLowerCase() ? 0 : +1);});
	var result = new Array();
	for (var cpt=0; cpt<tags.length; cpt++) {
		var t = store.getTiddler(tags[cpt][0]);
		if (!t || t.tags.length==0) result.push(t ? t : {title:tags[cpt][0],fields:{}});
	}
	return result;
}

config.macros.tagsTree.getId = function(element){
	while (!element.id && element.parentNode) element=element.parentNode;
	return element.id ? element.id : "<html>";
}

config.shadowTiddlers.TagsTreeStyleSheet = "/*{{{*/\n";
config.shadowTiddlers.TagsTreeStyleSheet +=".leaf, .subtree {display:block; margin-left : 0.5em}\n";
config.shadowTiddlers.TagsTreeStyleSheet +=".subtree {margin-bottom:0.5em}\n";
config.shadowTiddlers.TagsTreeStyleSheet +="#mainMenu {text-align:left}\n";
config.shadowTiddlers.TagsTreeStyleSheet +=".branch .button {border:1px solid #DDD; color:#AAA;font-size:9px;padding:0 2px;margin-right:0.3em;vertical-align:middle;text-align:center;}\n";
config.shadowTiddlers.TagsTreeStyleSheet +="/*}}}*/";

store.addNotification("TagsTreeStyleSheet", refreshStyles); 

config.shadowTiddlers.MainMenu="<<tagsTree>>"

config.shadowTiddlers.PageTemplate = config.shadowTiddlers.PageTemplate.replace(/id='mainMenu' refresh='content' /,"id='mainMenu' refresh='content' force='true' ")

//}}}
[[MenuFlex##Header2]]
<div id="controlBar" macro="gradient vert [[ColorPalette::PrimaryMid]] [[ColorPalette::PrimaryLight]]">
<div refresh='content' tiddler='SiteMenu##Top2'></div>
</div>
[[MenuFlex##TemplateBody]]
<div style="position:fixed;z-index:1001;bottom:.1em;right:.1em;cursor:pointer;font-size:9pt;">
<a href="javascript:window.scrollTo(0,0)" title="scroll to top of page">&#x25b2</a>
<span id='floatingFooter'>
<span refresh='content' tiddler='FloatingFooter'></span>
</div>
[[MenuFlex##Header3]]
<div id="controlBar" macro="gradient vert [[ColorPalette::PrimaryMid]] [[ColorPalette::PrimaryLight]]">
<div refresh='content' tiddler='SiteMenu##Top3'></div>
</div>
[[MenuFlex##TemplateBody]]
<div style="position:fixed;z-index:1001;bottom:.1em;right:.1em;cursor:pointer;font-size:9pt;">
<a href="javascript:window.scrollTo(0,0)" title="scroll to top of page">&#x25b2</a>
<span id='floatingFooter'>
<span refresh='content' tiddler='FloatingFooter'></span>
</div>
/% http://www.bookmarklets.com/ %/<html><a href="javascript:(function(){function init(){var newline=unescape(%22%%22+%220A%22),importCount=0,L=[];dead=false;oldCSS=null;x=opener;ta=document.f.ta;ta.select();if(x.editStyles){ta.value=x.editStyles.innerHTML;update();return;}ta.value=%22/* Type CSS rules here and they will be applied%22+newline+%22to pages from '%22+location.host+%22'%22+newline+%22immediately as long as you keep this window open. */%22+newline+newline;function add(s){if(!s.disabled){var y={sheet:s,readable:true,label:%22Imported%22,inline:false,shorturl:%22%22,fulltext:%22%22};try{for(var k=0,m;m=s.cssRules[k];++k)if(m.type==3)add(m.styleSheet);}catch(er){y.readable=false;}L.push(y);if(s.ownerNode){y.label=s.ownerNode.tagName.toUpperCase()+%22-tag%22;if(!s.ownerNode.getAttribute(%22src%22)&&!s.ownerNode.href)y.inline=true;}if(y.inline){y.label=%22Inline %22+y.label;y.fulltext=fix(s.ownerNode.innerHTML);}else if(s.href.substr(0,13)==%22data:text/css%22){y.shorturl=%22 contained in a data: URL%22;y.fulltext=fix(unescape(s.href.slice(14)));}else{++importCount;y.importtext=%22@import \%22%22+s.href+%22\%22;%22;y.shorturl=%22 %22+s.href.split('/').reverse()[0];if(!y.readable){y.fulltext=%22/* Out-of-domain; imported above. */%22;}else if(s.href.substr(0,5)!=%22http:%22){y.fulltext=%22/* Non-http; imported above. */%22;}else{var loadingText=%22/* Loading (%22+(L.length-1)+%22) */%22;y.fulltext=loadingText;var p=new XMLHttpRequest();p.onload=function(e){ta.value=ta.value.replace(y.importtext+newline,%22%22);y.fulltext=p.responseText;ta.value=ta.value.replace(loadingText,fix(y.fulltext));ta.value=ta.value.replace(firstNote+newline,%22%22);};p.open(%22GET%22,s.href);p.send(null);}}}}function fix(s){while((s[0]==newline)&&s.length>1)s=s.slice(1);while((s[s.length-1]==newline)&&s.length>1)s=s.substr(0,s.length-1);s=s.replace(/@import.*;/ig,function(){return %22/* %22+RegExp.lastMatch+%22 */%22;});return s;}for(var i=0,ss;ss=x.document.styleSheets[i];++i)add(ss);var imports=%22%22,main=%22%22;var firstNote=%22/**** Style sheets whose contents could be loaded were ****/%22+newline+%22/**** imported instead.  Rule order may be incorrect   ****/%22+newline+%22/**** as a result. ****/%22+newline;if(importCount){ta.value+=firstNote;}for(var i=0;ss=L[i];++i){if(ss.importtext){imports+=ss.importtext+newline;}main+=%22/**** %22+ss.label+%22 style sheet%22+ss.shorturl+%22 ****/%22+newline;main+=newline;main+=ss.fulltext;main+=newline;main+=newline;main+=newline;}ta.value+=imports+newline+main;update();}function update(){try{if(!x||x.closed){ta.style.backgroundColor=%22#ddd%22;return;}x.editStyles;}catch(er){ta.style.backgroundColor=%22#fdc%22;setTimeout(update,150);dead=true;return;}if(dead){dead=false;ta.style.backgroundColor=%22%22;oldCSS=null;}if(!x.editStyles){var newSS;newSS=x.document.createElement(%22style%22);newSS.type=%22text/css%22;x.document.getElementsByTagName(%22head%22)[0].appendChild(newSS);x.editStyles=newSS;oldCSS=null;for(var i=0,ss;ss=x.document.styleSheets[i];++i)ss.disabled=true;}if(oldCSS!=ta.value){oldCSS=ta.value;x.editStyles.innerHTML=ta.value;}setTimeout(update,150);}y=open('','','resizable,scrollbars=yes,width=550,height=520');y.document.write('<title>Edit Styles</title><style>.ec { width: 100%; height: 100%; border: none; margin: 0px; padding: 0px; }</style><body class=%22ec%22><form name=%22f%22 style=%22margin: 0px;%22 class=%22ec%22><textarea name=%22ta%22 wrap=%22soft%22 style=%22margin: 0px; border: 0px; width:100%; height:100%;%22 class=%22ec%22></textarea><script>'+update+init+'init();<'+'/script>');y.document.close();})()"<span>test style</span></a></html>
<<tiddler Switch##Refresh>>
<<tiddler Switch##OpenGroup with: OpenDefault Default2>>
<<tiddler Switch##Home with: home>>
<<tiddler Switch##CloseOpenGroup with: CloseOpenDefault Default2>>
<<tiddler Switch##OpenGroup2 with: OpenListed MakeTable "" MicroBrowser MicroCalc AppendToTiddler "" "" "" "">>
<<tiddler Switch##CloseOpenGroup2 with: CloseOpenListed MakeTable "" MicroBrowser MicroCalc AppendToTiddler "" "" "">>
<<tiddler Switch##Header>>
<<tiddler Switch##Sidebar>>
{{fine smallform nowrap tidIDE{<<tidIDE id:displayArea [[Compare|CompareTiddlers]] [[Tweaker|TiddlerTweaker]] +edit>><<resizeEditor>>}}}
/%
Name: TiddlersFromCSV
Source: http://menuflex.tiddlyspot.com/ - originally: http://www.TiddlyTools.com/#CreateTiddlersFromCSV
Version: 1.1.0
Author: Eric Shulman (modified by Wolfgang)
License: http://www.TiddlyTools.com/#LegalStatements
Description: Create tiddlers from CSV data. -  Important: Don't ask the original author for support to this variant script, before you haven't verified it by installing the original version.

!FORMAT
<<<
~Comma-Separated Value (CSV) format:
{{{
title,created,modified,modifier,tags,text,customfield1,customfield2,...
MyTiddler,04/25/2009,04/25/2009,YourName,tag1 [[tag 2]] tag3,"This is ""quoted"" content, with a comma",value,value,...
}}}

{{wrap{
''The first line contains lower-case field names and must include a //"title"// field''.  Subsequent lines define //~CSV-encoded// data: any values that contain quotes or commas are surrounded by double-quotes, and quotes occuring //within// the values are doubled-up.  The ''tags'' field is entered as a //space-separated bracketed list//.  Additional fieldnames ("fieldN") are added as custom tiddler fields.}}}
<<<
!end

REVISIONS:
[1.1.0] handle CSV-encoded embedded commas and quotes

%/{{small smallform{
Enter <<slider {{config.options['']=false;'';}}
	[[TiddlersFromCSV##FORMAT]] 'CSV-formatted data..' 'view CSV format description'
>> or from a tiddler: <html><hide linebreaks>
	<form style='display:inline;margin:0;padding:0;'>
	<input class='editor' name='tid' value='TiddlerName' title='enter a tiddler name'  style="width:19%;" onfocus='this.select()'>
	<input type='button' value='get data'
		onclick="this.form.src.value=store.getTiddlerText(this.form.tid.value,'')">
	<input type='button' value='create tiddlers' onclick="
		var lines=this.form.src.value.split('\n');
		var names=lines[0].split(','); var count=0;
		for (var i=1; i<lines.length; i++) {
			if (!lines[i].length) continue;
			var title=''; var text=''; var tags=[]; var fields={};
			var created=null; var when=new Date(); var who=config.options.txtUserName;
			var line=lines[i].replace(/\x22((?:[^\x22]|\x22\x22)*?)\x22/g,
				function(x){ return x.substr(1,x.length-2).replace(/\,/g,'!~~!'); });
			var values=line.split(','); for (var v=0; v<values.length; v++)
				values[v]=values[v].replace(/!~~!/g,',').replace(/\x22\x22/g,'\x22');
			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=val; break;
					case 'modified':when=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;
				}
			}
			if (title.length) {
				store.saveTiddler(title,title,text,who,when,tags,fields,true,created||when);
				displayMessage('Created '+title);
				count++;
			}
			else if (!confirm('invalid data on line '+i+': missing/blank TiddlerName\n\n'
				+values.join('\n')+'\n\n\OK=skip, CANCEL=stop')) break;
		}
		displayMessage('Created '+count+' tiddlers');
	"><br><textarea class='editor' name='src' style='display:inline;width:100%;height:10em;' onfocus='this.select()'>title,modifier,tags,text,customfield
</textarea>
	</form>
</html>}}}
<<runTiddler TableOfContentsPlugin>><<tableOfContents "label:select a tiddler" date:YYYY.0MM.0DD width:100% padding:0 margin:0>><script>place.lastChild.lastChild.style.color="#000";</script>
{{wrappingClass{
<<tabs tOols
Insert "show character panel" InsertCharacter
Count "count words & character panel" ToolMenu##CountWords
Replace "show replace panel" ToolMenu##ReplaceText
Excel "show excel panel" ToolMenu##XclToTw
Split "show tiddler splitting panel" SplitTiddler
Text "show text splitting panel" SplitTextIntoTiddlers
>><<tabs tWos
Calculate "show calculate panel" MicroCalc
Tables "show tables panel" MakeTable
"From CSV" "show csv panel" TiddlersFromCSV
"Compare" "compare tiddlers" Compare
"Cookies" "show cookie manager" CookieManager>>}}}{{normal whitespace{

  <<tiddler SetDefaultTiddler>>  -  <<tiddler WordCount>>  -  <<tiddler SlayerOffice>>  -  <<tiddler favlets##YourSearch>>

   <<tiddler favlets##DeleteTagged>>  -  <<tiddler favlets##RenameTag>>  -  <<tiddler favlets##RescueRaw>>  -  <<tiddler favlets##SetUserName>>

  <<tiddler TransposeTable>>  -  <<tiddler SortTable>>  -  <<tiddler favlets##ViewAsHtml>>  -  <<tiddler favlets##ViewAsJs>>

   <<tiddler GoogleSearch>>  -  <<tiddler TestStyle>>  -  <<tiddler favlets##ScrubFields>>  -  <<tiddler favlets##NukeCookies>>}}}/%
!XclToTw
{{center{<html><textarea id="XclToTw" rows="10" cols="45"></textarea><button onclick="(function(){var ta=document.getElementById('XclToTw'); displayMessage('original: ' + ta.value); ta.value=ta.value.replace(/^|$|\t/gm, '|');})();">convert</button></html>}}}
!ReplaceText
{{center{<html><textarea id="replaceAll-ta" rows="10" cols="45"></textarea><br/><input id="replaceAll-old"/>
<input id="replaceAll-new"/><button onclick="(function(){var ta=document.getElementById('replaceAll-ta');var o=document.getElementById('replaceAll-old').value;var n=document.getElementById('replaceAll-new').value;o=new RegExp(o.replace(/([\\\^\$*+[\]?{}.=!:(|)])/g,'\\$1'),'gm');ta.value=ta.value.replace(o,n);})();" >replace all</button></html>}}}
!CountWords
{{floatright small{Free JavaScript provided by [[The JavaScript Source|http://javascriptsource.com"]]}}}<script>window.CountWords = function(this_field,show_word_count,show_char_count){if(show_word_count == null){show_word_count = true;}if(show_char_count == null){show_char_count = false;}var char_count = this_field.value.length;var fullStr = this_field.value + " ";var initial_whitespace_rExp = /^[^A-Za-z0-9]+/gi;var left_trimmedStr = fullStr.replace(initial_whitespace_rExp,"");var non_alphanumerics_rExp = /[^A-Za-z0-9]+/gi;var cleanedStr = left_trimmedStr.replace(non_alphanumerics_rExp," ");var splitString = cleanedStr.split(" ");var word_count = splitString.length -1;if(fullStr.length <2){word_count = 0;}if(word_count == 1){var wordOrWords = " word";}else{var wordOrWords = " words";}if(char_count == 1){var charOrChars = " character";}else{var charOrChars = " characters";}if(show_word_count & show_char_count){alert("Word Count:\n" + " " + word_count + wordOrWords + "\n" + " " + char_count + charOrChars);}else{if(show_word_count){alert("Word Count:" + word_count + wordOrWords);}else{if(show_char_count){alert("Character Count:" + char_count + charOrChars);}}}return word_count;}</script><html><form><input type=button value="Count Words" OnClick ="CountWords(this.form.x,true,true);"><br><textarea cols=45 rows=8 name=x></textarea></form></html><html><form method="GET" action="http://www.onelook.com/" target="_blank"><input type="hidden" name="loc" value="pub"><input name="w" onFocus="this.select()" value="word lookup" size="8" style="width:67%;"><input type="submit" style="font-family:Arial,Helvetica;font-size:9pt;" value="dictionary search" name="submit"></form></html>
!
%/
<html><a href="javascript:(function(){var d=document,q=%22table%22,i,j,k,y,r,c,t;for(i=0;t=d.getElementsByTagName(q)[i];++i){var w=0,N=t.cloneNode(0);N.width=%22%22;N.height=%22%22;N.border=1;for(j=0;r=t.rows[j];++j)for(y=k=0;c=r.cells[k];++k){var z,a=c.rowSpan,b=c.colSpan,v=c.cloneNode(1);v.rowSpan=b;v.colSpan=a;v.width=%22%22;v.height=%22%22;if(!v.bgColor)v.bgColor=r.bgColor;while(w<y+b)N.insertRow(w++).p=0;while(N.rows[y].p>j)++y;N.rows[y].appendChild(v);for(z=0;z<b;++z)N.rows[y+z].p+=a;y+=b;}t.parentNode.replaceChild(N,t);}})()"<span>transpose table</span></a></html>
<<runTiddler TreeviewPluginPlugin2>><<treeview2 "MenuFlex" "filetree" 'collapsed: true, antisesame: "closed", animated: "fast", persist: true, cookieId: "TreeMenuID"' >>
/*{{{*/
.filetree span.folder{background: url([[Ico##openbook.gif]]) 0 0 no-repeat;}
.filetree li.expandable span.folder{background: url([[Ico##book.gif]]) 0 0 no-repeat;}
/*}}}*/
/*{{{*/
.filetree span.folder{background:url([[Ico##folder.gif]]) 0 0 no-repeat;}
.filetree li.expandable span.folder{background:url([[Ico##folder-closed.gif]]) 0 0 no-repeat;}
/*}}}*/
/***
|Name|TreeviewPluginPlugin2|
|Source|http://treeview.tiddlyspot.com/|
|Version|0.24a|
|Author|MarkS|
|License|Various. See respective libraries for details|
|Type|plugin|
|Requires(1) |jQuery library, treeview plugin libraries and styles |
|Requires(2) |AttachFilePackage and sub-libraries from tiddlytools.com if you want to use embedded images to create the tree|
|Description|Creates a tag tree, formatted as an actual tree |
|Status|Experimental - ALPHA, but built on fairly solid technologies|
|Warning|When creating tag trees, make sure no tiddler loops back on itself, or its likely the script will hang|
|Changes|0.24a -- transparent icons for folder, closed folder, and file |
!!!!Set up for portability
You will need a version of TW that incorporates the jQuery library. That happens automatically with recent editions of TW. You will also need to install or access the treeview libraries from http:www.dynamicdrive.com. The libraries can be carried as local files, inserted in the MarkupPostBody, or referenced from the dynamicdrive site. Each approach will require a different set up. 
You will also need to link in the stylesheet for the treeview objects. A quick way to do this is to put:
>{{{<link rel="stylesheet" type="text/css" href="http://www.dynamicdrive.com/dynamicindex1/treeview/jquery.treeview.css" /> }}}
into the MarkupPreHead tiddler. However, this won't work if you go off line. It also doesn't work permanently if you are hosting your file on a web server. So you may want to download a copy of the stylesheet and attendant image files and change the MarkupPreHead tiddler to pick up the local copy. Or load the stylesheet and images onto your own server where you will be able to access them.
!!!!Usage
{{{<<treeview2 }}}
>{{{<root tag> [tree style] [startup parameters]}}} 
{{{  >>}}}

!!!!!Where:
''root tag'' is the tag at the top of your tagging tree, i.e. the mother of all tiddlers related to it by using its name as one of their tags.
''tree style'' indicates which type of tree will be displayed,  possibly //treeview//, //filetree//, and //treeview-red//, and //treeview-famfamfam//. There may be other styles too, but those are the ones I know about.
''startup parameters'' are a set of optional parameters given in a comma-separated, key/value string like this:
>{{{'collapsed: false, animated: "normal", persist: true'}}}
There's a list of possible options at:
  http://www.dynamicdrive.com/dynamicindex1/treeview/index.htm
However, not all settings may actually work under TW. Mainly, you will probably be interested in controlling the presence of animation, and whether the initial state of the tree is opened or closed.
!!!!Images and stylesheet set-up
The tree is constructed from little bits of images. If you don't want to carry these images in a separate directory, nor reference them remotely, you can embed them in your TW file. To do this,  you will need the AttachFilePackage and accompanying plugins from 
> www.tiddlytools.com
and you will need the AttachFilePluginFormatters plugin from the same site.
Then import all the tiddlers from this file tagged as treeviewimage . These images are referenced in the StyleSheet. If you import JqueryTreeviewCss from this file, and then put the name in your StyleSheet, the images should be imported without having to access them remotely.
!!!!Persistence
To make persistence work, you will need to have the treeview cookie library loaded. The easiest way to do that is to put:
>{{{<script src="http://www.dynamicdrive.com/dynamicindex1/treeview/lib/jquery.cookie.js" type="text/javascript"></script>}}}
into the MarkupPostBody. However, this technique will only work if you have online access. If you will be working offline, then you will either need to download the cookie library to the same directory as your ~TiddlyWiki file and put the following into your MarkupPostBody:
>>{{{<script src="jquery.cookie.js"></script>}}}
or you will need to put the entire contents of the cookie library into script tags inside the MarkupPostBody.
Then, in any macro that wants its tree to be persistently configured, you will need to use configuration parameter:
>>{{{persist: "cookie", cookieId: "myid"}}}
where //myid// should be an identification that will be unique throughout the entire TW file.
***/
//{{{
config.macros.treeview2 = {
  handler: function (place, macroName, params, wikifier, paramString, tiddler)
  {  // Code here
var lcTag = params[0] ;
var lcClass = params[1] ? params[1] : "treeview" ;
var DEV_MODE = false ; // Make true when developing code or changes won't show up.
try {
  if( MAS === undefined ) MAS = { } ;
} catch(ex) {
  MAS = {} ;
}

MAS.treeviewSettings = function(obj) {
	var defa = {} ;
	defa.collapsed= true;
	defa.unique = true ;
	//defa.persist= "location" ;
	if( obj !== undefined ) {
		try {
		obj = eval("({" + obj + "})" ) ;
		} catch(ex) {
			alert("Unable to use your treeview configuration settings!") ;
			return defa ;
		}
		for (var prop in obj) {
			defa[prop] =obj[prop] ;
		}
	}
	return defa ;
} ;
if( DEV_MODE || MAS.getTiddlersPerTagAsHtmlList === undefined ) {
MAS.getTiddlersPerTagAsHtmlList = function(tagname,setup) { 
  var tids = store.getTaggedTiddlers(tagname) ;
  var temp = "" ;
	var prefix = tids.length > 0 ? "<span class='folder'>" : "<span class='file'>" ; 
	var statetags = store.getTiddler(tagname).tags ;
	var state = "" ;
	var lcSesame = setup["sesame"] !== undefined ? setup["sesame"] : "" ;
	var lcAntiSesame = setup["antisesame"] !== undefined ? setup["antisesame"] : "" ;
	if(statetags.length > 0 ) {
						 if(lcSesame) state =  statetags.contains(lcSesame) ? ' class="open"'   : ' class="closed"'  ;
						 if(lcAntiSesame) state = statetags.contains(lcAntiSesame) ? ' class="closed"' : ' class="open"'   ;
	}	
// state="" ; // DEBUG
  //var rtn ="<li>"  + prefix + tagname + "</a></span>" ;
	var rtn = "<li" + state +">"  + prefix + "<a href=\"javascript:;\" tiddlylink=\"" + tagname + "\"  refresh=\"link\"    class='tiddlyLink tiddlyLinkExisting' title='Link to " + tagname + "' >" + tagname + "</a></span>" ;
	//wikify(rtn,place) ;
  forever:
  while(true) {  
		if(tids.length == 0 ) break ;
   	rtn = rtn + "<ul>" ;
   	for(var i=0;i<tids.length;i++) {
			temp = MAS.getTiddlersPerTagAsHtmlList(tids[i].title, setup) ;
     	rtn = rtn +  temp  ;
  	}
  	rtn = rtn + "</ul>\n" ;
		break ;
  } // forever
  rtn = rtn + "</li>\n" ;
  return rtn ;
}  ; // End of function definition
} // End of checking if function already defined

// The extra set of span tags are needed here because jquery find function ignores
// the outer set of tags. Or at least that's what seems to be happening. So, I give
// it an extra set so it can throw it away without consequence
var loSetup = MAS.treeviewSettings(params[2]) ;
var lcId = "root" + (new Date()).getTime().toString() ;
if(loSetup.cookieId) {
	lcId = "root_" + loSetup.cookieId ; 
}
//var a =  '<span id="' + lcId + '"><ul id="' + "root" + '" >' +  MAS.getTiddlersPerTagAsHtmlList(lcTag, loSetup) + "</ul></span>" ;
var a =  '<ul id="' + lcId + '" >' +  MAS.getTiddlersPerTagAsHtmlList(lcTag, loSetup) + "</ul>" ;
var b = jQuery(a) ; 
// A smarter person might have know how to put the onclick function in at the top 
b.find("a").each(function(n) {
	this.onclick = onClickTiddlerLink ;
	}) ;
//b.find(lcId).attr("class",lcClass) ;
//b.find("#root").attr("class",lcClass) ;

jQuery(place).append(b) ;

jQuery(place).find("#" + lcId).attr("class",lcClass).treeview(loSetup) ;
  }
};
//}}}









| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 06/10/2009 21:12:30 | wolfgang | [[menuflex.html|file:///C:/DOKUME~1/Wolfgang/Desktop/own/menuflex.html]] | [[store.cgi|http://menuflex.tiddlyspot.com/store.cgi]] | . | [[index.html | http://menuflex.tiddlyspot.com/index.html]] | . | ok |
| 10/10/2009 17:15:41 | wolfgang | [[menuflex.html|file:///C:/DOKUME~1/Wolfgang/Desktop/own/menuflex.html]] | [[store.cgi|http://menuflex.tiddlyspot.com/store.cgi]] | . | [[index.html | http://menuflex.tiddlyspot.com/index.html]] | . | ok |
| 10/10/2009 17:46:03 | wolfgang | [[menuflex.html|file:///C:/DOKUME~1/Wolfgang/Desktop/own/menuflex.html]] | [[store.cgi|http://menuflex.tiddlyspot.com/store.cgi]] | . | [[index.html | http://menuflex.tiddlyspot.com/index.html]] | . |
JeremyRuston - TiddlyWiki
http://www.tiddlywiki.com/
----
Theme Server:

----
FlexTheme
http://flextheme.tiddlyspot.com/
----
Double tiddler display
http://double.tiddlyspot.com/
----
FrederikDohr - Overflow Style
http://cleanlayout.tiddlyspot.com/
----
Ocat - MenuMore, Simple2, AccordionEffect
http://groups.google.com/group/oldcat/files
----
Eric Shulman - Tiddly Tools
http://www.tiddlytools.com/
----
Saq Imtiaz - a gallery of themes for TiddlyWiki
http://tiddlythemes.com/#Home
----
Dave Gifford - pre-fabricated templates
http://www.giffmex.org/tw/tiddlywikicentral.html
----
Clint Checketts - a collection of TiddlyWiki creations
http://tiddlystyles.com
----
Mark Wygent - zRenard, macros, styles and also tips
http://www.zrenard.com/tiddlywiki/tiddlywiki.html
----
Changing themes
http://change.tiddlyspot.com/
----
Help:

----
TiddlerToddler
http://tiddlertoddler.tiddlyspot.com/
----
TiddlyWiki for the rest of us
http://www.giffmex.org/twfortherestofus.html
----
TiddlyWiki Help - a comprehensive guide
http://twhelp.tiddlyspot.com/
----
TiddlyWiki.org Wiki
http://tiddlywiki.org/wiki/Main_Page
----
Q&A Google Group
http://groups.google.at/group/TiddlyWiki?lnk=srg&hl=de
----
References:

----
DevGuru CSSQuickRef
http://www.devguru.com/technologies/css2/
----
DevGuru JSQuickRef
http://www.devguru.com/technologies/javascript/
----
Html entities
http://www.alanwood.net/demos/ent4_frame.html
This [[TiddlyWiki|http://www.tiddlywiki.com/]] explores different ways for reaching deep content with relative ease by creating as much navigational space possible, particularly by switching menus and with nested popups. It is attempted to rely on least plugins wherever possible, since big ~TiddlyWikis drastically slow down with each additional one.

However, there are plugins installed - or where possible automatically loading on demand - only for giving examples of the main possibilities for creating main menus. This does slow editing down, since some of these menus update with every tiddler change, and which isn't the case without these plugins used here for showcase reasons only.

{{outline{  @@font-size:14pt;line-height:150%;color:red; // Works best with Firefox 2.0 and Google Chrome browsers//@@

You may use Firefox's [[portable version|http://portableapps.com/apps/internet/firefox_portable]] - if you don't want to install a different browser.}}}
#However, for above objective nothing can really beat [[YourSearchPlugin|http://tiddlywiki.abego-software.de/#YourSearchPlugin]], which allows to search a TW like Google does the web. Here you find it added as a small favlet, which loads this plugin on demand by clicking the symbol '&infin;' in the SiteSubtitle.
#[[Overflow style|http://cleanlayout.tiddlyspot.com/]] adjustments to the StyleSheet and PageTemplate is useful for dynamically widening the main menus to their actually needed various widths.
#The essence of [[MenuMore|http://tinyurl.com/59gpna]] - the ability to switch the main menu by html links in the top menu - has been extended and generalized to the default TW theme here. With IE and Opera browser this switches 2 menus only, any more than that will fail.
#The html script [[ShowPopup|http://www.TiddlyTools.com/#ShowPopup]] is used as a modified version [[Pop]] for creating nested popups much as the menus of browsers do. Please Note: I was only learning to adapt ~TiddlyWiki's by doing, and though I'll try to help wherever possible, I soon may meet my limits. The original author of this script, Eric Shulman, gives emphasis that he'll only give help to variants of his - as he does second to none for his own making - if a bug has been verified by installing his original version first.
#[[Switch]] tiddler contains various simple html script buttons (in sections to be used with tiddler section transclusion) for toggling page elements or closing/opening various tiddlers at once. You can find more matured versions (for example additionally remembering the display status with cookies) at Eric's Welcome page under [[transclusions|http://www.tiddlytools.com/]].
#Due to the limitation with some browsers I incorporate other methods for switching main menus - for example by simply using tabs - as [[TWkd|http://yann.perrin.googlepages.com/twkd.html]] beautifully exemplifies.
#In this context I started to explore also plugin dependent possibility again, like the little script you'll find in the SiteMenu tiddler under its {{{!extra}}} section (by FND). It changes with a click the tiddler transclusion in the extra menu tiddler - displayed between the main menu and the tiddler display area here, toggled with the first main menu showing on start up and made to appear with the 2nd dot in the top menu (since this switch relies on write actions, it's very slow here. Taken for itself, without the plugins updating all possible main menus, this works [[very nice and fast|http://double.tiddlyspot.com/]]). Use the down char for temporarily widening this extra display area .
<html><a href="javascript:EhV3eT8s=document.getSelection().replace(/\s/g,' ').replace(/  {2,}/g,' ').replace(/ $|^ /g,'').split(' ');if(EhV3eT8s!=''){alert(EhV3eT8s.length+' words in selected text')}else{alert('Select some text first!')}"<span>count words</span></a></html>
<html><a href="javascript:void(eval(decodeURIComponent(%22(function(){try{%2520%2509var%2520script%253Ddocument.createElement('script')%253B%2520%2509script.src%253D'http%253A%252F%252Ftiddlywiki.abego-software.de%252Farchive%252FYourSearchPlugin%252FYourSearchPlugin.js'%253B%2520%2509script.onload%253Dfunction()%257B%2520refreshPageTemplate()%253B%2520alert('YourSearchPlugin%2520has%2520been%2520loaded.')%253B%2520%257D%253B%2520%2509document.getElementsByTagName('head')%255B0%255D.appendChild(script)%253B%2520%2509return%2520false%253B%2520}catch(e){alert(e.description?e.description:e.toString())}})()%22)))"<span>&nbsp;&infin;&nbsp;</span></a></html>
{{small{
![[Jeremy Ruston|http://www.tiddlywiki.com/#TiddlyBookmarklets]]
!!!RescueRaw
<html><a class="bookmarklet" title="opens a new window containing the raw content of the current document" href="javascript:void(eval(decodeURIComponent(&quot;(function()%257Bif(window.version%2526%2526window.version.title%253D%253D'TiddlyWiki')%257Bvar%2520w%253Dwindow.open()%253Bw.document.open()%253Bw.document.write('%253Chtml%253E%253Cbody%253E%253Cpre%253E')%253Bw.document.write(store.allTiddlersAsHtml().htmlEncode())%253Bw.document.write('%253C%252Fpre%253E%253C%252Fbody%253E%253C%252Fhtml%253E')%253Bw.document.close()%253B%257D%257D)()&quot;)))">RescueRaw</a></html>
!!!ScrubFields
<html><a class="bookmarklet" title="delete all extended fields from a TiddlyWiki" href="javascript:(function(){if(window.version&#038;&#038;window.version.title=='TiddlyWiki'){store.forEachTiddler(function(title,tiddler){tiddler.fields={};});refreshDisplay();}})()">ScrubFields</a></html>
![[Xavier Vergés|http://xdexavier.googlepages.com/yoursearch.html]]
!!!YourSearch
<html><a class="bookmarklet" title="load YourSearch plugin"  href="javascript:void(eval(decodeURIComponent(%22(function(){try{%2520%2509var%2520script%253Ddocument.createElement('script')%253B%2520%2509script.src%253D'http%253A%252F%252Ftiddlywiki.abego-software.de%252Farchive%252FYourSearchPlugin%252FPlugin-YourSearch-src.2.1.1.js'%253B%2520%2509script.onload%253Dfunction()%257B%2520refreshPageTemplate()%253B%2520alert('YourSearchPlugin%2520has%2520been%2520loaded.')%253B%2520%257D%253B%2520%2509document.getElementsByTagName('head')%255B0%255D.appendChild(script)%253B%2520%2509return%2520false%253B%2520}catch(e){alert(e.description?e.description:e.toString())}})()%22)))">LoadYourSearch</a></html>
![[Saq Imtiaz|http://lewcid.org/tiddlywiki-bookmarklets]]
!!!EnableEdit
<html><a class="bookmarklet" title="enables editing of online TiddlyWikis, shows backstage and disables animations" href="javascript:(function(){if(window.version&#038;&#038;window.version.title=='TiddlyWiki'){readOnly=false;if(window.backstage){if(!backstage.button)backstage.init();backstage.show();}config.options.chkAnimate=false;refreshDisplay();}})()">EnableEdit</a></html>
!!!SetUserName
<html><a class="bookmarklet" title="change all tiddlers&#8217; &#8220;modifier&#8221; to the specified value" href="javascript:(function(){if(window.version&#038;&#038;window.version.title=='TiddlyWiki'){var g=prompt('Enter the desired user name',config.options.txtUserName);var t=store.getTiddlers();store.suspendNotifications();for(var i=0;i<t.length;i++)t[i].modifier=g;store.resumeNotifications();story.refreshAllTiddlers();}})()">SetUserName</a></html>
!!!RenameTag
<html><a class="bookmarklet" title="rename all occurrences of a tag" href="javascript:(function(){if(window.version&#038;&#038;window.version.title=='TiddlyWiki'){var oldTag=prompt('Enter the tag to rename','oldTag');var newTag=prompt('Rename tag '+oldTag+' to:','newTag');var t=store.getTaggedTiddlers(oldTag);store.suspendNotifications();for(var i=0;i<t.length;i++){t[i].tags.remove(oldTag);t[i].tags.pushUnique(newTag);}store.resumeNotifications();refreshDisplay();}})()">RenameTag</a></html>
!!!DeleteTagged
<html><a class="bookmarklet" title="delete all tiddlers with a specified tag" href="javascript:void(eval(decodeURIComponent(&quot;(function()%257B%250A%2509if(window.version%2520%2526%2526%2520window.version.title%2520%253D%253D%2520'TiddlyWiki')%257B%250A%2509%2509var%2520tag%2520%253D%2520prompt('Delete%2520tiddlers%2520with%2520the%2520tag%253A'%252C'')%253B%250A%2509%2509store.suspendNotifications()%253B%250A%2509%2509var%2520t%2520%253D%2520store.getTaggedTiddlers(tag)%253B%250A%2509%2509for(var%2520i%253D0%253Bi%253Ct.length%253Bi%252B%252B)%250A%2509%2509%2509store.removeTiddler(t%255Bi%255D.title)%253B%250A%2509%2509store.resumeNotifications()%253B%250A%2509%2509refreshDisplay()%253B%2509%2509%250A%2509%257D%250A%257D)()&quot;)))">DeleteTagged</a></html>
!!!ViewShadow
<html><a class="bookmarklet" title="display the default contents of a shadow tiddler" href="javascript:void(eval(decodeURIComponent(&quot;(function()%257Bif(window.version%2526%2526window.version.title%253D%253D'TiddlyWiki')%257Bvar%2520shadow%253Dprompt('View%2520the%2520shadow%2520tiddler%2520called%253A')%253Bvar%2520w%253Dwindow.open()%253Bw.document.open()%253Bw.document.write('%253Chtml%253E%253Cbody%253E')%253Bw.document.write('%253Cpre%253E'%252Bconfig.shadowTiddlers%255Bshadow%255D.htmlEncode()%252B'%253C%252Fpre%253E')%253Bw.document.write('%253C%252Fbody%253E%253C%252Fhtml%253E')%253Bw.document.close()%253B%257D%257D)()&quot;)))">ViewShadow</a></html>
!!!NukeCookies
<html><a class="bookmarklet" title="delete all cookies for the current document" href="javascript:void(eval(decodeURIComponent(&quot;(function()%257BC%253Ddocument.cookie.split(%2522%253B%2520%2522)%253Bfor(d%253D%2522.%2522%252Blocation.host%253Bd%253Bd%253D(%2522%2522%252Bd).substr(1).match(%252F%255C..*%2524%252F))for(sl%253D0%253Bsl%253C2%253B%252B%252Bsl)for(p%253D%2522%252F%2522%252Blocation.pathname%253Bp%253Bp%253Dp.substring(0%252Cp.lastIndexOf('%252F')))for(i%2520in%2520C)if(c%253DC%255Bi%255D)%257Bdocument.cookie%253Dc%252B%2522%253B%2520domain%253D%2522%252Bd.slice(sl)%252B%2522%253B%2520path%253D%2522%252Bp.slice(1)%252B%2522%252F%2522%252B%2522%253B%2520expires%253D%2522%252Bnew%2520Date((new%2520Date).getTime()-1e11).toGMTString()%257D%257D)()%250A&quot;)))">NukeCookies</a></html>
!!!SafeMode
<html><a class="bookmarklet" title="reload the current document in safe mode" href="javascript:(function(){if(window.version&#038;&#038;window.version.title=='TiddlyWiki'){window.location.hash='start:safe';window.location.reload(true);}})()">SafeMode</a></html>
!!!NukeShadows
<html><a class="bookmarklet" title="delete all customized shadow tiddlers" href="javascript:(function(){if(window.version&#038;&#038;window.version.title=='TiddlyWiki'){for(var n in config.shadowTiddlers){store.suspendNotifications();store.removeTiddler(n);store.resumeNotifications();refreshAll();}}})()">NukeShadows</a></html>
!!!TiddlyInfo
<html><a class="bookmarklet" title="display the current document&#8217;s version number and last-modified date" href="javascript:(function(){if(window.version&#038;&#038;window.version.title=='TiddlyWiki'){alert('TiddlyWiki version: '+version.major+'.'+version.minor+'.'+version.revision+(version.beta?' (beta '+version.beta+')':'')+'\nLast modified: '+document.lastModified);}})()">TiddlyInfo</a></html>
!!!ViewAsHtml
<html><a class="bookmarklet" title="Displays a tiddler as raw Html" href="javascript:void(eval(decodeURIComponent(&quot;(function()%257Bif(window.version%2526%2526window.version.title%253D%253D'TiddlyWiki')%257Bvar%2520title%253Dprompt('Tiddler%2520to%2520view%2520as%2520html%253A')%253Bvar%2520t%253Dstore.getTiddler(title)%253Bvar%2520stat%253DwikifyStatic(t.text%252Cnull%252Ct)%253Bvar%2520w%253Dwindow.open()%253Bw.document.open()%253Bw.document.write('%253Chtml%253E%253Cbody%253E')%253Bw.document.write('%253Cpre%253E'%252Bstat.htmlEncode()%252B'%253C%252Fpre%253E')%253Bw.document.write('%253C%252Fbody%253E%253C%252Fhtml%253E')%253Bw.document.close()%253B%257D%257D)()&quot;)))">ViewAsHtml</a></html>
!!!ViewAsJs
<html><a class="bookmarklet" title="display a tiddler as a JavaScript string (for developers to use as shadow tiddler)" href="javascript:void(eval(decodeURIComponent(&quot;%250A%2509if(window.version%2520%2526%2526%2520window.version.title%2520%253D%253D%2520'TiddlyWiki')%257B%250A%2509%2509var%2520title%2520%253D%2520prompt('Tiddler%2520to%2520view%2520as%2520JavaScript%2520string%253A')%253B%250A%2509%2509var%2520text%2520%253D%2520store.getTiddlerText(title).replace(%252F%2522%252Fg%252C'%255C%255C%2522').split(%2522%255Cn%2522).join('%255C%255Cn%2522%252B%255Cn%2520%2522')%253B%250A%2509%2509var%2520w%253Dwindow.open()%253B%250A%2509%2509w.document.open()%253B%250A%2509%2509w.document.write('%253Chtml%253E%253Cbody%253E')%253B%250A%2509%2509w.document.write('%253Cpre%253E'%252Btext.htmlEncode()%252B'%253C%252Fpre%253E')%253B%250A%2509%2509w.document.write('%253C%252Fbody%253E%253C%252Fhtml%253E')%253B%250A%2509%2509w.document.close()%253B%2509%2509%250A%2509%257D&quot;)))">ViewAsJs</a></html>
!!!PublisherMode
<html><a class="bookmarklet" title="reloads file in specified viewing/editing mode - for use with PublisherPlugin" href="javascript:(function(){if(window.version&#038;&#038;window.version.title=='TiddlyWiki'){var mode=prompt('Enter the mode in which to open the file','Admin');window.location.hash='mode:'+mode;window.location.reload(true);}})()">PublisherMode</a></html>
![[Eric Shulman|http://www.tiddlytools.com/#InstantBookmarklets]]
<<tiddler Load>>
}}}
<script>
var list=[];
var tids=store.getTaggedTiddlers("system");
if (!tids.length) return;
var out="|borderless|k\n";
for(var t=0;t<tids.length; t++)out+="| [[%0]]|&nbsp;&rarr;&nbsp;|<<runTiddler [[%0]] run>>|\n".format([tids[t].title]);
return out;
</script>
/***
Description: Contains the stuff you need to use Tiddlyspot
Note, you also need UploadPlugin
from http://tiddlywiki.bidix.info for a complete working Tiddlyspot site
update config.tiddlyspot to your id
***/
//{{{
config.tiddlyspotSiteId="menuflex";config.options.chkHttpReadOnly=false;window.readOnly=false;window.showBackstage=true;if(window.location.protocol!="file:"){config.options.chkGTDLazyAutoSave=false}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]] ")}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")});
//}}}
/***
Author: BidiX (BidiX (at) bidix (dot) info)
License: [[BSD open source license]]

Name: LoadRemoteFileThroughProxy "packed"
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.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={};if(!bidix.core)bidix.core={};bidix.core.loadRemoteFile=loadRemoteFile;loadRemoteFile=function(a,b,c){if((document.location.toString().substr(0,4)=="http")&&(a.substr(0,4)=="http")){a=store.getTiddlerText("SiteProxy","/proxy/")+a}return bidix.core.loadRemoteFile(a,b,c)}
//}}}
/***
Name: PasswordOptionPlugin
Description: Extends TiddlyWiki options with non encrypted password option
***/
//{{{
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";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(a,b,c,d,e){config.macros.option.genericCreate(a,"pas",c,d,e);config.macros.option.genericCreate(a,"chk","chk"+c,d,e);a.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel))},onChange:config.macros.option.genericOnChange}});merge(config.optionHandlers["chk"],{get:function(a){var b=a.substr(3);if(config.options[b]){saveOptionCookie(b)}return config.options[a]?"true":"false"}});merge(config.optionHandlers,{"pas":{get:function(a){if(config.options["chk"+a]){return encodeCookie(config.options[a].toString())}else{return""}},set:function(a,b){config.options[a]=decodeCookie(b)}}});loadOptionsCookie();
/*
if(!config.options["pasPassword"]){config.options["pasPassword"]=""}merge(config.optionsDesc,{pasPassword:"Test password"});
*/
//}}}
/***
Description: Settings made to stick
***/
//{{{
config.options.txtTheme="MenuFlex";
config.options.txtUserName="wolfgang";
config.options.txtBackupFolder="backup";
config.options.chkAnimate=true;
config.options.chkSaveBackups=true;
config.options.chkForceMinorUpdate=false;
config.options.chkInsertTabs=true;
config.options.chkCreateDefaultBreadcrumbs=false;
config.options.chkReorderBreadcrumbs=true;
config.options.chkBreadcrumbsReverse=true;
config.options.chkShowBreadcrumbs=true;
config.options.chkShowStartupBreadcrumbs=true;
config.options.chkRelatedTiddlersShowList=false;
config.options.chkRelatedTiddlersShowTree=true;
config.options.chkRelatedTiddlersZoom=true;
config.options.txtTOCListSize="35";
config.options.chkStickyPopups=true;
config.macros.search.label="";
config.macros.list.all.prompt="";
config.macros.list.shadowed.prompt="";
config.messages.backstage.open.text="";
merge(config.views.wikified.tag,{labelNoTags:"",labelTags:""});
merge(config.macros.tagging,{labelNotTag:"",label:""});
config.options.chkStickyPopups=true;
//}}}
/***
http://www.tiddlytools.com/#CoreTweaks
This tweak pre-processes source content to convert 'double-backslash-newline' into {{{<br>}}} before wikify(), so that literal newlines can be embedded in line-mode wiki syntax (e.g., tables, bullets, etc.)
***/
//{{{
window.coreWikify = wikify;
window.wikify = function(source,output,highlightRegExp,tiddler)
{
	if (source) arguments[0]=source.replace(/\\\\\n/mg,'<br>');
	coreWikify.apply(this,arguments);
}
//}}}
/***
browser detection - still to implement
    if(config.browser.isIE) {
       config.options.txtTheme = "IEBrowsersTheme";
    }
    if(config.browser.isOpera) {
       config.options.txtTheme = "OperaBrowsersTheme";
    } else {
       config.options.txtTheme = "MenuFlex";
    }
***/