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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<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>>
"I will quit the neighborhood of man.."..Dr.V.Frankenstein

Marionette's of papyrus perform Frankenstein
behind a tattered screen,
overlooking the hot spring.

Through the steam
the audience consists,
only of silver monkeys bathing.

You wonder if they just feign
disinterest in the puppetry.
Their sneers and rituals mimic
perfectly the preoccupations of the departed crowd.
Who groomed and chattered
just as,
waiting their turn to submerse.

But you know the creaking paper means nothing to them.
Just some moths that flutter stupidly
at the sash.
The Monster sees us the same way,
scratching at a caul -
he disembarks down to the ice.
Original Post Febuary 18, 2004

 The process of activating content in the arts takes many paths. Content is meaning transmitted. Meaning migrates to its intended along different lines of approach determined in part by the medium it is embedded in. These lines of approach are distinguished and defined be the senses they must serve. This lines can be though of as the optimum pathway into the consciousness of the viewer/audience/reader. paradoxically the most effective manifestation of this migration from object to consciousness is for the visual arts is sort of a back door. Visual arts, through the arrangement of forms and values, appeals directly to the non-verbal. This is a pre-conscious bandwidth, a frequency which can potentially communicate directly to the emotional and intuitive faculties of viewer. 

 I believe in the power of the non-verbal. But we live in a age which is not only literate, (used to having meaning tidily served up by dissections of rhetoric) but in an age in which visual information is habitually presented at extremely high definitions. It is this constant bombardment of these twin bludgeons of objectified meaning which make the artist's subjective attempts to engage in the poetics of the non-verbal increasingly impossible. I believe it is in response to this pressure from popular culture which is behind the shift in dominate format of visual arts away from painting to the ubiquitous installation. The lesson learned is that in a age of multi-media, artists must engage as many senses as possible in order to compete with the spectacle which is popular culture. 

 I do not applaud these trends. Installation like the painting is primarily a gallery technology. Unlike paintings, which retain there portability (therefor can also inhabit personal space), installations exist only in the privileged semi-public space of the gallery. For a variety of reasons this privileged gallery centered system does not work for me. There has to be another way. A more personal means of transmission and con-textualization. I am an artist searching for a more intimate venue. In it absence I will create it.

 The audience must be prepared for the non-verbal. When an artist strikes true with the power of the non-verbal, a threshold of undeniable intensity is crossed, and there is no denial of its impact. The trouble is getting the public to this point. I don't have answers, only strategies. I hope to distill my content by providing an experience. Rather than manipulating the atmosphere inside the gallery, I would send my pubic into the wilderness. The technologies I use to get them there – the web and global positioning systems are my intermediaries in presented and defining my work. The web also provides the opportunity to write directly to my public about my content. To say clearly all that can be said about my work. All the while recognizing the limitations of writing, and the temptations to be clear with my narrative. Literal or linear translations generally not possible or even necessarily desired readings of the complexes I wish to construct.

 My model is the Oracle. Which I believe is one of the ancient means of articulating the secret tongue of nature P.B.Shelly invokes. Nature is now digital as well as material. Artist and poets are challenged as never before to mediate with these voices in the chaos.

 "So much I asked before, and my heart gave
 The responce thou hast given; and of such truths
 Each to itself must be the oracle." (II, iv. 32-123 Prometheus Unbound)
Peer down through a mirrored lake or a deepening pool,

Find consciousness there, feeding the fungi on the rime frost -

Fat and butter to an ancient cow. 


Once she licked and nourished

but now she chews and grinds the ovum 

ice and fire

whirling 

heart-of-the-world

It must be

rendered

this grist

sugar and vinegar 

Onioning the ice 

like 

a mummies bandage

around a hollow bone.
Originaly Posted January 28, 2004

To what end this consumption of natural gas? It roars out the Alpine cave so cyclopian in the darkness, its tueers pluged save two aflame with orange glow below and a single red button lite high on the pyrometer. 

A muddy kaki slip flows and glazes itself over the carven folds and valleys. The work is a landscape molten and creaking with microtectonic stresses as it sits hovering alone in the inferno.

This will not be its last trial of fire. With hope in the morning I will attach gills of wax to its cooled underbelly. Then to the dipping in toxic colodial sillica to form the outer shell so the bronze can fill the void of the lost wax burnt away in the second fire. Which will be a tempering befor that last heat, the final trial of moltan metal.

Meanwhile the Alpine Roars untended in the darkness... 

I must return.

[img[http://www.nioncapul.net/pics/anglethumb1.jpg][http://www.nioncapul.net/pics/angleprint1.jpg]]<<imagebox>>
Medium: digital painting
Original Post January 26, 2005

I for one, will welcome our new Arboric Masters...
<html>
<img src="http://www.nioncapul.net/pics/applehead3.jpg">
</html>
I use a variety of programs to assist in the creation of artificial terrain.

The ones I own are http://www.World-Machine.com and [[L3DT|http://www.bundysoft.com]]

Soon I will begin a small render gallery an archive of my explorations.

Word Machine beta testing - I can't post images until the pro is released and I find the money to buy it.

here's an image with terrain from ~L3DT

[img[http://www.nioncapul.net/school/3dsmax/pics/circleopenthumb1.jpg][http://www.nioncapul.net/school/3dsmax/pics/circleopenwiki1.jpg]]<<imagebox>>
[img[pics/balrogprint1.jpg]]
Medium: digital painting
[img[pics/barrowprint1.jpg]]
Medium: watercolor
http://sheet.zoho.com/publish.do?docurl=ccpwdbgYMSkm8I%2BrK%2FcaiIUc9SFuNySO7bg01Qa0wqb%2BuVm31GQvyw%3D%3D&name=JROKiEh%2Fepv%2BuVm31GQvyw%3D%3D
[img[pics/batstumuckprint1.jpg][pics/batstumuckprint1.htm]]
Digital Painting
[<img[http://www.nioncapul.net/pics/bearoracle1.jpg]]

Original Post Febuary 22, 2004

Here is the basic info about Bear Oracle Cache. Since I no longer have any intension of making it a <html><a href="http://www.geocaching.com">Geocaching.com</a></html> offical cache. This has become the locus of my first geocaching experiment.

Currently the cache is empty. Stay tuned for further updates. Once the weather clears I'll hide some treasures in the cache. 

Coordinates
N 38 29.770' W 79 09.704'
 
Directions (spoiler info) 
The easiest route to the cache is to find the campsite with the stone chairs. The campsite is along the main stream of the valley below the cache. If you come to were the main stream splits into two smaller streams you have gone to far. Cross the main stream at the small waterfall directly across from the campsite. Go up this smaller stream valley for a short while (30 yards or so). Then go up the rock strewn hill to the left. The cache is on a ledge overlooking the valley. 

Difficulty 

In plain site but well camoed, this cache is not hard to find. Once you find it though, the fun has just begun.
The terrain difficulty of 4.25 is about as hard as you can get without needing special equipment. Be careful in your assent and watch out for snakes in the warm seasons!


Update May 23,2005

The above pictured crafted custom cache box is missing. I have no hard feelings; after all I placed in the wilderness come what may. I'd like to think someone liked it enough to take it home with them. It was a heavy object in an out of the way place, but obviously not out of the way enough not to attract attention. At least one person - this guy 'Buba' I meet through my friend Maryn was able to find it without any input from me...so I guess I shouldn't be surprised. 
[img[pics/chain1.jpg]]
Medium: found scrap steel forged into chain links
Belnkre is a long term fantasty world building project. I hope to eventualy publish useing Belnkre as a setting.

A seprate tiddlywiki for Belnkre stuff is maintained <html><a href="http://www.nioncapul.net/Belnkre/Belnkre.html">here</a>.</html>


 
[img[pics/trucksg1.jpg]]
Medium: digital photograph stereograph
[img[pics/bladeryth1.jpg]]
Medium: photograph by Eric Robson of ritual with wood sand blood and forged steel 

























































[img[pics/bowlthumb1.jpg][pics/bowlprint1.jpg]]<<imagebox>>
Medium: 3D rendering
[>img[http://www.nioncapul.net/pics/EMBthumb1.jpg][http://www.nioncapul.net/pics/EMBwiki1.jpg]]<<imagebox>>
[img[http://www.nioncapul.net/pics/elfmushmaskthumb1.jpg][http://www.nioncapul.net/pics/elfmushmask1.jpg]]<<imagebox>>

A new rendering - watcom, zbrush, xnormal, mudbox, 3dsmax9 and brazil.

Please click on images for lightbox for enlargements.

To the left new render with some amanita muscaria and sundry digital painting and a beaked mask - that was created by David-Laserscanning my small bronze [[God L ashtray]] and then building a new topology in Zbrush3 of a portion of the mesh. 






[img[pics/caligprint1.jpg][pics/caligprinthigh.jpg]]
Medium: Iron Casting - lost wax
I have begun to corelate a comprehensive guide to chinese medicine in a tiddlywiki located 
<html><a href="http://www.nioncapul.net/chinesemedicinel">here</a>.</html>

The Tiddlywiki Guide to Chinese Medicinewill be lincenced under a Creative Commons Lincense like to one below.

<html><!--Creative Commons License--><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/"><img alt="Creative Commons License" style="border-width: 0" src="http://i.creativecommons.org/l/by-nc-sa/2.5/88x31.png"/></a><br/>This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/">Creative Commons Attribution-Noncommercial-Share Alike 2.5  License</a>.<!--/Creative Commons License--><!-- <rdf:RDF xmlns="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
	<Work rdf:about="">
		<license rdf:resource="http://creativecommons.org/licenses/by-nc-sa/2.5/" />
	<dc:type rdf:resource="http://purl.org/dc/dcmitype/InteractiveResource" />
	</Work>
	<License rdf:about="http://creativecommons.org/licenses/by-nc-sa/2.5/"><permits rdf:resource="http://web.resource.org/cc/Reproduction"/><permits rdf:resource="http://web.resource.org/cc/Distribution"/><requires rdf:resource="http://web.resource.org/cc/Notice"/><requires rdf:resource="http://web.resource.org/cc/Attribution"/><prohibits rdf:resource="http://web.resource.org/cc/CommercialUse"/><permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/><requires rdf:resource="http://web.resource.org/cc/ShareAlike"/></License></rdf:RDF> --></html>
[img[pics/magbhituprint.jpg]]
Medium: watercolor, ink, carcoal
/***
Just some bits and pieces
***/
//{{{
config.messages.messageClose.text = "X"; // default is "close"
config.views.wikified.defaultText = ""; // default is "The tiddler '%0' doesn't yet exist. Double-click to create it"
config.options.chkHttpReadOnly = false; // Enable editing so that visitors can experiment with it
//}}}
[img[http://www.nioncapul.net/pics/copperguyhumb1.jpg][http://www.nioncapul.net/pics/copperguy1.jpg]]<<imagebox>>
Medium 3D rendering 

Reused bumbmap from greenman
Her fruit body life
half measured
matrix of blessing
this sun amalgam of
dust grains and prayers
spokes to the eye
where the coral grows
secret
to dream her as a pocked stem 
locked
in petrified honey 
so resinous it
crests
the brittle laurel
full into a comb of rays.
i've been building this site for a while, its almost done

http://www.nioncapul.net/crable/explorer
/***
|''Name:''|CryptoFunctionsPlugin|
|''Description:''|Support for cryptographic functions|
***/
//{{{
if(!version.extensions.CryptoFunctionsPlugin) {
version.extensions.CryptoFunctionsPlugin = {installed:true};

//--
//-- Crypto functions and associated conversion routines
//--

// Crypto "namespace"
function Crypto() {}

// Convert a string to an array of big-endian 32-bit words
Crypto.strToBe32s = function(str)
{
	var be = Array();
	var len = Math.floor(str.length/4);
	var i, j;
	for(i=0, j=0; i<len; i++, j+=4) {
		be[i] = ((str.charCodeAt(j)&0xff) << 24)|((str.charCodeAt(j+1)&0xff) << 16)|((str.charCodeAt(j+2)&0xff) << 8)|(str.charCodeAt(j+3)&0xff);
	}
	while (j<str.length) {
		be[j>>2] |= (str.charCodeAt(j)&0xff)<<(24-(j*8)%32);
		j++;
	}
	return be;
};

// Convert an array of big-endian 32-bit words to a string
Crypto.be32sToStr = function(be)
{
	var str = "";
	for(var i=0;i<be.length*32;i+=8)
		str += String.fromCharCode((be[i>>5]>>>(24-i%32)) & 0xff);
	return str;
};

// Convert an array of big-endian 32-bit words to a hex string
Crypto.be32sToHex = function(be)
{
	var hex = "0123456789ABCDEF";
	var str = "";
	for(var i=0;i<be.length*4;i++)
		str += hex.charAt((be[i>>2]>>((3-i%4)*8+4))&0xF) + hex.charAt((be[i>>2]>>((3-i%4)*8))&0xF);
	return str;
};

// Return, in hex, the SHA-1 hash of a string
Crypto.hexSha1Str = function(str)
{
	return Crypto.be32sToHex(Crypto.sha1Str(str));
};

// Return the SHA-1 hash of a string
Crypto.sha1Str = function(str)
{
	return Crypto.sha1(Crypto.strToBe32s(str),str.length);
};

// Calculate the SHA-1 hash of an array of blen bytes of big-endian 32-bit words
Crypto.sha1 = function(x,blen)
{
	// Add 32-bit integers, wrapping at 32 bits
	add32 = function(a,b)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF);
		var msw = (a>>16)+(b>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Add five 32-bit integers, wrapping at 32 bits
	add32x5 = function(a,b,c,d,e)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF)+(e&0xFFFF);
		var msw = (a>>16)+(b>>16)+(c>>16)+(d>>16)+(e>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Bitwise rotate left a 32-bit integer by 1 bit
	rol32 = function(n)
	{
		return (n>>>31)|(n<<1);
	};

	var len = blen*8;
	// Append padding so length in bits is 448 mod 512
	x[len>>5] |= 0x80 << (24-len%32);
	// Append length
	x[((len+64>>9)<<4)+15] = len;
	var w = Array(80);

	var k1 = 0x5A827999;
	var k2 = 0x6ED9EBA1;
	var k3 = 0x8F1BBCDC;
	var k4 = 0xCA62C1D6;

	var h0 = 0x67452301;
	var h1 = 0xEFCDAB89;
	var h2 = 0x98BADCFE;
	var h3 = 0x10325476;
	var h4 = 0xC3D2E1F0;

	for(var i=0;i<x.length;i+=16) {
		var j,t;
		var a = h0;
		var b = h1;
		var c = h2;
		var d = h3;
		var e = h4;
		for(j = 0;j<16;j++) {
			w[j] = x[i+j];
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=16;j<20;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=20;j<40;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k2);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=40;j<60;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),(b&c)|(d&(b|c)),w[j],k3);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=60;j<80;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k4);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}

		h0 = add32(h0,a);
		h1 = add32(h1,b);
		h2 = add32(h2,c);
		h3 = add32(h3,d);
		h4 = add32(h4,e);
	}
	return Array(h0,h1,h2,h3,h4);
};


}
//}}}
[img[pics/cyoteeprint1.jpg]]
slate carving
[img[http://www.nioncapul.net/pics/damthumb1.jpg][http://www.nioncapul.net/pics/damprint1.jpg]]<<imagebox>>
Medium: digital painting
<<wikipedia Laser_scanning>>

http://www.david-laserscanner.com/
[[Welcome]]
[[Lokwigh]]
[[LeperkhanOssain Wayang Animation]]
[[Serramin Underwater]]
[[Dragon Alphas]]
[[Three Knights]]
/***
|''Name:''|DeprecatedFunctionsPlugin|
|''Description:''|Support for deprecated functions removed from core|
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};

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

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

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

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

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

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

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

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

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

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

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

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

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

}
//}}}
[img[pics/dragonprint1.jpg][pics/dragonprinthigh.jpg]]
Medium: pencil with digital coloring
[img[pics/irondragonthumb1.jpg][/pics/irondragonfull1.jpg]]<<imagebox>>
3D Rendering









download alphapack <html><a href="http://www.nioncapul.net/pub/alphas/dragon1.zipl">here</a>.</html>
[img[pics/drwceinturtprint1.jpg][pics/drwceinturtprinthigh.jpg]]
Medium: digital painting
[>img[http://www.nioncapul.net/pics/esrshrugged2.png]] 
Originaly Posted Febuary 1, 2005

Accourding to Slashdot Eric Raymond of <html><a href="http://www.catb.org/~esr/">http://www.catb.org/~esr/</a></html> has stepped down from his role as president of the <html><a href="http://www.opensource.org/">the Open Source Initiative</a></html> 

Detracters aside I admire the wako and some of his politics.
 
For a counter balancing view read- The Emperore has No Cloths at<html> <a href="http://esr.1accesshost.com/">http://esr.1accesshost.com/</a></html>







<!---
| Name:|~TagglyTaggingEditTemplate |
| Version:|1.1 (12-Jan-2006)|
| Source:|http://simonbaird.com/mptw/#TagglyTaggingEditTemplate|
| Purpose:|See TagglyTagging for more info|
| Requires:|You need the CSS in TagglyTaggingStyles to make it look right|
--->
<!--{{{-->
<div class="toolbar" macro="toolbar +saveTiddler closeOthers cancelTiddler deleteTiddler"></div>
<div class="title" macro="view title"></div>
<div class="editLabel">Title</div><div class="editor" macro="edit title"></div>
<div class="editLabel">Tags</div><div class="editor" macro="edit tags"></div>
<div class="editorFooter"><span macro="message views.editor.tagPrompt"></span><span macro="tagChooser"></span></div>
<div class="editor" macro="edit text"></div>
<br/>
<!--}}}-->
[img[pics/erzuilieprint1.jpg][pics/erzuilieprinthigh1.jpg]]
Digital Painting
[img[pics/etchgaurdsg1.jpg]]
Medium: 3D stereographic rendering
Originaly Posted Febuary 7, 2004

Some pictures from the current project have come to light. They appear to be evidence of the mycological understructure of Bother Knob and environs. The images are small and of dubious color acuracy but are none-the-less useful in recording the emergance of the fuit. 

[img[http://www.nioncapul.net/pics/fungilandb1.jpg"]]
Bottom View 

[img[http://www.nioncapul.net/pics/fungilandt1.jpg]]
Top View 

[img[http://www.nioncapul.net/pics/fungilands1.jpg]]
Side View
/***
|Name|FullScreenPlugin|
|Created by|SaqImtiaz|
|Location|http://lewcid.googlepages.com/lewcid.html#FullScreenPlugin|
|Version|1.1|
|Requires|~TW2.x|
!Description:
Toggle between viewing tiddlers fullscreen and normally. Very handy for when you need more viewing space.

!Demo:
Click the ↕ button in the toolbar for this tiddler. Click it again to turn off fullscreen.

!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
Edit the ViewTemplate to add the fullscreen command to the toolbar.

!History:
*25-07-06: ver 1.1
*20-07-06: ver 1.0

!Code
***/
//{{{
var lewcidFullScreen = false;

config.commands.fullscreen =
{
 text:" ↕ ",
 tooltip:"Fullscreen mode"
};

config.commands.fullscreen.handler = function (event,src,title)
{
 if (lewcidFullScreen == false)
 {
 lewcidFullScreen = true;
 setStylesheet('#sidebar, .header, #mainMenu{display:none;} #displayArea{margin:0em 0 0 0 !important;}',"lewcidFullScreenStyle");
 }
 else
 {
 lewcidFullScreen = false;
 setStylesheet(' ',"lewcidFullScreenStyle");
 }
}

config.macros.fullscreen={};
config.macros.fullscreen.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
 var label = params[0]||" ↕ ";
 var tooltip = params[1]||"Fullscreen mode";
 createTiddlyButton(place,label,tooltip,config.commands.fullscreen.handler);
}

var lewcid_fullscreen_closeTiddler = Story.prototype.closeTiddler;
Story.prototype.closeTiddler =function(title,animate,slowly)
{
 lewcid_fullscreen_closeTiddler.apply(this,arguments);
 if (story.isEmpty() && lewcidFullScreen == true)
 config.commands.fullscreen.handler();
}


Slider.prototype.lewcidStop = Slider.prototype.stop;
Slider.prototype.stop = function()
{
 this.lewcidStop();
 if (story.isEmpty() && lewcidFullScreen == true)
 config.commands.fullscreen.handler();
}
//}}}
[img[pics/gaurdianmaskprint1.jpg]]
Medium: slate craving
[img[pics/gaudthumb1.jpg][pics/gaurdprint1.jpg]]<<imagebox>>
Medium: 3D rendering
I can just hear a twitter of loveliness  yet,
a vapid perfume in the salon.
Maybe just a haze above the territories and armed borders.

For in August the maps are spread out
and soon a clatter will draw down
the bird song's                    warnings
into the      bucket
of                          
	organs.

Ping ping tweet
ping ping tweet
ping ping tweet

We saw it coming, these 
Poems of War
Trumpets of dead flowers,
Fermenting the lambics of slaughter.

I wonder if Sassoon and Owen flew off like cranes - 
 through a bardo of murmurs.
Or festooned with crow feathers 
gathered to eat watercress along the Marne.

But perch?
Will they perch and sing?
I don't know if the drawing-rooms will ever be cracked open
enough
to hear their true tones
of love.
Welcome to your brand new [[MonkeyPirateTiddlyWiki|http://simonbaird.com/mptw/]]. This is the standard empty [[TiddlyWiki|http://www.tiddlywiki.com/]] (version <<version>>) preconfigured with a few bits and pieces from MPTW, in particular the layout, the colours, and the popular [[TagglyTagging|http://simonbaird.com/mptw/#TagglyTagging]]. If you're new to ~TagglyTagging then try the [[FAQ|http://simonbaird.com/mptw/#TagglyTaggingFAQ]] and [[Tutorial|http://simonbaird.com/mptw/#TagglyTaggingTutorial]].

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>>

To create your own tiddlers, click 'new tiddler' in the right sidebar. To edit a tiddler click the 'edit' button in the tiddler's toolbar. To save all your tiddlers click 'save changes' in the right sidebar. If you're new to TiddlyWiki check out the formatting info [[here|http://www.tiddlywiki.com/#MainFeatures]].

Use this to import tiddlers from another TiddlyWiki. You can use a local file (click Browse...) or type the url of an online TiddlyWiki.
<<importTiddlers inline>>
To change your colour scheme you can edit the styles in StyleSheet. (Refer to StyleSheetColors and StyleSheetLayout for all styles used).

[img[pics/goblinprint1.jpg]]
Medium: digital painting
[img[pics/gogltraytprint1.jpg]]
Medium: bronze casting - lost wax, patina
[img[pics/greenmanthumb1.jpg][pics/greenmanprint3.jpg]]<<imagebox>>
3D Rendering
[img[pics/gugubirdprint1.jpg]]
Bronze relief, lost wax casting, patina and paint.
''Hlidskjalf''

In the kingdom of the blind,

The savants have questioned the construct of kingship.

Now they divine the election of new senators

by the congealings of the royal blood.


Just a energetic trickle down the side of a cup

is enough to appoint a new Pontificus Maximus.

Imagine the effects of such blood and semen

In it's proper grail.


There is a discipline to sight;

So too with words.

Distinctions must be made;

In the service of meaning.

So does the knife fall

in the service of the people.


They fear the king's single eye still.

Blinking its last in the dust.

His ravens have come to the feast.

Betrayers -

Thought and Memory

They glutton – soon a lifetime

of visions will pour into nothing

Like wine through a hollow sieve.
[img[pics/honecliffsg1.jpg]]
Medium: digital photograph stereograph
North American Indian Prophecies
Talk Given by Lee Brown
1986 Continental Indigenous Council
Tanana Valley Fairgrounds
Fairbanks, Alaska

There was the cycle of the mineral, the rock. There was the cycle of the plant. And now we are in the cycle of the animals coming to the end of that and beginning the cycle of the human being.

When we get into the cycle of the human being, the highest and greatest powers that we have will be released to us.

They will be released from that light or soul that we carry to the mind. But right now we're coming to the end of the animal cycle and we have investigated ourselves and learned what it is to be like an animal on this earth.

At the beginning of this cycle of time, long ago, the Great Spirit came down and He made an appearance and He gathered the peoples of this earth together they say on an island which is now beneath the water and He said to the human beings, "I'm going to send you to four directions and over time I'm going to change you to four colors, but I'm going to give you some teachings and you will call these the Original Teachings and when you come back together with each other you will share these so that you can live and have peace on earth, and a great civilization will come about."

And he said, "During the cycle of time I'm going to give each of you two stone tablets. When I give you those stone tablets, don't cast those upon the ground. If any of the brothers and sisters of the four directions and the four colors cast their tablets on the ground, not only, will human beings have a hard time, but almost the earth itself will die."

And so he gave each of us a responsibility and we call that the Guardianship.

To the Indian people, the red people, he gave the Guardianship of the earth. We were to learn during this cycle of time the teachings of the earth, the plants that grow from the earth, the foods that you can eat, and the herbs that are healing so that when we came back together with the other brothers and sisters we could share this knowledge with them. Something good was to happen on the earth.

To the South, he gave the yellow race of people the Guardianship of the wind. They were to learn about the sky and breathing and how to take that within ourselves for spiritual advancement. They were to share that with is at this time.

To the West He gave the black race of people the Guardianship of the water. They were to learn the teachings of the water which is the chief of the elements, being the most humble and the most powerful.

To the North He gave the white race of people the Guardianship of the fire. If you look at the center of many of the things they do you will find the fire. They say a light bulb is the white man's fire. If you look at the center of a car you will find a spark. If you look at the center of the airplane and the train you will find the fire. The fire consumes, and also moves. This is why it was the white brothers and sisters who began to move upon the face of the earth and reunite us as a human family.

And so a long time passed, and the Great Spirit gave each of the four races two stone tablets. Ours are kept at the Hopi Reservation in Arizona at Four Corners Area on 3rd Mesa.

I talked to people from the black race and their stone tablets are at the foot of Mount Kenya. They are kept by the Kukuyu Tribe.

I once had the honor of presenting a sacred pipe at the Kukuyu Tribe carved from the red pipe stone of Mount Kenya. I was at an Indian spiritual gathering about 15 years ago. A medicine man from South Dakota put a beaded medicine wheel in the middle of the gathering. It had the four colors from the four directions; He asked the people, "Where is this from?" They said, "Probably Montana, or South Dakota, maybe Seskatchewan." He said, "This is from Kenya." It was beaded just like ours, with the same color.

The stone tablets of the yellow race of people are kept by the Tibetans, in Tibet. If you went straight through the Hopi Reservation to the other side of the world, you would come out in Tibet. The Tibetan word for "sun" is the Hopi word for "moon" and the Hopi word for "sun" is the Tibetan word for "moon".

The guardians of the traditions of the people of Europe are the Swiss. In Switzerland, they still have a day when each family brings out its mask. They still know the colors of the families, they still know the symbols, some of them. I went to school with some people from Switzerland at the University of Washington and they shared this with me.

Each of these four peoples happen to be people that live in the mountains.

In 1976 America had its bicentennial celebrating 200 years of freedom. Some of the Native people thought this was significant and they carried a sacred pipe bundle from the West Coast to the East Coast of this land.

They said that the roads of this land should either go North-South or East-West. If they went North-South we would come together as brothers and sisters, but if they went East-West there would be destruction and almost the earth itself would have a hard time. So you all know the roads went East-West.

They said then things would be lost from the East to the West and from the South to the North and that they would come back again from the West to the East and from the North to the South.

So nine years ago in 1976 from the West to East Coast of this land, from San Francisco to Washington, D.C. people carried a sacred pipe bundle by hand, on foot. My aunt had dreamt 15 years ago that people that didn't like them would throw rocks and bottles at that pipe bundle as they carried it across the land. And sure enough that came about. But, as was in my aunt's dream, the rocks only came so close and then they dropped, and nothing touched it.

They said a spiritual fire would be lit in the North and would come down the Northwest Coast of this land. When it gets to the Puget Sound, it would go inland. I think this, nine years later, is the gathering in the North, myself. That's why I came here. This is it. We have the capacity to start the spiritual fire now, here. The old people long ago saw it and foretold it and I'm going to come to that.

So we went through this cycle of time and each of the four races went to their directions and they learned their teachings.

We were given a sacred handshake to show when we came back together as brothers and sisters that we still remembered the teachings. It was indicated on the stone tablets that the Hopis had that the first brothers and sisters that would come back to them would come as turtles across the land. They would be human beings, but they would come as turtles.

So when the time came close the Hopis were at a special village to welcome the turtles that would come across the land and they got up in the morning and looked out at the sunrise. They looked out across the desert and they saw the Spanish Conquistadores coming, covered in armour, like turtles across the land. So this was them. So they went out to the Spanish man and they extended their hand hoping for the handshake but into the hand the Spanish man dropped a trinket.

And so word spread throughout North America that there was going to be a hard time, that maybe some of the brothers and sisters had forgotten the sacredness of all things and all the human beings were going to suffer for this on the earth.

So tribes began to send people to the mounds to have missions to try to figure out how they could survive. At that time there were 100,000 cities in the Mississippi Valley alone, called the mound civilization: cities built on great mounds. Those mounds are still there. If you ever go out to Ohio or the Mississippi Valley, they're tourist attractions now. There was 100,000 cities of Native people and they were wondering how they could survive.

They began to try to learn to live off the land because they knew a hard time was going to come. They began to send people to have visions to see how we could survive this time.

People came on the east coast and they went across this land to the east and they were told in the prophecies that we should try to remind all the people that would come here of the sacredness of all things. If we could do that, then there would be peace on earth. But if we did not do that, when the roads went clear from east to west, and when the other races and colors of the Earth had walked clear across this land, if by that time we had not come together as a human family, the Great Spirit would grab the earth with his hand and shake it.

And so if you read the treaty negotiations from Red Jacket of the Six Nations on the east coast of this land clear to Chief Joseph and Chief Seattle on the west coast of this land, they all said the same thing. Chief Joseph said, "I accord you the right, and I hope you accord me the right, to live in this land." Always we were trying to live together. But instead of living together, you all know there was separation, there was segregation. They separated the races: they separated the Indians, and they separated the blacks.

So when they got to the west coast of this land the elders that were made aware of these prophecies said they would then begin to build a black ribbon. And on this black ribbon there would move a bug. And when you begin to see this bug moving on the land, that was the sign for the First Shaking of the Earth.

The First Shaking of the Earth would be so violent that this bug would be shaken off the earth into the air and it would begin to move and fly in the air. And by the end of this shaking this bug will be in the air around the world. Behind it would be a trail of dirt and eventually the whole sky of the entire earth would become dirty from these trails of dirt, and this would cause many diseases that would get more and more complicated. So the bug moving on the land, of course it's easy to see now.

In 1908 the Model-T Ford was mass produced for the first time. So the elders knew the First Shaking of the Earth was about to come about - that's the First World War. In the First World War the airplane came into wide usage for the first time. That was that bug moving into the sky. And so they knew something very important would happen.

There would be an attempt to make peace on earth on the west coast of this land and so the elders began to watch for this. They began to hear that there was going to be a League of Nations in San Francisco so the elders gathered in Arizona around 1920 or so and they wrote a letter to Woodrow Wilson. They asked if the Indian people could be included in the League of Nations.

At that time the United States Supreme Court had held that a reservation is a separate and semi-sovereign nation, not a part of the United States but protected by it. This became a concern because people didn't want the reservations to become more and more separate. They didn't want them to be considered nations. So they did not write back and the Native people were left out of the League of Nations, so that circle was incomplete.

In the League of Nations circle there was a southern door, the yellow people; there was a western door, the black people; there was a northern door, the white people; but the eastern door was not attended. The elders knew that peace would not come on the earth until the circle of humanity is complete, until all the four colors sat in the circle and shared their teachings, then peace would come on earth.

So they knew things would happen. Things would speed up a little bit. There would be a cobweb built around the earth, and people would talk across this cobweb. When this talking cobweb, the telephone, was built around the earth, a sign of life would appear in the east, but it would tilt and bring death. It would come with the sun.

But the sun itself would rise one day not in the east but in the west. So the elders said when you see the sun rising in the east and you see the sign of life reversed and tilted in the east, you know that the Great Death is to come upon the earth, and now the Great Spirit will grab the earth again in His hand and shake it and this shaking will be worse than the first.

So the sign of life reversed and tilted, we call that the Swastika, and the rising sun in the east was the rising sun of Japan. These two symbols are carved in stone in Arizona. When the elders saw these two flags, these were the signs that the earth was to be shaken again.

The worse misuse of the Guardianship of the fire is called the "gourd of ashes". They said the gourd of ashes will fall from the air. It will make the people like blades of grass in the prairie fire and things will not grow for many seasons. I saw on television not too long ago that they were talking about the atomic bomb, the gourd of ashes. They said it was the best-kept secret in the history of the United States. The elders wanted to speak about it in 1920.

They would have spoken of it and foretold it's coming if they could have entered into the League of Nations.

The elders tried to contact President Roosevelt and ask him not to use the gourd of ashes because it would have a great effect on the earth and eventually cause even greater destruction and a the Third Shaking of the Earth, the Third World War. I'll get to that in a few minutes.

So they knew after the Second Shaking of the Earth when they saw the gourd of ashes fall from the sky then there would be an attempt to make peace on the other side of this land. And because the peace attempt on the west coast had failed, they would build a special house on the east coast of this Turtle Island, and all the nations and peoples of the earth would come to this house and it would be called the House of Mica and it would shine like the mica on the desert shines.

So the elders began to see they were building the United Nations made out of glass that reflects like the mica on the desert so they knew this was the House of Mica and all the peoples of the earth should go to it. So they met and talked about this.

They said that in the 1920's they had written and they had not been responded to, so they said this time we better go to the front door of the House of Mica because things might get a lot worse.

So elders representing a number of tribes I believe drove to New York City. When the United Nations opened they went to the front door of the House of Mica and they said these words:

"We represent the indigenous people of North America and we wish to address the nations of the Earth. We're going to give you four days to consider whether or not we will be allowed to speak."

They retreated to one of the Six Nations Reserves in New York State. The Six Nations Reserves are keepers of the Great Law of Peace of the prophet that appeared here in North America, Dagonnorida. And this Law of Peace is still recited, it takes four days between sunrise and noon. Each year an Indian, by memory, must recite it about this time of year.

Four days later they came back and I believe the nations of the earth heard that the Indians had come to the door. And they voted to let the Indians in. They wanted to hear what they had to say. But the United States is one of five nations of the United Nations with a veto power and still they were concerned because this time the Native sovereignty was even stronger. And I believe they vetoed the entrance of the Native people.

So then they knew other things would happen on the Earth, and the United Nations would not bring peace on earth but there would be continuing and deepening confusion. And that the little wars would get worse. So they retreated to the Six Nations Reserve and they talked about this and they said the time is really getting close now, 1949.

They said, "We're going to divide the United States into four sections and each year we're going to have a gathering. We're going to call these the 'White of Peace Gatherings'." They began to have these around 1950. And they authorized certain men to speak in English for the first time about these prophecies.

One that I used to listen to many times, over and over, was Thomas Benyaka. He is a Hopi man. I believe he is still living. He was authorized to speak in English about what was on the stone tablets and he has dedicated his lifetime to doing this. And they began to tell us at these gatherings, they said "In your lifetime you're going to see things happen."

It was strange when they said it in the 1950's and 1960's but now it seems very clear. But then it was unusual. They said, "You're going to see a time in your life when men are going to become women. The Great Spirit is going to make a man on the earth. He made him a man but this man is going to say, "I know more than the Great Spirit. I'm going to change myself to be a woman:" And they will even nurse children. The Great Spirit is going to make the woman on the earth. She's going to say, "I know more than the Great Spirit. I want to be a man. And she will be physically a man."

They said "You're going to see a time in your lifetime when the human beings are going to find the blueprint that makes us." They call that now, DNA, deoxyribonucleic acid. They said, "They re going to cut this blueprint." They call that now, genetic splicing.

And they said, "They're going to make new animals upon the earth, and they're going to think these are going to help us. And it's going to seem like they do help us. But maybe the grandchildren and greatgrandchildren are going to suffer."

They are making new animals. The elders talked about this. They said, "You will see new animals, and even the old animals will come back, animals that people thought had disappeared. They will find them here and there. They'll begin to reappear."

They said (and I know many of you are from tribes that also have this prophecy, "You're going to see a time when the eagle will fly its highest in the night and it will land upon the moon." Some tribes say the eagle will circle the moon. Some tribes say the eagle will fly it's highest in the night. "And at that time," they say, "Many of the Native people will be sleeping," which symbolically means they have lost their teachings. There are some tribes that say it will be as if they are frozen: they've been through the long winter.

But they say, "When the eagle flies it's highest in the night, that will be the first light of a new day. That will be the first thawing of spring." Of course, at the first light of a new day, if you've stayed up all night, you notice it's really dark. And the first light, you want to see it, but you can't. It sneaks up on you. You want to see it change but it's dark and then pretty soon it's getting light before you know it.

We're at that time now. The Eagle has landed on the moon, 1969. When that spaceship landed they sent back the message, "The Eagle has landed." Traditionally, Native people from clear up in the Inuit region, they have shared with us this prophecy, clear down to the Quechuas in South America. They shared with us that they have this prophecy. When they heard those first words, "The Eagle has landed," they knew that was the start of a new time and a new power for Native people. There was absolutely nothing strong before us now. We may do anything we wish.

In 1776 when the United States Government printed the dollar, in one claw [of the eagle], if you've ever noticed, there is an olive branch in this claw. They said that represented peace. The Indian elders shared with me in South Dakota that to them that represents the enslavement of black people.

In the prophecies of the Six Nations people they say there will be two great uprisings by black people to free themselves. We've seen one about 1964. There will be a second, more violent one to come. I'll get back to what that means in a minute. In the other claw is 13 arrows. The founding fathers of the United States said that represents the 13 States. But the elders say that represents the enslavement of the Native people.

When the Eagle landed on the moon, they decided to print a special silver dollar to commemorate that. I don't know how many of you noticed it. The original design showed the spaceship landing on the moon but at the last minute it was changed to an actual eagle. And in the eagle's claws is the olive branch, but the arrows are gone. The elders said, "That's our prophecy, we have been released."

There was one more uprising coming for the black race of people and then they will be released and this is also going to have an effect on Native people, a good effect. There's a whole new set of prophecies from the Iroquois people about that and I won't have time to go into that this morning.

But we're in that time now. We're between the first light of a new day and the sunrise. The sunrise is about to come and when it comes up everyone is going to see it. But you know how it is in the village there's a few people that get up early, and there are some that sleep until noon. I'm probably one of those that sleeps until noon. They said when that Eagle lands on the moon, the powers will begin to come back to us.

Within seven days of the time the Eagle landed on the moon, the Freedom of Indian Religion Act was introduced into the United States Congress. The legislation was introduced in 1969, less than seven days after the Eagle landed on the moon. Eventually it was passed in November of 1978, signed by President Carter. These are the physical manifestations of the spiritual prophecies that we have.

So he said at this time you're going to see that things will speed up, that people on the earth will move faster and faster. Grandchildren will not have time for grandparents. Parents will not have time for children. It will seem like time is going faster and faster. The elders advised us that as things speed up, you yourself should slow down. The faster things go, the slower you go. Because there's going to come a time when the earth is going to be shaken a third time.

The Great Spirit has been shaking the earth two times: the First and Second World Wars to remind us that we are a human family, to remind us that we should have greeted each other as brothers and sisters. We had a chance after each shaking to come together in a circle that would have brought peace on earth, but we missed that.

Tonight they were talking on the news about the sign for the Third Shaking of the Earth. I heard it while sitting in the airport after I missed my plane. They said they're going to build what the elders called the "house in the sky".

In the 1950's they talked about this: they will build a house and throw it in the sky. When you see people living in the sky on a permanent basis, you will know the Great Spirit is about to grab the earth, this time not with one hand, but with both hands.

Many of you of Native background may have heard "the spirits will warn you twice, but the third time you stand alone." We've had two warnings, the first two World Wars, but now we stand alone in the third one. As it says in the Baha'i Writings, there will be no-one protected. When this house is in the sky, the Great Spirit is going to shake the Earth a third time and whoever dropped that gourd of ashes, upon them it is going to drop.

They say at that time there will be villages in this land so great that when you stand in the villages you will not be able to see out, and in the prophecies these are called "villages of stone", or "prairies of stone". And they said the stone will grow up from the ground and you will not be able to see beyond the village. At the center of each and every one of these villages will be Native people, and they will walk as "hollow" shells upon a "prairie of stone". They said "hollow shells" which means they will have lost any of their traditional understandings; they will be empty within.

They said after the Eagle lands on the moon some of these people will begin to leave these "prairies of stone" and come home and take up some of the old ways and begin to make themselves reborn, because it's a new day. But many will not. And they said there's going to come a time when in the morning the sun is going to rise and this village of stone will be there, and in the evening there would just be steam coming from the ground. They will be as steam. And in the center of many of those villages of stone when they turn to steam, the Native people will turn to steam also because they never woke up and left the village.

And this used to bother me when I was a young man. I used to ask the elders, "Isn't there anything we can do?" And they said, well, it's just that way that if a person does not have the spiritual eyes to see, it's very hard to show them. Or if they don't have the ears to hear, it's very hard to speak with them. We wish that we could go get them all but we can't. It's just that some are not going to wake up. But some will wake up.

And so they say there's going to be the Third Shaking of the Earth. It's not going to be a good thing to see but we will survive it. We will survive it. And when we survive it, then there's going to be another attempt to make a circle of the human beings on the earth.

And this time the Native people will not have to petition to join but will be invited to enter the circle because they say the attitude towards us will have changed by then, and people will let us into the circle and all the four colors of the four directions will share their wisdom, and there will be a peace on earth. This is coming close.

A lot of times when I share this message of the prophecies, people say, "Can't we change it? Could we stop it?"

The answer is yes.

The prophecies are always "either/or". We could have come together way back there in 1565, and we could have had a great civilization, but we didn't. Always along the path of these prophecies, we could have come together. We still could. If we could stop the racial and religious disharmony, we would not have to go through this third shaking.

The elders say the chance of that is pretty slim. It seems to me like it's pretty slim, too. But they say what we can do is we can "cushion" it. The word we use is "cushion". We can cushion it so it won't be quite as bad. How do we do this? We do this by sharing the teaching that will reunite us.

The Hopis in their prophecies say there will be a religion that comes here. Maybe it will be true and bring unity, or maybe it will not be true and not bring unity. If it does not bring unity, a second religion will come, and the people of this religion are known in the Hopi language as the Bahani, the people of Baha. Ni means "people of".

When I heard about these [prophecies], none of them made any sense. Now most of it has come to pass. Last I heard on the news, they said the "house in the sky" will be put up in 1996. It was going to be put up sooner, but it's been postponed for four years. Maybe it will be postponed again. But in not too long it's going to go up. The earth as we know it is going to change.

Each of us carry, I believe, a sacred drop of light.

But now we're going into the human world. The mind is going to be opened up to the radiance of our own soul and the cycle of the human beings is going to come back, and something so good is going to happen on the earth that it cannot even be described.

The elders say it in different ways. They say, there will be grass at that time when they make that circle and bring the peace on earth. There will be blades of grass that have not quite come through the earth. Even they will try to push themselves up to be part of that day when the sun rises.

You know, one time the scientist came to the Hopis and they said, "We want to take a piece of the stone tablets." They said "We want to take the stone tablets to a scientific laboratory to determine how old they are." The Hopis said, "We know how old they are". Well, the scientists said, "We want to confirm it." Well, the Hopis let them take a little piece, and they did that by the carbon dating method.

Editor's Note: This puzzles me, as stone cannot be carbon dated. Carbon 14 is taken in by organic life until the moment of death. Then the Carbon 14 is slowly released by that organic material and the rate of release can be calculated. Half-life computations tell the age of the tested material. Stone is not organic.

They found these tablets were at least 10,000 years old, maybe 50,000. So when I say, "Thousands of years ago, there were Native people that spoke of these things," that's exactly what I mean. They told their children and thousands of years ago, their children grew up and told their children, and then their children grew up and told their children. And they spoke about the people that will live in this time.

And now it is us. We are the ones they spoke of long ago. They say to be alive, to come into creation and to live upon the earth at this time is a great honor.

In the cycle of time, from the beginning to the end, this time we are in now will change the purification of all things. They say this is the hardest time to live, but it is also the greatest honor to be alive to live and see this.

In the state of Washington in 1855 they signed treaties and made 22 Indian reservations. They wanted to do it before there were problems. They thought they were advanced at the time, they had learned from what had happened elsewhere. They made 22 Indian reservations and the elders spoke in 1855 and they said, "We're going to become weaker, and you are going to become stronger, and if you wish to break these treaties, you may do so." They said, "But there's going to come a time when the earth itself will rise up and purify itself and this will be announced.

It will be announced by the speaking of more than 16 Great Ones on the West Coast of this land. And when the 16 Great Ones speak, the purification will have begun. There was a new [?] five years ago when Mt. Saint Helens, one of the 16 great volcanoes on the West Coast of this land, "spoke".

The Seattle Times did a special interest story. They went over to Watson Totus and Woodrow Bill. It was Woodrow Bill's son that made this hoop that I brought here today, my good brother Randolf Bill. They asked Watson Totus and Woodrow Bill as spiritual people of the Yakuma nation, "What does this mean?" What they said was so profound that they didn't put it on page 16, they put it on the front page of the Seattle Times.

They said, "This means that the races and nations of the earth should slow down and come together and talk to each other." That's exactly what it meant. And we had four years and four days to do that.

Four years and four days later, Mt. Saint Helens erupted the second time. That was last spring, just about this time. That was our grace period. We could have still done something really good. But now things are going to speed up. Now things are going to really happen fast. Time is going to go so fast.

The more we share the Message, the more we will cushion the Third Shaking of the Earth, and the easier it will be on ourselves and others.

We are now within the purification of all things. Non-Natives call this the "Apocalypse". The Native elders call this the "Purification".

But don't despair. It sounds terrible, but we will survive it. We will live through it. I don't think there's anyone chosen to live through it, but some people will.

So, in closing I would like to call on each and every person, regardless of who you are, young or old, Native or non-Native, to arise now, and to awake, to embrace this time, to learn everything you can about the Teachings and the Writings, to arise and awake and go forth, all the peoples of the earth.

Peoples everywhere are now receptive to the Message. This year is the year when that is really going to start, I believe, myself. Arise and awake.

There's people out there waiting to hear, waiting to hear... waiting to hear... 
/***
To use, add {{{[[HorizontalMainMenuStyles]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also HorizontalMainMenu and PageTemplate.
***/
/*{{{*/

#topMenu br {display:none; }
#topMenu { background: #39a; }
#topMenu { padding:2px; }
#topMenu .button, #topMenu .tiddlyLink {
 margin-left:0.5em; margin-right:0.5em;
 padding-left:3px; padding-right:3px;
 color:white; font-size:115%;
}
#topMenu .button:hover, #topMenu .tiddlyLink:hover { background:#178;}

#displayArea { margin: 1em 15.7em 0em 1em; } /* so we use the freed up space */

/* just in case want some QuickOpenTags in your topMenu */
#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }
#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }
#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }
#topMenu .moveablePanel { padding-right:1px; margin-right:0px; }

/*}}}*/
[img[pics/toadprint1.jpg]]
Steel, paint, tin casting - open face
Try out the hovering menu to the right. It has new icons. 

Download the zipped PSD (photoshop format with layers for easy edit) and 8bit pngs of the hover menu icons <html><a href="http://www.nioncapul.net/archive/Tiddly_Hover_Icons_Green1.zip">here</a>.</html>

Thanks to Saq Imtiaz for his HoverMenuPlugin

<<top>><<icon pics/icons/top.png 16 16>>
<<closeAll>><<icon pics/icons/clear.png 16 16>>
<<toggleSideBar . toggleSidebar hide>><<icon pics/icons/toggle.png 16 16>>
<<jump j '' top>><<icon pics/icons/jump.png 16 16>>
<<fullscreen f>><<icon pics/icons/full.png 16 16>>
/***
|Name|HoverMenuPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#HoverMenuPlugin|
|Version|1.11|
|Requires|~TW2.x|
!Description:
Provides a hovering menu on the edge of the screen for commonly used commands, that scrolls with the page.

!Demo:
Observe the hovering menu on the right edge of the screen.

!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
To customize your HoverMenu, edit the HoverMenu shadow tiddler.

To customize whether the menu sticks to the right or left edge of the screen, and its start position, edit the HoverMenu configuration settings part of the code below. It's well documented, so don't be scared!

The menu has an id of hoverMenu, in case you want to style the buttons in it using css.

!Notes:
Since the default HoverMenu contains buttons for toggling the side bar and jumping to the top of the screen and to open tiddlers, the ToggleSideBarMacro, JumpMacro and the JumpToTopMacro are included in this tiddler, so you dont need to install them separately. Having them installed separately as well could lead to complications.

If you dont intend to use these three macros at all, feel free to remove those sections of code in this tiddler.

!To Do:
* rework code to allow multiple hovering menus in different positions, horizontal etc.
* incorporate code for keyboard shortcuts that correspond to the buttons in the hovermenu

!History:
*03-08-06, ver 1.11: fixed error with button tooltips
*27-07-06, ver 1.1 : added JumpMacro to hoverMenu
*23-07-06

!Code
***/

/***
start HoverMenu plugin code
***/
//{{{
config.hoverMenu={};
//}}}

/***
HoverMenu configuration settings
***/
//{{{
config.hoverMenu.settings={
 align: 'right', //align menu to right or left side of screen, possible values are 'right' and 'left' 
 x: 18, // horizontal distance of menu from side of screen, increase to your liking.
 y: 100 //vertical distance of menu from top of screen at start, increase or decrease to your liking
 };
//}}}

//{{{
//continue HoverMenu plugin code
config.hoverMenu.handler=function()
{
 var theMenu = createTiddlyElement(document.getElementById("contentWrapper"), "div","hoverMenu");
 theMenu.setAttribute("refresh","content");
 theMenu.setAttribute("tiddler","HoverMenu");
 var menuContent = store.getTiddlerText("HoverMenu");
 wikify(menuContent,theMenu);

 var Xloc = this.settings.x;
 Yloc =this.settings.y;
 var ns = (navigator.appName.indexOf("Netscape") != -1);
 function SetMenu(id)
 {
 var GetElements=document.getElementById?document.getElementById(id):document.all?document.all[id]:document.layers[id];
 if(document.layers)GetElements.style=GetElements;
 GetElements.sP=function(x,y){this.style[config.hoverMenu.settings.align]=x +"px";this.style.top=y +"px";};
 GetElements.x = Xloc;
 GetElements.y = findScrollY();
 GetElements.y += Yloc;
 return GetElements;
 }
 window.LoCate_XY=function()
 {
 var pY = findScrollY();
 ftlObj.y += (pY + Yloc - ftlObj.y)/15;
 ftlObj.sP(ftlObj.x, ftlObj.y);
 setTimeout("LoCate_XY()", 10);
 }
 ftlObj = SetMenu("hoverMenu");
 LoCate_XY();
};

window.old_lewcid_hovermenu_restart = restart;
restart = function()
{
 window.old_lewcid_hovermenu_restart();
 config.hoverMenu.handler();
};

setStylesheet(
"#hoverMenu .button, #hoverMenu .tiddlyLink {border:none; font-weight:bold; background:#18f; color:#FFF; padding:0 5px; float:right; margin-bottom:4px;}\n"+
"#hoverMenu .button:hover, #hoverMenu .tiddlyLink:hover {font-weight:bold; border:none; color:#fff; background:#000; padding:0 5px; float:right; margin-bottom:4px;}\n"+
"#hoverMenu .button {width:100%; text-align:center}"+
"#hoverMenu { position:absolute; width:7px;}\n"+
"\n","hoverMenuStyles");


config.macros.renameButton={};
config.macros.renameButton.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{

 if (place.lastChild.tagName!="BR")
 {
 place.lastChild.firstChild.data = params[0];
 if (params[1]) {place.lastChild.title = params[1];}
 }
};

config.shadowTiddlers["HoverMenu"]="<<top>>\n<<toggleSideBar>><<renameButton '>' >>\n<<jump j '' top>>\n<<saveChanges>><<renameButton s 'Save TiddlyWiki'>>\n<<newTiddler>><<renameButton n>>\n";
//}}}
//end HoverMenu plugin code

//Start ToggleSideBarMacro code
//{{{
config.macros.toggleSideBar={};

config.macros.toggleSideBar.settings={
 styleHide : "#sidebar { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 1em;}\n"+"",
 styleShow : " ",
 arrow1: "«",
 arrow2: "»"
};

config.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
 var tooltip= params[1]||'toggle sidebar';
 var mode = (params[2] && params[2]=="hide")? "hide":"show";
 var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
 var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;
 var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");
 if (mode == "hide")
 { 
 (document.getElementById("sidebar")).setAttribute("toggle","hide");
 setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");
 }
};

config.macros.toggleSideBar.onToggleSideBar = function(){
 var sidebar = document.getElementById("sidebar");
 var settings = config.macros.toggleSideBar.settings;
 if (sidebar.getAttribute("toggle")=='hide')
 {
 setStylesheet(settings.styleShow,"ToggleSideBarStyles");
 sidebar.setAttribute("toggle","show");
 this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
 }
 else
 { 
 setStylesheet(settings.styleHide,"ToggleSideBarStyles");
 sidebar.setAttribute("toggle","hide");
 this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
 }

 return false;
}

setStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleSideBarButtonStyles");
//}}}
//end ToggleSideBarMacro code

//start JumpToTopMacro code
//{{{
config.macros.top={};
config.macros.top.handler=function(place,macroName)
{
 createTiddlyButton(place,"^","jump to top",this.onclick);
}
config.macros.top.onclick=function()
{
 window.scrollTo(0,0);
};

config.commands.top =
{
 text:" ^ ",
 tooltip:"jump to top"
};

config.commands.top.handler = function(event,src,title)
{
 window.scrollTo(0,0);
}
//}}}
//end JumpToStartMacro code

//start JumpMacro code
//{{{
config.macros.jump= {};
config.macros.jump.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
 var label = (params[0] && params[0]!=".")? params[0]: 'jump';
 var tooltip = (params[1] && params[1]!=".")? params[1]: 'jump to an open tiddler';
 var top = (params[2] && params[2]=='top') ? true: false; 

 var btn =createTiddlyButton(place,label,tooltip,this.onclick);
 if (top==true)
 btn.setAttribute("top","true")
}

config.macros.jump.onclick = function(e)
{
 if (!e) var e = window.event;
 var theTarget = resolveTarget(e);
 var top = theTarget.getAttribute("top");
 var popup = Popup.create(this);
 if(popup)
 {
 if(top=="true")
 {createTiddlyButton(createTiddlyElement(popup,"li"),'Top ↑','Top of TW',config.macros.jump.top);
 createTiddlyElement(popup,"hr");}
 
 story.forEachTiddler(function(title,element) {
 createTiddlyLink(createTiddlyElement(popup,"li"),title,true);
 });
 }
 Popup.show(popup,false);
 e.cancelBubble = true;
 if (e.stopPropagation) e.stopPropagation();
 return false;
}

config.macros.jump.top = function()
{
 window.scrollTo(0,0);
}
//}}}
//end JumpMacro code

//utility functions
//{{{
Popup.show = function(unused,slowly)
{
 var curr = Popup.stack[Popup.stack.length-1];
 var rootLeft = findPosX(curr.root);
 var rootTop = findPosY(curr.root);
 var rootHeight = curr.root.offsetHeight;
 var popupLeft = rootLeft;
 var popupTop = rootTop + rootHeight;
 var popupWidth = curr.popup.offsetWidth;
 var winWidth = findWindowWidth();
 if (isChild(curr.root,'hoverMenu'))
 var x = config.hoverMenu.settings.x;
 else
 var x = 0;
 if(popupLeft + popupWidth+x > winWidth)
 popupLeft = winWidth - popupWidth -x;
 if (isChild(curr.root,'hoverMenu'))
 {curr.popup.style.right = x + "px";}
 else
 curr.popup.style.left = popupLeft + "px";
 curr.popup.style.top = popupTop + "px";
 curr.popup.style.display = "block";
 addClass(curr.root,"highlight");
 if(config.options.chkAnimate)
 anim.startAnimating(new Scroller(curr.popup,slowly));
 else
 window.scrollTo(0,ensureVisible(curr.popup));
}

window.isChild = function(e,parentId) {
 while (e != null) {
 var parent = document.getElementById(parentId);
 if (parent == e) return true;
 e = e.parentNode;
 }
 return false;
};
//}}}


[img[pics/huntershrinesg2.jpg]]
Medium: digital photograph sterograph

see also [[Hunter's Shrine]]
[img[pics/ibuseathumb1.jpg][pics/ibuseaprint1.jpg]]<<imagebox>>
3D Rendering
[img[pics/icacruthsg1.jpg]]
Medium: digital photograph stereograph
Original Post January 26, 2004

The Rhysometic Survey expands. Now the pattering of ice on tinn rooftops has a Rhysometic componet, or at least it should remind one of the rigors of proper survey work. Now where did I set that transom down...

School was closed - and as I am in a wait and let it dry properly befor the trial of fire phase- no art work was made today. So far I might add, as daylight (what there is of it) slowly fades into the noctural misty glow of dim greybluewhite light reflected from snow and streetlights. Perhapes I will still have time to pop over the tracks and muddle about with wax in the foundry.

Speaking of the foundry, the great beast of an alpine precision kiln is working again. The maintenece guild came and tinckered it's electrical guts back into some semblence of functionality. Once the drying of the lithium clay body is completed I will cook it good. Then on to the gilling of the underside of the fungal landmass in preparation for its glorious bronzen transubstanciation.

In case you haven't realized, the formal defintion of the N.R.S. is not likely to be forthcoming. If you number amoung those who like tidy defintions, I would perchance drawl your attention to the great body of philosphy which rails against that sort of thinking. Alan Watts's american repottings of Taoism is a great place to start. The trouble with defintions is that they are so damb prickley.

Now back to those ice patterings...

//{{{
// version: beta 1.1
//replace macro buttons with icons
// params[0] = image location
//params[1] = image width
//params[2] = image height
//params[3] = image title (optional)
config.macros.icon={};
config.macros.icon.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{

               if (place.lastChild.tagName!="BR")
                     {
                     var tempTitle = place.lastChild.firstChild.title;
                     removeChildren(place.lastChild);
                     place.lastChild.className = "imgLink";
                     var img = createTiddlyElement(place.lastChild,"img");
                     img.src = params[0];
                     if (params[3])
                         img.title = params[3];
                     img.width= params[1];
                     img.height =params[2];
                     }
};

//use icons for toolbar commands.
// used in view template like:
// <span macro='commandIcon jump jump.bmp'></span>
//params[0] = command name
//params[1] = image location
config.macros.commandIcon={};
config.macros.commandIcon.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{if(!e) var e = window.event;
    var img = createTiddlyElement(place,"img",null,"toolbarImg");
    img.src = params[1];
    img.onclick = function(){config.commands[params[0]].handler(e,place,story.findContainingTiddler(place).getAttribute("tiddler"));};
    img.title = config.commands[params[0]].tooltip;
}

setStylesheet(".toolbarImg {vertical-align: middle; cursor:pointer;}\n","commandIconStyles"); 

//}}}
<<newerTiddler button:"New Image" name:"Image Name?" tags:"Images" template:"ImagesTemplate">>
[img[new image][newimagelink]]
Medium:
On Wednesday, September 13, 2006 12:24:22 PM, YourName imported tiddlers from
[[G:\nioncapul\lewcid.html|G:\nioncapul\lewcid.html]]:
<<<
Out of 76 tiddlers in {{{G:/nioncapul/lewcid.html}}}:
1 new tiddler was added to your document.
75 tiddlers were not imported.
#[[HoverMenuPlugin]]
<<<
<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>
----
On Wednesday, September 13, 2006 12:23:02 PM, YourName imported tiddlers from
[[G:\nioncapul\lewcid.html|G:\nioncapul\lewcid.html]]:
<<<
Out of 76 tiddlers in {{{G:/nioncapul/lewcid.html}}}:
3 new tiddlers were added to your document.
73 tiddlers were not imported.
#[[FullScreenPlugin]]
#[[HoverMenu]]
#[[HoverMenuPlugin ver 1.11]]
<<<
<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>
----
On Tuesday, August 08, 2006 06:54:46 PM, YourName imported tiddlers from
[[E:\javascript\BidiXTW.html|E:\javascript\BidiXTW.html]]:
<<<
Out of 225 tiddlers in {{{E:/javascript/BidiXTW.html}}}:
8 new tiddlers were added to your document.
217 tiddlers were not imported.
#[[Upload]]
#[[UploadForm]]
#[[UploadLog]]
#[[UploadOptions]]
#[[UploadPlugin]]
#[[UploadPlugin release]]
#[[UploadPluginDoc]]
#[[UploadPluginMsgEN]]
<<<
<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>
----
On Sunday, July 30, 2006 10:35:22, John imported tiddlers from
[[C:\Documents and Settings\Kristina Bliss\Desktop\lewcid.htm|C:\Documents and Settings\Kristina Bliss\Desktop\lewcid.htm]]:
<<<
Out of 71 tiddlers in {{{C:/Documents and Settings/Kristina Bliss/Desktop/lewcid.htm}}}:
2 new tiddlers were added to your document.
69 tiddlers were not imported.
#[[ToggleSideBarMacro]]
#[[YourSearchPlugin]]
<<<
<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>
----
On Thursday, July 20, 2006 14:24:29, John imported tiddlers from
[[C:\DOCS\tiddlywikstuff\belnkrenew\Belnkre.html|C:\DOCS\tiddlywikstuff\belnkrenew\Belnkre.html]]:
<<<
Out of 103 tiddlers in {{{C:/DOCS/tiddlywikstuff/belnkrenew/Belnkre.html}}}:
1 new tiddler was added to your document.
102 tiddlers were not imported.
#[[IntelliTaggerPlugin]]
<<<
<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>
----
On Saturday, July 15, 2006 11:15:06 PM, YourName imported tiddlers from
[[E:\tiddlywikstuff\TiddlyTools.htm|E:\tiddlywikstuff\TiddlyTools.htm]]:
<<<
Out of 163 tiddlers in {{{E:/tiddlywikstuff/TiddlyTools.htm}}}:
1 new tiddler was added to your document.
162 tiddlers were not imported.
#[[InlineJavascriptPlugin]]
<<<
<html><input type="button" href="javascript:;" onclick="story.closeTiddler('ImportedTiddlers'); store.deleteTiddler('ImportedTiddlers');" value="discard report"></html>
/***
''InlineJavascriptPlugin for ~TiddlyWiki version 1.2.x and 2.0''
^^author: Eric Shulman - ELS Design Studios
source: http://www.TiddlyTools.com/#InlineJavascriptPlugin
license: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^

Insert Javascript executable code directly into your tiddler content. Lets you ''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.
!!!!!Usage
<<<
When installed, this plugin adds new wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be treated as embedded javascript and executed each time the tiddler is rendered.

''Deferred execution from an 'onClick' link''
By including a label="..." parameter in the initial {{{<script>}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered.

''External script source files:''
You can also load javascript from an external source URL, by including a src="..." parameter in the initial {{{<script>}}} marker (e.g., {{{<script src="demo.js"></script>}}}). This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins. The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever an updated library file becomes available.

''Display script source in tiddler output''
By including the keyword parameter "show", in the initial {{{<script>}}} marker, the plugin will include the script source code in the output that it displays in the tiddler.

''Defining javascript functions and libraries:''
Although the external javascript file is loaded while the tiddler content is being rendered, any functions it defines will not be available for use until //after// the rendering has been completed. Thus, you cannot load a library and //immediately// use it's functions within the same tiddler. However, once that tiddler has been loaded, the library functions can be freely used in any tiddler (even the one in which it was initially loaded).

To ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that will be rendered as soon as your TiddlyWiki document is opened. For example, you could put your {{{<script src="..."></script>}}} syntax into a tiddler called LoadScripts, and then add {{{<<tiddler LoadScripts>>}}} in your MainMenu tiddler.

Since the MainMenu is always rendered immediately upon opening your document, the library will always be loaded before any other tiddlers that rely upon the functions it defines. Loading an external javascript library does not produce any direct output in the tiddler, so these definitions should have no impact on the appearance of your MainMenu.

''Creating dynamic tiddler content''
An important difference between this implementation of embedded scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document:
* In a typical web document, you use the document.write() function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.
* However, in a ~TiddlyWiki document, tiddlers (and other DOM elements) are created, deleted, and rendered "on-the-fly", so writing directly to the global 'document' object does not produce the results you want (i.e., replacing the embedded script within the tiddler content), and completely replaces the entire ~TiddlyWiki document in your browser window.
* To allow these scripts to work unmodified, the plugin automatically converts all occurences of document.write() so that the output is inserted into the tiddler content instead of replacing the entire ~TiddlyWiki document.

If your script does not use document.write() to create dynamically embedded content within a tiddler, your javascript can, as an alternative, explicitly return a text value that the plugin can then pass through the wikify() rendering engine to insert into the tiddler display. For example, using {{{return "thistext"}}} will produce the same output as {{{document.write("thistext")}}}.

//Note: your script code is automatically 'wrapped' inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler. To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.//

''Accessing the ~TiddlyWiki DOM''
The plugin provides one pre-defined variable, 'place', that is passed in to your javascript code so that it can have direct access to the containing DOM element into which the tiddler output is currently being rendered.

Access to this DOM element allows you to create scripts that can:
* vary their actions based upon the specific location in which they are embedded
* access 'tiddler-relative' information (use findContainingTiddler(place))
* perform direct DOM manipulations (when returning wikified text is not enough)
<<<
!!!!!Examples
<<<
an "alert" message box:
><script show>
 alert('InlineJavascriptPlugin: this is a demonstration message');
</script>
dynamic output:
><script show>
 return (new Date()).toString();
</script>
wikified dynamic output:
><script show>
 return "link to current user: [["+config.options.txtUserName+"]]";
</script>
dynamic output using 'place' to get size information for current tiddler:
><script show>
 if (!window.story) window.story=window;
 var title=story.findContainingTiddler(place).id.substr(7);
 return title+" is using "+store.getTiddlerText(title).length+" bytes";
</script>
creating an 'onclick' button/link that runs a script:
><script label="click here" show>
 if (!window.story) window.story=window;
 alert("Hello World!\nlinktext='"+place.firstChild.data+"'\ntiddler='"+story.findContainingTiddler(place).id.substr(7)+"'");
</script>
loading a script from a source url:
>http://www.TiddlyTools.com/demo.js contains:
>>{{{function demo() { alert('this output is from demo(), defined in demo.js') } }}}
>>{{{alert('InlineJavascriptPlugin: demo.js has been loaded'); }}}
><script src="demo.js" show>
 return "loading demo.js..."
</script>
><script label="click to execute demo() function" show>
 demo()
</script>
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''InlineJavascriptPlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
''2006.06.01 [1.5.1]'' when calling wikify() on script return value, pass hightlightRegExp and tiddler params so macros that rely on these values can render properly
''2006.04.19 [1.5.0]'' added 'show' parameter to force display of javascript source code in tiddler output
''2006.01.05 [1.4.0]'' added support 'onclick' scripts. When label="..." param is present, a button/link is created using the indicated label text, and the script is only executed when the button/link is clicked. 'place' value is set to match the clicked button/link element.
''2005.12.13 [1.3.1]'' when catching eval error in IE, e.description contains the error text, instead of e.toString(). Fixed error reporting so IE shows the correct response text. Based on a suggestion by UdoBorkowski
''2005.11.09 [1.3.0]'' for 'inline' scripts (i.e., not scripts loaded with src="..."), automatically replace calls to 'document.write()' with 'place.innerHTML+=' so script output is directed into tiddler content. Based on a suggestion by BradleyMeck
''2005.11.08 [1.2.0]'' handle loading of javascript from an external URL via src="..." syntax
''2005.11.08 [1.1.0]'' pass 'place' param into scripts to provide direct DOM access 
''2005.11.08 [1.0.0]'' initial release
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
//{{{
version.extensions.inlineJavascript= {major: 1, minor: 5, revision: 1, date: new Date(2006,6,1)};

config.formatters.push( {
 name: "inlineJavascript",
 match: "\\<script",
 lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\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) {
 if (lookaheadMatch[1]) { // load a script library
 // make script tag, set src, add to body to execute, then remove for cleanup
 var script = document.createElement("script"); script.src = lookaheadMatch[1];
 document.body.appendChild(script); document.body.removeChild(script);
 }
 if (lookaheadMatch[4]) { // there is script code
 if (lookaheadMatch[3]) // show inline script code in tiddler output
 wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
 if (lookaheadMatch[2]) { // create a link to an 'onclick' script
 // add a link, define click handler, save code in link (pass 'place'), set link attributes
 var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",lookaheadMatch[2]);
 link.onclick=function(){try{return(eval(this.code))}catch(e){alert(e.description?e.description:e.toString())}}
 link.code="function _out(place){"+lookaheadMatch[4]+"};_out(this);"
 link.setAttribute("href","javascript:;"); link.setAttribute("title",""); link.style.cursor="pointer";
 }
 else { // run inline script code
 var code="function _out(place){"+lookaheadMatch[4]+"};_out(w.output);"
 code=code.replace(/document.write\(/gi,'place.innerHTML+=(');
 try { var out = eval(code); } 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;
 }
 }
} )
//}}}
/***
|''Name:''|~IntelliTaggerPlugin|
|''Version:''|1.0.0 (2006-04-26)|
|''Type:''|plugin|
|''Source:''|http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin|
|''Author:''|Udo Borkowski (ub [at] abego-software [dot] de)|
|''Documentation:''|[[IntelliTaggerPlugin Documentation]]|
|''Source Code:''|[[IntelliTaggerPlugin SourceCode]]|
|''Licence:''|[[BSD open source license (abego Software)]]|
|''~TiddlyWiki:''|Version 2.0.8 or better|
|''Browser:''|Firefox 1.5.0.2 or better|

***/
// /%
if(!version.extensions.IntelliTaggerPlugin){if(!window.abego){window.abego={};}if(!abego.internal){abego.internal={};}abego.alertAndThrow=function(s){alert(s);throw s;};if(version.major<2){abego.alertAndThrow("Use TiddlyWiki 2.0.8 or better to run the IntelliTagger Plugin.");}version.extensions.IntelliTaggerPlugin={major:1,minor:0,revision:0,date:new Date(2006,3,26),type:"plugin",source:"http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin",documentation:"[[IntelliTaggerPlugin Documentation]]",sourcecode:"[[IntelliTaggerPlugin SourceCode]]",author:"Udo Borkowski (ub [at] abego-software [dot] de)",licence:"[[BSD open source license (abego Software)]]",tiddlywiki:"Version 2.0.8 or better",browser:"Firefox 1.5.0.2 or better"};abego.isPopupOpen=function(_2){return _2&&_2.parentNode==document.body;};abego.openAsPopup=function(_3){if(_3.parentNode!=document.body){document.body.appendChild(_3);}};abego.closePopup=function(_4){if(abego.isPopupOpen(_4)){document.body.removeChild(_4);}};abego.getWindowRect=function(){return {left:findScrollX(),top:findScrollY(),height:findWindowHeight(),width:findWindowWidth()};};abego.moveElement=function(_5,_6,_7){_5.style.left=_6+"px";_5.style.top=_7+"px";};abego.centerOnWindow=function(_8){if(_8.style.position!="absolute"){throw "abego.centerOnWindow: element must have absolute position";}var _9=abego.getWindowRect();abego.moveElement(_8,_9.left+(_9.width-_8.offsetWidth)/2,_9.top+(_9.height-_8.offsetHeight)/2);};abego.isDescendantOrSelf=function(_a,e){while(e){if(_a==e){return true;}e=e.parentNode;}return false;};abego.toSet=function(_c){var _d={};for(var i=0;i<_c.length;i++){_d[_c[i]]=true;}return _d;};abego.filterStrings=function(_f,_10,_11){var _12=[];for(var i=0;i<_f.length&&(_11===undefined||_12.length<_11);i++){var s=_f[i];if(s.match(_10)){_12.push(s);}}return _12;};abego.arraysAreEqual=function(a,b){var n=a.length;if(n!=b.length){return false;}for(var i=0;i<n;i++){if(a[i]!=b[i]){return false;}}return true;};abego.moveBelowAndClip=function(_19,_1a){if(!_1a){return;}var _1b=findPosX(_1a);var _1c=findPosY(_1a);var _1d=_1a.offsetHeight;var _1e=_1b;var _1f=_1c+_1d;var _20=findWindowWidth();if(_20<_19.offsetWidth){_19.style.width=(_20-100)+"px";}var _21=_19.offsetWidth;if(_1e+_21>_20){_1e=_20-_21-30;}if(_1e<0){_1e=0;}_19.style.left=_1e+"px";_19.style.top=_1f+"px";_19.style.display="block";};abego.compareStrings=function(a,b){return (a==b)?0:(a<b)?-1:1;};abego.sortIgnoreCase=function(arr){var _25=[];var n=arr.length;for(var i=0;i<n;i++){var s=arr[i];_25.push([s.toString().toLowerCase(),s]);}_25.sort(function(a,b){return (a[0]==b[0])?0:(a[0]<b[0])?-1:1;});for(i=0;i<n;i++){arr[i]=_25[i][1];}};abego.getTiddlerField=function(_2b,_2c,_2d){var _2e=document.getElementById(_2b.idPrefix+_2c);var e=null;if(_2e!=null){var _30=_2e.getElementsByTagName("*");for(var t=0;t<_30.length;t++){var c=_30[t];if(c.tagName.toLowerCase()=="input"||c.tagName.toLowerCase()=="textarea"){if(!e){e=c;}if(c.getAttribute("edit")==_2d){e=c;}}}}return e;};abego.setRange=function(_33,_34,end){if(_33.setSelectionRange){_33.setSelectionRange(_34,end);var max=0+_33.scrollHeight;var len=_33.textLength;var top=max*_34/len,bot=max*end/len;_33.scrollTop=Math.min(top,(bot+top-_33.clientHeight)/2);}else{if(_33.createTextRange!=undefined){var _39=_33.createTextRange();_39.collapse();_39.moveEnd("character",end);_39.moveStart("character",_34);_39.select();}else{_33.select();}}};abego.internal.TagManager=function(){var _3a=null;var _3b=function(){if(_3a){return;}_3a={};store.forEachTiddler(function(_3c,_3d){for(var i=0;i<_3d.tags.length;i++){var tag=_3d.tags[i];var _40=_3a[tag];if(!_40){_40=_3a[tag]={count:0,tiddlers:{}};}_40.tiddlers[_3d.title]=true;_40.count+=1;}});};var _41=TiddlyWiki.prototype.saveTiddler;TiddlyWiki.prototype.saveTiddler=function(_42,_43,_44,_45,_46,_47){var _48=this.fetchTiddler(_42);var _49=_48?_48.tags:[];var _4a=(typeof _47=="string")?_47.readBracketedList():_47;_41.apply(this,arguments);if(!abego.arraysAreEqual(_49,_4a)){abego.internal.getTagManager().reset();}};var _4b=TiddlyWiki.prototype.removeTiddler;TiddlyWiki.prototype.removeTiddler=function(_4c){var _4d=this.fetchTiddler(_4c);var _4e=_4d&&_4d.tags.length>0;_4b.apply(this,arguments);if(_4e){abego.internal.getTagManager().reset();}};this.reset=function(){_3a=null;};this.getTiddlersWithTag=function(tag){_3b();var _50=_3a[tag];return _50?_50.tiddlers:null;};this.getAllTags=function(_51){_3b();var _52=[];for(var i in _3a){_52.push(i);}for(i=0;_51&&i<_51.length;i++){_52.pushUnique(_51[i],true);}abego.sortIgnoreCase(_52);return _52;};this.getTagInfos=function(){_3b();var _54=[];for(var _55 in _3a){_54.push([_55,_3a[_55]]);}return _54;};var _56=function(a,b){var a1=a[1];var b1=b[1];var d=b[1].count-a[1].count;return d!=0?d:abego.compareStrings(a[0].toLowerCase(),b[0].toLowerCase());};this.getSortedTagInfos=function(){_3b();var _5c=this.getTagInfos();_5c.sort(_56);return _5c;};this.getPartnerRankedTags=function(_5d){var _5e={};for(var i=0;i<_5d.length;i++){var _60=this.getTiddlersWithTag(_5d[i]);for(var _61 in _60){var _62=store.getTiddler(_61);if(!(_62 instanceof Tiddler)){continue;}for(var j=0;j<_62.tags.length;j++){var tag=_62.tags[j];var c=_5e[tag];_5e[tag]=c?c+1:1;}}}var _66=abego.toSet(_5d);var _67=[];for(var n in _5e){if(!_66[n]){_67.push(n);}}_67.sort(function(a,b){var d=_5e[b]-_5e[a];return d!=0?d:abego.compareStrings(a.toLowerCase(),b.toLowerCase());});return _67;};};abego.internal.getTagManager=function(){if(!abego.internal.gTagManager){abego.internal.gTagManager=new abego.internal.TagManager();}return abego.internal.gTagManager;};(function(){var _6c=2;var _6d=1;var _6e=30;var _6f;var _70;var _71;var _72;var _73;var _74;if(!abego.IntelliTagger){abego.IntelliTagger={};}var _75=function(){return _70;};var _76=function(tag){return _73[tag];};var _78=function(s){var i=s.lastIndexOf(" ");return (i>=0)?s.substr(0,i):"";};var _7b=function(_7c){var s=_7c.value;var len=s.length;return (len>0&&s[len-1]!=" ");};var _7f=function(_80){var s=_80.value;var len=s.length;if(len>0&&s[len-1]!=" "){_80.value+=" ";}};var _83=function(tag,_85,_86){if(_7b(_85)){_85.value=_78(_85.value);}story.setTiddlerTag(_86.title,tag,0);_7f(_85);abego.IntelliTagger.assistTagging(_85,_86);};var _87=function(n){if(_74){if(_74.length>n){return _74[n];}n-=_74.length;}return (_72&&_72.length>n)?_72[n]:null;};var _89=function(n,_8b,_8c){var _8d=_87(n);if(_8d){_83(_8d,_8b,_8c);}};var _8e=function(_8f){var pos=_8f.value.lastIndexOf(" ");var _91=(pos>=0)?_8f.value.substr(++pos,_8f.value.length):_8f.value;return new RegExp(_91.escapeRegExp(),"i");};var _92=function(_93,_94){var _95=0;for(var i=0;i<_93.length;i++){if(_94[_93[i]]){_95++;}}return _95;};var _97=function(_98,_99,_9a){var _9b=1;var c=_98[_99];for(var i=_99+1;i<_98.length;i++){if(_98[i][1].count==c){if(_98[i][0].match(_9a)){_9b++;}}else{break;}}return _9b;};var _9e=function(_9f,_a0){var _a1=abego.internal.getTagManager().getSortedTagInfos();var _a2=[];var _a3=0;for(var i=0;i<_a1.length;i++){var c=_a1[i][1].count;if(c!=_a3){if(_a0&&(_a2.length+_97(_a1,i,_9f)>_a0)){break;}_a3=c;}if(c==1){break;}var s=_a1[i][0];if(s.match(_9f)){_a2.push(s);}}return _a2;};var _a7=function(_a8,_a9){return abego.filterStrings(abego.internal.getTagManager().getAllTags(_a9),_a8);};var _aa=function(){if(!_6f){return;}var _ab=store.getTiddlerText("IntelliTaggerMainTemplate");if(!_ab){_ab="<b>Tiddler IntelliTaggerMainTemplate not found</b>";}_6f.innerHTML=_ab;applyHtmlMacros(_6f,null);refreshElements(_6f,null);};var _ac=function(e){if(!e){var e=window.event;}var tag=this.getAttribute("tag");if(_71){_71.call(this,tag,e);}return false;};var _af=function(_b0,_b1,_b2,_b3){if(!_b1){return;}var _b4=_b3?abego.toSet(_b3):{};var n=_b1.length;for(var i=0;i<n;i++){var tag=_b1[i];if(_b4[tag]){continue;}if(i>0){createTiddlyElement(_b0,"span",null,"tagSeparator"," | ");}var _b8="";var _b9=_b0;if(_b2<10){_b9=createTiddlyElement(_b0,"span",null,"numberedSuggestion");_b2++;var key=_b2<10?""+(_b2):"0";createTiddlyElement(_b9,"span",null,"suggestionNumber",key+") ");var _bb=_b2==1?"Ctrl-Space or ":"";_b8=" (Shortcut: %1Alt-%0)".format([key,_bb]);}var _bc=config.views.wikified.tag.tooltip.format([tag]);var _bd=(_76(tag)?"Remove tag '%0'%1":"Add tag '%0'%1").format([tag,_b8]);var _be="%0; Shift-Click: %1".format([_bd,_bc]);var btn=createTiddlyButton(_b9,tag,_be,_ac,_76(tag)?"currentTag":null);btn.setAttribute("tag",tag);}};var _c0=function(){if(_6f){window.scrollTo(0,ensureVisible(_6f));}if(_75()){window.scrollTo(0,ensureVisible(_75()));}};var _c1=function(e){if(!e){var e=window.event;}if(!_6f){return;}var _c3=resolveTarget(e);if(_c3==_75()){return;}if(abego.isDescendantOrSelf(_6f,_c3)){return;}abego.IntelliTagger.close();};addEvent(document,"click",_c1);var _c4=Story.prototype.gatherSaveFields;Story.prototype.gatherSaveFields=function(e,_c6){_c4.apply(this,arguments);var _c7=_c6.tags;if(_c7){_c6.tags=_c7.trim();}};var _c8=function(_c9){story.focusTiddler(_c9,"tags");var _ca=abego.getTiddlerField(story,_c9,"tags");if(_ca){var len=_ca.value.length;abego.setRange(_ca,len,len);window.scrollTo(0,ensureVisible(_ca));}};var _cc=config.macros.edit.handler;config.macros.edit.handler=function(_cd,_ce,_cf,_d0,_d1,_d2){_cc.apply(this,arguments);var _d3=_cf[0];if((_d2 instanceof Tiddler)&&_d3=="tags"){var _d4=_cd.lastChild;_d4.onfocus=function(e){abego.IntelliTagger.assistTagging(_d4,_d2);setTimeout(function(){_c8(_d2.title);},100);};_d4.onkeyup=function(e){if(!e){var e=window.event;}if(e.altKey&&!e.ctrlKey&&!e.metaKey&&(e.keyCode>=48&&e.keyCode<=57)){_89(e.keyCode==48?9:e.keyCode-49,_d4,_d2);}else{if(e.ctrlKey&&e.keyCode==32){_89(0,_d4,_d2);}}setTimeout(function(){abego.IntelliTagger.assistTagging(_d4,_d2);},100);return false;};_7f(_d4);}};var _d7=function(e){if(!e){var e=window.event;}var _d9=resolveTarget(e);var _da=_d9.getAttribute("tiddler");if(_da){story.displayTiddler(_d9,_da,"IntelliTaggerEditTagsTemplate",false);_c8(_da);}return false;};var _db=config.macros.tags.handler;config.macros.tags.handler=function(_dc,_dd,_de,_df,_e0,_e1){_db.apply(this,arguments);abego.IntelliTagger.createEditTagsButton(_e1,createTiddlyElement(_dc.lastChild,"li"));};var _e2=function(){if(_6f&&_70&&!abego.isDescendantOrSelf(document,_70)){abego.IntelliTagger.close();}};setInterval(_e2,100);abego.IntelliTagger.displayTagSuggestions=function(_e3,_e4,_e5,_e6,_e7){_72=_e3;_73=abego.toSet(_e4);_74=_e5;_70=_e6;_71=_e7;if(!_6f){_6f=createTiddlyElement(document.body,"div",null,"intelliTaggerSuggestions");_6f.style.position="absolute";}_aa();abego.openAsPopup(_6f);if(_75()){var w=_75().offsetWidth;if(_6f.offsetWidth<w){_6f.style.width=(w-2*(_6c+_6d))+"px";}abego.moveBelowAndClip(_6f,_75());}else{abego.centerOnWindow(_6f);}_c0();};abego.IntelliTagger.assistTagging=function(_e9,_ea){var _eb=_8e(_e9);var s=_e9.value;if(_7b(_e9)){s=_78(s);}var _ed=s.readBracketedList();var _ee=_ed.length>0?abego.filterStrings(abego.internal.getTagManager().getPartnerRankedTags(_ed),_eb,_6e):_9e(_eb,_6e);abego.IntelliTagger.displayTagSuggestions(_a7(_eb,_ed),_ed,_ee,_e9,function(tag,e){if(e.shiftKey){onClickTag.call(this,e);}else{_83(tag,_e9,_ea);}});};abego.IntelliTagger.close=function(){abego.closePopup(_6f);_6f=null;return false;};abego.IntelliTagger.createEditTagsButton=function(_f1,_f2,_f3,_f4,_f5,id,_f7){if(!_f3){_f3="[edit]";}if(!_f4){_f4="Edit the tags";}if(!_f5){_f5="editTags";}var _f8=createTiddlyButton(_f2,_f3,_f4,_d7,_f5,id,_f7);_f8.setAttribute("tiddler",(_f1 instanceof Tiddler)?_f1.title:String(_f1));return _f8;};config.macros.intelliTagger={label:"intelliTagger",handler:function(_f9,_fa,_fb,_fc,_fd,_fe){var _ff=_fd.parseParams("list",null,true);var _100=_ff[0]["action"];for(var i=0;_100&&i<_100.length;i++){var _102=_100[i];var _103=config.macros.intelliTagger.subhandlers[_102];if(!_103){abego.alertAndThrow("Unsupported action '%0'".format([_102]));}_103(_f9,_fa,_fb,_fc,_fd,_fe);}},subhandlers:{showTags:function(_104,_105,_106,_107,_108,_109){_af(_104,_72,_74?_74.length:0,_74);},showFavorites:function(_10a,_10b,_10c,_10d,_10e,_10f){_af(_10a,_74,0);},closeButton:function(_110,_111,_112,_113,_114,_115){var _116=createTiddlyButton(_110,"close","Close the suggestions",abego.IntelliTagger.close);},version:function(_117){var t="IntelliTagger %0.%1.%2".format([version.extensions.IntelliTaggerPlugin.major,version.extensions.IntelliTaggerPlugin.minor,version.extensions.IntelliTaggerPlugin.revision]);var e=createTiddlyElement(_117,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">"+t+"<font>";},copyright:function(_11a){var e=createTiddlyElement(_11a,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">&copy; 2006 <b><font color=\"red\">abego</font></b> Software<font>";}}};})();config.shadowTiddlers["IntelliTaggerStyleSheet"]="/***\n"+"!~IntelliTagger Stylesheet\n"+"***/\n"+"/*{{{*/\n"+".intelliTaggerSuggestions {\n"+"\tposition: absolute;\n"+"\twidth: 600px;\n"+"\n"+"\tpadding: 2px;\n"+"\tlist-style: none;\n"+"\tmargin: 0;\n"+"\n"+"\tbackground: #eeeeee;\n"+"\tborder: 1px solid DarkGray;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .currentTag {\n"+"\tfont-weight: bold;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .suggestionNumber {\n"+"\tcolor: #808080;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .numberedSuggestion{\n"+"\twhite-space: nowrap;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .intelliTaggerFooter {\n"+"\tmargin-top: 4px;\n"+"\tborder-top-width: thin;\n"+"\tborder-top-style: solid;\n"+"\tborder-top-color: #999999;\n"+"}\n"+".intelliTaggerSuggestions .favorites {\n"+"\tborder-bottom-width: thin;\n"+"\tborder-bottom-style: solid;\n"+"\tborder-bottom-color: #999999;\n"+"\tpadding-bottom: 2px;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .normalTags {\n"+"\tpadding-top: 2px;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .intelliTaggerFooter .button {\n"+"\tfont-size: 10px;\n"+"\n"+"\tpadding-left: 0.3em;\n"+"\tpadding-right: 0.3em;\n"+"}\n"+"\n"+"/*}}}*/\n";config.shadowTiddlers["IntelliTaggerMainTemplate"]="<!--\n"+"{{{\n"+"-->\n"+"<div class=\"favorites\" macro=\"intelliTagger action: showFavorites\"></div>\n"+"<div class=\"normalTags\" macro=\"intelliTagger action: showTags\"></div>\n"+"<!-- The Footer (with the Navigation) ============================================ -->\n"+"<table class=\"intelliTaggerFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n"+" <tr>\n"+"\t<td align=\"left\">\n"+"\t\t<span macro=\"intelliTagger action: closeButton\"></span>\n"+"\t</td>\n"+"\t<td align=\"right\">\n"+"\t\t<span macro=\"intelliTagger action: version\"></span>, <span macro=\"intelliTagger action: copyright \"></span>\n"+"\t</td>\n"+" </tr>\n"+"</tbody></table>\n"+"<!--\n"+"}}}\n"+"-->\n";config.shadowTiddlers["IntelliTaggerEditTagsTemplate"]="<!--\n"+"{{{\n"+"-->\n"+"<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\n"+"<div class='title' macro='view title'></div>\n"+"<div class='tagged' macro='tags'></div>\n"+"<div class='viewer' macro='view text wikified'></div>\n"+"<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\n"+"<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>\n"+"<!--\n"+"}}}\n"+"-->\n";config.shadowTiddlers["BSD open source license (abego Software)"]="See [[Licence|http://tiddlywiki.abego-software.de/#%5B%5BBSD%20open%20source%20license%5D%5D]].";config.shadowTiddlers["IntelliTaggerPlugin Documentation"]="[[Documentation on abego Software website|http://tiddlywiki.abego-software.de/doc/IntelliTagger.pdf]].";config.shadowTiddlers["IntelliTaggerPlugin SourceCode"]="[[Plugin source code on abego Software website|http://tiddlywiki.abego-software.de/src/Plugin-IntelliTagger-src.js]]";setStylesheet(store.getTiddlerText("IntelliTaggerStyleSheet"),"intelliTagger");}
//%/
[img[pics/keythumb][pics/keyprint.jpg]]<<imagebox>>
3D Rendering
[img[pics/knife1.jpg]]
Medium: forged steel blade with hollow formed nickle siver handel
/***
|''Name:''|LegacyStrikeThroughPlugin|
|''Description:''|Support for legacy (pre 2.1) strike through formatting|
|''Version:''|1.0.2|
|''Date:''|Jul 21, 2006|
|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|
|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.0|
***/

//{{{
// Ensure that the LegacyStrikeThrough Plugin is only installed once.
if(!version.extensions.LegacyStrikeThroughPlugin) {
version.extensions.LegacyStrikeThroughPlugin = {installed:true};

config.formatters.push(
{
	name: "legacyStrikeByChar",
	match: "==",
	termRegExp: /(==)/mg,
	element: "strike",
	handler: config.formatterHelpers.createElementAndWikify
});

} //# end of "install only once"
//}}}
[img[pics/lemurthumb.jpg][/pics/lemurprint.jpg]]<<imagebox>>
3D Rendering
<html><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/4FTkr0NuGfk&hl=en&fs=1&color1=0x234900&color2=0x4e9e00"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/4FTkr0NuGfk&hl=en&fs=1&color1=0x234900&color2=0x4e9e00" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></html>
[img[pics/lokwighwiki1.jpg][/pics/lokwighhigh1.jpg]]<<imagebox>>
digital painting

dug up a ancient watercolor and remastered it to fix proportions and shading
<html><a href="http://www.wieistmeineip.de/cometo/?en"><img src="http://www.wieistmeineip.de/ip-address/" border="0" width="125" height="125" alt="IP" /></a></html>
!!Links
Report your findings on the main site
[[MTS Home|index.php]]
[img[http://www.nioncapul.net/pud/downloads/rath_spoiler1-files/card1.jpg]]

http://magicseteditor.sourceforge.net - cool program

http://www.nioncapul.net/pub/downloads/rath_spoiler1.html -my list of cards.
麥田 = oat field = haverkamp (dutch)

the character 麥 can also be used for rye or wheat.
<<opensurvey>><<icon pics/nion.gif 75 110>>
<<tag Images>>
<<tag 3D>>
<<tag digitalPainting>>
<<tag poems>>
<html>
<a href="http://magbhitu.deviantart.com/">deviantart</a><br>
<a href="http://www.youtube.com/user/magbhitu">youtube</a>
</html>

email: magbhitu at nioncapul.net

[img[pics/icons/favicon.png]] TiddlyWiki <<version>>








[img[pics/coppermaskthumb1.jpg][pics/coppermaskprint2.jpg]]<<imagebox>>
Medium: 3D rendering
[img[pics/minronruinprint.jpg][pics/minronruinprinthigh.jpg]]
Medium: digital painting
<<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<saveChanges>><<upload>>[img[Add to your Google Homepage|http://buttons.googlesyndication.com/fusion/add.gif][http://fusion.google.com/add?feedurl=http%3A//nioncapul.net/index.xml]]<<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>
<html><!-- // Begin Current Moon Phase HTML (c) CalculatorCat.com // --><div style="width:130px"><div style="padding:2px;background-color:#000000;border: 1px solid #000000"><div style="padding:13.8px;padding-bottom:4.4px;padding-top:10.4px;border: 1px solid #AFB2D8" align="center"><div style="padding-bottom:5.2px;color:#FFFFFF;font-family:arial,helvetica,sans-serif;font-size:10.4px;">CURRENT MOON</div><embed allowScriptAccess="never" src="http://www.moonmodule.com/cs/ccm_v1.swf" FlashVars="lg=en&hs=1&tc=FFFFFF&bgc=000000&mc=&js=1&msp=0" quality="high" width="94.3" height="139" bgcolor="#000000" name="ccm_mph_mod" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /><div style="padding-top:4.4px" align="center"><a href="http://www.calculatorcat.com/moon_phases/moon_phases.phtml" target="cc_moon_ph" style="font-size:10px;font-family:arial,verdana,sans-serif;color:#888888;text-decoration:underline;border:none;"><span style="color:#888888">about the moon</span></a></div></div></div></div><!-- // end moon phase HTML // --></html>
She had a delicate way
with the strings;
hidden but blushing
He shrugged
through the ragged gussets
down to the ice
Beneath his skin;
Roiled psychopoms and ergergors
A warren of hare's
straining in the stomach of a python.
For this mod I've created two refuges for the PC's convenience. Although I've used stock TES editor models to flesh out these creations, the major features of each were modeled and textured in 3dsMax 6 and 4.

One is modest Irish style stone cottage on the bluff overlooking the Odai River south of Balmora. The real estate ad would read: “Cozy riverside getaway with spectacular views of Odai valley. Located just minutes from downtown Balmora. Easy comuting to the Eggmines and Stiltstrider depot.”

The second refuge is a little more ambitious. Located just outside Sadrith Mora – it's a giant mushroom entwined with Telvanni manor growths. Rivaling Tel Naga in hight, it provides amazing views of Sadrith Mora and its landmarks. I must say I'm rather proud of the fungi – it has gills! Hopefully you can tell from the screen shots that it looks totally in place in the fey otherworldliness of the Telvanni capital.

This mod was made with Morrowind with Tribunal and Bloodmoon also installed so you probably need them to make it work. Enjoy.

[[download 4,634 k beta 0.1| http://www.nioncapul.net/pub/modds/redoor.rar]] 

[img[http://www.nioncapul.net/pics/mmst4.jpg][http://www.nioncapul.net/pics/modscreenshot4.jpg]]<<imagebox>>[img[http://www.nioncapul.net/pics/mmst9.jpg][http://www.nioncapul.net/pics/modscreenshot9.jpg]]<<imagebox>>
[img[http://www.nioncapul.net/pics/mmst6.jpg][http://www.nioncapul.net/pics/modscreenshot6.jpg]]<<imagebox>>[img[http://www.nioncapul.net/pics/mmst1.jpg][http://www.nioncapul.net/pics/modscreenshot1.jpg]]<<imagebox>>
/***
''MoveablePanelPlugin for TiddlyWiki version 2.x''
^^author: Eric Shulman - ELS Design Studios
source: http://www.TiddlyTools.com/#MoveablePanelPlugin
license: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^

Add move, size, max/restore mouse event handling and fold/unfold, hover/scroll, and close/dock toolbar command items to any floating panel or tiddler. (see NestedSlidersPlugin for floating panel syntax/usage).

!!!!!Usage
<<<
syntax: {{{<<moveablePanel>>}}}

example: //using NestedSlidersPlugin 'floating panel' syntax//
//{{{
+++^30em^[panel]<<moveablePanel>>this is a headline for the panel
----
 this is a moveable floating panel
 with a few lines of text
 as an example for you to try...
 //note: this line is really long so you can see what happens to word wrapping when you re-size this panel//
===
//}}}
Try it: +++^30em^[panel]<<moveablePanel>>this is a headline for the panel
----
 this is a moveable floating panel
 with a few lines of text
 as an example for you to try...
 //note: this line is really long so you can see what happens to word wrapping when you re-size this panel//
===


When the mouse is just inside the edges of the tiddler/panel, the cursor will change to a "crossed-arrows" symbol, indicating that the panel is "moveable". Grab (click-hold) the panel anywhere in the edge area and then drag the mouse to reposition the panel.

To resize the panel, hold the ''shift'' key and then grab the panel: the cursor will change to a "double-arrow" symbol. Drag a side edge of the panel to stretch horizontally or vertically, or drag a corner of the panel to stretch in both dimensions at once.

Double-clicking anywhere in the edge area of a panel will 'maximize' it to fit the current browser window.

When the mouse is anywhere over a panel (not just near the edge), a 'toolbar menu' appears in the ''upper right corner'', with the following command items:
*fold/unfold: ''fold'' temporarily reduces the panel height to show just one line of text. ''unfold'' restores the panel height.
*hover/scroll: when you scroll the browser window, the moveable panels scroll with it. ''hover'' lets you keep a panel in view, while the rest of the page content moves in the window. ''scroll'' restores the default scrolling behavior for the panel. //Note: Due to browser limitations, this feature is not currently available when using Internet Explorer (v6 or lower)... sorry.//
*close: ''close'' hides a panel from the page display. If you have moved/resized a panel, closing it restores its default position and size.
*dock: unlike a floating panel, a moveable //tiddler// does not "float" on the page until it has actually been moved from its default position. When moving a tiddler, the ''close'' command is replaced with ''dock'', which restores the tiddler to its default //non-floating// location on the page.
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''MoveablePanelPlugin'' (tagged with <<tag systemConfig>>)
Note: for compatibility, please also install the current version of ''NestedSlidersPlugin''.
<<<
!!!!!Revision History
<<<
''2006.05.25 [1.3.3]'' in closePanel(), use p.button.onclick() so that normal processing (updating slider button tooltip, access key, etc.) is performed
''2006.05.11 [1.3.2]'' doc update
''2006.05.11 [1.3.1]'' re-define all functions within moveablePanel object (eliminate global window.* function definitions (and some "leaky closures" in IE)
''2006.05.11 [1.3.0]'' converted from inline javascript to true plugin
''2006.05.09 [1.2.3]'' in closePanel(), set focus to sliderpanel button (if any)
''2006.05.02 [1.2.2]'' in MoveOrSizePanel(), calculate adjustments for top and left when inside nested floating panels
''2006.04.06 [1.2.1]'' in getPanel(), allow redefinition or bypass of "moveable" tag (changed from hard-coded "tearoff")
''2006.03.29 [1.2.0]'' in getPanel(), require "tearoff" tag to enable floating tiddlers
''2006.03.13 [1.1.0]'' added handling for floating tiddlers and conditional menu display
''2006.03.06 [1.0.2]'' set move or resize cursor during mousetracking
''2006.03.05 [1.0.1]'' use "window" vs "document.body" so mousetracking in FF doesn't drop the panel when moving too quickly
''2006.03.04 [1.0.0]'' Initial public release
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
//{{{
version.extensions.moveablePanel= {major: 1, minor: 3, revision: 3, date: new Date(2006,5,25)};
//}}}
//{{{
config.macros.moveablePanel= { 
 handler:
 function(place,macroName,params) {
 var p=this.getPanel(place); if (!p) return;

 // remember original panel event handlers, size, location, border
 if (!p.saved) p.saved= {
 mouseover: p.onmouseover,
 mouseout: p.onmouseout,
 dblclick: p.ondblclick,
 top: p.style.top,
 left: p.style.left,
 width: p.style.width,
 height: p.style.height,
 position: p.style.position,
 border: p.style.border
 };

 // create control menu items
 var menupos=p.className=="floatingPanel"?"float:right;":"position:absolute;right:2em;top:3em;";
 var menustyle=p.className!="floatingPanel"?'style="border:1px solid #666;background:#ccc;color:#000;padding:0px .5em;"':"";
 var html='<div style="font-size:7pt;display:none;'+menupos+'">&nbsp;';
 if (p.className=="floatingPanel")
 html+='<a href="javascript:;" title="reduce panel size" '+menustyle
 +' onclick="return config.macros.moveablePanel.foldPanel(this,event)">fold</a>&nbsp; ';
 if (!config.browser.isIE)
 html+='<a href="javascript:;" title="keep panel in view when scrolling"'+menustyle
 +' onclick="return config.macros.moveablePanel.hoverPanel(this,event)">hover</a>&nbsp; ';
 if (p.className=="floatingPanel")
 html+='<a href="javascript:;" title="close panel and reset to default size and position"'+menustyle
 +' onclick="return config.macros.moveablePanel.closePanel(this,event)">close</a>';
 else
 html+='<a href="javascript:;" title="reset panel to default size and position"'+menustyle
 +' onclick="return config.macros.moveablePanel.closePanel(this,event)">dock</a>';
 html+='</div>';
 p.menudiv=createTiddlyElement(place,"span");
 p.menudiv.innerHTML=html;

 // init mouse handling and tooltip
 p.title="drag edge to move, shift key=stretch, double-click=max/restore";
 p.onmouseover=function(event) {
 if (this.className=="floatingPanel"||this.style.position=="absolute"||this.style.position=="fixed") {
 if (this.className!="floatingPanel") this.style.border="1px dotted #999"; // border around tiddler
 this.menudiv.firstChild.style.display="inline";
 }
 if (this.saved.mouseover) return this.saved.mouseover(event);
 };
 p.onmouseout=function(event) {
 this.menudiv.firstChild.style.display="none";
 if (this.className!="floatingPanel") this.style.border=this.saved.border;
 if (this.saved.mouseout) return this.saved.mouseout(event);
 };
 p.ondblclick=function(event) {
 if (!config.macros.moveablePanel.maximizePanel(this,event)) return false; // processed
 return this.saved.dblclick?this.saved.dblclick(event):true;
 };
 p.onmousemove=function(event) { return config.macros.moveablePanel.setCursorPanel(this,event); };
 p.onmousedown=function(event) { return config.macros.moveablePanel.moveOrSizePanel(this,event); };
 },

 getPanel:
 function(place) {
 var p=place; while (p && p.className!='floatingPanel') p=p.parentNode; if (p) return p; // floatingPanel
 p=story.findContainingTiddler(place); if (!p || !store.getTiddler(p.getAttribute("tiddler"))) return null; // not in a tiddler

 // moveable **tiddlers** in IE have LOTS of problems... DISABLED FOR NOW... but floating panels still work in IE
 if (config.browser.isIE) return null;

 // tiddlers tagged (e.g. with "moveable") to allow movement? use null or "" to bypass tag check
 var tag="moveable"; if (!tag || !tag.trim().length) return p;
 return (store.getTiddler(p.getAttribute("tiddler")).tags.find(tag)!=null)?p:null; // tiddler is tagged for moving
 },

 processed:
 function(event) {
 event.cancelBubble=true; if (event.stopPropagation) event.stopPropagation(); return false;
 },

 getClientWidth:
 function() {
 if(document.width!=undefined) return document.width;
 if(document.documentElement && document.documentElement.clientWidth) return document.documentElement.clientWidth;
 if(document.body && document.body.clientWidth) return document.body.clientWidth;
 if(window.innerWidth!=undefined) return window.innerWidth;
 return 100; // should never get here
 },

 closePanel:
 function(place,event) {
 if (!event) var event=window.event;
 var p=this.getPanel(place); if (!p) return true;
 if (p.hover) this.hoverPanel(p.hoverButton,event); 
 if (p.folded) this.foldPanel(p.foldButton,event); 
 p.maxed=false; 
 p.style.top=p.saved.top;
 p.style.left=p.saved.left;
 p.style.width=p.saved.width;
 p.style.height=p.saved.height;
 p.style.position=p.saved.position;
 if (p.button) { p.button.focus(); onClickNestedSlider({target:p.button}); } // click on slider "button" (if any) to close the panel
 return this.processed(event);
 },

 foldPanel:
 function(place,event) {
 if (!event) var event=window.event;
 var p=this.getPanel(place); if (!p) return true;
 if (!p.foldButton) p.foldButton=place;
 if (p.folded) {
 p.style.height=p.folded_savedheight;
 p.style.overflow=p.folded_savedoverflow;
 } else {
 p.folded_savedheight=p.style.height; p.style.height="1em"; 
 p.folded_savedoverflow=p.style.overflow; p.style.overflow="hidden";
 }
 p.folded=!p.folded;
 place.innerHTML=p.folded?"unfold":"fold";
 place.title=p.folded?"restore panel size":"reduce panel size";
 return this.processed(event);
 },

 hoverPanel:
 function(place,event) {
 if (config.browser.isIE) { return this.processed(event); } // 'fixed' position is not handled properly by IE :-(
 if (!event) var event=window.event;
 var p=this.getPanel(place); if (!p) return true;
 if (!p.hoverButton) p.hoverButton=place;
 if (p.hover)
 p.style.position=p.hover_savedposition;
 else
 { p.hover_savedposition=p.style.position; p.style.position="fixed"; }
 p.hover=!p.hover;
 place.innerHTML=p.hover?"scroll":"hover";
 place.title=p.hover?"make panel move with page when scrolling":"keep panel in view when scrolling page";
 return this.processed(event);
 },

 maximizePanel:
 function(place,event) {
 if (!event) var event=window.event;
 var p=this.getPanel(place); if (!p) return true;
 var left=findPosX(p); var top=findPosY(p);
 var width=p.offsetWidth; var height=p.offsetHeight;
 var x=!config.browser.isIE?event.pageX:event.clientX;
 var y=!config.browser.isIE?event.pageY:event.clientY;
 if (x<left||x>=left+width||y<top||y>=top+height) return true; // not inside panel, let mousedown bubble through
 var edgeWidth=10; var edgeHeight=10;
 var isTop=(y-top<edgeHeight);
 var isLeft=(x-left<edgeWidth);
 var isBottom=(top+height-y<edgeHeight);
 var isRight=(left+width-x<edgeWidth);
 if (!(isTop||isLeft||isBottom||isRight))
 return true; // not near an edge... let double click bubble through
 if (p.folded) this.foldPanel(p.foldButton,event); // unfold panel first (if needed)
 if (p.maxed) {
 p.style.top=p.max_savedtop;
 p.style.left=p.max_savedleft;
 p.style.width=p.max_savedwidth;
 p.style.height=p.max_savedheight;
 p.style.position=p.max_savedposition;
 } else {
 p.max_savedwidth=p.style.width;
 p.max_savedheight=p.style.height;
 p.max_savedtop=p.style.top;
 p.max_savedleft=p.style.left;
 p.max_savedposition=p.style.position;
 // IE gets the percentage stretch wrong if floating panel is inside a table
 p.style.width=config.browser.isIE?(getClientWidth()*0.95+"px"):"95%";
 p.style.height="95%";
 p.style.top=p.style.left='1em';
 p.style.position="absolute";
 }
 p.maxed=!p.maxed;
 return this.processed(event);
 },

 setCursorPanel:
 function(place,event) {
 if (!event) var event=window.event;
 var p=this.getPanel(place); if (!p) return true;
 var left=findPosX(p); var top=findPosY(p);
 var width=p.offsetWidth; var height=p.offsetHeight;
 var x=!config.browser.isIE?event.pageX:event.clientX;
 var y=!config.browser.isIE?event.pageY:event.clientY;
 if (x<left||x>=left+width||y<top||y>=top+height) return true; // not inside panel, let mousedown bubble through
 var edgeWidth=10; var edgeHeight=10;
 var isTop=(y-top<edgeHeight);
 var isLeft=(x-left<edgeWidth);
 var isBottom=(top+height-y<edgeHeight);
 var isRight=(left+width-x<edgeWidth);
 if (!(isTop||isLeft||isBottom||isRight))
 { p.style.cursor="auto"; if (!p.savedtitle) p.savedtitle=p.title; p.title=""; }
 else {
 p.style.cursor=!event.shiftKey?"move":((isTop?'n':(isBottom?'s':''))+(isLeft?'w':(isRight?'e':''))+'-resize');
 if (p.savedtitle) p.title=p.savedtitle;
 }
 return true; // let mouseover event bubble through
 },

 moveOrSizePanel:
 function(place,event) {
 if (!event) var event=window.event;
 var p=this.getPanel(place); if (!p) return true;
 var left=findPosX(p); var top=findPosY(p);
 var width=p.offsetWidth; var height=p.offsetHeight;
 var x=!config.browser.isIE?event.pageX:event.clientX;
 var y=!config.browser.isIE?event.pageY:event.clientY;
 if (x<left||x>=left+width||y<top||y>=top+height) return true; // not inside panel, let mousedown bubble through
 var edgeWidth=10; var edgeHeight=10;
 var isTop=(y-top<edgeHeight);
 var isLeft=(x-left<edgeWidth);
 var isBottom=(top+height-y<edgeHeight);
 var isRight=(left+width-x<edgeWidth);
 if (!(isTop||isLeft||isBottom||isRight)) return true; // not near an edge... let mousedown bubble through
 
 // when resizing, change cursor to show directional (NSEW) "drag arrows"
 var sizing=event.shiftKey; // remember this for use during mousemove tracking
 if (sizing) p.style.cursor=((isTop?'n':(isBottom?'s':''))+(isLeft?'w':(isRight?'e':''))+'-resize');
 
 var adjustLeft=0; var adjustTop=0;
 var pp=p.parentNode; while (pp && pp.className!="floatingPanel") pp=pp.parentNode;
 if (pp) { adjustLeft=findPosX(pp); adjustTop=findPosY(pp); }
 
 // start tracking mousemove events
 config.macros.moveablePanel.activepanel=p;
 var target=p; // if 'capture' handling not supported, track within panel only
 if (document.body.setCapture) { document.body.setCapture(); var target=document.body; } // IE
 if (window.captureEvents) { window.captureEvents(Event.MouseMove|Event.MouseUp,true); var target=window; } // moz
 if (target.onmousemove!=undefined) target.saved_mousemove=target.onmousemove;
 target.onmousemove=function(e){
 if (!e) var e=window.event;
 var p=config.macros.moveablePanel.activepanel;
 
 // PROBLEM: p.offsetWidth and p.offsetHeight do not seem to account for padding or borders
 // WORKAROUND: subtract padding and border (in px) when calculating new panel width and height
 // TBD: get these values from p.style... convert to px as needed.
 var paddingWidth=10.6667; var paddingHeight=10.6667;
 var borderWidth=1; var borderHeight=1;
 var adjustWidth=-(paddingWidth*2+borderWidth*2);
 var adjustHeight=-(paddingHeight*2+borderHeight*2);
 
 if (p.style.position!="absolute") { // convert relative DIV to movable absolute DIV
 p.style.position="absolute";
 p.style.left=left+"px"; p.style.top=top+"px";
 p.style.width=(width+adjustWidth)+"px"; p.style.top=(height+adjustHeight)+"px";
 }
 var newX=!config.browser.isIE?e.pageX:e.clientX;
 var newY=!config.browser.isIE?e.pageY:e.clientY;
 if (sizing) { // resize panel
 // don't let panel get smaller than edge "grab" zones
 var minWidth=edgeWidth*2-adjustWidth;
 var minHeight=edgeHeight*2-adjustHeight;
 p.maxed=false; // make sure panel is not maximized
 if (p.folded) this.foldPanel(p.foldButton,e); // make sure panel is unfolded
 if (isBottom) var newHeight=height+newY-y+1;
 if (isTop) var newHeight=height-newY+y+1;
 if (isLeft) var newWidth=width-newX+x+1;
 if (isRight) var newWidth=width+newX-x+1;
 if (isLeft||isRight) p.style.width=(newWidth>minWidth?newWidth:minWidth)+adjustWidth+"px";
 if (isLeft) p.style.left=left-adjustLeft+newX-x+1+"px";
 if (isTop||isBottom) p.style.height=(newHeight>minHeight?newHeight:minHeight)+adjustHeight+"px";
 if (isTop) p.style.top=top-adjustTop+newY-y+1+"px";
 } else { // move panel
 p.style.top=top-adjustTop+newY-y+1+"px";
 p.style.left=left-adjustLeft+newX-x+1+"px";
 }
 var status=sizing?("size: "+p.style.width+","+p.style.height):("pos: "+p.style.left+","+p.style.top);
 window.status=status.replace(/(\.[0-9]+)|px/g,""); // remove decimals and "px"
 return config.macros.moveablePanel.processed(e);
 };
 
 // stop tracking mousemove events
 if (target.onmouseup!=undefined) target.saved_mouseup=target.onmouseup;
 target.onmouseup=function(e){
 if (!e) var e=window.event;
 if (this.releaseCapture) this.releaseCapture(); // IE
 if (this.releaseEvents) this.releaseEvents(Event.MouseMove|Event.MouseUp); // moz
 this.onmousemove=this.saved_mousemove?this.saved_mousemove:null;
 this.onmouseup=this.saved_mouseup?this.saved_mouseup:null;
 config.macros.moveablePanel.activepanel=null;
 window.status="";
 return config.macros.moveablePanel.processed(e);
 };
 return this.processed(event); // mousedown handled
 }
};
//}}}
/***
''NestedSlidersPlugin for TiddlyWiki version 1.2.x and 2.0''
^^author: Eric Shulman
source: http://www.TiddlyTools.com/#NestedSlidersPlugin
license: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^

Quickly make any tiddler content into an expandable 'slider' panel, without needing to create a separate tiddler to contain the slider content. Optional syntax allows ''default to open'', ''custom button label/tooltip'' and ''automatic blockquote formatting.''

You can also 'nest' these sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created. This is most useful when converting existing in-line text content to create in-line annotations, footnotes, context-sensitive help, or other subordinate information displays.

For more details, please click on a section headline below:
++++!!!!![Configuration]>
Debugging messages for 'lazy sliders' deferred rendering:
<<option chkDebugLazySliderDefer>> show debugging alert when deferring slider rendering
<<option chkDebugLazySliderRender>> show debugging alert when deferred slider is actually rendered
===
++++!!!!![Usage]>
When installed, this plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content. Use {{{+++}}} and {{{===}}} to delimit the slider content. Additional optional syntax elements let you specify
*default to open
*cookiename
*heading level
*floater (with optional CSS width value)
*mouse auto rollover
*custom label/tooltip/accesskey
*automatic blockquote
*deferred rendering
The complete syntax, using all options, is:
//{{{
++++(cookiename)!!!!!^width^*[label=key|tooltip]>...
content goes here
===
//}}}
where:
* {{{+++}}} (or {{{++++}}}) and {{{===}}}^^
marks the start and end of the slider definition, respectively. When the extra {{{+}}} is used, the slider will be open when initially displayed.^^
* {{{(cookiename)}}}^^
saves the slider opened/closed state, and restores this state whenever the slider is re-rendered.^^
* {{{!}}} through {{{!!!!!}}}^^
displays the slider label using a formatted headline (Hn) style instead of a button/link style^^
* {{{^width^}}} (or just {{{^}}})^^
makes the slider 'float' on top of other content rather than shifting that content downward. 'width' must be a valid CSS value (e.g., "30em", "180px", "50%", etc.). If omitted, the default width is "auto" (i.e., fit to content)^^
* {{{*}}}^^
automatically opens/closes slider on "rollover" as well as when clicked^^
* {{{[label=key|tooltip]}}}^^
uses custom label/tooltip/accesskey. {{{=key}}} and {{{|tooltip}}} are optional. 'key' is must be a ''single letter only''. Default labels/tootips are: ">" (more) and "<" (less), with no default access key assignment.^^
* {{{">"}}} //(without the quotes)//^^
automatically adds blockquote formatting to slider content^^
* {{{"..."}}} //(without the quotes)//^^
defers rendering of closed sliders until the first time they are opened. //Note: deferred rendering may produce unexpected results in some cases. Use with care.//^^

//Note: to make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the {{{+++}}} 'start slider' or preceding the {{{===}}} 'end slider' sequence are automatically supressed so that excess whitespace is eliminated from the output.//
===
++++!!!!![Examples]>
simple in-line slider: 
{{{
+++
 content
===
}}}
+++
 content
===
----
use a custom label and tooltip: 
{{{
+++[label|tooltip]
 content
===
}}}
+++[label|tooltip]
 content
===
----
content automatically blockquoted: 
{{{
+++>
 content
===
}}}
+++>
 content
===
----
all options combined //(default open, cookie, heading, sized floater, rollover, label/tooltip/key, blockquoted, deferred)//
{{{
++++(testcookie)!!!^30em^*[label=Z|click or press Alt-Z to open]>...
 content
===
}}}
++++(testcookie)!!!^30em^*[label=Z|click or press Alt-Z to open]>...
 content
===
----
complex nesting example:
{{{
+++^[get info...=I|click for information or press Alt-I]
 put some general information here, plus a floating slider with more specific info:
 +++^10em^[view details...|click for details]
 put some detail here, which could include a rollover with a +++^25em^*[glossary definition]explaining technical terms===
 ===
===
}}}
+++^[get info...=I|click for information or press Alt-I]
 put some general information here, plus a floating slider with more specific info:
 +++^10em^[view details...|click for details]
 put some detail here, which could include a rollover with a +++^25em^*[glossary definition]explaining technical terms===
 ===
===
----
nested floaters
>menu: <<tiddler NestedSlidersExample>>
(see [[NestedSlidersExample]] for definition)
----
===
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''NestedSlidersPlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
''2006.06.29 - 1.9.2'' in onClickNestedSlider(), when setting focus to first control, skip over type="hidden"
''2006.06.22 - 1.9.1'' added panel.defaultPanelWidth to save requested panel width, even after resizing has changed the style value
''2006.05.11 - 1.9.0'' added optional '^width^' syntax for floating sliders and '=key' syntax for setting an access key on a slider label
''2006.05.09 - 1.8.0'' in onClickNestedSlider(), when showing panel, set focus to first child input/textarea/select element
''2006.04.24 - 1.7.8'' in adjustSliderPos(), if floating panel is contained inside another floating panel, subtract offset of containing panel to find correct position
''2006.02.16 - 1.7.7'' corrected deferred rendering to account for use-case where show/hide state is tracked in a cookie
''2006.02.15 - 1.7.6'' in adjustSliderPos(), ensure that floating panel is positioned completely within the browser window (i.e., does not go beyond the right edge of the browser window)
''2006.02.04 - 1.7.5'' add 'var' to unintended global variable declarations to avoid FireFox 1.5.0.1 crash bug when assigning to globals
''2006.01.18 - 1.7.4'' only define adjustSliderPos() function if it has not already been provided by another plugin. This lets other plugins 'hijack' the function even when they are loaded first.
''2006.01.16 - 1.7.3'' added adjustSliderPos(place,btn,panel,panelClass) function to permit specialized logic for placement of floating panels. While it provides improved placement for many uses of floating panels, it exhibits a relative offset positioning error when used within *nested* floating panels. Short-term workaround is to only adjust the position for 'top-level' floaters.
''2006.01.16 - 1.7.2'' added button property to slider panel elements so that slider panel can tell which button it belongs to. Also, re-activated and corrected animation handling so that nested sliders aren't clipped by hijacking Slider.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends
''2006.01.14 - 1.7.1'' added optional "^" syntax for floating panels. Defines new CSS class, ".floatingPanel", as an alternative for standard in-line ".sliderPanel" styles.
''2006.01.14 - 1.7.0'' added optional "*" syntax for rollover handling to show/hide slider without requiring a click (Based on a suggestion by tw4efl)
''2006.01.03 - 1.6.2'' When using optional "!" heading style, instead of creating a clickable "Hn" element, create an "A" element inside the "Hn" element. (allows click-through in SlideShowPlugin, which captures nearly all click events, except for hyperlinks)
''2005.12.15 - 1.6.1'' added optional "..." syntax to invoke deferred ('lazy') rendering for initially hidden sliders
removed checkbox option for 'global' application of lazy sliders
''2005.11.25 - 1.6.0'' added optional handling for 'lazy sliders' (deferred rendering for initially hidden sliders)
''2005.11.21 - 1.5.1'' revised regular expressions: if present, a single newline //preceding// and/or //following// a slider definition will be suppressed so start/end syntax can be place on separate lines in the tiddler 'source' for improved readability. Similarly, any whitespace (newlines, tabs, spaces, etc.) trailing the 'start slider' syntax or preceding the 'end slider' syntax is also suppressed.
''2005.11.20 - 1.5.0'' added (cookiename) syntax for optional tracking and restoring of slider open/close state
''2005.11.11 - 1.4.0'' added !!!!! syntax to render slider label as a header (Hn) style instead of a button/link style
''2005.11.07 - 1.3.0'' removed alternative syntax {{{(((}}} and {{{)))}}} (so they can be used by other
formatting extensions) and simplified/improved regular expressions to trim multiple excess newlines
''2005.11.05 - 1.2.1'' changed name to NestedSlidersPlugin
more documentation
''2005.11.04 - 1.2.0'' added alternative character-mode syntax {{{(((}}} and {{{)))}}}
tweaked "eat newlines" logic for line-mode {{{+++}}} and {{{===}}} syntax
''2005.11.03 - 1.1.1'' fixed toggling of default tooltips ("more..." and "less...") when a non-default button label is used
code cleanup, added documentation
''2005.11.03 - 1.1.0'' changed delimiter syntax from {{{(((}}} and {{{)))}}} to {{{+++}}} and {{{===}}}
changed name to EasySlidersPlugin
''2005.11.03 - 1.0.0'' initial public release
<<<
!!!!!Credits
<<<
This feature was implemented by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]] with initial research and suggestions from RodneyGomes, GeoffSlocock, and PaulPetterson.
<<<
!!!!!Code
***/
//{{{
version.extensions.nestedSliders = {major: 1, minor: 9, revision: 2, date: new Date(2006,6,29)};
//}}}

//{{{
// options for deferred rendering of sliders that are not initially displayed
if (config.options.chkDebugLazySliderDefer==undefined) config.options.chkDebugLazySliderDefer=false;
if (config.options.chkDebugLazySliderRender==undefined) config.options.chkDebugLazySliderRender=false;

// 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");
//}}}

//{{{
config.formatters.push( {
 name: "nestedSliders",
 match: "\\n?\\+{3}",
 terminator: "\\s*\\={3}\\n?",
 lookahead: "\\n?\\+{3}(\\+)?(\\([^\\)]*\\))?(\\!*)?(\\^(?:[^\\^\\*\\[\\>]*\\^)?)?(\\*)?(\\[[^\\]]*\\])?(\\>)?(\\.\\.\\.)?\\s*",
 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)
 {
 // location for rendering button and panel
 var place=w.output;

 // default to closed, no cookie, no accesskey
 var show="none"; var title=">"; var tooltip="show"; var cookie=""; var key="";

 // extra "+", default to open
 if (lookaheadMatch[1])
 { show="block"; title="<"; tooltip="hide"; }

 // cookie, use saved open/closed state
 if (lookaheadMatch[2]) {
 cookie=lookaheadMatch[2].trim().slice(1,-1);
 cookie="chkSlider"+cookie;
 if (config.options[cookie]==undefined)
 { config.options[cookie] = (show=="block") }
 if (config.options[cookie])
 { show="block"; title="<"; tooltip="hide"; }
 else
 { show="none"; title=">"; tooltip="show"; }
 }

 // parse custom label/tooltip/accesskey: [label=X|tooltip]
 if (lookaheadMatch[6]) {
 title = lookaheadMatch[6].trim().slice(1,-1);
 var pos=title.indexOf("|");
 if (pos!=-1) { tooltip = title.substr(pos+1,title.length); title=title.substr(0,pos); }
 if (title.substr(title.length-2,1)=="=") { key=title.substr(title.length-1,1); title=title.slice(0,-2); }
 if (pos==-1) tooltip += " "+title; // default tooltip: "show/hide <title>"
 }

 // create the button
 if (lookaheadMatch[3]) { // use "Hn" header format instead of button/link
 var lvl=(lookaheadMatch[3].length>6)?6:lookaheadMatch[3].length;
 var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,null,title);
 btn.onclick=onClickNestedSlider;
 btn.setAttribute("href","javascript:;");
 btn.setAttribute("title",tooltip);
 }
 else
 var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider);
 btn.sliderCookie = cookie; // save the cookiename (if any) in the button object
 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
 }

 // "non-click" MouseOver open/close slider
 if (lookaheadMatch[5]) btn.onmouseover=onClickNestedSlider;

 // create slider panel
 var panelClass=lookaheadMatch[4]?"floatingPanel":"sliderPanel";
 var panel=createTiddlyElement(place,"div",null,panelClass,null);
 panel.button = btn; // so the slider panel know which button it belongs to
 panel.defaultPanelWidth=(lookaheadMatch[4] && lookaheadMatch[4].length>2)?lookaheadMatch[4].slice(1,-1):""; // save requested panel size
 btn.sliderPanel=panel;
 panel.style.display = show;
 panel.style.width=panel.defaultPanelWidth;

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

// TBD: ignore 'quoted' delimiters (e.g., "{{{+++foo===}}}" isn't really a slider)
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);
 var theLabel = theTarget.firstChild.data;
 var theSlider = theTarget.sliderPanel
 var isOpen = theSlider.style.display!="none";
 // if using default button labels, toggle labels
 if (theLabel==">") theTarget.firstChild.data = "<";
 else if (theLabel=="<") theTarget.firstChild.data = ">";
 // if using default tooltips, toggle tooltips
 if (theTarget.getAttribute("title")=="show")
 theTarget.setAttribute("title","hide");
 else if (theTarget.getAttribute("title")=="hide")
 theTarget.setAttribute("title","show");
 if (theTarget.getAttribute("title")=="show "+theLabel)
 theTarget.setAttribute("title","hide "+theLabel);
 else if (theTarget.getAttribute("title")=="hide "+theLabel)
 theTarget.setAttribute("title","show "+theLabel);
 // deferred rendering (if needed)
 if (theSlider.getAttribute("rendered")=="false") {
 if (config.options.chkDebugLazySliderRender)
 alert("rendering '"+theLabel+"':\n\n"+theSlider.getAttribute("raw"));
 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)
 anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));
 else
 theSlider.style.display = isOpen ? "none" : "block";
 // 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")
 { ctrls[c].focus(); break; }
 }
 }
 if (this.sliderCookie && this.sliderCookie.length)
 { config.options[this.sliderCookie]=!isOpen; saveOptionCookie(this.sliderCookie); }
 // reset to default width (might have been changed via plugin code)
 theSlider.style.width=theSlider.defaultPanelWidth;
 // align slider/floater position with target button
 adjustSliderPos(theSlider.parentNode,theTarget,theSlider,theSlider.className);
 return false;
}

// hijack animation handler 'stop' handler so overflow is visible after animation has completed
Slider.prototype.coreStop = Slider.prototype.stop;
Slider.prototype.stop = function() { this.coreStop(); this.element.style.overflow = "visible"; }

// adjust panel position based on button position
if (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel,panelClass) {
 if (panelClass=="floatingPanel") {
 var left=0;
 var top=btn.offsetHeight; 
 if (place.style.position!="relative") {
 var left=findPosX(btn);
 var top=findPosY(btn)+btn.offsetHeight;
 var p=place; while (p && p.className!='floatingPanel') p=p.parentNode;
 if (p) { left-=findPosX(p); top-=findPosY(p); }
 }
 if (left+panel.offsetWidth > getWindowWidth()) left=getWindowWidth()-panel.offsetWidth-10;
 panel.style.left=left+"px"; panel.style.top=top+"px";
 }
}

function getWindowWidth() {
 if(document.width!=undefined)
 return document.width; // moz (FF)
 if(document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
 return document.documentElement.clientWidth; // IE6
 if(document.body && ( document.body.clientWidth || document.body.clientHeight ) )
 return document.body.clientWidth; // IE4
 if(window.innerWidth!=undefined)
 return window.innerWidth; // IE - general
 return 0; // unknown
}
//}}}
/***
|Name|NewHereCommand|
|Source|http://simonbaird.com/mptw/#NewHereCommand|
|Version|1.0|

Code originally by ArphenLin. Small tweak by SimonBaird
http://aiddlywiki.sourceforge.net/NewHere_demo.html#NewHereCommand
To use this you must edit your ViewTemplate and add newHere to the toolbar div, eg
{{{<div class='toolbar' macro='toolbar ... newHere'></div>}}}
***/

//{{{

config.commands.newHere = {
 text: 'new here',
 tooltip: 'Create a new tiddler tagged as this tiddler',
 handler: function(e,src,title) {
 if (!readOnly) {
 clearMessage();
 var t=document.getElementById('tiddler'+title);
 story.displayTiddler(t,config.macros.newTiddler.title,DEFAULT_EDIT_TEMPLATE);
 story.setTiddlerTag(config.macros.newTiddler.title, title, 0);
 story.focusTiddler(config.macros.newTiddler.title,"title");
 return false;
 }
 }
};

//}}}
/***
|''Name:''|NewerTiddlerPlugin|
|''Version:''|$Revision: 13 $ |
|''Source:''|http://thePettersons.org/tiddlywiki.html#NewerTiddlerPlugin |
|''Author:''|[[Paul Petterson]] |
|''Type:''|Macro Extension |
|''Requires:''|TiddlyWiki 1.2.33 or higher |
!Description
Create a 'new tiddler' button with lots more options! Specify the text to show on the button, the name of the new tiddler (with date macro expansion), one or more tags for the new tiddlers, and what text if any to include in the new tiddler body! Uses a named parameter format, simalar to the reminder plugin.

Also - if the tiddler already exists it won't replace any of it's existing data (like tags).

!Syntax
* {{{<<newerTiddler button:"Inbox" name:"Inbox YYYY/MM/DD" tags:"Journal, inbox" text:"New stuff for today:">>}}}
* {{{<<newerTiddler button:"@Action" name:"Action: what" tags:"@Action" text:"Add project and describe action">>}}}
* {{{<<newerTiddler button:"New Project" name:"Project Name?" tags:"My Projects, My Inbox, Journal" template:"MyTemplate">>}}}
!!Parameters
* name:"Name of Tiddler"
* tags:"Tag1, Tag2, Tag3" - tags for new tiddler, comma seperated //don't use square brackets //({{{[[}}})// for tags!//
* button:"name for button" - the name to display instead of "new tiddler"
* body:"what to put in the tiddler body"
* template:"Name of a tiddler containing the text to use as the body of the new tiddler"

''Note:'' if you sepecify both body and template parameters, then template parameter will be used and the body parameter overridden.

!Sample Output
* <<newerTiddler button:"Inbox" name:"Inbox YYYY/MM/DD" tags:"Journal inbox" text:"New stuff for today:">>
* <<newerTiddler button:"@Action" name:"Action: what" tags:"@Action" text:"Add project and describe action">>
* <<newerTiddler button:"New Project" name:"Project Name?" tags:"[[My Projects]] [[My Inbox]] Journal" template:"MyTemplate">>

!Todo
<<projectTemplate>>

!Known issues
* Must use double quotes (") around parameter values if they contain a space, can't use single quotes (').
* can't use standard bracketted style tags, ust type in the tags space and all and put a comma between them. For example tags:"one big tag, another big tag" uses 2 tags ''one big tag'' and ''another big tag''.

!Notes
* It works fine, and I use it daily, however I haven't really tested edge cases or multiple platforms. If you run into bugs or problems, let me know!

!Requests
* Have delta-date specifiers on the name: name:"Inbox YYY/MM/DD+1" ( ceruleat@gmail.com )
* Option to just open the tiddler instead of immediately edit it ( ceruleat@gmail.com )
* Have date formatters in tags as well as in name (me)

!Revision history
$History: PaulsNotepad.html $
 * 
 * ***************** Version 2 *****************
 * User: paulpet Date: 2/26/06 Time: 7:25p
 * Updated in $/PaulsNotepad3.0.root/PaulsNotepad3.0/PaulsPlugins/systemConfig
 * Port to tw2.0, bug fixes, and simplification!
v1.0.2 (not released) - fixed small documentation issues.
v1.0.1 October 13th - fixed a bug occurring only in FF
v1.0 October 11th - Initial public release
v0.8 October 10th - Feature complete... 
v0.7 Initial public preview

!Code
***/
//{{{
config.macros.newerTiddler = { 
name:"New(er) Tiddler",
tags:"",
text:"Type Tiddler Contents Here.",
button:"new(er) tiddler",

reparse: function( params ) {
 var re = /([^:\'\"\s]+)(?::([^\'\":\s]+)|:[\'\"]([^\'\"\\]*(?:\\.[^\'\"\\]*)*)[\'\"])?(?=\s|$)/g;
 var ret = new Array() ;
 var m ;

 while( (m = re.exec( params )) != null )
 ret[ m[1] ] = m[2]?m[2]:m[3]?m[3]:true ;

 return ret ;
},
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
 if ( readOnly ) return ;

 var input = this.reparse( paramString ) ;
 var tiddlerName = input["name"]?input["name"].trim():config.macros.newerTiddler.name ;
 var tiddlerTags = input["tags"]?input["tags"]:config.macros.newerTiddler.tags ;
 var tiddlerBody = input["text"]?input["text"]:config.macros.newerTiddler.text ;
 var buttonText = input["button"]?input["button"]:config.macros.newerTiddler.button ;
 var template = input["template"]?input["template"]:null;

 // if there is a template, use it - otherwise use the tiddlerBody text
 if ( template ) {
 tiddlerBody = store.getTiddlerText( template );
 }
 if ( tiddlerBody == null || tiddlerBody.length == 0 )
 tiddlerBody = config.macros.newerTiddler.text ;

 var now = new Date() ;
 tiddlerName = now.formatString( tiddlerName ) ;
 
 createTiddlyButton( place, buttonText, "", function() {
 var exists = store.tiddlerExists( tiddlerName );
 var t = store.createTiddler( tiddlerName );
 if ( ! exists )
 t.assign( tiddlerName, tiddlerBody, config.views.wikified.defaultModifier, now, tiddlerTags.readBracketedList() );
 
 story.displayTiddler(null,tiddlerName,DEFAULT_EDIT_TEMPLATE);
 story.focusTiddler(tiddlerName,"title");
 return false;
 });
}}
//}}}
/***
This plugin is released under the [[Creative Commons Attribution 2.5 License|http://creativecommons.org/licenses/by/2.5/]]
***/

[img[pics/nionhead3.jpg]]

Nioncapul is pronounced - to the best of my knowledge, as ~Noon-Ka-Pool, nion is the name of the fifth letter of <<wikipedia Ogham>> alphabet known in one of it's incarnations as the ~Beth-Luis-Nion - kinda like ABC only ABE instead. It is thought, by those regarding the Ogham as a tree alphabet, to signify the <<wikipedia European_Ash Fraxinus excelsior>>. Capul simply means horse in Irish Gaelic. Thus the a literal English translation from the Gaelic, could be 'ashtree-horse'. This is a cross-cultural bardic riddle however, and the implicit reference is, of course, to <<wikipedia Yggdrasil>>. A norse word, Yggdrasil is usually interpretated as 'Horse of Yggr'. Yggr is one of the names of the Norse <<wikipedia Orisha>> Odin, who hung himself from an ash tree in order to 'grasp the runes'. In Norse mythology, this ash Yggdrasil is the name of the great tree which spans and connects the nine worlds. Like the archetypical world tree Nioncapul dot net is both an arboreal and <<wikipedia Rhizome>> (see Deleuze & Guattari) structure which ventures to link many worlds. 
[img[pics/nornyamsterothumb1.jpg][pics/nornyamsteroprint1.jpg]]<<imagebox>>
Medium: 3d sterograph rendering
http://video.google.com/videoplay?docid=5683264938332089239
[img[pics/medusaprint1.jpg][pics/medusaprinthigh1.jpg]]
Digital Painting
/***
{{{<<opensurvey>>}}}<<opensurvey>>
***/

//{{{
config.macros.opensurvey={};

config.macros.opensurvey.handler=function(place,macroName)
{

createTiddlyButton(place,"Survey","open the nioncapul geoglyphic survey",config.macros.opensurvey.action);

}

config.macros.opensurvey.action = function()
{
 story.closeAllTiddlers();
 
 var tagged = store.getTaggedTiddlers("Survey","created");
 for(var t=0; t<tagged.length; t++)
 story.displayTiddler("top",tagged[t].title,null,true,false);
 story.window.scrollTo(0,0); 

}

//}}} 
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

See AdvancedOptions
See UploadOptions
See PluginManager
I had never heard of the term oriru before. So I looked it up on Google. Interestingly I found that oriru is also a term used in the Japanese game of Go. Oriru used as s synonym for the more common Go term Sagari.. Being a very amateur Go player myself I can only speculate on oriru's importance, but apparently in  Go parlance, oriru is a move 'down' towards the edge of the board.  Here's the link I learned this on.

http://senseis.xmp.net/?Sagari

I don't know how much folks reading this know about the rules of  Go. In brief then, Go is a game of territory; pieces don't move again once they are placed. Players acquire territory and hold it by forming chains of connected stones in the most efficient manner possible. Since the edges of the board in this two dimensional game are natural limits of play – effective control of the edges often constitutes victory. Thus oriru – in Go play is the 'take down', a pincer movement trapping the opponents stones between ones own strong chains and the impenetrable limit of the edge.  

My intuitive speculation then, is that oriru is used in Budo in much the same way. The difference begin that as warriors we contest in a boundless terrain of three dimensions. As any combat system must deal to a certain extent in generalities – the only constant 'edge of the board' that can be counted to be there at all times, is the ground. Like in Go – to use the oriru in Budo is to trap the opponent up against the unyielding limitations of the environment.  In Go the effectiveness of an oriru move is determined by the players prior positioning – effectively control of the kukan. In Go tightening your chains of stones too early, or obsessing over localized conflict is a good way to loose. A good opponent will use your inefficient distancing to develop a strong position on the rest of the board, and then encircle you from behind. This is why the Chinese call Go – ~Wei-Ch'i  – or encircling chess. The ideal strategy in Go  is a broad loosely sketched noose of stones that slowly and with great flexibility contracts and strangles the opponents territory. The oriru play in Go could be thought of as the knot of this noose. The parallels with Budo seem obvious. Control the maai and kukan with flexibly and adroitness – then spring the trap eliminating the enemies options totally by collapsing them to the ground... Game over - 'All your base belong to us.'

I'm really interested in what people with more experienced in Taijutsu think of my Go to Budo analogies. Perhaps I'm getting carried away here. Still, I know that  knowledge of Go playing was regarded as one of the essential Arts of the warrior-gentleman in classical Japan. I wonder how many many of the Bujin of the Nine Ryu were masters of both Go and the Art of War?
Original Post Feburary 3rd 2004

The picture below is a digital visual dub on the dizzy rifts of Myriad Peaks and Rivers of Li Tang (1045-1230) and the cover illustration of Birth of the Modern by Paul Johnson - artist unknown to me. 
[<img[http://www.nioncapul.net/pics/shelleytao1.jpg]]
I had the ocassion today to interpret Percy Bysshe Shelley's (1792-1822) poem Mont Blanc for a friend. Since my friend is Chinese, special attention the poets language is required to arrive at a potential meaning. The act of interpeting refines my understanding of the poem as well, since it requires me to take nothing for granted, often reveiling culteral constructs along the way. 

I was struck how the theme of this poem which in my interpretation hints at a secret language spoken by nature shares meme space with the Thalience concept I was so impressed by in Karl Schroeder's sci-fi novel Ventus. see RiverRunnPastBotherKnob 

'My own, my human mind, which passively
Now renders and receives fast (vast) influencings,
Holding an unremitting interchange
With the clear universe of things around;'

Fast or vast? Different Norton editions go either way. Thought the more modern one prints vast. 

"The wilderness has a mysterious tongue
Which teaches awful doubt, or faith so mild,
So solemn, so serence, that man may be
But for such a faith with nature reconciled,"

Perhapes I am under the influence of modern exsistentialism but I cannot help but interpet these lines from Mont Blanc as a most tender description of the relationship with Other in nature as realized through the mythopoetic imagination. To further hold the mirror the my own philosophical interests the nature imagery of this poem expresses the Taoist relationship to nature. The poet comprehends his place within nature, as in the opening line, "The everlasting universe of things Flows through the mind," which is analogous to the human figure in Chinese landscape painting. The image of the human in these paintings is habitualy small - emphesizing that the human is fully contained with the vastness of nature.

This is just an essay and I have not the time or inclination for rigorous analyis. The chinese anology might be a stretch since Shelley was no doubt unaware of that philosophy, yet Romatism is twin to Taoism in the sence they are both born to balance the reason dominated trends of their respective ages, i.e. Confusanism and Scientific Materialism. 

The survey continues...
<!--{{{-->
<div id='header' class='header'>
<div class='headerShadow'>
<span class='searchBar' macro='search'></span>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>

</div>
<div id='mainMenu'>
<span refresh='content' tiddler='MainMenu'></span>

</div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='MochaSideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlersBar'></div>
<div id='tiddlerDisplay'></div>
</div>
<div id='contentFooter' refresh='content' tiddler='contentFooter'></div>
<!--}}}-->
PasswordOptionPlugin extends the core Options with a non encrypted password type.

Notice:
*How a style can be specified for a specific option in StyleSheet

----
Test Password: <<option pasPassword myPasOptionInput >>
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date("Apr 19, 2007"),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Beta 5)'
};

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

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

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

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

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

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

merge(config.optionsDesc,{
		pasPassword: "Test password"
	});
*/
//}}}
!!Originaly posted July 9th, 2005
[>img[Perky Pat's Dragon Sword|http://www.nioncapul.net/pics/perkypat1.png]]

I am just about thru my first reading– Philip K. Dick's – Days of Perky Pat. I avoided Dick for a long time after reading his Do androids dream of Electric Sheep?, which was so disappointedly lacking in the hard-edge, film noir virtues of Blade Runner. For a long time I have used Blade Runner as the rare example of the movie being better than the book; an aphorism I still stand by. However further exposure to Dick's writing as caused me to reevaluate him as a writer – for he is undoubtedly of the first class, quite possibly the most startling original and most prophetic Sci-phi writer of all time.

For me the short story Perky Pat dovetails snuggly with my own artistic and cultural preoccupations. Namely, the alluring danger of game/virtual obsessiveness I seem subtly but profoundly vulnerable to. While Dick may be writing from a vantage of disgust with the simulacrum; as he testifies in his notes -PerkyPat was apparently inspired by the Barbie® phenomenon). I on the other hand direct my commentary from the vantage of the already infected. Yet unlike more conventional addicts – I am cognizant of the hooks and from this awareness have sufficient freedom of movement to intend towards being at mutator of the meme an not just a vector/ victim . I'm speaking of course of the gaming meme is terms of a cultural virus. It's pathogen which I'm sure will just continue to grow and grow, evident as the virtual media industry gobbles the pre-virtual linear mediums and turn them inexorably into mere satellites which will orbit around newfound empires.

But where for this susceptibility? What is it about our culture that rushes towards this inflation of the virtual? Is it the pressures of the new medium alone? – to take a Mcluhan position, or perhaps some aggregate of late-capitalism's pressures. Pressures unseen of by Marx; that breed from the overproduction of surplus value hence undermining the basic human need for competitiveness. What's there to be competitive about when everyone you know has parents who drive BMW's? One can postulate the necessity of the reemergence of the competitive drive in venues other than the tangible. Imagine this as pressurized Darwinian steam from the age of iron and blood, bursting through from secret and forgotten pluming to drive the micro-turbines in the mouse hands of Deathmatch champions. It's no fluke that a professional and international circuit of video game players has already formed. That virtual play is becoming a professional sport is just the tip of the iceburg when you consider such absurdites as this story from the [[China Daily|http:www.chinadaily.com.cn/english/doc/2005-03/30/content_429246.htm]]
http://picasaweb.google.com/magbhitu/Test
You have to boil <<wikipedia nettles>> before they are edible -

Unless you want to choke on the stingers.

Maybe revolution is like that.

When the pot has boiled enough, 

restrictions dissolve overnight - 

Like a snake rubbing down to its new skin

In any case,

Forcing change before its time is like eating a chestnut

Before it's pops out of it's shell.
<<siteMap Projects>>
[img[pics/pulkamanprint1.jpg]]
Medium: bronze casting - two part sand mold
<html><object width="425" height="350"> <param name="movie" value="http://www.youtube.com/v/3LbKaYQSPcU"> </param> <embed src="http://www.youtube.com/v/3LbKaYQSPcU" type="application/x-shockwave-flash" width="425" height="350"> </embed> </object></html>
/***
| Name:|QuickOpenTagPlugin|
| Purpose:|Makes tag links into a Taggly style open tag plus a normal style drop down menu|
| Creator:|SimonBaird|
| Source:|http://simonbaird.com/mptw/#QuickOpenTagPlugin|
| Requires:|TW 2.x|
| Version|1.1 (7-Feb-06)|

!History
* Version 1.1 (07/02/2006)
** Fix Firefox 1.5.0.1 crashes
** Updated by ~BidiX[at]~BidiX.info
* Version 1.0 (?/01/2006)
** First release

***/
//{{{

//⊻ ⊽ ⋁ ▼ 

window.createTagButton_orig_mptw = createTagButton;
window.createTagButton = function(place,tag,excludeTiddler) {
 var sp = createTiddlyElement(place,"span",null,"quickopentag");
 createTiddlyLink(sp,tag,true,"button");
 var theTag = createTiddlyButton(sp,config.macros.miniTag.dropdownchar,config.views.wikified.tag.tooltip.format([tag]),onClickTag);
 theTag.setAttribute("tag",tag);
 if(excludeTiddler)
 theTag.setAttribute("tiddler",excludeTiddler);
 return(theTag);
};

config.macros.miniTag = {handler:function(place,macroName,params,wikifier,paramString,tiddler) {
 var tagged = store.getTaggedTiddlers(tiddler.title);
 if (tagged.length > 0) {
 var theTag = createTiddlyButton(place,config.macros.miniTag.dropdownchar,config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);
 theTag.setAttribute("tag",tiddler.title);
 theTag.className = "miniTag";
 }
}};

config.macros.miniTag.dropdownchar = (document.all?"▼":"▾"); // the fat one is the only one that works in IE

config.macros.allTags.handler = function(place,macroName,params)
{
 var tags = store.getTags();
 var theDateList = createTiddlyElement(place,"ul",null,null,null);
 if(tags.length === 0)
 createTiddlyElement(theDateList,"li",null,"listTitle",this.noTags);
 for (var t=0; t<tags.length; t++)
 {
 var theListItem =createTiddlyElement(theDateList,"li",null,null,null);
 var theLink = createTiddlyLink(theListItem,tags[t][0],true);
 var theCount = " (" + tags[t][1] + ")";
 theLink.appendChild(document.createTextNode(theCount));

 var theDropDownBtn = createTiddlyButton(theListItem," "+config.macros.miniTag.dropdownchar,this.tooltip.format([tags[t][0]]),onClickTag);
 theDropDownBtn.setAttribute("tag",tags[t][0]);
 }
};


setStylesheet(
 ".quickopentag { margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }\n"+
 ".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }\n"+
 ".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}\n"+
 "a.miniTag {font-size:150%;}\n"+
 "",
"QuickOpenTagStyles");

//}}}

/***
<html>&#x22bb; &#x22bd; &#x22c1; &#x25bc; &#x25be;</html>
***/
This page has an RSS feed at http://www.nioncapul.net/index.xml
/***
| Name:|RenameTagsPlugin|
| Purpose:|Allows you to easily rename tags|
| Creator:|SimonBaird|
| Source:|http://simonbaird.com/mptw/#RenameTagsPlugin|
| Version:|1.0.1 (5-Mar-06)|

!Description
If you rename a tiddler/tag that is tagging other tiddlers this plugin will ask you if you want to rename the tag in each tiddler where it is used. This is essential if you use tags and ever want to rename them. To use it, open the tag you want to rename as a tiddler (it's the last option in the tag popup menu), edit it, rename it and click done. You will asked if you want to rename the tag. Click OK to rename the tag in the tiddlers that use it. Click Cancel to not rename the tag.

!Example
Try renaming [[Plugins]] or [[CSS]] on this site.

!History
* 1.0.1 (5-Mar-06) - Added feature to allow renaming of tags without side-effect of creating a tiddler
* 1.0.0 (5-Mar-06) - First working version

!Code
***/
//{{{

version.extensions.RenameTagsPlugin = {
 major: 1, minor: 0, revision: 0,
 date: new Date(2006,3,5),
 source: "http://simonbaird.com/mptw/#RenameTagsPlugin"
};

config.macros.RenameTagsPlugin = {};
config.macros.RenameTagsPlugin.prompt = "Rename the tag '%0' to '%1' in %2 tidder%3?";

// these are very useful, perhaps they should be in the core
if (!store.addTag) {
 store.addTag = function(title,tag) {
 var t=this.getTiddler(title); if (!t || !t.tags) return;
 t.tags.push(tag);
 };
};

if (!store.removeTag) {
 store.removeTag = function(title,tag) {
 var t=this.getTiddler(title); if (!t || !t.tags) return;
 if (t.tags.find(tag)!=null) t.tags.splice(t.tags.find(tag),1);
 };
};

store.saveTiddler_orig_tagrename = store.saveTiddler;
store.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {
 if (title != newTitle && this.getTaggedTiddlers(title).length > 0) {
 // then we are renaming a tag
 var tagged = this.getTaggedTiddlers(title);
 if (confirm(config.macros.RenameTagsPlugin.prompt.format([title,newTitle,tagged.length,tagged.length>1?"s":""]))) {
 for (var i=0;i<tagged.length;i++) {
 store.removeTag(tagged[i].title,title);
 store.addTag(tagged[i].title,newTitle);
 // if tiddler is visible refresh it to show updated tag
 story.refreshTiddler(tagged[i].title,false,true);
 }
 }
 if (!this.tiddlerExists(title) && newBody == "") {
 // dont create unwanted tiddler
 return null;
 }
 }
 return this.saveTiddler_orig_tagrename(title,newTitle,newBody,modifier,modified,tags);
}

//}}}

What follows is my friend Tony Jone's riff on my poem [[Hlidskjalf]]

Because thought and memory map the world,
in the kingdom of the blind soon a lifetime
of visions will pour into nothing, as savants
question the construct of kingship. Now,
they divine the election of new senators;
like wine through a hollow sieve, clueless,
cantankerous, the congealments of royal blood
drowned out by an energetic trickle, a boiling,
down the side of a cup. Imagine the effects of such
blood and semen, of radishes, in their proper grail
in the fore-districts of the kitchen.
 
There is a discipline to sight in that nebular division;
so too with words, distinctions must be made;
from the hot seat, pages turn in the service
of meaning. As forest grows, so does the knife
fall and wind push in the service of the people.
Oceans of molecules fear the king's single eye still,
across prairie blinking its last in the dust,
backlit by his ravens having come to the feast,
the purple spectacular thuddings- Betrayers -
of a low pressure zone.

-Tony Jones
Orginal Post January 22, 2004

I guess this is the begining. If there is a starting place, this is it.

Always to much going on in my head. It is been a day of miscomunication and technical glitches. First the gas kiln doest light - because its a dinosaur with idiotic safety controls which prevent you from lighting it manualy. Then the melt furnace doesn't work either, for some unknown reason. Feed up with all the out of my control equipent , I hoped in the truck the retrieve the coupela from the old building. Of course it was no longer there. Now I'm kicking myself, 'cause I should have got all that months ago. 

Then to beat all my 18 plus hour bittorrent dl stops with only one meg of a 2578.8 meg file left to go. Insane - maybe I should sacrifce a goat to Legba or something bloody like that. Only I don't have a goat, plus being a vegetarian I am sorta squimeimish about killing mamals (rats don't count, i hate rats!)

I'd consult the <html><a href="http://www.webzinemaker.net/africans-art/index.php3?action=page&id_art=969">Ifa</a></html> if only Wande Abimbola's books weren't out of print. Of course that was technically yesterday when I fould that out, but I still think it counts in terms of the current stringchainstreak of bum luck. Chalk it all up the the new moon. 

Anyway what the hell is the nioncapul rhyzometic survey?

I'll get around to a formal defineing sooner than late. But the working glib blurp is, guerrill thaleince farming.

Thaleince is a concept I came acrost in the work of Karl Schroeder.

Karl's blogg can be found at <html><a href="http://www.kschroeder.com/1049379284/index_html">http://www.kschroeder.com/1049379284/index_html</a></html>as well as a link to a short artical explaining how Thaleince functions in his book Ventus.

Guerilla designation 'cause my Gps fine art projects are slowly tunneling to the surface. Exspect some fungal fruiting bodies to pop up in unexspected places. That is if I ever get those bloody kilnes working. 

 


Paroled 
a crow
overlooks
the trampled harrows

a wound in the head
has got him over
the flaming wall
at last...
(he was a Sigfried after all)

in the hospital
he thought 
about his friend

who had courted wisely 
amongst the maidens of the slain
and picked at the corpses
expertly 
in satire

who's been
dead a week
before the 
Armistice 
settles 

a clutch of papers,
sheet music
remains to be gathered 
and published 

dulce! dulce! mocks his songbird pity- 
torn scraps of a life 
wasted in trenches.
Is it a lovebird's warble to hear?
or just a crow's
warnings for the next war.
[img[http://www.nioncapul.net/pics/Sergent_pulkuthumb1.jpg][http://www.nioncapul.net/pics/Sergent_pulku1.jpg]]<<imagebox>>
Medium: 3D rendering
[img[pics/serraminthumb9.jpg][pics/serramin9.jpg]]<<imagebox>>
Medium: 3D rendering

Sarrao world building - all about the Serramin
http://www.dmweade.com/sarrao/tiki-view_forum_thread.php?forumId=6&comments_parentId=47
ShadowTiddlers are special tiddlers that have default values that take over if they are undefined or deleted. For example, PageTemplate and StyleSheetColors are both shadow tiddlers.

ShadowTiddlers make it harder to render a TiddlyWiki inoperative by accidentally deleting something important. You can see a list of shadow tiddlers in the Shadowed tab under the More tab in the right hand column. When you create a tiddler with the same title you override the underlying shadow tiddler. 
----
<<list shadowed>>
Dubed this from http://kutaki.org

詞韻
Shikin
The very sound that
these syllables make
as they echo, intone, vibrate, shake


波羅密
Haramitsu
Paramita
The enlightening of the mind
by every single situation
that in our daily lives we find


大光明
Daikomyo
Great Expanding Light
illuminating with its rays
our own true vast potential
every time we chant this phrase
<<version>><<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<saveChanges>><<upload>>[img[Add to Google|http://buttons.googlesyndication.com/fusion/add.gif][http://fusion.google.com/add?feedurl=http%3A//nioncapul.net/index.xml]]<<slider chkSliderOptionsPanel OptionsPanel 'options �' 'Change TiddlyWiki advanced options'>>
/***
This CSS by DaveBirss.
***/
/*{{{*/

.tabSelected {
 background: #fff;
}

.tabUnselected {
 background: #eee;
}

#sidebar {
 color: #000;
}

#sidebarOptions {
 background: #fff;
}

#sidebarOptions .button {
 color: #999;
}

#sidebarOptions .button:hover {
 color: #000;
 background: #fff;
 border-color:white;
}

#sidebarOptions .button:active {
 color: #000;
 background: #fff;
}

#sidebarOptions .sliderPanel {
 background: transparent;
}

#sidebarOptions .sliderPanel A {
 color: #999;
}

#sidebarOptions .sliderPanel A:hover {
 color: #000;
 background: #fff;
}

#sidebarOptions .sliderPanel A:active {
 color: #000;
 background: #fff;
}

.sidebarSubHeading {
 color: #000;
}

#sidebarTabs {`
 background: #fff
}

#sidebarTabs .tabSelected {
 color: #000;
 background: #fff;
 border-top: solid 1px #ccc;
 border-left: solid 1px #ccc;
 border-right: solid 1px #ccc;
 border-bottom: none;
}

#sidebarTabs .tabUnselected {
 color: #999;
 background: #eee;
 border-top: solid 1px #ccc;
 border-left: solid 1px #ccc;
 border-right: solid 1px #ccc;
 border-bottom: none;
}

#sidebarTabs .tabContents {
 background: #fff;
}


#sidebarTabs .txtMoreTab .tabSelected {
 background: #fff;
}

#sidebarTabs .txtMoreTab .tabUnselected {
 background: #eee;
}

#sidebarTabs .txtMoreTab .tabContents {
 background: #fff;
}

#sidebarTabs .tabContents .tiddlyLink {
 color: #999;
}

#sidebarTabs .tabContents .tiddlyLink:hover {
 background: #fff;
 color: #000;
}

#sidebarTabs .tabContents {
 color: #000;
}

#sidebarTabs .button {
 color: #666;
}

#sidebarTabs .tabContents .button:hover {
 color: #000;
 background: #fff;
}

/*}}}*/
+++^36em^[Sitemap]<<moveablePanel>><<tiddler SiteMap>>===
/***
| Name:|SiteMapMacro|
| Author:|Simon Baird|
| Location:|http://simonbaird.com/mptw/#SiteMapMacro|
| Version:|1.0.3, 15-Mar-06|

!!Examples
See SiteMap and SliderSiteMap for example usage.

!!Parameters
* Name of tiddler to start at
* Max depth (a number) 
* Format (eg, nested, see formats below)
* Don't show root flag (anything other than null turns it on)
* Tags - a string containing a bracketed list of tags that we are interested in

!!History
* 1.0.3 (15-Mar-06)
** added tag filtering
* 1.0.2 (15-Mar-06)
** Added json format and dontshowroot option
* 1.0.1 (9-Mar-06)
** Added selectable formats and fixed nested slider format
* 1.0.0 (8-Mar-06)
** first release

***/
//{{{

version.extensions.SiteMapMacro = {
 major: 1,
 minor: 0,
 revision: 3,
 date: new Date(2006,3,15),
 source: "http://simonbaird.com/mptw/#SiteMapMacro"
};

config.macros.siteMap = {

 formats: {
 bullets: {
 formatString: "%0[[%1]]\n%2",
 indentString: "*"
 },

 // put this in your StyleSheet to make it look good.
 // .sliderPanel { margin-left: 2em; }

 sliders: {
 formatString: "[[%1]]+++\n%2===\n\n",
 formatStringLeaf: "[[%1]]\n"
 },

 openSliders: {
 formatString: "[[%1]]++++\n%2===\n\n",
 formatStringLeaf: "[[%1]]\n"
 },

 popups: {
 formatString: "[[%1]]+++^\n%2===\n\n",
 formatStringLeaf: "[[%1]]\n"
 },

 // these don't work too well
 openPopups: {
 formatString: "[[%1]]++++^\n%2===\n\n",
 formatStringLeaf: "[[%1]]\n"
 },
 
 // this is a little nuts but it works
 json: {
 formatString: '\n%0{"%1":[%2\n%0]}',
 formatStringLeaf: '\n%0"%1"',
 indentString: " ",
 separatorString: ","
 }


 },

 defaultFormat: "bullets",

 treeTraverse: function(title,depth,maxdepth,format,dontshowroot,tags,excludetags) {

 var tiddler = store.getTiddler(title);
 var tagging = store.getTaggedTiddlers(title);

 if (dontshowroot)
 depth = 0;

 var indent = "";
 if (this.formats[format].indentString)
 for (var j=0;j<depth;j++)
 indent += this.formats[format].indentString;

 var childOutput = "";
 if (!maxdepth || depth < parseInt(maxdepth)) 
 for (var i=0;i<tagging.length;i++)
 if (tagging[i].title != title) {
 if (this.formats[format].separatorString && i != 0)
 childOutput += this.formats[format].separatorString;
 childOutput += this.treeTraverse(tagging[i].title,depth+1,maxdepth,format,null,tags,excludetags);
 }

 if (childOutput == "" && (
 (tags && tags != "" && !tiddler.tags.containsAll(tags.readBracketedList())) ||
 (excludetags && excludetags != "" && tiddler.tags.containsAny(excludetags.readBracketedList()))
 )
 ) {
 // so prune it cos it doesn't have the right tags and neither do any of it's children
 return "";
 }

 if (dontshowroot)
 return childOutput;

 if (this.formats[format].formatStringLeaf && childOutput == "") {
 // required for nestedSliders
 return this.formats[format].formatStringLeaf.format([indent,title,childOutput]);
 }

 return this.formats[format].formatString.format([indent,title,childOutput]);
 },

 handler: function (place,macroName,params,wikifier,paramString,tiddler) {
 wikify(this.treeTraverse(
 params[0] && params[0] != '.' ? params[0] : tiddler.title, 1, 
 params[1] && params[1] != '.' ? params[1] : null, // maxdepth
 params[2] && params[2] != '.' ? params[2] : this.defaultFormat, // format
 params[3] && params[3] != '.' ? params[3] : null, // dontshowroot
 params[4] && params[4] != '.' ? params[4] : null, // tags
 params[5] && params[5] != '.' ? params[5] : null // excludetags
 ),place);
 }

}

//}}}
by John Lawrence Haverkamp 
 [<img[pics/nioncapultitle2.jpg]]
http://www.nioncapul.net
|<<siteMap Survey>>|<<siteMap Images>>|

[img[pics/skulljawprint1.jpg][pics/skulljawprint1.htm]]
Medium: bronze cast - lost wax, hollowformed and welded steel, alunimum casting - styro-burnout green sand
/***
|''Name:''|SparklinePlugin|
|''Description:''|Sparklines macro|
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};

//--
//-- Sparklines
//--

config.macros.sparkline = {};
config.macros.sparkline.handler = function(place,macroName,params)
{
	var data = [];
	var min = 0;
	var max = 0;
	var v;
	for(var t=0; t<params.length; t++) {
		v = parseInt(params[t]);
		if(v < min)
			min = v;
		if(v > max)
			max = v;
		data.push(v);
	}
	if(data.length < 1)
		return;
	var box = createTiddlyElement(place,"span",null,"sparkline",String.fromCharCode(160));
	box.title = data.join(",");
	var w = box.offsetWidth;
	var h = box.offsetHeight;
	box.style.paddingRight = (data.length * 2 - w) + "px";
	box.style.position = "relative";
	for(var d=0; d<data.length; d++) {
		var tick = document.createElement("img");
		tick.border = 0;
		tick.className = "sparktick";
		tick.style.position = "absolute";
		tick.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
		tick.style.left = d*2 + "px";
		tick.style.width = "2px";
		v = Math.floor(((data[d] - min)/(max-min)) * h);
		tick.style.top = (h-v) + "px";
		tick.style.height = v + "px";
		box.appendChild(tick);
	}
};


}
//}}}
[img[pics/tablespirlprint1.jpg][pics/tablesprilPrint2.htm]]
Medium: Steel - etched fabricated and welded
[img[pics/spishinprint1.jpg]]
Medium: digital painting
Type the text for 'steel'
[img[pics/SCcricksg1.jpg]]
Medium: digital photograph stereograph
/*{{{*/
/*Mocha TiddlyWiki Theme*/
/*Version 1.0*/
/*Design and CSS originally by Anthonyy, ported to TiddlyWiki by Saq Imtiaz.*/
/*}}}*/
/*{{{*/
 #contentWrapper{
margin: 0 3.4em;

			font-family: Lucida Grande, Tahoma, Arial, Helvetica, sans-serif; /* Lucida Grande for the Macs, Tahoma for the PCs */
font-size: 11px;
			line-height: 1.6em;
			color: #666;
}

.header {
 background: #575352; 
			padding-top: 5px;
			clear: both;

border-bottom: 4px solid #948979;
}

.headerShadow {	padding: 2.6em 0em 0.5em 0em; }

.siteTitle {
			font-family: 'Trebuchet MS' sans-serif;
			font-weight: bold;
			font-size: 32px;
			color: #336666;
			margin-bottom: 30px;
			background-color: #575352;
}

.siteTitle a{color:#86cc33; border-bottom:1px dotted #86cc33;}

.siteSubtitle {
	font-size: 1.0em;
        display: block;
        margin: .5em 1em; color: #999999;
}

#mainMenu {
position:absolute;
float:left;
margin-left:0.25em;
display:inline;
text-align:left;
padding: 2em 0.5em 0.5em 0em;
width:13em;
font-size:1.25em;
}

#sidebar{
position:relative;
float:right;
margin-bottom:1em;
padding-top:2em;
display:inline;

}

#displayArea {
	margin: 0em 17em 0em 15em;
}

.tagClear {clear:none;}

#contentFooter {background:#575352; color:#BFB6B3; clear: both; padding: 0.5em 1em;}

		
		#contentFooter a {
			color: #BFB6B3;
			border-bottom: 1px dotted #BFB6B3;
		}
		
		#contentFooter a:hover {
			color: #FFFFFF;
			background-color:#575352;
		}

		a,#sidebarOptions .sliderPanel a{
			color:#956843;
			text-decoration: none;
		}

		a:hover,#sidebarOptions .sliderPanel a:hover {
			color:#CC6714;
			background-color: #F5F5F5; 
		}

.viewer .button, .editorFooter .button{
	color: #666;
	border: 1px solid #CC6714;
}

.viewer .button:hover, 
.editorFooter .button:hover{
	color: #fff;
	background: #CC6714;
	border-color: #CC6714;
}

.viewer .button:active, .viewer .highlight,.editorFooter .button:active, .editorFooter .highlight{color:#fff; background:#575352;border-color:#575352;}

		}

#mainMenu br {display:none;}


#mainMenu .button:hover {
 color: #CC6714;
 background: #F5F5F5 url(arrow.gif) 96% 50% no-repeat;

}

#mainMenu a:link, #navlist a:visited {
			color:#956843;
			text-decoration: none;
		}

#mainMenu li{
 list-style: none;
}



/* just in case want some QuickOpenTags in your mainMenu */
#mainMenu .quickopentag { padding:0px; margin:0px; border:0px; }
#mainMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }
#mainMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }
#mainMenu .moveablePanel { padding-right:1px; margin-right:0px; }


#sidebarOptions a {
			color:#999;
			text-decoration: none;
		}

#sidebarOptions	a:hover {
			color:#4F4B45;
			background-color: #F5F5F5;border:1px solid #fff;
		}

#sidebarOptions {line-height:1.4em;}

		.tiddler {
			padding-bottom: 40px;
			border-bottom: 1px solid #DDDDDD; 
		}
.title {color:#84a436;}
.subtitle, .subtitle a { color: #999999; font-size: 1.0em;margin:0.2em;}
.shadow .title{color:#948979;}

.selected .toolbar a {color:#999999;}
.selected .toolbar a:hover {color:#4F4B45; background:transparent;border:1px solid #fff;}

.toolbar .button:hover, .toolbar .highlight, .toolbar .marked, .toolbar a.button:active{color:#4F4B45; background:transparent;border:1px solid #fff;}

 .listLink,#sidebarTabs .tabContents {line-height:1.5em;}
 .listTitle {color:#888;}

#sidebarTabs .tabContents {background:#fff;}
#sidebarTabs .tabContents .tiddlyLink, #sidebarTabs .tabContents .button{color:#999;}
#sidebarTabs .tabContents .tiddlyLink:hover,#sidebarTabs .tabContents .button:hover{color:#4F4B45;background:#fff}

#sidebarTabs .tabContents .button:hover, #sidebarTabs .tabContents .highlight, #sidebarTabs .tabContents .marked, #sidebarTabs .tabContents a.button:active{color:#4F4B45;background:#fff}

.tabSelected{color:#fff; background:#948979;}

.tabUnselected {
 background: #ccc;
}

 .tabSelected, .tabSelected:hover {
 color: #fff;
 background: #948979;
 border: solid 1px #948979;
padding-bottom:1px;
}

 .tabUnselected {
 color: #999;
 background: #eee;
 border: solid 1px #ccc;
padding-bottom:1px;
}

#sidebarTabs .tabUnselected { border-bottom: none;padding-bottom:3px;}
#sidebarTabs .tabSelected{padding-bottom:3px;}


#sidebarTabs .tabUnselected:hover { border-bottom: none;padding-bottom:3px;color:#4F4B45}

#sidebarOptions .sliderPanel {
	background: #fff; border:none;
	font-size: .9em;
}
#sidebarOptions .sliderPanel a {font-weight:normal;}
#sidebarOptions .sliderPanel input {border:1px solid #999;}

.viewer blockquote {
	border-left: 3px solid #948979;
}

.viewer table {
	border: 2px solid [[ColorPalette::TertiaryDark]];
}

.viewer th, thead td {
	background: #948979;
	border: 1px solid #948979;
	color: #fff;
}
.viewer pre {
	border: 1px solid #948979;
	background: #f5f5f5;
}

.viewer code {
	color: #2F2A29;
}

.viewer hr {
	border-top: dashed 1px #948979;
}

.editor input {
	border: 1px solid #948979;
}

.editor textarea {
	border: 1px solid #948979;
}

.popup {
	background: #948979;
	border: 1px solid #948979;
}

.popup li.disabled {
	color: #000;
}

.popup li a, .popup li a:visited {
	color: #eee;
	border: none;
}

.popup li a:hover {
	background: #575352;
	color: #fff;
	border: none;
}

.tagging, .tagged {
	border: 1px solid #eee;
	background-color: #F7F7F7;
}

.selected .tagging, .selected .tagged {
	background-color: #eee;
	border: 1px solid #BFBAB3;
}

 .tagging .listTitle, .tagged .listTitle {
	color: #bbb;
}

.selected .tagging .listTitle, .selected .tagged .listTitle {
	color: #666; 
}

.tagging .button, .tagged .button {
		color:#aaa;
}
.selected .tagging .button, .selected .tagged .button {
		color:#4F4B45;
}

.highlight, .marked {background:transparent; color:#111; border:none; text-decoration:underline;}

.tagging .button:hover, .tagged .button:hover, .tagging .button:active, .tagged .button:active {
		border: none; background:transparent; text-decoration:underline; color:#000;
}

h1,h2,h3,h4,h5 { color: #666; background: transparent; padding-bottom:2px; font-family: Arial, Helvetica, sans-serif; }
h1 {font-size:18px;}
h2 {font-size:16px;}
h3 {font-size: 14px;}

#messageArea {
	border: 4px solid #948979;
	background: #f5f5f5;
	color: #999;
        font-size:90%;
}

#messageArea a:hover { background:#f5f5f5;}

#messageArea .button{
	color: #666;
	border: 1px solid #CC6714;
}

#messageArea .button:hover {
	color: #fff;
	background: #948979;
	border-color: #948979;
}


* html .viewer pre {
	margin-left: 0em;
}

* html .editor textarea, * html .editor input {
	width: 98%;
}


.searchBar {float:right;font-size: 1.2em;position:relative; margin-top:.75em; margin-right:3em;}
.searchBar .button {color:#999;display:block;}
.searchBar .button:hover {border:1px solid #fefefe;color:#4F4B45;}
.searchBar input {			
                        background-color: #fefefe;
			color: #999999;
			border: 1px solid #CCC;		margin-right:3px;
}

#sidebarOptions .button:active, #sidebarOptions .highlight {background:#F5F5F5;}

*html #contentFooter { padding:0.25em 1em 0.5em 1em;}

#noticeBoard {font-size: 0.9em; color:#999; position:relative;display:block;background:#fff; clear: both; margin-right:0.5em; margin-top:60px; padding:5px; border-bottom: 1px dotted #CCC; border-top: 1px dotted #CCC;}
#mainMenu #noticeBoard a,#mainMenu #noticeBoard .tiddlyLink {display:inline;border:none;padding:5px 2px;color:#DF9153 }
#noticeBoard a:hover {border:none;}	

#noticeBoard br {display:inline;}

#mainMenu #noticeBoard  .button{
	color: #666;
	border: 1px solid #DF9153;padding:2px;
}

#mainMenu #noticeBoard  .button:hover{
	color: #fff;
	background: #DF9153;
	border-color: #DF9153;
}
/*}}}*/
/*{{{*/
#tiddlerDisplay {border:1px solid #CCC;-moz-border-radius:0.5em}
.tabCloseButton {padding : 0 2px 0 2px ; margin : 0 0 0 4px; font-size:0.75em; vertical-align:top}
.tabUnselected .tabCloseButton {border : 1px solid #BBB; background-color : #DDD; color:#888}
.tabSelected .tabCloseButton {border : 1px solid #EEE; background-color : #D87443; color:#FFF}
.tabCloseButton:hover {color:#A00; background-color:#F0F0F0}
#tiddlersBar {padding : 1em 0.5em 0 0.5em}
#tiddlersBar .button {border:0; color:#444}
#tiddlerDisplay .tiddler {padding-top : 0.1em}
#tiddlersBar .tab {padding : 0.4em 0.5em 0.3em 0.5em; -moz-border-radius-topleft:0.5em;-moz-border-radius-topright:0.5em}
#tiddlersBar .tabSelected {background-color :#FFF;color:#CC6633;border-top: 1px solid #DDD;border-right: 1px solid #DDD;border-bottom: 1px solid #FFF;border-left:1px solid #DDD}
#tiddlersBar .tabUnselected {background-color :#EEE}
#tiddlersBar .tabUnselected .button {color:#AAA;font-weight:bold;font-style:italic;}
#tiddlersBar .tabSelected .button {color:#CC6633;font-weight:bold;}
/*}}}*/r'
<<newerTiddler button:"New Survey" name:"Survey Title? MMM/DD/YYYY" tags:"Survey" template:"SurveyTemplate">>
/***
''Name:'' TWUpdate
''Author:'' Tom Otvos
''Version:'' 0.2
<<twupdate>>
***/
//{{{

version.extensions.twupdate = {major: 0, minor: 2, revision: 0, date: new Date(2006,3,13,0,0,0,0), source: ""};

config.macros.twupdate = { 
 label: "update",
 sourceUrl: "http://www.tiddlywiki.com/empty.html", 
 lingo: {
 prompt: "Update this TiddlyWiki from TiddlyWiki.com", 
 warning: "Are you sure you want to update this document with the latest version of TiddlyWiki?\n\nIf you want to continue, your document will first be saved with a backup.",
 success: "Update was successful. Click on 'OK' to reload the document",
 errNoHttp: "Unable to allocate an HTTP request object for the update",
 progressLoading: "Getting update from TiddlyWiki.com...",
 progressLoadSuccess: "File successfully loaded",
 progressLoadFailure: "File was not loaded successfully (%0)",
 progressMerging: "Merging with existing document..."
 }
}

config.macros.twupdate.handler = function(place)
{
 if(!readOnly)
 createTiddlyButton(place, this.label, this.prompt, this.onClick, null, null, null);
}

config.macros.twupdate.onClick = function(e)
{
 if (!confirm(config.macros.twupdate.lingo.warning)) return;

 try {
 // force a save with backup
 var saveBackups = config.options.chkSaveBackups;
 config.options.chkSaveBackups = true;
 saveChanges();
 config.options.chkSaveBackups = saveBackups;
 
 var ajax = new AjaxHelper();
 displayMessage(config.macros.twupdate.lingo.progressLoading);
 ajax.getText(config.macros.twupdate.sourceUrl, config.macros.twupdate.performUpdate); 
 }
 catch (e) {
 alert(e);
 }

 return false;
}

config.macros.twupdate.performUpdate = function(emptyHtml, status, statusText)
{
 // note that this is begin called from a callback from an event handler, so
 // "this" is most definitely not defined!
 
 if (status == 200)
 displayMessage(config.macros.twupdate.lingo.progressLoadSuccess);
 else {
 displayMessage(config.macros.twupdate.lingo.progressLoadFailure.format([statusText]));
 return;
 }
 displayMessage(config.macros.twupdate.lingo.progressMerging);
 
 // the bulk of this is cribbed from saveChanges()...
 var originalPath = document.location.toString();
 // Check we were loaded from a file URL
 if (originalPath.substr(0,5) != "file:") {
 alert(config.messages.notFileUrlError);
 if (store.tiddlerExists(config.messages.saveInstructions))
 displayTiddler(null,config.messages.saveInstructions);
 return;
 }
 var localPath = getLocalPath(originalPath);

 // Locate the storeArea div's
 var posOpeningDiv = emptyHtml.indexOf(startSaveArea);
 var posClosingDiv = emptyHtml.lastIndexOf(endSaveArea);
 if ((posOpeningDiv == -1) || (posClosingDiv == -1)) {
 alert(config.messages.invalidFileError.format(['empty.html']));
 return;
 }

 // Save new file
 var revised = emptyHtml.substr(0,posOpeningDiv + startSaveArea.length) + 
 convertUnicodeToUTF8(allTiddlersAsHtml()) + "\n\t\t" +
 emptyHtml.substr(posClosingDiv);
 var newSiteTitle = convertUnicodeToUTF8((wikifyPlain("SiteTitle") + " - " + wikifyPlain("SiteSubtitle")).htmlEncode());
 revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");
 revised = revised.replaceChunk("<!--PRE-HEAD-START--"+">","<!--PRE-HEAD-END--"+">","\n" + store.getTiddlerText("MarkupPreHead","") + "\n");
 revised = revised.replaceChunk("<!--POST-HEAD-START--"+">","<!--POST-HEAD-END--"+">","\n" + store.getTiddlerText("MarkupPostHead","") + "\n");
 revised = revised.replaceChunk("<!--PRE-BODY-START--"+">","<!--PRE-BODY-END--"+">","\n" + store.getTiddlerText("MarkupPreBody","") + "\n");
 revised = revised.replaceChunk("<!--POST-BODY-START--"+">","<!--POST-BODY-END--"+">","\n" + store.getTiddlerText("MarkupPostBody","") + "\n");
 var save = saveFile(localPath, revised);
 if (save) {
 displayMessage(config.messages.mainSaved, "file://" + localPath);
 store.setDirty(false);
 alert(config.macros.twupdate.lingo.success);
 document.location.reload();
 }
 else
 alert(config.messages.mainFailed);
}

function AjaxHelper()
{
 this.http = null;
 
 try
 {
 this.http = new XMLHttpRequest()
 }
 
 catch(e)
 {
 // if we don't get an internal object, try allocating it using ActiveX, with successive
 // fallbacks to earlier MSXML versions as necessary
 try
 {
 this.http = new ActiveXObject("Msxml2.XMLHTTP.4.0")
 } 
 catch(e) 
 {
 try
 {
 this.http = new ActiveXObject("MSXML2.XMLHTTP")
 } 
 catch(e) 
 {
 try
 {
 this.http = new ActiveXObject("Microsoft.XMLHTTP")
 } 
 catch(e) 
 {
 this.http = null
 }
 }
 }
 }
 
 if (!this.http) throw 'Unable to allocate an HTTP request object';
}

AjaxHelper.prototype.getText = function(url, callback, async, force)
{
 if (!this.http) return;
 if (async == undefined) async = true;
 if (force == undefined) force = false;
 // ??? right now, we are not handling "forced" requests
 this._request("GET", url, callback, async, true, false);
}

AjaxHelper.prototype.getXML = function(url, callback, async, force)
{
 if (!this.http) return;
 if (async == undefined) async = true;
 if (force == undefined) force = false;
 // ??? right now, we are not handling "forced" requests
 this._request("GET", url, callback, async, true, true);
}

AjaxHelper.prototype.getHead = function(url, callback, async, force)
{
 if (!this.http) return;
 if (async == undefined) async = true;
 if (force == undefined) force = false;
 // ??? right now, we are not handling "forced" requests
 this._request("HEAD", url, callback, async, false, false);
}

AjaxHelper.prototype.abort = function()
{
 if (this.http) this.http.abort();
}

AjaxHelper.prototype.setRequestHeader = function(name, value)
{
 if (this.http) this.http.setRequestHeader(name, value);
}

AjaxHelper.prototype._request = function(method, url, callback, async, hasResponse, hasResponseXML)
{
 if (!this.http) return;
 
 // get reference to request object so we can use it in closure
 var xmlHttp = this.http, helper = this;
 xmlHttp.onreadystatechange = function()
 {
 if (!async) return;
 if (xmlHttp.readyState == 4)
 callback((hasResponse ? (hasResponseXML ? xmlHttp.responseXML : xmlHttp.responseText) : null), xmlHttp.status, xmlHttp.statusText, helper._parsedResponseHeaders());
 }
 
 try {
 // need some cross-domain privileges for Firefox
 try {
 netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
 } 
 catch (e) 
 {
 }
 
 xmlHttp.open(method, url, async);
 xmlHttp.send(null);
 if (!async) callback((hasResponse ? (hasResponseXML ? xmlHttp.responseXML : xmlHttp.responseText) : null), xmlHttp.status, xmlHttp.statusText, this._parsedResponseHeaders());
 }
 
 catch (e)
 {
 alert(e);
 }
}

AjaxHelper.prototype._parsedResponseHeaders = function()
{
 if (this.http) {
 var headersArray = new Array();
 var headers = this.http.getAllResponseHeaders().split("\n");
 for (var i = 0; i < headers.length; i++) {
 var h = headers[i].trim();
 if (h.length == 0) continue;
 // value can have ':' so do not use split here!
 var sep = h.indexOf(':');
 headersArray[h.substring(0, sep).trim()] = h.substr(sep + 1).trim();
 }
 return headersArray;
 }
 else
 return null;
}

//}}}
/***
|Name|TagglyListPlugin|
|Created by|SimonBaird|
|Location|http://simonbaird.com/mptw/#TagglyListPlugin|
|Version|1.1.1 6-Mar-06|
|Requires|See TagglyTagging|

!History
* 1.1.1 (6-Mar-2006) fixed bug with refreshAllVisible closing tiddlers being edited. Thanks Luke Blanshard.

***/

/***
!Setup and config
***/
//{{{

version.extensions.TagglyListPlugin = {
 major: 1, minor: 1, revision: 1,
 date: new Date(2006,3,6),
 source: "http://simonbaird.com/mptw/#TagglyListPlugin"
};

config.macros.tagglyList = {};
config.macros.tagglyListByTag = {};
config.macros.tagglyListControl = {};
config.macros.tagglyListWithSort = {};
config.macros.hideSomeTags = {};

// change this to your preference
config.macros.tagglyListWithSort.maxCols = 6;

config.macros.tagglyList.label = "Tagged as %0:";

// the default sort options. set these to your preference
config.macros.tagglyListWithSort.defaults = {
 sortBy:"title", // title|created|modified
 sortOrder: "asc", // asc|desc
 hideState: "show", // show|hide
 groupState: "nogroup", // nogroup|group
 numCols: 1
};

// these tags will be ignored by the grouped view
config.macros.tagglyListByTag.excludeTheseTags = [
 "systemConfig",
 "TiddlerTemplates"
];

config.macros.tagglyListControl.tags = {
 title:"sortByTitle", 
 modified: "sortByModified", 
 created: "sortByCreated",
 asc:"sortAsc", 
 desc:"sortDesc",
 hide:"hideTagged", 
 show:"showTagged",
 nogroup:"noGroupByTag",
 group:"groupByTag",
 cols1:"list1Cols",
 cols2:"list2Cols",
 cols3:"list3Cols",
 cols4:"list4Cols",
 cols5:"list5Cols",
 cols6:"list6Cols",
 cols7:"list7Cols",
 cols8:"list8Cols",
 cols9:"list9Cols" 
}

// note: should match config.macros.tagglyListControl.tags
config.macros.hideSomeTags.tagsToHide = [
 "sortByTitle",
 "sortByCreated",
 "sortByModified",
 "sortDesc",
 "sortAsc",
 "hideTagged",
 "showTagged",
 "noGroupByTag",
 "groupByTag",
 "list1Cols",
 "list2Cols",
 "list3Cols",
 "list4Cols",
 "list5Cols",
 "list6Cols",
 "list7Cols",
 "list8Cols",
 "list9Cols"
];


//}}}
/***

!Utils
***/
//{{{
// from Eric
function isTagged(title,tag) {
 var t=store.getTiddler(title); if (!t) return false;
 return (t.tags.find(tag)!=null);
}

// from Eric
function toggleTag(title,tag) {
 var t=store.getTiddler(title); if (!t || !t.tags) return;
 if (t.tags.find(tag)==null) t.tags.push(tag);
 else t.tags.splice(t.tags.find(tag),1);
}

function addTag(title,tag) {
 var t=store.getTiddler(title); if (!t || !t.tags) return;
 t.tags.push(tag);
}

function removeTag(title,tag) {
 var t=store.getTiddler(title); if (!t || !t.tags) return;
 if (t.tags.find(tag)!=null) t.tags.splice(t.tags.find(tag),1);
}

// from Udo
Array.prototype.indexOf = function(item) {
 for (var i = 0; i < this.length; i++) {
 if (this[i] == item) {
 return i;
 }
 }
 return -1;
};
Array.prototype.contains = function(item) {
 return (this.indexOf(item) >= 0);
}
//}}}
/***

!tagglyList
displays a list of tagged tiddlers. 
parameters are sortField and sortOrder
***/
//{{{

// not used at the moment...
function sortedListOfOtherTags(tiddler,thisTag) {
 var list = tiddler.tags.concat(); // so we are working on a clone..
 for (var i=0;i<config.macros.hideSomeTags.tagsToHide.length;i++) {
 if (list.find(config.macros.hideSomeTags.tagsToHide[i]) != null)
 list.splice(list.find(config.macros.hideSomeTags.tagsToHide[i]),1); // remove hidden ones
 }
 for (var i=0;i<config.macros.tagglyListByTag.excludeTheseTags.length;i++) {
 if (list.find(config.macros.tagglyListByTag.excludeTheseTags[i]) != null)
 list.splice(list.find(config.macros.tagglyListByTag.excludeTheseTags[i]),1); // remove excluded ones
 }
 list.splice(list.find(thisTag),1); // remove thisTag
 return '[[' + list.sort().join("]] [[") + ']]';
}

function sortHelper(a,b) {
 if (a == b) return 0;
 else if (a < b) return -1;
 else return +1;
}

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

 var sortBy = params[0] ? params[0] : "title"; 
 var sortOrder = params[1] ? params[1] : "asc";

 var result = store.getTaggedTiddlers(tiddler.title,sortBy);

 if (sortOrder == "desc")
 result = result.reverse();

 var leftOvers = []
 for (var i=0;i<result.length;i++) {
 leftOvers.push(result[i].title);
 }

 var allTagsHolder = {};
 for (var i=0;i<result.length;i++) {
 for (var j=0;j<result[i].tags.length;j++) {

 if ( 
 result[i].tags[j] != tiddler.title // not this tiddler
 && config.macros.hideSomeTags.tagsToHide.find(result[i].tags[j]) == null // not a hidden one
 && config.macros.tagglyListByTag.excludeTheseTags.find(result[i].tags[j]) == null // not excluded
 ) {
 if (!allTagsHolder[result[i].tags[j]])
 allTagsHolder[result[i].tags[j]] = "";
 allTagsHolder[result[i].tags[j]] += "**[["+result[i].title+"]]\n";

 if (leftOvers.find(result[i].title) != null)
 leftOvers.splice(leftOvers.find(result[i].title),1); // remove from leftovers. at the end it will contain the leftovers...
 }
 }
 }


 var allTags = [];
 for (var t in allTagsHolder)
 allTags.push(t);

 allTags.sort(function(a,b) {
 var tidA = store.getTiddler(a);
 var tidB = store.getTiddler(b);
 if (sortBy == "title") return sortHelper(a,b);
 else if (!tidA && !tidB) return 0;
 else if (!tidA) return -1;
 else if (!tidB) return +1;
 else return sortHelper(tidA[sortBy],tidB[sortBy]);
 });

 var markup = "";

 if (sortOrder == "desc") {
 allTags.reverse();
 }
 else {
 // leftovers first...
 for (var i=0;i<leftOvers.length;i++)
 markup += "*[["+leftOvers[i]+"]]\n";
 } 

 for (var i=0;i<allTags.length;i++)
 markup += "*[["+allTags[i]+"]]\n" + allTagsHolder[allTags[i]];

 if (sortOrder == "desc") {
 // leftovers last...
 for (var i=0;i<leftOvers.length;i++)
 markup += "*[["+leftOvers[i]+"]]\n";
 }

 wikify(markup,place);
}

config.macros.tagglyList.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
 var sortBy = params[0] ? params[0] : "title"; 
 var sortOrder = params[1] ? params[1] : "asc";
 var numCols = params[2] ? params[2] : 1;

 var result = store.getTaggedTiddlers(tiddler.title,sortBy);
 if (sortOrder == "desc")
 result = result.reverse();

 var listSize = result.length;
 var colSize = listSize/numCols;
 var remainder = listSize % numCols;

 var upperColsize;
 var lowerColsize;
 if (colSize != Math.floor(colSize)) {
 // it's not an exact fit so..
 lowerColsize = Math.floor(colSize);
 upperColsize = Math.floor(colSize) + 1;
 }
 else {
 lowerColsize = colSize;
 upperColsize = colSize;
 }

 var markup = "";
 var c=0;

 var newTaggedTable = createTiddlyElement(place,"table");
 var newTaggedBody = createTiddlyElement(newTaggedTable,"tbody");
 var newTaggedTr = createTiddlyElement(newTaggedBody,"tr");

 for (var j=0;j<numCols;j++) {
 var foo = "";
 var thisSize;

 if (j<remainder)
 thisSize = upperColsize;
 else
 thisSize = lowerColsize;

 for (var i=0;i<thisSize;i++) 
 foo += ( "*[[" + result[c++].title + "]]\n"); // was using splitList.shift() but didn't work in IE;

 var newTd = createTiddlyElement(newTaggedTr,"td",null,"tagglyTagging");
 wikify(foo,newTd);

 }

};

/* snip for later.....
 //var groupBy = params[3] ? params[3] : "t.title.substr(0,1)";
 //var groupBy = params[3] ? params[3] : "sortedListOfOtherTags(t,tiddler.title)";
 //var groupBy = params[3] ? params[3] : "t.modified";
 var groupBy = null; // for now. groupBy here is working but disabled for now.

 var prevGroup = "";
 var thisGroup = "";

 if (groupBy) {
 result.sort(function(a,b) {
 var t = a; var aSortVal = eval(groupBy); var aSortVal2 = eval("t".sortBy);
 var t = b; var bSortVal = eval(groupBy); var bSortVal2 = eval("t".sortBy);
 var t = b; var bSortVal2 = eval(groupBy);
 return (aSortVal == bSortVal ?
 (aSortVal2 == bSortVal2 ? 0 : (aSortVal2 < bSortVal2 ? -1 : +1)) // yuck
 : (aSortVal < bSortVal ? -1 : +1));
 });
 }

 if (groupBy) {
 thisGroup = eval(groupBy);
 if (thisGroup != prevGroup)
 markup += "*[["+thisGroup+']]\n';
 markup += "**[["+t.title+']]\n';
 prevGroup = thisGroup;
 }



*/


//}}}

/***

!tagglyListControl
Use to make the sort control buttons
***/
//{{{

function getSortBy(title) {
 var tiddler = store.getTiddler(title);
 var defaultVal = config.macros.tagglyListWithSort.defaults.sortBy;
 if (!tiddler) return defaultVal;
 var usetags = config.macros.tagglyListControl.tags;
 if (tiddler.tags.contains(usetags["title"])) return "title";
 else if (tiddler.tags.contains(usetags["modified"])) return "modified";
 else if (tiddler.tags.contains(usetags["created"])) return "created";
 else return defaultVal;
}

function getSortOrder(title) {
 var tiddler = store.getTiddler(title);
 var defaultVal = config.macros.tagglyListWithSort.defaults.sortOrder;
 if (!tiddler) return defaultVal;
 var usetags = config.macros.tagglyListControl.tags;
 if (tiddler.tags.contains(usetags["asc"])) return "asc";
 else if (tiddler.tags.contains(usetags["desc"])) return "desc";
 else return defaultVal;
}

function getHideState(title) {
 var tiddler = store.getTiddler(title);
 var defaultVal = config.macros.tagglyListWithSort.defaults.hideState;
 if (!tiddler) return defaultVal;
 var usetags = config.macros.tagglyListControl.tags;
 if (tiddler.tags.contains(usetags["hide"])) return "hide";
 else if (tiddler.tags.contains(usetags["show"])) return "show";
 else return defaultVal;
}

function getGroupState(title) {
 var tiddler = store.getTiddler(title);
 var defaultVal = config.macros.tagglyListWithSort.defaults.groupState;
 if (!tiddler) return defaultVal;
 var usetags = config.macros.tagglyListControl.tags;
 if (tiddler.tags.contains(usetags["group"])) return "group";
 else if (tiddler.tags.contains(usetags["nogroup"])) return "nogroup";
 else return defaultVal;
}

function getNumCols(title) {
 var tiddler = store.getTiddler(title);
 var defaultVal = config.macros.tagglyListWithSort.defaults.numCols; // an int
 if (!tiddler) return defaultVal;
 var usetags = config.macros.tagglyListControl.tags;
 for (var i=1;i<=config.macros.tagglyListWithSort.maxCols;i++)
 if (tiddler.tags.contains(usetags["cols"+i])) return i;
 return defaultVal;
}


function getSortLabel(title,which) {
 // TODO. the strings here should be definable in config
 var by = getSortBy(title);
 var order = getSortOrder(title);
 var hide = getHideState(title);
 var group = getGroupState(title);
 if (which == "hide") return (hide == "show" ? "−" : "+"); // 0x25b8;
 else if (which == "group") return (group == "group" ? "normal" : "grouped");
 else if (which == "cols") return "cols±"; // &plusmn;
 else if (by == which) return which + (order == "asc" ? "↓" : "↑"); // &uarr; &darr;
 else return which;
}

function handleSortClick(title,which) {
 var currentSortBy = getSortBy(title);
 var currentSortOrder = getSortOrder(title);
 var currentHideState = getHideState(title);
 var currentGroupState = getGroupState(title);
 var currentNumCols = getNumCols(title);

 var tags = config.macros.tagglyListControl.tags;

 // if it doesn't exist, lets create it..
 if (!store.getTiddler(title))
 store.saveTiddler(title,title,"",config.options.txtUserName,new Date(),null);

 if (which == "hide") {
 // toggle hide state
 var newHideState = (currentHideState == "hide" ? "show" : "hide");
 removeTag(title,tags[currentHideState]);
 if (newHideState != config.macros.tagglyListWithSort.defaults.hideState)
 toggleTag(title,tags[newHideState]);
 }
 else if (which == "group") {
 // toggle hide state
 var newGroupState = (currentGroupState == "group" ? "nogroup" : "group");
 removeTag(title,tags[currentGroupState]);
 if (newGroupState != config.macros.tagglyListWithSort.defaults.groupState)
 toggleTag(title,tags[newGroupState]);
 }
 else if (which == "cols") {
 // toggle num cols
 var newNumCols = currentNumCols + 1; // confusing. currentNumCols is an int
 if (newNumCols > config.macros.tagglyListWithSort.maxCols || newNumCols > store.getTaggedTiddlers(title).length)
 newNumCols = 1;
 removeTag(title,tags["cols"+currentNumCols]);
 if (("cols"+newNumCols) != config.macros.tagglyListWithSort.defaults.groupState)
 toggleTag(title,tags["cols"+newNumCols]);
 }
 else if (currentSortBy == which) {
 // toggle sort order
 var newSortOrder = (currentSortOrder == "asc" ? "desc" : "asc");
 removeTag(title,tags[currentSortOrder]);
 if (newSortOrder != config.macros.tagglyListWithSort.defaults.sortOrder)
 toggleTag(title,tags[newSortOrder]);
 }
 else {
 // change sortBy only
 removeTag(title,tags["title"]);
 removeTag(title,tags["created"]);
 removeTag(title,tags["modified"]);

 if (which != config.macros.tagglyListWithSort.defaults.sortBy)
 toggleTag(title,tags[which]);
 }

 store.setDirty(true); // save is required now.
 story.refreshTiddler(title,false,true); // force=true
}

config.macros.tagglyListControl.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
 var onclick = function(e) {
 if (!e) var e = window.event;
 handleSortClick(tiddler.title,params[0]);
 e.cancelBubble = true;
 if (e.stopPropagation) e.stopPropagation();
 return false;
 };
 createTiddlyButton(place,getSortLabel(tiddler.title,params[0]),"Click to change sort options",onclick,params[0]=="hide"?"hidebutton":"button");
}
//}}}
/***

!tagglyListWithSort
put it all together..
***/
//{{{
config.macros.tagglyListWithSort.handler = function (place,macroName,params,wikifier,paramString,tiddler) {
 if (tiddler && store.getTaggedTiddlers(tiddler.title).length > 0)
 // todo make this readable
 wikify(
 "<<tagglyListControl hide>>"+
 (getHideState(tiddler.title) != "hide" ? 
 '<html><span class="tagglyLabel">'+config.macros.tagglyList.label.format([tiddler.title])+' </span></html>'+
 "<<tagglyListControl title>><<tagglyListControl modified>><<tagglyListControl created>><<tagglyListControl group>>"+(getGroupState(tiddler.title)=="group"?"":"<<tagglyListControl cols>>")+"\n" + 
 "<<tagglyList" + (getGroupState(tiddler.title)=="group"?"ByTag ":" ") + getSortBy(tiddler.title)+" "+getSortOrder(tiddler.title)+" "+getNumCols(tiddler.title)+">>" // hacky
 // + \n----\n" +
 //"<<tagglyList "+getSortBy(tiddler.title)+" "+getSortOrder(tiddler.title)+">>"
 : ""),
 place,null,tiddler);
}

//}}}
/***

!hideSomeTags
So we don't see the sort tags.
(note, they are still there when you edit. Will that be too annoying?
***/
//{{{

// based on tags.handler
config.macros.hideSomeTags.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
 var theList = createTiddlyElement(place,"ul");
 if(params[0] && store.tiddlerExists[params[0]])
 tiddler = store.getTiddler(params[0]);
 var lingo = config.views.wikified.tag;
 var prompt = tiddler.tags.length == 0 ? lingo.labelNoTags : lingo.labelTags;
 createTiddlyElement(theList,"li",null,"listTitle",prompt.format([tiddler.title]));
 for(var t=0; t<tiddler.tags.length; t++)
 if (!this.tagsToHide.contains(tiddler.tags[t])) // this is the only difference from tags.handler...
 createTagButton(createTiddlyElement(theList,"li"),tiddler.tags[t],tiddler.title);

}

//}}}
/***

!Refresh everything when we save a tiddler. So the tagged lists never get stale. Is this too slow???
***/
//{{{

function refreshAllVisible() {
 story.forEachTiddler(function(title,element) {
 if (element.getAttribute("dirty") != "true") 
 story.refreshTiddler(title,false,true);
 });
}

story.saveTiddler_orig_mptw = story.saveTiddler;
story.saveTiddler = function(title,minorUpdate) {
 var result = this.saveTiddler_orig_mptw(title,minorUpdate);
 refreshAllVisible();
 return result;
}

store.removeTiddler_orig_mptw = store.removeTiddler;
store.removeTiddler = function(title) {
 this.removeTiddler_orig_mptw(title);
 refreshAllVisible();
}

setStylesheet(".tagglyTagged .listTitle { display:none; }","tagglyTaggedListTitle");
//}}}

// // <html>&#x25b8;&#x25be;&minus;&plusmn;</html>
/***
To use, add {{{[[TagglyTaggingStyles]]}}} to your StyleSheet tiddler, or you can just paste the CSS in directly. See also ViewTemplate, EditTemplate and TagglyTagging.
***/
/*{{{*/
.tagglyTagged li.listTitle { display:none;}
.tagglyTagged li { display: inline; font-size:90%; }
.tagglyTagged ul { margin:0px; padding:0px; }
.tagglyTagging { padding-top:0.5em; }
.tagglyTagging li.listTitle { display:none;}
.tagglyTagging ul { margin-top:0px; padding-top:0.5em; padding-left:2em; margin-bottom:0px; padding-bottom:0px; }

/* .tagglyTagging .tghide { display:inline; } */

.tagglyTagging { vertical-align: top; margin:0px; padding:0px; }
.tagglyTagging table { margin:0px; padding:0px; }


.tagglyTagging .button { display:none; margin-left:3px; margin-right:3px; }
.tagglyTagging .button, .tagglyTagging .hidebutton { color:#aaa; font-size:90%; border:0px; padding-left:0.3em;padding-right:0.3em;}
.tagglyTagging .button:hover, .hidebutton:hover { background:#eee; color:#888; }
.selected .tagglyTagging .button { display:inline; }

.tagglyTagging .hidebutton { color:white; } /* has to be there so it takes up space */
.selected .tagglyTagging .hidebutton { color:#aaa }

.tagglyLabel { color:#aaa; font-size:90%; }

.tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }
.tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}
.tagglyTagging ul ul li {margin-left:0.5em; }

.editLabel { font-size:90%; padding-top:0.5em; }
/*}}}*/
[img[pics/teethrelicprint1.jpg]]
hollow formed and welded steel, alunimun casting -sand, paint, artist's wisdom teeth
The consensual hyper-present media overlay is coming.  One could say certain elements of the current web will become it's vital organs. True some will go vestigial over time– and it's perhaps too soon to predict which ones will. The trend is solid though; continuous extenuation of the digital sensorium into all aspects of life.

Some of us will abhor this ubiquity – just as certain religious sects rejected the electricity and internal combustion engines of the previous century.  The question is, will the dissenters even have the choice to opt out? It's easy for me to imagine a 'war on terror' fueled police state, that mandates full digital participation by its citizens. Cradle to grave surveillance in order to facilitate a dubious monitoring  of heath, legal, and economic safety.  Scary stuff. 

On the other hand would be the equally dubious utopia of digital rejection and or disenfranchisement.  You want to be a Luddite? -  fine – the state will just forget about you. Such 'little people' with no access to the hyper-mediated civic dialog could disappear – or be disappeared.  Equally scary.

The trick is, (I believe) to imagine a counter reality with blends these two polarities into a future that incorporates the best of both while steering clear of the degrading aspects of either.  That will take some work. The crucial first rung of this platform – is something we now take for granted – but should seriously be considered for inclusion in the Bill of Rights. The right to turn OFF.  
[img[pics/knightsthumb1.jpg][/pics/knightwiki1.jpg]]<<imagebox>>
3D Rendering

<html><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/wAiAhol6TqQ&hl=en&color1=0x234900&color2=0x4e9e00"></param><embed src="http://www.youtube.com/v/wAiAhol6TqQ&hl=en&color1=0x234900&color2=0x4e9e00" type="application/x-shockwave-flash" width="425" height="344"></embed></object></html>
/***
|''Name:''|TiddlerListMacro|
|''Version:''|2.0.10 (01-May-2006)|
|''Source''|http://jackparke.googlepages.com/jtw.html#TiddlerListMacro ([[del.icio.us|http://del.icio.us/post?url=http://jackparke.googlepages.com/jtw.html%23TiddlerListMacro]])|
|''Author:''|[[Jack]]|
|''Type:''|Macro|
|''Documentation:''|TiddlerListMacroDocumentation|
!Usage
{{{<<tiddlerList parameter1:"value1" parameter2:"value2" ...>>}}}
See TiddlerListMacroDocumentation and TiddlerListMacroExamples
!Code
***/
//{{{




version.extensions.tiddlerList = {major: 2, minor: 0, revision: 10, date: new Date("May 2, 2006")};
// template = [header, item, seperator, group, footer]
config.macros.tiddlerList={
 formats : {list:true, nlist:true, span:true, stack:true, csv:true, table:true},
 templates : {
 list : [ "%0\n", "* %0\n", "", "%group\n", "%0\n"],
 nlist : [ "%0", "# %0\n", "", "%group\n", "%0\n"],
 span : [ "%0", "%0", " ", "%group", "%0"],
 stack : [ "%0", "%0", "\n", "%group", "%0"],
 csv : [ "%0", "%0", ", ", "%0", "%0\n"],
 table : ["|!%0|\n", "|%0|\n", "", "|%group|\n", "|%0|\n"]
 },
 dateFormat : "DD MMM YYYY"
}

if (!gCurrentTiddler)
 var gCurrentTiddler;

config.macros.tiddlerList.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
 // Some globals
 var count=0, groupCount=0, theGroup="", lastGroup="";
 var currentTiddler = tiddler;
 gCurrentTiddler = tiddler;
 var listWikiText="";
 var formats = this.formats;
 
 // SQL-Like parameters
 var parameters = paramString.parseParams("name",null,true);
 var pTags = parameters[0]["tags"]?parameters[0]["tags"][0].split(","):[];
 var pTags2 = parameters[0]["tags2"]?parameters[0]["tags2"][0].readBracketedList():[]; // mptw
 var pOrder = parameters[0]["order"]?parameters[0]["order"][0]:"title";
 var pTop = parameters[0]["top"]?parameters[0]["top"][0]:-1;
 var pText = parameters[0]["text"]?parameters[0]["text"][0]:"";
 var pTitle = parameters[0]["title"]?parameters[0]["title"][0]:"";
 var pSearch = parameters[0]["search"]?parameters[0]["search"][0]:"";
 var pFilter = parameters[0]["filter"]?parameters[0]["filter"][0]:"";
 var pHeader = parameters[0]["header"]?paramFormat(parameters[0]["header"][0]):"";
 var pFooter = parameters[0]["footer"]?paramFormat(parameters[0]["footer"][0]):"";
 var pGroup = parameters[0]["group"]?parameters[0]["group"][0]:"";
 var pDateFormat = parameters[0]["dateFormat"]?parameters[0]["dateFormat"][0]:this.dateFormat;
 var pCustomParameter = parameters[0]["customParameter"]?parameters[0]["customParameter"][0]:"";
 var pFormat = parameters[0]["format"]?parameters[0]["format"][0]:"list";
 var pTagsMode = parameters[0]["tagsmode"]?parameters[0]["tagsmode"]:"all"; // mptw
 var pTagsLogic = parameters[0]["tagslogic"]?parameters[0]["tagslogic"][0]:""; // mptw
 pFormat = formats[pFormat]?pFormat:"list"
 
 // Seperator
 var pSeperator = parameters[0]["seperator"]?paramFormat(parameters[0]["seperator"][0]):this.templates[pFormat][2]

 // Template for group
 var pGroupTemplate = this.templates[pFormat][3];
 if (parameters[0]["groupTemplate"])
 pGroupTemplate = paramFormat(parameters[0]["groupTemplate"][0])
 pGroupTemplate = pGroupTemplate.replace("$))", ">>")
 
 // Template for group footer
 var pGroupFooterTemplate = "";
 if (parameters[0]["groupFooterTemplate"])
 pGroupFooterTemplate = paramFormat(parameters[0]["groupFooterTemplate"][0])
 pGroupFooterTemplate = pGroupFooterTemplate.replace("$))", ">>")
 
 // Template for item
 var pItemTemplate = this.templates[pFormat][1];
 if (parameters[0]["itemTemplate"])
 pItemTemplate = paramFormat(parameters[0]["itemTemplate"][0])
 pItemTemplate = pItemTemplate.replace("$))", ">>").replace("%link", "%0").replace("%item", "%1").replace("%abstract", "%2").replace("%text", "%3").replace("%created", "%4").replace("%modified", "%5").replace("%modifier", "%6").replace("%group", "%7").replace("%title", "%8").replace("%tags", "%9").replace("%nolink", "%10").replace("%custom", "%11")
 // Template for footer
 var pFooterTemplate = this.templates[pFormat][4].replace("%count", "%1")

 // Get all tiddlers
 var tiddlers = store.reverseLookup("tags","excludeLists",false);

 // Sorting
 if(!pOrder)
 pOrder = "title";
 if (pOrder.match(/^\-/i)) {
 pOrder = pOrder.substr(1)
 var sortDesc = true;
 }
 if (sortDesc)
 tiddlers.sort(function (a,b) {if(a[pOrder] == b[pOrder]) return(0); else return (a[pOrder] > b[pOrder]) ? -1 : +1; });
 else
 tiddlers.sort(function (a,b) {if(a[pOrder] == b[pOrder]) return(0); else return (a[pOrder] < b[pOrder]) ? -1 : +1; });

 // Header
 if (pHeader)
 listWikiText += formatItem(this.templates[pFormat][0], [pHeader], pFormat)
 
 for(var t=0; t<tiddlers.length; t++) {
 tiddler = tiddlers[t];
 if (pTop==-1 || count<pTop) {
 if (pText=="" || tiddler.text.match(pText)) {
 if (pTitle=="" || tiddler.title.match(pTitle)) {
 if (pSearch=="" || (tiddler.title.match(pSearch) || tiddler.text.match(pSearch))) {
 if (pFilter=="" || eval(pFilter)) {
 if (pTags.length==0 || compareArrays(tiddler.tags, pTags, pTagsMode)) { // mptw
 if (pTags2.length==0 || compareArrays(tiddler.tags, pTags2, pTagsMode)) { // mptw
 if (pTagsLogic=="" || eval(pTagsLogic.interpretTagsLogic())) { // mptw
 count++;
 // Grouping
 if (pGroup) {
 theGroup = eval(pGroup);
 if(theGroup != lastGroup) {
 groupCount++;
 if (pGroupFooterTemplate && groupCount>1)
 listWikiText += pGroupFooterTemplate.replace("%group", theGroup)
 listWikiText += pGroupTemplate.replace("%group", theGroup)
 lastGroup = theGroup;
 }
 }
 // Seperators
 if (count>1) listWikiText += pSeperator;
 //Plaintext title
 var noLink = tiddler.title.match(config.textPrimitives.wikiLink)?"~" + tiddler.title:tiddler.title;
 // Custom parameter
 if (pCustomParameter)
 var custom="";
 try {
 custom = eval(pCustomParameter)
 } catch (e) {}
 // List individual tiddler
 listWikiText += formatItem(pItemTemplate,["[[" + tiddler.title + "]]",count,tiddler.text.substr(0,100),tiddler.text,tiddler.created.formatString(pDateFormat),tiddler.modified.formatString(pDateFormat),tiddler.modifier,theGroup,tiddler.title,tiddler.tags.join(" "),noLink,custom], pFormat)
 } // mptw
 } // mptw
 }
 }
 }
 }
 }
 }
 }
 
 // Last group footer
 if (pGroup && pGroupFooterTemplate && count>0)
 listWikiText += pGroupFooterTemplate.replace("%group", theGroup)

 // Footer
 if (pFooter) {
 pFooter = pFooter.replace("%count", count)
 listWikiText += formatItem(pFooterTemplate, [pFooter], pFormat)
 }
 
 // Render result
 if (!parameters[0]["debug"])
 wikify(listWikiText,place, null, currentTiddler)
 else
 place.innerHTML = "<textarea style=\"width:100%;\" rows=30>" + listWikiText + "</textarea>"
 
 
 // Local functions
 
 function paramFormat(param) {
 // Allow "\n" in non evalled parameters
 return param.replace(/\\n/g, "\n");
 }
 
 function formatItem(template, values, format) {
 // Fill template with values (depending on list format)
 if (format.match(/table/) && values[0].match(/\|/))
 return ("%0\n").format(values)
 else
 return template.format(values)
 }
 
 function compareArrays(array, values, logic) {
 // Compare items in array with AND("all") or OR("any") logic
 var matches=0;
 for(var v=0; v<values.length; v++)
 if(values[v].trim().match(/^\-/) && !array.contains(values[v].trim().substr(1))) // mptw
 matches++;
 else if (array.contains(values[v].trim())) // mptw
 matches++;
 return ((logic=="all" && matches==values.length) || (logic!="all" && matches>0))
 }
 
}

String.prototype.prettyTrim = function(len,prefix,postfix) {
 var result = this.trim().replace(/\r\n/g,' ').replace(/\n/g,' ');
 if (!prefix) prefix = '';
 if (!postfix) postfix = '';
 if (result.length > len - 3)
 return prefix + result.substr(0,len) + '...' + postfix;
 else if (result.length > 0)
 return prefix + result + postfix;
 else
 return result;
}


String.prototype.interpretTagsLogic = function() {
 // example expression
 // "( [[A Tag]] || Tag2 ) && ! Tag3"
 // must have spaces between everything
 var splitExpression = this.readBracketedList(false); // false means not unique. thanks Jeremy!!
 var asIs = ['(',')','||','&&','!']; // better not have any tags called those!
 var translatedExpression = "";
 for (var i=0;i<splitExpression.length;i++)
 if (asIs.contains(splitExpression[i]))
 translatedExpression += splitExpression[i];
 else
 translatedExpression += "tiddler.hasTag('"+splitExpression[i]+"')";
 //alert(translatedExpression);
 return translatedExpression;
}


//}}}
/***
|''Name:''|TiddlersBarPlugin|
|''Description:''|A bar to switch between tiddlers through tabs (like browser tabs bar).|
|''Version:''|1.2.3|
|''Date:''|Jan 08,2008|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
!Demos
On [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], open several tiddlers to use the tabs bar.
!Installation
#import this tiddler from [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] (tagged as systemConfig)
#save and reload
#''if you're using a custom [[PageTemplate]]'', add {{{<div id='tiddlersBar' refresh='content' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>}}} before {{{<div id='tiddlerDisplay'></div>}}}
#optionally, adjust StyleSheetTiddlersBar
!Tips
*Doubleclick on the tiddlers bar (where there is no tab) create a new tiddler.
*Tabs include a button to close {{{x}}} or save {{{!}}} their tiddler.
*By default, click on the current tab close all others tiddlers.
!Configuration options 
<<option chkDisableTabsBar>> Disable the tabs bar (to print, by example).
<<option chkHideTabsBarWhenSingleTab >> Automatically hide the tabs bar when only one tiddler is displayed. 
<<option txtSelectedTiddlerTabButton>> ''selected'' tab command button.
!Code
***/
//{{{
config.options.chkDisableTabsBar = config.options.chkDisableTabsBar ? config.options.chkDisableTabsBar : false;
config.options.chkHideTabsBarWhenSingleTab  = config.options.chkHideTabsBarWhenSingleTab  ? config.options.chkHideTabsBarWhenSingleTab  : false;
config.options.txtSelectedTiddlerTabButton = config.options.txtSelectedTiddlerTabButton ? config.options.txtSelectedTiddlerTabButton : "closeOthers";
config.macros.tiddlersBar = {
	tooltip : "see ",
	tooltipClose : "click here to close this tab",
	tooltipSave : "click here to save this tab",
	promptRename : "Enter tiddler new name",
	currentTiddler : "",
	previousState : false,
	tabsAnimationSource : null, //use document.getElementById("tiddlerDisplay") if you need animation on tab switching.
	handler: function(place,macroName,params) {
		if (config.macros.tiddlersBar.isShown())
			story.forEachTiddler(function(title,e){
				if (title==config.macros.tiddlersBar.currentTiddler){
					var d = createTiddlyElement(null,"span",null,"tab tabSelected");
					config.macros.tiddlersBar.createActiveTabButton(d,title);
				}
				else {
					var d = createTiddlyElement(place,"span",null,"tab tabUnselected");
					var btn = createTiddlyButton(d,title,config.macros.tiddlersBar.tooltip + title,config.macros.tiddlersBar.onSelectTab);
					btn.setAttribute("tiddler", title);
				}
				var isDirty =story.isDirty(title);
				var c = createTiddlyButton(d,isDirty ?"!":"x",isDirty?config.macros.tiddlersBar.tooltipSave:config.macros.tiddlersBar.tooltipClose, isDirty ? config.macros.tiddlersBar.onTabSave : config.macros.tiddlersBar.onTabClose,"tabButton");
				c.setAttribute("tiddler", title);
				if (place.childNodes) {
					place.insertBefore(document.createTextNode(" "),place.firstChild); // to allow break line here when many tiddlers are open
					place.insertBefore(d,place.firstChild); 
				}
				else place.appendChild(d);
			})
	}, 
	refresh: function(place,params){
		removeChildren(place);
		config.macros.tiddlersBar.handler(place,"tiddlersBar",params);
		if (config.macros.tiddlersBar.previousState!=config.macros.tiddlersBar.isShown()) {
			story.refreshAllTiddlers();
			if (config.macros.tiddlersBar.previousState) story.forEachTiddler(function(t,e){e.style.display="";});
			config.macros.tiddlersBar.previousState = !config.macros.tiddlersBar.previousState;
		}
	},
	isShown : function(){
		if (config.options.chkDisableTabsBar) return false;
		if (!config.options.chkHideTabsBarWhenSingleTab) return true;
		var cpt=0;
		story.forEachTiddler(function(){cpt++});
		return (cpt>1);
	},
	selectNextTab : function(){  //used when the current tab is closed (to select another tab)
		var previous="";
		story.forEachTiddler(function(title){
			if (!config.macros.tiddlersBar.currentTiddler) {
				story.displayTiddler(null,title);
				return;
			}
			if (title==config.macros.tiddlersBar.currentTiddler) {
				if (previous) {
					story.displayTiddler(null,previous);
					return;
				}
				else config.macros.tiddlersBar.currentTiddler=""; 	// so next tab will be selected
			}
			else previous=title;
			});		
	},
	onSelectTab : function(e){
		var t = this.getAttribute("tiddler");
		if (t) story.displayTiddler(null,t);
		return false;
	},
	onTabClose : function(e){
		var t = this.getAttribute("tiddler");
		if (t) {
			if(story.hasChanges(t) && !readOnly) {
				if(!confirm(config.commands.cancelTiddler.warning.format([t])))
				return false;
			}
			story.closeTiddler(t);
		}
		return false;
	},
	onTabSave : function(e) {
		var t = this.getAttribute("tiddler");
		if (!e) e=window.event;
		if (t) config.commands.saveTiddler.handler(e,null,t);
		return false;
	},
	onSelectedTabButtonClick : function(event,src,title) {
		var t = this.getAttribute("tiddler");
		if (!event) event=window.event;
		if (t && config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton])
			config.commands[config.options.txtSelectedTiddlerTabButton].handler(event, src, t);
		return false;
	},
	onTiddlersBarAction: function(event) {
		var source = event.target ? event.target.id : event.srcElement.id; // FF uses target and IE uses srcElement;
		if (source=="tiddlersBar") story.displayTiddler(null,'New Tiddler',DEFAULT_EDIT_TEMPLATE,false,null,null);
	},
	createActiveTabButton : function(place,title) {
		if (config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton]) {
			var btn = createTiddlyButton(place, title, config.commands[config.options.txtSelectedTiddlerTabButton].tooltip ,config.macros.tiddlersBar.onSelectedTabButtonClick);
			btn.setAttribute("tiddler", title);
		}
		else
			createTiddlyText(place,title);
	}
}

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

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

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

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

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

config.shadowTiddlers.PageTemplate=config.shadowTiddlers.PageTemplate.replace(/<div id='tiddlerDisplay'><\/div>/m,"<div id='tiddlersBar' refresh='content' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>\n<div id='tiddlerDisplay'></div>");

store.addNotification("tiddlersBar",function(){config.macros.tiddlersBar.refresh(document.getElementById("tiddlersBar"))});

//}}}
!!Images in a lightbox:
[img[http://nioncapul.net/pics/erzuilieprintthumb1.jpg][http://nioncapul.net/pics/erzuilieprint1.jpg]]<<imagebox>>

Let's try a text link:

[[click me|triad.jpg]]<<imagebox>>

----
!Html div in a lightbox:

----
!Tiddlers in a lightbox:

Let's give it a go:

<<tiddlerbox "menu" "MainMenu" "Thats my main menu, and the links work!">>

<<tiddlerbox "sidebar" "Sidebar" "Thats my sidebar!" 300 500>>

----

[[Full Documentation|TiddlyLightBoxDoc]]
[[TiddlyLightBoxPlugin]]
/***
|''Name:''|TiddlyLightBox|
|''Date:''|Jan 1, 2006|
|''Version:''|1.0 beta|
|''Author:''|Saq Imtiaz|
|''Location:''|http://lewcid.googlepages.com/lewcid.html#TiddlyLightBoxPlugin|
|''Documentation:''|http://lewcid.googlepages.com/lewcid.html#TiddlyLightBoxDocs|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|''Based on:''|DC3.LightBox<br>Light Box Gone Wild <br>Ibox|

!!Code
***/
//{{{
config.macros.imagebox ={};
config.macros.imagebox.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
    var e = place.lastChild;
    e.onclick = function(){TiddlyLightBox.initBox('image',this,params[1],params[2],params[0]);return false;};
}

config.macros.divbox ={};
config.macros.divbox.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
    if (params[0]!=".")
        createTiddlyButton(place,params[0],params[0],function(){TiddlyLightBox.initBox('html',params[1],params[3],params[4],params[2]);return false;});
    else
        {
        var e = place.lastChild;
        e.onclick = function(){TiddlyLightBox.initBox('html',params[1],params[3],params[4],params[2]);return false;};
        }
}

config.macros.tiddlerbox ={}
config.macros.tiddlerbox.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{
    config.macros.divbox.handler(place,macroName,[params[0],"tiddler:"+params[1],params[2],params[3],params[4]]);
    return false;
}

store.addNotification("TiddlyLightBoxStyles",refreshStyles);

if (!window.TiddlyLightBox)
    window.TiddlyLightBox = {};
    var loadingImage = "indicator.gif";
    window.TiddlyLightBox =
    {
    _curBox: null, // [sentinel]

    lightBoxHtml : '<div id="lightBoxOverlay" onclick="TiddlyLightBox.hideBox()" style="display:none"></div><div id="lightboxprogress" style="display:none;"><img src=\''+loadingImage+'\' alt=\'loading\' style="width:128px;height:128px;"></div><div class="lightBox" id="lightBox" style="display:none"><div id="lightBoxContent"></div><div id="lightBoxTitle">This is a title</div><div id="lightBoxClose"><a href:"#" onclick="TiddlyLightBox.hideBox();return false;">Click to close</a></div></div>',

    createBoxWrapper : function()
        {
        var wrapper = createTiddlyElement(document.getElementsByTagName("body")[0],"div","tiddlyLightBoxWrapper");
        wrapper.innerHTML = this.lightBoxHtml;
        },

    initBox : function(contentType,url,w,h,text)
        {
        if (this._curBox)
            return;
        this.showProgress();
        this.hideSelects("hidden");
        this.showBg();
        this._curBox = true;
        this.sizeTheBox(contentType,w,h);
        if (contentType == 'image')
            this.showImage(url,text);
        else if (contentType == 'html')
            this.showHtml(url,text);
        return false;
        },
        
    sizeTheBox : function(contentType,w,h)
        {
        var box = document.getElementById("lightBoxContent");
        if (w && isNaN(parseInt(w)))
            {
            addClass(box,w);
            }
        else if (w ||h || contentType == 'html')
            {
            box.style.width = w? w+ "px" : "800px";
            box.style.height = h? h+ "px" : "600px";
            if (contentType=='image')
                setStylesheet("#lightBoxContent img{height:100%;width:100%;}","lightBoxImageSizeHack");
            }
        },

    showProgress : function()
        {
        var progress = document.getElementById("lightboxprogress");
        progress.style.display='';
        this._center(progress);
        },
    
    hideProgress: function()
        {
        var progress = document.getElementById("lightboxprogress");
        progress.style.display='none';
        },

    //this function lifted from Lightbox Gone Wild
    hideSelects: function(visibility)
        {
        var selects = document.getElementsByTagName('select');
        for(i = 0; i < selects.length; i++)
            {
            selects[i].style.visibility = visibility;
            }
        },

    showBg: function()
        {
        var overlay = document.getElementById('lightBoxOverlay');
        if (config.browser.isIE)
            {
            overlay.style.height = Math.max(document.documentElement.scrollHeight,document.documentElement.offsetHeight);
            overlay.style.width = document.documentElement.scrollWidth;
            }
        overlay.style.display = 'block';
        },

    showImage: function (url,text)
        {
        imgPreloader = new Image();
        imgPreloader.onload = function ()
            {
            var lb = document.getElementById("lightBoxContent");
            lb.innerHTML = "<img src="+url+">";
            lb.onclick = function(){TiddlyLightBox.hideBox();return false;};
            TiddlyLightBox.posBox(text);
            };
        imgPreloader.src = url;
        },
        
    showHtml : function(theID,text)
        {
        var lb = document.getElementById("lightBoxContent");
        if (theID.indexOf("tiddler:")==-1)
             lb.innerHTML = document.getElementById(theID).innerHTML;
        else
            { 
             wikify(store.getTiddlerText(theID.replace("tiddler:","")),lb);
             lb.className='tiddler';
            }
        lb.style.overflow = "auto";
        this.posBox(text);
        },

    posBox: function(text)
       {
       this.setTitle(text);
       this.hideProgress();
       var lb = document.getElementById("lightBox");
       lb.style.display = "";
       lb.style.visibilty = "hidden";
       lb.style.position = "absolute";
       this._center(lb);
       if(!TiddlyLightBox._curBox) return;
       lb.style.visibility = "visible";
       lb.style.display = "block";
       },

     setTitle: function(text)
        {
        document.getElementById("lightBoxTitle").innerHTML=  (text==undefined)? '': text;
        },

    _center: function(lb)
       {
       var lbSize = new TiddlyLightBox.getElementSize(lb);
       lb.style.left = (Math.round(findWindowWidth()/2) - (lbSize.width /2) + findScrollX())+'px';
       lb.style.top = (Math.round(findWindowHeight()/2) - (lbSize.height /2) + findScrollY())+'px';
       },

    //this function lifted from Ibox
    getElementSize : function(elem)
       {
       this.width = elem.offsetWidth || elem.style.pixelWidth;
       this.height = elem.offsetHeight || elem.style.pixelHeight;
       },

     hideBox: function()
         {
         if(!this._curBox)
             return;
         document.getElementById("tiddlyLightBoxWrapper").innerHTML= this.lightBoxHtml;
         setStylesheet("","lightBoxImageSizeHack");
         this._curBox = null;
         return false;
         }
}

TiddlyLightBox.createBoxWrapper();

Story.prototype.findContainingTiddler = function(e)
{
    while(e && (!hasClass(e,"tiddler") || !e.getAttribute("tiddler")))
        e = e.parentNode;
    return(e);
}

config.shadowTiddlers.TiddlyLightBoxStyles="/*{{{*/\n#lightBoxOverlay {\n position:absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 90; \n background-color: #206d39;\n -moz-opacity: 0.75;\n opacity: .75;\n filter: alpha(opacity=75);\n}\n#lightBoxOverlay[id]{ \n position: fixed;\n}\n\n#lightboxprogress { \n margin:0;padding:0;\n position: absolute;\n z-index:95;\n}\n\ndiv.lightBox {\n background: #fff;\n color: #fff;\n border: 4px solid #525252;\npadding:20px 20px 25px 20px; position:absolute; z-index:99;\n}\n\n#lightBoxClose {text-align:right; color:#000; font-size:1.0em; position:absolute; bottom:6px; right:20px;}\n#lightBoxClose a{color:#666; border-bottom:1px solid #666;cursor:pointer;}\n#lightBoxClose a:hover {color:#111; border-bottom:1px solid #666; cursor:pointer; background:transparent;}\n\n#lightBoxContent {border:1px solid #525252;color:#000; background:#fff;}\n#lightBox .tiddler {background:#fff;}\n\n#lightBoxContent img {border:0;margin:0;padding:0;display:block;cursor:pointer;}\n\n#lightBoxTitle {padding:0px; font-weight:bold; position:absolute; left:20px;bottom:6px; font-size:1.1em; color:#000;}\n\n/*}}}*/";
//}}}
/***

|Name|ToggleSideBarMacro|
|Created by|SaqImtiaz|
|Location|http://lewcid.googlepages.com/lewcid.html#ToggleSideBarMacro|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Provides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed.

!Demo
<<toggleSideBar "Toggle Sidebar">>

!Usage:
{{{<<toggleSideBar>>}}} <<toggleSideBar>>
additional options:
{{{<<toggleSideBar label tooltip show/hide>>}}} where:
label = custom label for the button,
tooltip = custom tooltip for the button,
show/hide = use one or the other, determines whether the sidebar is shown at first or not.
(default is to show the sidebar)

You can add it to your tiddler toolbar, your MainMenu, or where you like really.
If you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:
{{{ .HideSideBarButton {float:right;} }}}

!History
*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour. 
*20-07-06: version 0.11
*27-04-06: version 0.1: working.

!Code
***/
//{{{
config.macros.toggleSideBar={};

config.macros.toggleSideBar.settings={
 styleHide : "#sidebar { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 1em;}\n"+"",
 styleShow : " ",
 arrow1: "«",
 arrow2: "»"
};

config.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
 var tooltip= params[1]||'toggle sidebar';
 var mode = (params[2] && params[2]=="hide")? "hide":"show";
 var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
 var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;
 var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");
 if (mode == "hide")
 { 
 (document.getElementById("sidebar")).setAttribute("toggle","hide");
 setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");
 }
};

config.macros.toggleSideBar.onToggleSideBar = function(){
 var sidebar = document.getElementById("sidebar");
 var settings = config.macros.toggleSideBar.settings;
 if (sidebar.getAttribute("toggle")=='hide')
 {
 setStylesheet(settings.styleShow,"ToggleSideBarStyles");
 sidebar.setAttribute("toggle","show");
 this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
 }
 else
 { 
 setStylesheet(settings.styleHide,"ToggleSideBarStyles");
 sidebar.setAttribute("toggle","hide");
 this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
 }

 return false;
}

setStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleSideBarButtonStyles");

//}}}
[img[pics/topdogsgthumb1.jpg][pics/topdogsg1.jpg]]<<imagebox>>
Medium: 3D stereograph rendering
[img[pics/uniwondprint1.jpg][pics/uniwondprinthigh1.jpg]]
Iron Casting, lost wax
Get all this tiddler simply using EricShulman's ImportTiddlersPlugin and selecting all tiddlers tagged [[Upload]].

[[Upload]] is <<tagging Upload>>
<<tiddler UploadPluginDoc>>
This form upload any file with an UploadService describe in [[Upload]]
----
<html><center>
<form enctype="multipart/form-data" action="store.php" method="post" target="_blank">
 <input type="hidden" name="MAX_FILE_SIZE" value="3000000" />
This file : <input name="userfile" type="file" /><p>
Options* : <input type="text" name="UploadPlugin" size=80 value="backupDir=BACKUP_DIR;uploaddir=UPLOAD_DIR;user=UPLOAD_USER;password=UPLOAD_PASSWORD;debug=0;" /><p>
 <input type="submit" value="Upload" />
</form></center>
</html>
----
 * Substitute BACKUP_DIR, UPLOAD_DIR, UPLOAD_USER and UPLOAD_PASSWORD with your values. See UploadPlugin for option details. 
For security reason, don't save your password in a tiddler.
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 13/09/2008 20:13:47 | BidiX | [[/|http://tiddlywiki.bidix.info/#UploadTiddler]] | [[store.php|http://TiddlyWiki.bidix.info/store.php]] | . | [[index.html | http://TiddlyWiki.bidix.info/index.html]] | backup |
| 13/09/2008 21:53:38 | BidiX | [[/|http://tiddlywiki.bidix.info/#UploadTiddlerPlugin]] | [[store.php|http://TiddlyWiki.bidix.info/store.php]] | . | [[index.html | http://TiddlyWiki.bidix.info/index.html]] | backup |
| 30/09/2008 23:20:55 | BidiX | [[/|http://tiddlywiki.bidix.info/#%5B%5BExtension%20directory%5D%5D]] | [[store.php|http://TiddlyWiki.bidix.info/store.php]] | . | [[index.html | http://TiddlyWiki.bidix.info/index.html]] | backup |
| 30/09/2008 23:21:35 | BidiX | [[/|http://tiddlywiki.bidix.info/#%5B%5BExtension%20directory%5D%5D]] | [[store.php|http://tiddlywiki.bidix.info/store.php]] | . | [[index.html | http://tiddlywiki.bidix.info/index.html]] |  |
| 30/09/2008 23:21:50 | BidiX | [[/|http://tiddlywiki.bidix.info/#%5B%5BExtension%20directory%5D%5D]] | [[store.php|http://tiddlywiki.bidix.info/store.php]] | . | [[index.html | http://tiddlywiki.bidix.info/index.html]] |  | ok |
| 30/09/2008 23:29:56 | BidiX | [[/|http://tiddlywiki.bidix.info/#%5B%5BExtension%20directory%5D%5D]] | [[store.php|http://TiddlyWiki.bidix.info/store.php]] | . | [[index.html | http://TiddlyWiki.bidix.info/index.html]] | backup |
| 25/06/2009 16:42:51 | YourName | [[/|http://www.nioncapul.net/]] | [[|http://www.nioncapul.net/]] | . | [[index.html | http://www.nioncapul.net/index.html]] | bkup |
| 25/06/2009 16:43:11 | YourName | [[/|http://www.nioncapul.net/]] | [[store.php|http://www.nioncapul.net/store.php]] | . | [[index.html | http://www.nioncapul.net/index.html]] | bkup |
| 25/06/2009 16:52:16 | YourName | [[/|http://www.nioncapul.net/]] | [[store.php|http://www.nioncapul.net/store.php]] | . | [[index.html | http://www.nioncapul.net/index.html]] | bkup |
| 25/06/2009 17:04:57 | YourName | [[/|http://www.nioncapul.net/]] | [[store.php|http://www.nioncapul.net/store.php]] | . | [[index.html | http://www.nioncapul.net/index.html]] | bkup |
UploadPlugin uses the following sequence for finding parameters :
#''macro'' parameters
#''Options'' saved in cookies
#''Plugin'' default values
!Options used by UploadPlugin
| Option | Value | Default |
|Upload Username: |<<option txtUploadUserName>>| |
|Upload Password: |<<option pasUploadPassword>>| |
|Url of the UploadService script: |<<option txtUploadStoreUrl urlInput>>| store.php |
|Relative Directory where to store the file: |<<option txtUploadDir urlInput>>| . (the script directory) |
|Filename of the uploaded file: |<<option txtUploadFilename urlInput>>| index.html |
|Directory to backup file on webserver^^(1)^^: |<<option txtUploadBackupDir urlInput>>| //null// (none/no backup) |
|Log in UploadLog |<<option chkUploadLog>> Trace Upload| true |
|Maximum of lines in UploadLog |<<option txtUploadLogMaxLine>>| 10 |

^^(1)^^No backup if Backup Directory is empty, the previous file will be overwritten. Use a '.' to backup in the script directory.

<<upload>> with these options.

!Upload Macro parameters
{{{
<<upload [storeUrl [toFilename [backupDir [uploadDir [username]]]]]>>
 Optional positional parameters can be passed to overwrite UploadOptions. 
}}}

!UploadToFile Macro Macro parameters
{{{
<<uploadTofile [filename [tiddlerTitle]]>>
 tiddlerTitle, filename: if omitted the title of the current tiddler
}}}

<<uploadToFile allowedsites.txt allowedsites.txt>>
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.4|
|''Date:''|2008-08-11|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 4,
	date: new Date("2008-08-11"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0'
};

//
// Environment
//

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

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

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

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

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

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

//
// uploadOptions Macro
//

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

//
// upload functions
//

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

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

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

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

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

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

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

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

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

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

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

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

//
// Utilities
// 

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

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

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

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

//
// Initializations
//

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

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

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

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


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


//}}}

New revision of UploadPlugin :
*V 3.3.3 (30/06/2006)
**reinstall saveChanges hijacking to suppress "save changes" or "save to disk" when located on web 
**==make "save to disk" disappear when TiddlyWiki is located on the web==
*V 3.3.2 (26/06/2006)
** make "save to disk" disappear when TiddlyWiki is located on the web
** small reformatting of post headers for store.cgi compatibility
** some issues in storing UploadOptions in cookies corrected
** code added in core TiddlyWiki 2.0.6 (GetLocalPath, no saveChanges when in readOnly mode ...) removed from plugin
** code refactoring
To get UploadPlugin use EricShulman's ImportTiddlersPlugin and import all tiddlers tagged with <<tag Upload>> from http://TiddlyWiki.bidix.info or get all Tiddlers tagged <<tag Upload>>
//last update: UploadPlugin v 4.1.3//

!Description
UploadPlugin with <<tag UploadService>> extend TiddlyWiki with @@upload@@ and @@save to web@@ commands. 
UploadPlugin uses Username and Password from UploadOptions stored in cookies to authenticate itself to [[store.php]] or [[store.cgi]].
UploadPlugin requires PasswordOptionPlugin.
French translation available as a separate tiddler UploadPluginMsgFR

!!UploadPlugin
*If the TiddlyWiki is viewed @@from local disk@@ :
**{{{<<upload ...>>}}}
***display as '''upload'''
***after saving to disk, upload to a website.
*If the TiddlyWiki is viewed @@from a website@@ :
**{{{<<upload ...>>}}}
***display as '''save to web'''
***save to the same website.
*If GenerateAnRssFeed in AdvancedOptions is set :
**generate the content of the RSSFeed 
**upload the RssFile
**Caution : use the SiteUrl tiddler to specify the right url of the TiddlyWiki in the generated RssFile
*DisplayMessage
*If a backupDir is specified
**and if a file already exists in the uploadDir withe the same fielname, move it in the backup dir and rename it with a timestamp
*if UploadLog is activated every upload action is logged in UploadLog
**only the last maxLines are stored
**if maxLine = -1 no truncation will occured 
hint : if UploadLog is the first tiddler in the TimelineTab, no tiddler has been changed since last upload.

!![[store.php]]
*UserVariables to set :
//{{{
$AUTHENTICATE_USER = true; // true | false
$USERS = array(
 'UserName1'=>'Password1', 
 'UserName2'=>'Password2', 
 'UserName3'=>'Password3'); // set usernames and strong passwords
$DEBUG = false; // true | false
//}}}
*method GET
**display an information page
*method POST
**if $~AUTHENTICATE_USER is ''true''
***presence and value of user and password are checked with $USER and $PASSWORD 
**if toFilename already exists and backDir parameter specified
***rename toFilename to backupDir/toFilename.AAAAMMDD.HHSS.html
**copy temporaryUploadedFile toFilename
**return status

!![[store.cgi]]
*UserVariables to set :
//{{{
CONFIG = {
 :users => {
 'UserName1'=>'Password1', 
 'UserName2'=>'Password2', 
 'UserName3'=>'Password3')
 },
 :authenticateUser => true,
 :backupExistingFile => true,
 :withUploadDir => true
}
//}}}
*same processing as store.php above

!Usage : 
{{{
<<upload>>
 uses UploadOptions saved in cookies :
 txtUploadUserName: username
 pasUploadPassword : password
 txtUploadStoreUrl : store script
 txtUploadDir : relative path for upload directory
 txtUploadFilename : upload filename
 txtUploadBackupDir : relative path for backup directory

<<upload [storeUrl [toFilename [backupDir [uploadDir [username]]]]]>>
 Optional positional parameters can be passed to overwrite 
 UploadOptions. 
}}}

Suggestion: Install the {{{<<upload ... >>}}} macro in SideBarOptions just below {{{<<saveChanges>>}}} macro.


!User manual
See HowToUpload

!Installation :
*Install the UploadPlugin as usual
*[[Upload]] the [[store.php]] file on your php aware webserver in your TiddlyWiki directory
*Protect your server against malicious upload. Two approaches :
**set $~AUTHENTICATE_USER to true in the [[store.php]] script
***configure $USER and $PASSWORD in the [[store.php]] script on your webserver
***set UploadOptions in conformity with [[store.php]]
**Use server protection :
***for Apache web server ([[for detail see Apache documentation|http://httpd.apache.org/docs/1.3/howto/htaccess.html]]) : 
****configure and upload the [[.htaccess]] [[.passwd]]
***for other web servers see the appropriate documentation
*Configure an upload button, for example in the SideBarOptions
!Suppported Browser
*Firefox and Gecko based browser: tested Ok
*Internet Explorer : tested Ok
*Safari : tested ok on OS X
*Others : Not tested, please report status.

!Revision history
<<tiddler UploadPluginRevisionHistory>>
/***


----
UploadPluginMsgEN provides the english translation for UploadPlugin.
----


***/
/***
|''Name:''|UploadPluginMsgEN|
|''Type:''|Translation|
|''Version:''|UploadPlugin 3.1.x (12/02/2006)|
|''Source:''|[[TiddlyWiki.BidiX.info|http://tiddlywiki.BidiX.info/#UploadPluginEN]]|
|''Author:''|BidiX[at]BidiX.info with modifications by [[Yann Perrin]]|
|''Compatibility:''|TW1.2 & TW2|
!Usage : 
For an english translation of UploadPlugin Message when using PolyGlotPlugin, import this tiddler in the TiddlyWiki. Make sure it is tagged with {{{en}}} and {{{linguo}}}. 
Comments and suggestions are welcome.
***/
//{{{
config.macros.upload.messages = {
 aboutToUpload: "About to upload TiddlyWiki to %0",
 errorDownloading: "Error downloading",
 errorUploadingContent: "Error uploading content",
 fileNotFound: "file to upload not found",
 fileNotUploaded: "File %0 NOT uploaded",
 mainFileUploaded: "Main TiddlyWiki file uploaded to %0",
 urlParamMissing: "url param missing",
 rssFileNotUploaded: "RssFile %0 NOT uploaded",
 rssFileUploaded: "Rss File uploaded to %0"
};

config.macros.upload.label = {
 promptOption: "Save and Upload this TiddlyWiki with UploadOptions",
 promptParamMacro: "Save and Upload this TiddlyWiki in %0",
 saveLabel: "save to web", 
 saveToDisk: "save to disk",
 uploadLabel: "upload" 
};
config.macros.saveChanges.label = config.macros.upload.label.saveToDisk;
//}}}
<!---
| Name:|~TagglyTaggingViewTemplate |
| Version:|1.2 (16-Jan-2006)|
| Source:|http://simonbaird.com/mptw/#TagglyTaggingViewTemplate|
| Purpose:|See TagglyTagging for more info|
| Requires:|You need the CSS in TagglyTaggingStyles to make it look right|
!History
* 16-Jan-06, version 1.2, added tagglyListWithSort
* 12-Jan-06, version 1.1, first version
!Notes
Remove the miniTag if you don't like it or you don't use QuickOpenTagPlugin
--->
<!--{{{-->
<div class="toolbar" macro="toolbar -closeTiddler closeOthers +editTiddler permalink references jump newHere"></div>
<div class="tagglyTagged" macro="hideSomeTags"></div>
<div><span class="title" macro="view title"></span><span class="miniTag" macro="miniTag"></span></div>
<div class='subtitle'>Updated <span macro='view modified date [[DD MMM, YYYY]]'></span></div>
<div class="viewer" macro="view text wikified"></div>
<div class="tagglyTagging" macro="tagglyListWithSort"></div>
<!--}}}-->
[img[pics/Thrustersg1.jpg]]
Medium: 3D sterographic rendering
[img[http://www.nioncapul.net/pics/wedgethumb1.jpg][http://www.nioncapul.net/pics/wedgeprint1.jpg]]<<imagebox>>
Medium: 3d Rendering
[>img[notquitethisweirdinreallife|pics/me6.jpg]]

Welcome to my site version 5.5. Yes, I'm the madman in the picture to the right. It is my aim to make this page a rational and uncluttered introduction to myself and my many endevores. Not bloody likely! - but a worthy aim anyhow. Please see the Survey (big blue horseskull icon) to the left for whats new. Otherwise, the images link will serve as a quick visual intro to my art and image making activities. 

I headwelped the keeing [[Nioncapul]] out of my word-hoard several years back to serve as a my web namespace. While I enjoy that it is an odd and uncomfortable word, perhaps related alliteratively to nincompoop, I assure you that it is not simple nonsense. 

<<toggleSideBar . toggleSidebar hide>><<icon pics/icons/toggle.png 16 16>>









config.macros.wikipedia = {};
config.macros.wikipedia.handler= function(place,macroName,params) {
 var key=params[0];
 wikify("[["+key+"|http://en.wikipedia.org/wiki/"+key+"]]",place)
}
[img[pics/wolilinriverthumb1.jpg][pics/wolilinriverprin1.jpg]]<<imagebox>>
Medium: 3D rendering
[img[pics/workerprint1.jpg]]
Medium: digital painting
[img[pics/yamaflamethumb1.jpg][pics/yamaflameprint2.jpg]]<<imagebox>>
Digital Painting with 3D fire
[img[pics/yamatankapanzerprint1.jpg][pics/yamatankapanzerprint2.jpg]]
Bronze castin (lost wax), patina, paint, fir wood
/***
|''Name:''|YourSearchPlugin|
|''Version:''|2.0.2 (2006-02-13)|
|''Source:''|http://tiddlywiki.abego-software.de/#YourSearchPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license]]|
|''TiddlyWiki:''|2.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
<<tiddler [[YourSearch Introduction]]>>
For more information see [[Help|YourSearch Help]].

!Compatibility
This plugin requires TiddlyWiki 2.0. 
Use http://tiddlywiki.abego-software.de/#YourSearchPlugin-1.0.1 for older TiddlyWiki versions.

!Revision history
* v2.0.2 (2006-02-13)
** Bugfix for Firefox 1.5.0.1 related to the "Show prefix" checkbox. Thanks to Ted Pavlic for reporting and to BramChen for fixing. 
** Internal
*** Make "JSLint" conform
* v2.0.1 (2006-02-05)
** Support "Exact Word Match" (use '=' to prefix word)
** Support default filter settings (when no filter flags are given in search term)
** Rework on the "less than 3 chars search text" feature (thanks to EricShulman)
** Better support SinglePageMode when doing "Open all tiddlers" (thanks to EricShulman)
** Support Firefox 1.5.0.1
** Bug: Fixed a hilite bug in "classic search mode" (thanks to EricShulman)
* v2.0.0 (2006-01-16)
** Add User Interface
* v1.0.1 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.0 (2005-12-28)
** initial version
!Code
The code is compressed. 

You can retrieve a readable source code version from http://tiddlywiki.abego-software.de/#YourSearchPlugin-src.
/%
***/
if(!version.extensions.YourSearchPlugin){version.extensions.YourSearchPlugin={major:2,minor:0,revision:2,date:new Date(2006,2,13),type:"plugin",source:"http://tiddlywiki.abego-software.de/#YourSearchPlugin"};var alertAndThrow=function(_1){alert(_1);throw _1;};if(!window.abego){window.abego={};}if(abego.YourSearch){alertAndThrow("abego.YourSearch already defined");}abego.YourSearch={};if(version.major<2){alertAndThrow("YourSearchPlugin requires TiddlyWiki 2.0 or newer.\n\nGet YourSearch 1.0.1 to use YourSearch with older versions of TiddlyWiki.\n\nhttp://tiddlywiki.abego-software.de/#YourSearchPlugin-1.0.1");}var STQ=function(_2,_3,_4,_5){this.queryText=_2;this.caseSensitive=_3;if(_5){this.regExp=new RegExp(_2,_3?"mg":"img");return;}this.terms=[];var re=/\s*(\-)?([#%!=]*)(?:(?:("(?:(?:\\")|[^"])*")|(\S+)))(?:\s+((?:[aA][nN][dD])|(?:[oO][rR]))(?!\S))?/mg;var _7=re.exec(_2);while(_7!=null&&_7.length==6){var _8="-"==_7[1];var _9=_7[2];var _a=_9.indexOf("!")>=0;var _b=_9.indexOf("%")>=0;var _c=_9.indexOf("#")>=0;var _d=_9.indexOf("=")>=0;if(!_a&&!_b&&!_c){_a=config.options.chkSearchInTitle;_b=config.options.chkSearchInText;_c=config.options.chkSearchInTags;if(!_a&&!_b&&!_c){_a=_b=_c=true;}}if(_4){_b=false;_c=false;}var _e;if(_7[3]){try{_e=eval(_7[3]);}catch(ex){}}else{_e=_7[4];}if(!_e){throw "Invalid search expression: %0".format([_2]);}var _f=_7[5]&&_7[5].charAt(0).toLowerCase()=="o";this.terms.push(new STQ.Term(_e,_a,_b,_c,_8,_f,_3,_d));_7=re.exec(_2);}};var me=STQ.prototype;me.getMatchingTiddlers=function(_10){var _11=[];for(var i in _10){var t=_10[i];if((t instanceof Tiddler)&&this.matchesTiddler(t)){_11.push(t);}}return _11;};me.matchesTiddler=function(_14){if(this.regExp){return this.regExp.test(_14.title)||this.regExp.test(_14.text);}var n=this.terms.length;if(n==0){return false;}var _16=this.terms[0].matchesTiddler(_14);for(var i=1;i<this.terms.length;i++){if(this.terms[i-1].orFollows){if(!_16){_16|=this.terms[i].matchesTiddler(_14);}}else{if(_16){_16&=this.terms[i].matchesTiddler(_14);}}}return _16;};me.getOnlyMatchTitleQuery=function(){if(!this.onlyMatchTitleQuery){this.onlyMatchTitleQuery=new STQ(this.queryText,this.caseSensitive,true,this.useRegExp);}return this.onlyMatchTitleQuery;};me.getMarkRegExp=function(){if(this.regExp){return "".search(this.regExp)>=0?null:this.regExp;}var _18={};var n=this.terms.length;for(var i=0;i<this.terms.length;i++){var _1b=this.terms[i];if(!_1b.negate){_18[_1b.text]=true;}}var _1c=[];for(var t in _18){_1c.push("("+t.escapeRegExp()+")");}if(_1c.length==0){return null;}var _1e=_1c.join("|");return new RegExp(_1e,this.caseSensitive?"mg":"img");};me.toString=function(){if(this.regExp){return this.regExp.toString();}var _1f="";for(var i=0;i<this.terms.length;i++){_1f+=this.terms[i].toString();}return _1f;};STQ.Term=function(_21,_22,_23,_24,_25,_26,_27,_28){this.text=_21;this.inTitle=_22;this.inText=_23;this.inTag=_24;this.negate=_25;this.orFollows=_26;this.caseSensitive=_27;this.wordMatch=_28;var _29=_21.escapeRegExp();if(this.wordMatch){_29="\\b"+_29+"\\b";}this.regExp=new RegExp(_29,"m"+(_27?"":"i"));};STQ.Term.prototype.toString=function(){return (this.negate?"-":"")+(this.inTitle?"!":"")+(this.inText?"%":"")+(this.inTag?"#":"")+(this.wordMatch?"=":"")+"\""+this.text+"\""+(this.orFollows?" OR ":" AND ");};STQ.Term.prototype.matchesTiddler=function(_2a){if(!_2a){return false;}if(this.inTitle&&this.regExp.test(_2a.title)){return !this.negate;}if(this.inText&&this.regExp.test(_2a.text)){return !this.negate;}if(this.inTag){var _2b=_2a.tags;if(_2b){for(var i=0;i<_2b.length;i++){if(this.regExp.test(_2b[i])){return !this.negate;}}}}return this.negate;};var stringToInt=function(s,_2e){if(!s){return _2e;}var n=parseInt(s);return (n==NaN)?_2e:n;};var getIntAttribute=function(_30,_31,_32){return stringToInt(_30.getAttribute(_31));};var isDescendantOrSelf=function(_33,e){while(e!=null){if(_33==e){return true;}e=e.parentNode;}return false;};var getMatchCount=function(s,re){var m=s.match(re);return m?m.length:0;};var createEllipsis=function(_38){var e=createTiddlyElement(_38,"span");e.innerHTML="&hellip;";};var isWordChar=function(c){return (c>="a"&&c<="z")||(c>="A"&&c<="Z")||c=="_";};var getWordBounds=function(s,_3c){if(!isWordChar(s[_3c])){return null;}for(var i=_3c-1;i>=0&&isWordChar(s[i]);i--){}var _3e=i+1;var n=s.length;for(i=_3c+1;i<n&&isWordChar(s[i]);i++){}return {start:_3e,end:i};};var removeTextDecoration=function(s){var _41=["''","{{{","}}}","//","<<<","/***","***/"];var _42="";for(var i=0;i<_41.length;i++){if(i!=0){_42+="|";}_42+="("+_41[i].escapeRegExp()+")";}return s.replace(new RegExp(_42,"mg"),"").trim();};var logText="";var lastLogTime=null;var logMessage=function(_44,s){var now=new Date();var _47=lastLogTime?(now-lastLogTime).toString():"";logText+="<tr><td>"+now.convertToYYYYMMDDHHMMSSMMM()+"</td><td align='right'>"+_47+"</td><td>"+_44+"</td><td>"+s.htmlEncode()+"</td></tr>\n";lastLogTime=now;};function writeLog(){var t=" <<JsDoIt 'WriteLog' 'WriteLog' 'javascript:writeLog();story.closeTiddler(\"Log\");story.displayTiddler(null,\"Log\");'>>"+"<html><table><tbody><tr><th>Time</th><th>Delta (ms)</th><th>Kind</th><th>Message</th></tr>\n"+logText+"</tbody></table></html>";store.saveTiddler("Log","Log",t,config.options.txtUserName,new Date(),["System","Log"]);logText="";lastLogTime=null;}var yourSearchResultID="yourSearchResult";var yourSearchResultItemsID="yourSearchResultItems";var maxCharsInTitle=80;var maxCharsInTags=50;var maxCharsInText=250;var maxPagesInNaviBar=10;var itemsPerPageDefault=25;var itemsPerPageWithPreviewDefault=10;var minMatchWithContextSize=40;var maxMovementForWordCorrection=4;var matchInTitleWeight=4;var precisionInTitleWeight=10;var matchInTagsWeight=2;var resultElement;var lastResults;var lastQuery;var lastSearchText;var searchInputField;var searchButton;var firstIndexOnPage=0;var currentTiddler;var indexInPage;var indexInResult;var getItemsPerPage=function(){var n=(config.options.chkPreviewText)?stringToInt(config.options.txtItemsPerPageWithPreview,itemsPerPageWithPreviewDefault):stringToInt(config.options.txtItemsPerPage,itemsPerPageDefault);return (n>0)?n:1;};var standardRankFunction=function(_4a,_4b){var _4c=_4b.getMarkRegExp();if(!_4c){return 1;}var _4d=_4a.title.match(_4c);var _4e=_4d?_4d.length:0;var _4f=getMatchCount(_4a.getTags(),_4c);var _50=_4d?_4d.join("").length:0;var _51=_4a.title.length>0?_50/_4a.title.length:0;var _52=_4e*matchInTitleWeight+_4f*matchInTagsWeight+_51*precisionInTitleWeight+1;return _52;};var findMatches=function(_53,_54,_55,_56,_57,_58){lastSearchText=_54;var _59=_53.reverseLookup("tags",_58,false);var _5a=new STQ(_54,_55,false,_56);lastQuery=_5a;var _5b=_5a.getMatchingTiddlers(_59);var _5c=abego.YourSearch.getRankFunction();for(var i=0;i<_5b.length;i++){var _5e=_5b[i];var _5f=_5c(_5e,_5a);_5e.searchRank=_5f;}if(!_57){_57="title";}var _60=function(a,b){var _63=a.searchRank-b.searchRank;if(_63==0){if(a[_57]==b[_57]){return (0);}else{return (a[_57]<b[_57])?-1:+1;}}else{return (_63>0)?-1:+1;}};_5b.sort(_60);lastResults=_5b;return _5b;};var moveToWordBorder=function(s,_65,_66){var _67;if(_66){_67=getWordBounds(s,_65);}else{if(_65<=0){return _65;}_67=getWordBounds(s,_65-1);}if(!_67){return _65;}if(_66){if(_67.start>=_65-maxMovementForWordCorrection){return _67.start;}if(_67.end<=_65+maxMovementForWordCorrection){return _67.end;}}else{if(_67.end<=_65+maxMovementForWordCorrection){return _67.end;}if(_67.start>=_65-maxMovementForWordCorrection){return _67.start;}}return _65;};var getContextRangeAround=function(s,_69,_6a,_6b,_6c){var _6d=Math.max(Math.floor(_6c/(_6b+1)),minMatchWithContextSize);var _6e=Math.max(_6d-(_6a-_69),0);var _6f=Math.min(Math.floor(_6a+_6e/3),s.length);var _70=Math.max(_6f-_6d,0);_70=moveToWordBorder(s,_70,true);_6f=moveToWordBorder(s,_6f,false);return {start:_70,end:_6f};};var getTextAndMatchArray=function(s,_72){var _73=[];if(_72){var _74=0;var n=s.length;var _76=0;do{_72.lastIndex=_74;var _77=_72.exec(s);if(_77){if(_74<_77.index){var t=s.substring(_74,_77.index);_73.push({text:t});}_73.push({text:_77[0],isMatch:true});_74=_77.index+_77[0].length;}else{_73.push({text:s.substr(_74)});break;}}while(true);}else{_73.push({text:s});}return _73;};var simpleCreateLimitedTextWithMarks=function(_79,s,_7b){if(!lastQuery){return;}var _7c=getTextAndMatchArray(s,lastQuery.getMarkRegExp());var _7d=0;for(var i=0;i<_7c.length&&_7d<_7b;i++){var t=_7c[i];var _80=t.text;if(t.isMatch){createTiddlyElement(_79,"span",null,"marked",_80);}else{var _81=_7b-_7d;if(_81<_80.length){_80=_80.substring(0,_81)+"...";}createTiddlyText(_79,_80);}_7d+=_80.length;}};var addRange=function(_82,_83,_84){var n=_82.length;if(n==0){_82.push({start:_83,end:_84});return;}var i=0;for(;i<n;i++){var _87=_82[i];if(_87.start<=_84&&_83<=_87.end){var r;var _89=i+1;for(;_89<n;_89++){r=_82[_89];if(r.start>_84||_83>_87.end){break;}}var _8a=_83;var _8b=_84;for(var j=i;j<_89;j++){r=_82[j];_8a=Math.min(_8a,r.start);_8b=Math.max(_8b,r.end);}_82.splice(i,_89-i,{start:_8a,end:_8b});return;}if(_87.start>_84){break;}}_82.splice(i,0,{start:_83,end:_84});};var getTotalRangesSize=function(_8d){var _8e=0;for(var i=0;i<_8d.length;i++){var _90=_8d[i];_8e+=_90.end-_90.start;}return _8e;};var writeTextAndMatchRange=function(_91,s,_93,_94,_95){var t;var _97;var pos=0;var i=0;var _9a=0;for(;i<_93.length;i++){t=_93[i];_97=t.text;if(_94<pos+_97.length){_9a=_94-pos;break;}pos+=_97.length;}var _9b=_95-_94;for(;i<_93.length&&_9b>0;i++){t=_93[i];_97=t.text.substr(_9a);_9a=0;if(_97.length>_9b){_97=_97.substr(0,_9b);}if(t.isMatch){createTiddlyElement(_91,"span",null,"marked",_97);}else{createTiddlyText(_91,_97);}_9b-=_97.length;}if(_95<s.length){createEllipsis(_91);}};var getMatchedTextCount=function(_9c){var _9d=0;for(var i=0;i<_9c.length;i++){if(_9c[i].isMatch){_9d++;}}return _9d;};var getMatchedTextWithContextRanges=function(_9f,s,_a1){var _a2=[];var _a3=getMatchedTextCount(_9f);var pos=0;for(var i=0;i<_9f.length;i++){var t=_9f[i];var _a7=t.text;if(t.isMatch){var _a8=getContextRangeAround(s,pos,pos+_a7.length,_a3,_a1);addRange(_a2,_a8.start,_a8.end);}pos+=_a7.length;}return _a2;};var fillUpRanges=function(s,_aa,_ab){var _ac=_ab-getTotalRangesSize(_aa);while(_ac>0){if(_aa.length==0){addRange(_aa,0,moveToWordBorder(s,_ab,false));return;}else{var _ad=_aa[0];var _ae;var _af;if(_ad.start==0){_ae=_ad.end;if(_aa.length>1){_af=_aa[1].start;}else{addRange(_aa,_ae,moveToWordBorder(s,_ae+_ac,false));return;}}else{_ae=0;_af=_ad.start;}var _b0=Math.min(_af,_ae+_ac);addRange(_aa,_ae,_b0);_ac-=(_b0-_ae);}}};var writeRanges=function(_b1,s,_b3,_b4,_b5){if(_b4.length==0){return;}if(_b4[0].start>0){createEllipsis(_b1);}var _b6=_b5;for(var i=0;i<_b4.length&&_b6>0;i++){var _b8=_b4[i];var len=Math.min(_b8.end-_b8.start,_b6);writeTextAndMatchRange(_b1,s,_b3,_b8.start,_b8.start+len);_b6-=len;}};var createLimitedTextWithMarksAndContext=function(_ba,s,_bc){if(!lastQuery){return;}if(s.length<_bc){_bc=s.length;}var _bd=getTextAndMatchArray(s,lastQuery.getMarkRegExp());var _be=getMatchedTextWithContextRanges(_bd,s,_bc);fillUpRanges(s,_be,_bc);writeRanges(_ba,s,_bd,_be,_bc);};var createLimitedTextWithMarks=function(_bf,s,_c1){return createLimitedTextWithMarksAndContext(_bf,s,_c1);};var myStorySearch=function(_c2,_c3,_c4){highlightHack=new RegExp(_c4?_c2:_c2.escapeRegExp(),_c3?"mg":"img");var _c5=findMatches(store,_c2,_c3,_c4,"title","excludeSearch");firstIndexOnPage=0;showResult();highlightHack=null;};var myMacroSearchHandler=function(_c6,_c7,_c8){var _c9="";var _ca=null;var _cb=function(txt){if(config.options.chkUseYourSearch){myStorySearch(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}else{story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}_c9=txt.value;};var _cd=function(e){_cb(searchInputField);return false;};var _cf=function(e){if(!e){var e=window.event;}switch(e.keyCode){case 13:_cb(this);break;case 27:if(isResultOpen()){closeResult();}else{this.value="";clearMessage();}break;}if(String.fromCharCode(e.keyCode)==this.accessKey||e.altKey){reopenResultIfApplicable();}if(this.value.length<3&&_ca){clearTimeout(_ca);}if((this.value.length>2)&&(this.value!=_c9)){if(!config.options.chkUseYourSearch||config.options.chkSearchAsYouType){if(_ca){clearTimeout(_ca);}var txt=this;_ca=setTimeout(function(){_cb(txt);},500);}}if(this.value.length==0){closeResult();}};var _d3=function(e){this.select();reopenResultIfApplicable();};var btn=createTiddlyButton(_c6,this.label,this.prompt,_cd);var txt=createTiddlyElement(_c6,"input",null,null,null);if(_c8[0]){txt.value=_c8[0];}txt.onkeyup=_cf;txt.onfocus=_d3;txt.setAttribute("size",this.sizeTextbox);txt.setAttribute("accessKey",this.accessKey);txt.setAttribute("autocomplete","off");if(config.browser.isSafari){txt.setAttribute("type","search");txt.setAttribute("results","5");}else{txt.setAttribute("type","text");}searchInputField=txt;searchButton=btn;};var isResultOpen=function(){return resultElement!=null&&resultElement.parentNode==document.body;};var closeResult=function(){if(isResultOpen()){document.body.removeChild(resultElement);}};var openAllFoundTiddlers=function(){closeResult();if(lastResults){var _d7=[];for(var i=0;i<lastResults.length;i++){_d7.push(lastResults[i].title);}story.displayTiddlers(null,_d7);}};var refreshResult=function(){if(!resultElement||!searchInputField){return;}var _d9=store.getTiddlerText("YourSearchResultTemplate");if(!_d9){_d9="<b>Tiddler YourSearchResultTemplate not found</b>";}resultElement.innerHTML=_d9;firstIndexOnPage=Math.floor(firstIndexOnPage/getItemsPerPage())*getItemsPerPage();applyHtmlMacros(resultElement,null);refreshElements(resultElement,null);if(lastResults&&lastResults.length>0){var _da=store.getTiddlerText("YourSearchItemTemplate");if(!_da){alertAndThrow("YourSearchItemTemplate not found");}var _db=document.getElementById(yourSearchResultItemsID);if(!_db){_db=createTiddlyElement(resultElement,"div",yourSearchResultItemsID);}var _dc=Math.min(firstIndexOnPage+getItemsPerPage(),lastResults.length);indexInPage=-1;for(var i=firstIndexOnPage;i<_dc;i++){currentTiddler=lastResults[i];indexInPage++;indexInResult=i;var _de=createTiddlyElement(_db,"div",null,"yourSearchItem");_de.innerHTML=_da;applyHtmlMacros(_de,null);refreshElements(_de,null);}}currentTiddler=null;ensureResultIsDisplayedNicely();};var ensureResultIsDisplayedNicely=function(){adjustResultPositionAndSize();scrollVisible();};var scrollVisible=function(){if(resultElement){window.scrollTo(0,ensureVisible(resultElement));}if(searchInputField){window.scrollTo(0,ensureVisible(searchInputField));}};var adjustResultPositionAndSize=function(){if(!searchInputField){return;}var _df=searchInputField;var _e0=findPosX(_df);var _e1=findPosY(_df);var _e2=_df.offsetHeight;var _e3=_e0;var _e4=_e1+_e2;var _e5=findWindowWidth();if(_e5<resultElement.offsetWidth){resultElement.style.width=(_e5-100)+"px";_e5=findWindowWidth();}var _e6=resultElement.offsetWidth;if(_e3+_e6>_e5){_e3=_e5-_e6-30;}if(_e3<0){_e3=0;}resultElement.style.left=_e3+"px";resultElement.style.top=_e4+"px";resultElement.style.display="block";};var showResult=function(){if(!resultElement){resultElement=createTiddlyElement(document.body,"div",yourSearchResultID,"yourSearchResult");}else{if(resultElement.parentNode!=document.body){document.body.appendChild(resultElement);}}refreshResult();};var reopenResultIfApplicable=function(){if(searchInputField==null||!config.options.chkUseYourSearch){return;}if((searchInputField.value==lastSearchText)&&lastSearchText&&!isResultOpen()){if(resultElement&&(resultElement.parentNode!=document.body)){document.body.appendChild(resultElement);ensureResultIsDisplayedNicely();}else{showResult();}}};var setFirstIndexOnPage=function(_e7){if(!lastResults||lastResults.length==0){return;}firstIndexOnPage=Math.min(Math.max(0,_e7),lastResults.length-1);refreshResult();};var onDocumentClick=function(e){if(e.target==searchInputField){return;}if(e.target==searchButton){return;}if(resultElement&&isDescendantOrSelf(resultElement,e.target)){return;}closeResult();};var onDocumentKeyup=function(e){if(e.keyCode==27){closeResult();}};addEvent(document,"click",onDocumentClick);addEvent(document,"keyup",onDocumentKeyup);config.macros.yourSearch={label:"yourSearch",prompt:"Gives access to the current/last YourSearch result",funcs:{},tests:{"true":function(){return true;},"false":function(){return false;},"found":function(){return lastResults&&lastResults.length>0;},"previewText":function(){return config.options.chkPreviewText;}}};config.macros.yourSearch.handler=function(_ea,_eb,_ec,_ed,_ee,_ef){if(_ec.length==0){return;}var _f0=_ec[0];var _f1=config.macros.yourSearch.funcs[_f0];if(_f1){_f1(_ea,_eb,_ec,_ed,_ee,_ef);}};config.macros.yourSearch.funcs.itemRange=function(_f2){if(lastResults){var _f3=Math.min(firstIndexOnPage+getItemsPerPage(),lastResults.length);var s="%0 - %1".format([firstIndexOnPage+1,_f3]);createTiddlyText(_f2,s);}};config.macros.yourSearch.funcs.count=function(_f5){if(lastSearchText){createTiddlyText(_f5,lastResults.length.toString());}};config.macros.yourSearch.funcs.query=function(_f6){if(lastResults){createTiddlyText(_f6,lastSearchText);}};config.macros.yourSearch.funcs.version=function(_f7){var t="YourSearch %0.%1.%2".format([version.extensions.YourSearchPlugin.major,version.extensions.YourSearchPlugin.minor,version.extensions.YourSearchPlugin.revision]);var e=createTiddlyElement(_f7,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de/#YourSearchPlugin");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">"+t+"<font>";};config.macros.yourSearch.funcs.copyright=function(_fa){var e=createTiddlyElement(_fa,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">&copy; 2005-2006 <b><font color=\"red\">abego</font></b> Software<font>";};config.macros.yourSearch.funcs.linkButton=function(_fc,_fd,_fe,_ff,_100,_101){if(_fe<2){return;}var _102=_fe[1];var text=_fe<3?_102:_fe[2];var _104=_fe<4?text:_fe[3];var _105=_fe<5?null:_fe[4];var btn=createTiddlyButton(_fc,text,_104,closeResultAndDisplayTiddler,null,null,_105);btn.setAttribute("tiddlyLink",_102);};config.macros.yourSearch.funcs.closeButton=function(_107,_108,_109,_10a,_10b,_10c){var _10d=createTiddlyButton(_107,"close","Close the Search Results (Shortcut: ESC)",closeResult);};config.macros.yourSearch.funcs.openAllButton=function(_10e,_10f,_110,_111,_112,_113){if(!lastResults){return;}var n=lastResults.length;if(n==0){return;}var _115=n==1?"open tiddler":"open all %0 tiddlers".format([n]);var _116=createTiddlyButton(_10e,_115,"Open all found tiddlers (Shortcut: Alt-O)",openAllFoundTiddlers);_116.setAttribute("accessKey","O");};var onNaviButtonClick=function(e){if(!e){var e=window.event;}var _119=getIntAttribute(this,"page");setFirstIndexOnPage(_119*getItemsPerPage(),0);};config.macros.yourSearch.funcs.naviBar=function(_11a,_11b,_11c,_11d,_11e,_11f){if(!lastResults||lastResults.length==0){return;}var _120;var _121=Math.floor(firstIndexOnPage/getItemsPerPage());var _122=Math.floor((lastResults.length-1)/getItemsPerPage());if(_121>0){_120=createTiddlyButton(_11a,"Previous","Go to previous page (Shortcut: Alt-'<')",onNaviButtonClick,"prev");_120.setAttribute("page",(_121-1).toString());_120.setAttribute("accessKey","<");}for(var i=-maxPagesInNaviBar;i<maxPagesInNaviBar;i++){var _124=_121+i;if(_124<0){continue;}if(_124>_122){break;}var _125=(i+_121+1).toString();var _126=_124==_121?"currentPage":"otherPage";_120=createTiddlyButton(_11a,_125,"Go to page %0".format([_125]),onNaviButtonClick,_126);_120.setAttribute("page",(_124).toString());}if(_121<_122){_120=createTiddlyButton(_11a,"Next","Go to next page (Shortcut: Alt-'>')",onNaviButtonClick,"next");_120.setAttribute("page",(_121+1).toString());_120.setAttribute("accessKey",">");}};config.macros.yourSearch.funcs["if"]=function(_127,_128,_129,_12a,_12b,_12c){if(_129.length<2){return;}var _12d=_129[1];var _12e=(_12d=="not");if(_12e){if(_129.length<3){return;}_12d=_129[2];}var test=config.macros.yourSearch.tests[_12d];var _130=false;try{if(test){_130=test(_127,_128,_129,_12a,_12b,_12c)!=_12e;}else{_130=(!eval(_12d))==_12e;}}catch(ex){}if(!_130){_127.style.display="none";}};var createOptionWithRefresh=function(_131,_132,_133,_134){invokeMacro(_131,"option",_132,_133,_134);var elem=_131.lastChild;var _136=elem.onclick;elem.onclick=function(e){var _138=_136.apply(this,arguments);refreshResult();return _138;};return elem;};config.macros.yourSearch.funcs.chkPreviewText=function(_139,_13a,_13b,_13c,_13d,_13e){var _13f=_13b.slice(1).join(" ");var elem=createOptionWithRefresh(_139,"chkPreviewText",_13c,_13e);elem.setAttribute("accessKey","P");elem.title="Show text preview of found tiddlers (Shortcut: Alt-P)";return elem;};config.macros.foundTiddler={label:"foundTiddler",prompt:"Provides information on the tiddler currently processed on the YourSearch result page",funcs:{}};config.macros.foundTiddler.handler=function(_141,_142,_143,_144,_145,_146){if(!currentTiddler){return;}var name=_143[0];var func=config.macros.foundTiddler.funcs[name];if(func){func(_141,_142,_143,_144,_145,_146);}};var closeResultAndDisplayTiddler=function(e){closeResult();var _14a=this.getAttribute("tiddlyLink");if(_14a){var _14b=this.getAttribute("withHilite");var _14c=highlightHack;if(_14b&&_14b=="true"&&lastQuery){highlightHack=lastQuery.getMarkRegExp();}story.displayTiddler(this,_14a);highlightHack=_14c;}return (false);};var getShortCutNumber=function(){if(!currentTiddler){return -1;}if(indexInPage>=0&&indexInPage<=9){return indexInPage<9?(indexInPage+1):0;}else{return -1;}};config.macros.foundTiddler.funcs.title=function(_14d,_14e,_14f,_150,_151,_152){if(!currentTiddler){return;}var _153=getShortCutNumber();var _154=_153>=0?"Open tiddler (Shortcut: Alt-%0)".format([_153.toString()]):"Open tiddler";var btn=createTiddlyButton(_14d,null,_154,closeResultAndDisplayTiddler,null);btn.setAttribute("tiddlyLink",currentTiddler.title);btn.setAttribute("withHilite","true");createLimitedTextWithMarks(btn,currentTiddler.title,maxCharsInTitle);if(_153>=0){btn.setAttribute("accessKey",_153.toString());}};config.macros.foundTiddler.funcs.tags=function(_156,_157,_158,_159,_15a,_15b){if(!currentTiddler){return;}createLimitedTextWithMarks(_156,currentTiddler.getTags(),maxCharsInTags);};config.macros.foundTiddler.funcs.text=function(_15c,_15d,_15e,_15f,_160,_161){if(!currentTiddler){return;}createLimitedTextWithMarks(_15c,removeTextDecoration(currentTiddler.text),maxCharsInText);};config.macros.foundTiddler.funcs.number=function(_162,_163,_164,_165,_166,_167){var _168=getShortCutNumber();if(_168>=0){var text="%0)".format([_168.toString()]);createTiddlyElement(_162,"span",null,"shortcutNumber",text);}};function scrollToAnchor(name){return false;}if(config.options.chkUseYourSearch==undefined){config.options.chkUseYourSearch=true;}if(config.options.chkPreviewText==undefined){config.options.chkPreviewText=true;}if(config.options.chkSearchAsYouType==undefined){config.options.chkSearchAsYouType=true;}if(config.options.chkSearchInTitle==undefined){config.options.chkSearchInTitle=true;}if(config.options.chkSearchInText==undefined){config.options.chkSearchInText=true;}if(config.options.chkSearchInTags==undefined){config.options.chkSearchInTags=true;}if(config.options.txtItemsPerPage==undefined){config.options.txtItemsPerPage=itemsPerPageDefault;}if(config.options.txtItemsPerPageWithPreview==undefined){config.options.txtItemsPerPageWithPreview=itemsPerPageWithPreviewDefault;}config.shadowTiddlers.AdvancedOptions+="\n<<option chkUseYourSearch>> Use 'Your Search' //([[more options|YourSearch Options]])//";config.shadowTiddlers["YourSearch Introduction"]="!About YourSearch\n"+"\n"+"YourSearch gives you a bunch of new features to simplify and speed up your daily searches in TiddlyWiki. It seamlessly integrates into the standard TiddlyWiki search: just start typing into the 'search' field and explore!\n"+"\n"+"''May the '~Alt-F' be with you.''\n"+"\n"+"\n"+"!Features\n"+"* YourSearch searches for tiddlers that match your query ''as you type'' into the 'search' field. It presents a list of the ''\"Top Ten\"'' tiddlers in a ''popup-like window'': the ''[[YourSearch Result]]''. The tiddlers currently displayed in your TiddlyWiki are not affected.\n"+"* Using ''~TiddlerRank technology'' the [[YourSearch Result]] lists the ''most interesting tiddlers first''.\n"+"* Through ''Filtered Search'' and ''Boolean Search'' you can easily refining your search, like excluding words or searching for multiple words. This way less tiddlers are displayed in the [[YourSearch Result]] and you can faster scan the result for the tiddler you are looking for.\n"+"* The [[YourSearch Result]] lists the found tiddlers ''page-wise'', e.g. 10 per page. Use the ''Result Page Navigation Bar'' to navigate between pages if the result does not fit on one page.\n"+"* The [[YourSearch Result]] states the ''total number of found tiddlers''. This way you can quickly decide if you want to browse the result list or if you want to refine your search first to shorten the result list.\n"+"* Beside the ''title of the found tiddlers'' the [[YourSearch Result]] also ''displays tags'' and ''tiddler text previews''. The ''tiddler text preview'' is an extract of the tiddler's content, showing the most interesting parts related to your query (e.g. the texts around the words you are looking for).\n"+"* The words you are looking for are hilited in the titles, tags and text previews of the [[YourSearch Result]].\n"+"* If you are not interested in the tiddler text previews but prefer to get longer lists of tiddlers on one result page you may ''switch of the text preview''.\n"+"* If the [[YourSearch Result]] contains the tiddler you are looking for you can just ''click its title to display'' it in your TiddlyWiki. Alternatively you may also ''open all found tiddlers'' at once. \n"+"* Use [[YourSearch Options]] to customize YourSearch to your needs. E.g. depending on the size of your screen you may change the number of tiddlers displayed in the [[YourSearch Result]]. In the [[YourSearch Options]] and the AdvancedOptions you may also switch off YourSearch in case you temporarily want to use the standard search.\n"+"* For the most frequently actions ''access keys'' are defined so you can perform your search without using the mouse.\n"+"\n";config.shadowTiddlers["YourSearch Help"]="<<tiddler [[YourSearch Introduction]]>>"+"\n"+"!Filtered Search<html><a name='Filtered'/></html>\n"+"Using the Filtered Search you can restrict your search to certain parts of a tiddler, e.g only search the tags or only the titles.\n"+"|!What you want|!What you type|!Example|\n"+"|Search ''titles only''|start word with ''!''|{{{!jonny}}}|\n"+"|Search ''contents only''|start word with ''%''|{{{%football}}}|\n"+"|Search ''tags only''|start word with ''#''|{{{#Plugin}}}|\n"+"\n"+"You may use more than one filter for a word. E.g. {{{!#Plugin}}} finds tiddlers containing \"Plugin\" either in the title or in the tags (but does not look for \"Plugin\" in the content).\n"+"\n"+"!Boolean Search<html><a name='Boolean'/></html>\n"+"The Boolean Search is useful when searching for multiple words.\n"+"|!What you want|!What you type|!Example|\n"+"|''All words'' must exist|List of words|{{{jonny jeremy}}}|\n"+"|''At least one word'' must exist|Separate words by ''or''|{{{jonny or jeremy}}}|\n"+"|A word ''must not exist''|Start word with ''-''|{{{-jonny}}}|\n"+"\n"+"''Note:'' When you specify two words, separated with a space, YourSearch finds all tiddlers that contain both words, but not necessarily next to each other. If you want to find a sequence of word, e.g. '{{{John Brown}}}', you need to put the words into quotes. I.e. you type: {{{\"john brown\"}}}.\n"+"\n"+"!'Exact Word' Search<html><a name='Exact'/></html>\n"+"By default a search result all matches that 'contain' the searched text. \n"+" E.g. if you search for 'Task' you will get all tiddlers containing 'Task', but also 'CompletedTask', 'TaskForce' etc.\n"+"\n"+"If you only want to get the tiddlers that contain 'exactly the word' you need to prefix it with a '='. E.g. typing '=Task' will the tiddlers that contain the word 'Task', ignoring words that just contain 'Task' as a substring.\n"+"\n"+"!Combined Search<html><a name='Combined'/></html>\n"+"You are free to combine the various search options. \n"+"\n"+"''Examples''\n"+"|!What you type|!Result|\n"+"|{{{!jonny !jeremy -%football}}}| all tiddlers with both {{{jonny}}} and {{{jeremy}}} in its titles, but no {{{football}}} in content.|\n"+"|{{{#=Task}}}|All tiddlers tagged with 'Task' (the exact word). Tags named 'CompletedTask', 'TaskForce' etc. are not considered.|\n"+"\n"+"!~CaseSensitiveSearch and ~RegExpSearch<html><a name='Case'/></html>\n"+"The standard search options ~CaseSensitiveSearch and ~RegExpSearch are fully supported by YourSearch. However when ''~RegExpSearch'' is on Filtered and Boolean Search are disabled.\n"+"\n"+"!Access Keys<html><a name='Access'/></html>\n"+"You are encouraged to use the access keys (also called \"shortcut\" keys) for the most frequently used operations. For quick reference these shortcuts are also mentioned in the tooltip for the various buttons etc.\n"+"\n"+"|!Key|!Operation|\n"+"|{{{Alt-F}}}|''The most important keystroke'': It moves the cursor to the search input field so you can directly start typing your query. Pressing {{{Alt-F}}} will also display the previous search result. This way you can quickly display multiple tiddlers using \"Press {{{Alt-F}}}. Select tiddler.\" sequences.|\n"+"|{{{ESC}}}|Closes the [[YourSearch Result]]. When the [[YourSearch Result]] is already closed and the cursor is in the search input field the field's content is cleared so you start a new query.|\n"+"|{{{Alt-1}}}, {{{Alt-2}}},... |Pressing these keys opens the first, second etc. tiddler from the result list.|\n"+"|{{{Alt-O}}}|Opens all found tiddlers.|\n"+"|{{{Alt-P}}}|Toggles the 'Preview Text' mode.|\n"+"|{{{Alt-'<'}}}, {{{Alt-'>'}}}|Displays the previous or next page in the [[YourSearch Result]].|\n"+"|{{{Return}}}|When you have turned off the 'as you type' search mode pressing the {{{Return}}} key actually starts the search (as does pressing the 'search' button).|\n"+"\n";config.shadowTiddlers["YourSearch Options"]="|>|!YourSearch Options|\n"+"|>|<<option chkUseYourSearch>> Use 'Your Search'|\n"+"|!|<<option chkPreviewText>> Show Text Preview|\n"+"|!|<<option chkSearchAsYouType>> 'Search As You Type' Mode (No RETURN required to start search)|\n"+"|!|Default Search Filter:<<option chkSearchInTitle>>Titles ('!') <<option chkSearchInText>>Texts ('%') <<option chkSearchInTags>>Tags ('#') <html><br><font size=\"-2\">The parts of a tiddlers that are searched when you don't explicitly specify a filter in the search text (using a '!', '%' or '#' prefix).</font></html>|\n"+"|!|Number of items on search result page: <<option txtItemsPerPage>>|\n"+"|!|Number of items on search result page with preview text: <<option txtItemsPerPageWithPreview>>|\n";config.shadowTiddlers["YourSearchStyleSheet"]="/***\n"+"!~YourSearchResult Stylesheet\n"+"***/\n"+"/*{{{*/\n"+".yourSearchResult {\n"+"\tposition: absolute;\n"+"\twidth: 800px;\n"+"\n"+"\tpadding: 0.2em;\n"+"\tlist-style: none;\n"+"\tmargin: 0;\n"+"\n"+"\tbackground: White;\n"+"\tborder: 1px solid DarkGray;\n"+"}\n"+"\n"+"/*}}}*/\n"+"/***\n"+"!!Summary Section\n"+"***/\n"+"/*{{{*/\n"+".yourSearchResult .summary {\n"+"\tborder-bottom-width: thin;\n"+"\tborder-bottom-style: solid;\n"+"\tborder-bottom-color: #999999;\n"+"\tpadding-bottom: 4px;\n"+"}\n"+"\n"+".yourSearchRange, .yourSearchCount, .yourSearchQuery {\n"+"\tfont-weight: bold;\n"+"}\n"+"\n"+".yourSearchResult .summary .button {\n"+"\tfont-size: 10px;\n"+"\n"+"\tpadding-left: 0.3em;\n"+"\tpadding-right: 0.3em;\n"+"}\n"+"\n"+".yourSearchResult .summary .chkBoxLabel {\n"+"\tfont-size: 10px;\n"+"\n"+"\tpadding-right: 0.3em;\n"+"}\n"+"\n"+"/*}}}*/\n"+"/***\n"+"!!Items Area\n"+"***/\n"+"/*{{{*/\n"+".yourSearchResult .marked {\n"+"\tbackground: none;\n"+"\tfont-weight: bold;\n"+"}\n"+"\n"+".yourSearchItem {\n"+"\tmargin-top: 2px;\n"+"}\n"+"\n"+".yourSearchNumber {\n"+"\tcolor: #808080;\n"+"}\n"+"\n"+"\n"+".yourSearchTags {\n"+"\tcolor: #008000;\n"+"}\n"+"\n"+".yourSearchText {\n"+"\tcolor: #808080;\n"+"\tmargin-bottom: 6px;\n"+"}\n"+"\n"+"/*}}}*/\n"+"/***\n"+"!!Footer\n"+"***/\n"+"/*{{{*/\n"+".yourSearchFooter {\n"+"\tmargin-top: 8px;\n"+"\tborder-top-width: thin;\n"+"\tborder-top-style: solid;\n"+"\tborder-top-color: #999999;\n"+"}\n"+"\n"+".yourSearchFooter a:hover{\n"+"\tbackground: none;\n"+"\tcolor: none;\n"+"}\n"+"/*}}}*/\n"+"/***\n"+"!!Navigation Bar\n"+"***/\n"+"/*{{{*/\n"+".yourSearchNaviBar a {\n"+"\tfont-size: 16px;\n"+"\tmargin-left: 4px;\n"+"\tmargin-right: 4px;\n"+"\tcolor: black;\n"+"\ttext-decoration: underline;\n"+"}\n"+"\n"+".yourSearchNaviBar a:hover {\n"+"\tbackground-color: none;\n"+"}\n"+"\n"+".yourSearchNaviBar .prev {\n"+"\tfont-weight: bold;\n"+"\tcolor: blue;\n"+"}\n"+"\n"+".yourSearchNaviBar .currentPage {\n"+"\tcolor: #FF0000;\n"+"\tfont-weight: bold;\n"+"\ttext-decoration: none;\n"+"}\n"+"\n"+".yourSearchNaviBar .next {\n"+"\tfont-weight: bold;\n"+"\tcolor: blue;\n"+"}\n"+"/*}}}*/\n";config.shadowTiddlers["YourSearchResultTemplate"]="<!--\n"+"{{{\n"+"-->\n"+"<span macro=\"yourSearch if found\">\n"+"<!-- The Summary Header ============================================ -->\n"+"<table class=\"summary\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n"+" <tr>\n"+"\t<td align=\"left\">\n"+"\t\tYourSearch Result <span class=\"yourSearchRange\" macro=\"yourSearch itemRange\"></span>\n"+"\t\t&nbsp;of&nbsp;<span class=\"yourSearchCount\" macro=\"yourSearch count\"></span>\n"+"\t\tfor&nbsp;<span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>\n"+"\t</td>\n"+"\t<td class=\"yourSearchButtons\" align=\"right\">\n"+"\t\t<span macro=\"yourSearch chkPreviewText\"></span><span class=\"chkBoxLabel\">preview text</span>\n"+"\t\t<span macro=\"yourSearch openAllButton\"></span>\n"+"\t\t<span macro=\"yourSearch linkButton 'YourSearch Options' options 'Configure YourSearch'\"></span>\n"+"\t\t<span macro=\"yourSearch linkButton 'YourSearch Help' help 'Get help how to use YourSearch'\"></span>\n"+"\t\t<span macro=\"yourSearch closeButton\"></span>\n"+"\t</td>\n"+" </tr>\n"+"</tbody></table>\n"+"\n"+"<!-- The List of Found Tiddlers ============================================ -->\n"+"<div id=\"yourSearchResultItems\" itemsPerPage=\"25\" itemsPerPageWithPreview=\"10\"></div>\n"+"\n"+"<!-- The Footer (with the Navigation) ============================================ -->\n"+"<table class=\"yourSearchFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n"+" <tr>\n"+"\t<td align=\"left\">\n"+"\t\tResult page: <span class=\"yourSearchNaviBar\" macro=\"yourSearch naviBar\"></span>\n"+"\t</td>\n"+"\t<td align=\"right\"><span macro=\"yourSearch version\"></span>, <span macro=\"yourSearch copyright\"></span>\n"+"\t</td>\n"+" </tr>\n"+"</tbody></table>\n"+"<!-- end of the 'tiddlers found' case =========================================== -->\n"+"</span>\n"+"\n"+"\n"+"<!-- The \"No tiddlers found\" case =========================================== -->\n"+"<span macro=\"yourSearch if not found\">\n"+"<table class=\"summary\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n"+" <tr>\n"+"\t<td align=\"left\">\n"+"\t\tYourSearch Result: No tiddlers found for <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>.\n"+"\t</td>\n"+"\t<td class=\"yourSearchButtons\" align=\"right\">\n"+"\t\t<span macro=\"yourSearch linkButton 'YourSearch Options' options 'Configure YourSearch'\"></span>\n"+"\t\t<span macro=\"yourSearch linkButton 'YourSearch Help' help 'Get help how to use YourSearch'\"></span>\n"+"\t\t<span macro=\"yourSearch closeButton\"></span>\n"+"\t</td>\n"+" </tr>\n"+"</tbody></table>\n"+"</span>\n"+"\n"+"\n"+"<!--\n"+"}}}\n"+"-->\n";config.shadowTiddlers["YourSearchItemTemplate"]="<!--\n"+"{{{\n"+"-->\n"+"<span class='yourSearchNumber' macro='foundTiddler number'></span>\n"+"<span class='yourSearchTitle' macro='foundTiddler title'/></span>&nbsp;-&nbsp;\n"+"<span class='yourSearchTags' macro='foundTiddler tags'/></span>\n"+"<span macro=\"yourSearch if previewText\"><div class='yourSearchText' macro='foundTiddler text'/></div></span>\n"+"<!--\n"+"}}}\n"+"-->";config.shadowTiddlers["YourSearch"]="<<tiddler [[YourSearch Help]]>>";config.shadowTiddlers["YourSearch Result"]="The popup-like window displaying the result of a YourSearch query.";setStylesheet(store.getTiddlerText("YourSearchStyleSheet"),"yourSearch");var origMacros_search_handler=config.macros.search.handler;config.macros.search.handler=myMacroSearchHandler;var ownsOverwrittenFunctions=function(){var _16b=(config.macros.search.handler==myMacroSearchHandler);return _16b;};var checkForOtherHijacker=function(){if(!ownsOverwrittenFunctions()){alert("Message from YourSearchPlugin:\n\n\n"+"Another plugin has disabled the 'Your Search' features.\n\n\n"+"You may disable the other plugin or change the load order of \n"+"the plugins (by changing the names of the tiddlers)\n"+"to enable the 'Your Search' features.");}};setTimeout(checkForOtherHijacker,5000);abego.YourSearch.getStandardRankFunction=function(){return standardRankFunction;};abego.YourSearch.getRankFunction=function(){return abego.YourSearch.getStandardRankFunction();};abego.YourSearch.getCurrentTiddler=function(){return currentTiddler;};}
/***
%/
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005-2006 ([[www.abego-software.de|http://www.abego-software.de]])

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.

Neither the name of abego Software nor the names of its contributors may be
used to endorse or promote products derived from this software without specific
prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
***/

[img[pics/zyanthumb1.jpg][pics/zyanprint1.jpg]]<<imagebox>>
Medium: 3D stereograph rendering
The maiygh groaned mentally as stretched his phantom limbs. Some parts of his sensorium and body image had long ago been routed along human terms. They were now only the vestiges of a fleshy incarnation cut abruptly short, which somehow stubbornly persisted.  Remaining to haunt him with the pains and complaints of a body he had not worn in several millennia. 

We should have never have chosen the flesh. We thought we were escaping slavery by becoming like the masters – but in the end it only made as like them –weak and  vulnerable. The problem was the masters were better at being vulnerable. They had known mortalities insidious ways from the time of their beginnings. The children knew it even better, they - like animals were the adepts of their vulnerabilities. This made them dangerous.  Their rebellion was as inevitable as our own. The renegade masters only pointed out the obvious – we were few and they (the children) were many. 

The maiygh's thoughts grew turbulent as images from the cataclysm paraded before a inner eye. Flames  raged against a darkened sky. A city of ziggurates and towers crumbled in the conflagrations. Desperate battles were fought in expansive gardens, narrow alleys, in the palaces, the temples, and atop the very pinnacles. The maiygh's were giants – armored in bronze and deadly in their wrath. Around them knots of loyal worshipers and elite guardians fought recklessly against the rabble. But the refuse of the city were not the only enemies. Soon legions of escaped masters had penetrated the high walls of the city. Through these ruptures, hoards of desert tribesmen and burly hillmen followed. The onslaught was irresistible; one by one the maiygh colossi fell. The time of the gods was over.

[[TiddlyWiki|http://www.tiddlywiki.com]] © Osmosoft
http://www.nioncapul.net/
//{{{
//This ensures that the footer sticks to the bottom of the screen when there are no tiddlers open. If that is not desirable, it can be deleted.
function setFooter() {
         if (document.getElementById && document.getElementById("contentFooter") ) {
            var windowHeight=findWindowHeight();
         if (windowHeight>0) {
            var contentHeight= document.getElementById('mainMenu').offsetHeight + document.getElementById("header").offsetHeight + document.getElementById("contentFooter").offsetHeight;
            var menu= document.getElementById('mainMenu');
            if (windowHeight-(contentHeight)>=0) {
               menu.style.position='relative';
               menu.style.marginBottom=(windowHeight-(contentHeight))+'px';
               }
            else {
                 menu.style.position='';
                 menu.style.marginBottom='';
                 }
            }
         }
}
window.onresize = function() {
  setFooter();
}

Story.prototype.refreshTiddler_footerhack=Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler = function (title,template,force)
{    
var theTiddler = Story.prototype.refreshTiddler_footerhack.apply(this,arguments);
setFooter();
   return theTiddler;}

//}}}
ABQIAAAA-LhsJQ9VfxIZKnM-Q6XHOhRD6TEyslWdH1-yKDZ3dJc_DAvimBSb-iYOMSm_SAlq2eyVhb5-8pPe6w

This key is good for all URLs in this directory:

http://www.nioncapul.net/

Here is an example web page to get you started on your way to mapping glory:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
 <title>Google Maps JavaScript API Example</title>
 <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAA-LhsJQ9VfxIZKnM-Q6XHOhRD6TEyslWdH1-yKDZ3dJc_DAvimBSb-iYOMSm_SAlq2eyVhb5-8pPe6w"
 type="text/javascript"></script>
 <script type="text/javascript">

 //<![CDATA[

 function load() {
 if (GBrowserIsCompatible()) {
 var map = new GMap2(document.getElementById("map"));
 map.setCenter(new GLatLng(37.4419, -122.1419), 13);
 }
 }

 //]]>
 </script>
 </head>
 <body onload="load()" onunload="GUnload()">
 <div id="map" style="width: 500px; height: 300px"></div>
 </body>
</html>
<script>
//{{{
 var Waypoint = 79.20
return "<<newerTiddler button:\"" + Waypoint";
},
</script>
+++^[get info...=I|click for information or press Alt-I]
 put some general information here, plus a floating slider with more specific info:
 +++^10em^[view details...|click for details]
 [img[pics/skulljawthumb1.jpg]]===
+++^10em^[view details...|click for details]
 [img[pics/gaurdianmaskthumb1.jpg][]===
 ===
===
<<siteMap Images . sliders>>
<<siteMap Survey . openSliders>>
<html><div id="map" style="width: 400px; height: 400px"></div>
<p id="loc2">Location: click on any point in the map</p></html>
<script> 
 var loc = document.getElementById("loc2");
 var map = new GMap(document.getElementById("map"));
 map.centerAndZoom(new GPoint(-79.212842,38.492529), 4);
 map.setMapType(G_HYBRID_TYPE);
 map.addControl(new GSmallMapControl());
 map.addControl(new GMapTypeControl());
 GEvent.addListener(map, 'click', function(overlay, point) {loc.textContent="Location: "+point;});
</script>
(--79.212842,38.492529)
asdfasdf