<!--{{{-->
<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]]; color: #00FF33; background-color: #333;}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%; color: #00FF33; background-color: #333;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#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>>
Official launch of this website.
Lancement officiel du site.
So I just found out about Rod ~McKuen... as a singer and lyricist. I'd heard the name before, but mainly through movie credits as I'm quite a bit of a film fan (he's also a composer) but I never did know that he not only wrote lyrics but that he also had written quite a few popular songs, including one which was a childhood favorite of mine... namely "Seasons in the Sun."

When I was a kid, I never really paid much attention to the words, so I always thought of it as a fun and joyful song -- especially since the few words that did stick out were those of the chorus, which goes "we had joy, we had fun, we had seasons in the sun"... the past tense never really struck me back then! It's only years later that I realized what the song was truly about and... well, I then started liking it even more, LOL.

You know, I don't understand why some people dislike this piece so much, considering the depth of those lyrics. I can only assume it is due to Jacks' version. Although personally, I still like this a thousand times better than most of the mainstream pop they put out today... but that's another story (or rant, if you would.)

So how did I discover ~McKuen had written this particular piece of pop culture? Well, we finally had a sunny day with great weather after a series of dull cold and grey days, and so the tune just popped in my head... I thought that was sort of weird, in a funny way, how even now that I *know* what the song is about, it still comes unbidden when I'm in a good mood. I love these types of associations between good and bad, merry and sad, etc... a sort of ying/yang thing. That got me to thinking it might be interesting to do a cover of the song... I have plenty of ideas for that, but I won't go into the details here.

Anyway, that got me started researching the song and, tada! Rod ~McKuen.

Did you know he also *sang* the song? The first text he wrote also included a quite different and darker ending, involving the character's unfaithful wife. Which makes that earlier version much more faithful (haha!) to the original French song by Jacques Brel. I do wonder though why it was later taken out... did cheating *really* bother folks more than death? I would have expected the song's general subject to be much more depressing and irksome to some, heh.
Pour ceux parmi vous qui ne le saurez pas, je prépare actuellement une anthologie "space opéra" pour les éditions Rivière Blanche.

Voici l'annonce officielle :

<<tiddler SpaceOp>>
Concernant le [[projet d'anthologie "space opera" chez Rivière Blanche|2011.04.12_FR]]...

J'ai un peu tardé à faire cette annonce, désolé, mais il a été décidé en accord avec l'éditeur de repousser l'échéance pour ce projet jusqu'à fin janvier. Ceci afin d'accorder plus de temps à certains auteurs pour finaliser leurs textes.

Donc, si vous aviez quelque chose en cours d'écriture, si vous souhaitiez soumettre une nouvelle mais n'aviez pas encore eu le temps de vous y mettre, ou si vous découvrez tout juste aujourd'hui ce projet... sachez que vous avez encore quelques mois pour participer !

Merci de faire passer l'info.
<<tiddler [[Interceptor (2009)]]>>
<<tiddler Chroniques>>
One of my current projects is a musical I wrote, based on Norse mythology, with music composed by Justin Radford.

We have recently launched a Kickstarter Campaign to gather $3000 to finance the project. This money will be used, among other things, to hire professional singers and pay for a proper recording studio.

Any contribution (even small ones) would, of course, be highly appreciated!

For more details, check out the page below.

http://www.kickstarter.com/projects/1772950786/in-odins-name-concept-album-funding
APPEL A TEXTES
Anthologie sur l'immortalité
(Editions Armada)

De tout temps, l'humanité a été à la fois fascinée et effrayée par la mort. L'homme cherche sans cesse à la fuir, la retarder, la contourner... que ce soit par la quête du Saint Graal, la Fontaine de Jouvence, la religion, les manipulations génétiques, le vampirisme, les mythologies...

Parlez-nous donc de ces manières de détourner l'inévitable, parlez-nous de vie éternelle, parlez-nous des avantages, mais aussi des inconvénients de cette immortalité tant recherchée par l'Homme... Soyez imaginatif, inventif, créatif...

Vous l'aurez donc compris, je cherche des nouvelles sur le thème de l'immortalité, pour une anthologie à paraître aux Editions Armada.

Mais attention ! Si ce thème a l'avantage d'être très riche et trans-genres, il est du coup très souvent traité. L'auteur devra donc faire attention à ne pas reprendre des recettes éculées et à éviter les clichés.

Bref : soyez original, soyez différent.

Tous les textes devront me parvenir d'ici le 1er septembre 2013, au plus tard. A noter que je n'entamerai la lecture des nouvelles qu'après cette date, inutile donc de vous presser à m'envoyer quelque chose le plus rapidement possible. Prenez votre temps. Chouchoutez votre texte, peaufinez-le, envoyez-moi un bijou bien ciselé.

Je ne tiens pas particulièrement à juguler la créativité des auteurs, mais vu qu'il faut malgré tout des limites, je demande en guise de compromis des textes ne dépassant pas 80 000 caractères, grand maximum (ma préférence, pour information, allant à des textes de 20 à 40 000 signes).

Genres acceptés : SF, fantastique, fantasy.

En ce qui concerne la rémunération, voici les termes :
- un exemplaire gratuit de l'anthologie
- une somme forfaitaire d'environ 50 €
- un pourcentage sur les ventes, calculé à partir du nombre de signes de votre texte

Les nouvelles devront être envoyées au format DOC par email à Alexandre Garcia :
asg ( at ) mvdbase ( dot ) com

Merci de ne soumettre qu'un seul texte par auteur.

N'hésitez pas à transmettre le message autour de vous.

Au plaisir de vous lire...
LA CHANSON DE ROLAND

Je viens de mettre en ligne une novella écrite en hommage à [[Roland C. Wagner|http://noosfere.com/icarus/livres/auteur.asp?numauteur=656]] qui, malheureusement, nous a quittés cet été.

Le texte est disponible sur les plateformes suivantes :

TELECHARGEMENT GRATUIT
* [[lulu.com|http://www.lulu.com/shop/ebook/product-20491069.html]] //(format epub)//
* [[Amazon|https://www.amazon.fr/dp/B00A1RG5Q0]] //(format Kindle)//
* [[Projet Gutenberg|http://self.gutenberg.org/details.aspx?bookid=2171509]] //(format PDF)//
* [[iBookstore / iTunes|https://itunes.apple.com/gb/book/la-chanson-de-roland/id576442523?mt=11]] //(format epub)//

LECTURE EN LIGNE
* [[Scribd|http://www.scribd.com/doc/112224052/rcw]]
It's finally here! We started working on this CD 6 years ago! How crazy is that? Well, all that hard work is now paying off.

The new [[Skeem]] CD is now available from Musea on all the usual legal platforms. It's called [[Just suggesting]] and it includes 8 of my lyrics.

Check it out!
Le voilà enfin ! Le nouvel album de [[Skeem]] est arrivé, après six ans de travail et de peaufinage... dingue, n'est-ce pas ?

L'album, titré [[Just suggesting]] (et paru chez Muséa), inclut 8 morceaux dont j'ai écrit les paroles. Il est d'ores et déjà disponible sur toutes les plateformes légales de téléchargement.

Jetez-y une oreille, vous m'en direz des nouvelles...
I am a poet and novelist in the Boston area, primarily writing in the YA and speculative fiction genres. I am represented by Nephele Tempest of The Knight Agency.

lisa@ljcohen.net

http://www.ljcohen.net
http://ljcbluemuse.blogspot.com
http://twitter.com/lisajanicecohen

<<top>>
Tiddlywiki Write (updated 11-22-10) is an implementation of the Tiddlywiki concept (version 2.6.1) and is an experiment in mind mapping for writers.

This TiddlyWiki is a modification initially based on the DevFire template, available here: http://tiddlythemes.com/#Home, and then tweaked to include the ability to change color palettes on the fly.

Feel free to use/alter this tool as is useful to you.  I am not a computer programmer and have built TWW using numerous existing plugins available for tiddlywiki.  Tiddlywiki is an open source project.

The Tiddlywiki homepage is here:  http://www.tiddlywiki.com 

Upgrade TWW:  You can upgrade the core code by clicking on 'backstage' (upper right hand corner), and selecting the upgrade tab.

<<top>>
<<tiddler 2013.11.01_FR>>

----
Voir les [[archives|Archives_FR]].
----
<<newTiddler>>
<<newJournal 'DD MMM YYYY'>>
<<saveChanges>>
<<selectPalette>>
<<slider chkSideBarTabs SideBarTabs 'Side Bar »' 'Open Side Bar Tabs'>>
<<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>
<<option chkGenerateAnRssFeed>> GenerateAnRssFeed
<<option chkOpenInNewWindow>> OpenLinksInNewWindow
<<option chkSaveEmptyTemplate>> SaveEmptyTemplate
<<option chkToggleLinks>> Clicking on links to tiddlers that are already open causes them to close
^^(override with Control or other modifier key)^^
<<option chkHttpReadOnly>> HideEditingFeatures when viewed over HTTP
<<option chkForceMinorUpdate>> Treat edits as MinorChanges by preserving date and time
^^(override with Shift key when clicking 'done' or by pressing Ctrl-Shift-Enter^^
<<option chkConfirmDelete>> ConfirmBeforeDeleting
Maximum number of lines in a tiddler edit box: <<option txtMaxEditRows>>
Folder name for backup files: <<option txtBackupFolder>>
<<option chkInsertTabs>> Use tab key to insert tab characters instead of jumping to next field
[img[images/english.jpg]] Albums I've worked on, in chronological order.
[img[images/french.jpg]] Ma discographie, dans l'ordre chronologique.
|bgcolor(#000000):! Date |bgcolor(#000000):! Album |bgcolor(#000000):! Artist |
|1996 |[[TV cars and magnet toys|TV cars and magnet toys_album]] (demo tape) |[[MK|MK_artist]] |
|1999 |[[Humanity]] (demo tape) |[[MK|MK_artist]] |
|2001.12 |[[MK|MK_album]] (demo CD) |[[MK|MK_artist]] |
|2010.12.06 |[[Istree]] |[[MSA Project]] |
|2013.10.29 |[[Just suggesting]] |[[Skeem]] |
|TBA |[[In Odin's name]] (musical) |[[Justin Radford]] |

[[Upcoming projects]]
Artist: [[MK|MK_artist]]
Album: [[Humanity]] (1999) + [[MK|MK_album]] (2001)
Lyrics: Alex S. Garcia
Music: Michael Kolomiets
----

She came out of the scene and into my life,
She named me her king and played with my eyes,
She knew I had seen within her disguise,
She gave me one sin, and I told her only lies...

The strength of my heart is pulling me out,
The void in my mind carries my shout,
The size of my soul is squeezing me in,
The voice in my mouth phrases the sin...

''I'll never be the same, I'll never be sane,
Never ever again, but I'll take the blame.
So welcome to the game of sorrow and shame,
Where fame is the name of this mortal pain...''

Then rain suddenly pours from the heavens above
And in silence of course, we maintain it's love,
Down to this earth of desolate souls.
Though from our birth, we run into holes...

We try to resist to the sins that exist,
We try to protest, but in vain - I confess!
So what is this crime, that I've schemed in my mind?
Is it just a way to walk into the day?...

''I'll never be the same, I'll never be sane,
Never ever again, but I'll take the blame.
So welcome to the game of sorrow and shame,
Where fame is the name of this mortal pain...''

----
lyrics (c) 1999 Alex S. Garcia / music (c) 1999 Michael Kolomiets
----
Background: #ddff88
Foreground: #000
PrimaryPale: #bbee66
PrimaryLight: #aa0033
PrimaryMid: #440000
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #99cc00
SecondaryMid: #db4
SecondaryDark: #440000
TertiaryPale: #bbee66
TertiaryLight: #EEC591
TertiaryMid: #440044
TertiaryDark: #000
[img[images/french.jpg]] [[Archives françaises|Archives_FR]]

[img[images/english.jpg]] [[English archives|Archives_EN]]
[[Latest news|News]]

2013
* NOV - [[2013.11.01_EN]] //(new Skeem CD is out)//
2012
* OCT - [[2012.10.06_EN]] //("In Odin's name" musical project)//
2011
* MAR - [[2011.03.13_EN]] //(about Rod ~McKuen)//
* MAR - [[2011.03.09_EN]] //(site launch)//
[[Dernières infos|Actualités]]

2013
* Nov - [[2013.11.01_FR]] //(parution du 2nd CD de Skeem)//
2012
* Nov - [[2012.11.05_FR]] //(La chanson de Roland)//
* Oct - [[2012.10.06_FR]] //(appel à textes "immortalité")//
2011
* Dec - [[2011.12.11_FR]] //(à propos du film "The Interceptor")//
* Oct - [[2011.10.31_FR]] //(MAJ de l'appel à textes)//
* Avr - [[2011.04.12_FR]] //(appel à textes space op)//
* Fév - [[2011.03.09_FR]] //(lancement du site)//
I have published a number of articles in various medias. I will be posting a list here soon.
Liste (incomplète) des supports où j'ai publié des articles (en langue française). Pour les textes anglophones, [[voir ici|Articles_EN]].
J'ai également publié nombre de [[nouvelles|Bibliographie]] et de [[traductions|Traductions]].
|bgcolor(#000000):! Date |bgcolor(#000000):! Support |bgcolor(#000000):! n° |
|2002.02 |[[Faeries]] |6 |
|? |[[Slash Imagivore]] |9 |
|? |[[Slash Imagivore]] |8 |
|? |[[Slash Imagivore]] |7 |
|? |[[Slash Imagivore]] |6 |
|2000.hiver |[[Slash]] |20 |
|1999.11 |[[Slash Imagivore]] |5 |
|1999.?? |[[Slash Imagivore]] |4 |
|1999.automne |[[Slash]] |19 |
|1999.07 |[[Slash Imagivore]] |3 |
|1999.06 |[[Slash Imagivore]] |2 |
|1999.04 |[[Slash Imagivore]] |1 |
|1998.10 |[[Slash]] |17 |
|1998.09 |[[Slash]] |16 |
|1998.08 |[[Slash]] |15 |
|1998.07 |[[Slash]] |14 |
|1998.05 |[[Slash]] |13 |
|1998.04 |[[Slash]] |12 |
|1998.03 |[[Slash]] |11 |
|1998.02 |[[Slash]] |10 |
|1998.01 |[[Slash]] |9 |
|1997.12 |[[Slash]] |8 |
|1997.11 |[[Slash]] |7 |
|1997.10 |[[Slash]] |6 |
|1997.09 |[[Slash]] |5 |
|1997.07 |[[Slash]] |4 |
|1997.06 |[[Slash]] |3 |
|1997.05 |[[Slash]] |2 |
|1997.04 |[[Slash]] |1 |
|1997.04 |[[Tempus Fugit]] |1 |
|1997.04 |[[Génération Scénario]] |2 |
|1997.01 |[[Slash]] |0 |
|1996.01 |[[Dragon & Microchips]] |10 |
|1995.12 |[[Génération Scénario]] |1 |
|1995.06 |[[Dragon & Microchips]] |9 |
|1995.04 |[[Scen'ART]] |2 |
|1995.01 |[[Scen'ART]] |1 |
|1995.01 |[[Dragon's News]] |6 |
|1995.01 |[[Chimères]] |27 |
|1994.11 |[[Planète à Vendre !]] |20R |
|1994.07 |[[Planète à Vendre !]] |19R |
|1994.05 |[[L'Ecran Fantastique]] |136 |
|1994.04 |[[Chimères]] |24 |
|1993.07 |[[Fréjus - le magazine]] |8 |
|1993.06 |[[Chimères]] |21 |
|1993.04 |[[Chimères]] |20 |
|1993.01 |[[Chimères]] |19 |
<<tiddler Artists>>
These are the artists I've worked with so far:

[[MK|MK_artist]]
[[MSA Project]]
[[Skeem]]
/***
|''Name:''|AlternateBackupPlugin|
|''Version:''|1.0.1 (3-Mar-2006)|
|''Source:''||
|''Author:''|KyleHale|
|''Type:''|Plugin|
!Description
Hijacks core backupPath function, replacing the datetime naming system
with a rotating set of backups, whose number is limited by the user.

!Issues/Todos
* Possible to insert an option into the AdvancedOptions Tiddler? That'd
make editing the number of backups that much easier.

!Revision History
* 1.0.1 (3-Mar-2006)
** Wrote code, totally stole [[Simon|SimonBaird]]'s documentation
system

!Code
***/
//{{{
config.options.txtBackupFolder = "twBackups";

if (!config.options.txtMaxBackups) config.options.txtMaxBackups="5";
if (!config.options.txtCurrentBackup)
config.options.txtCurrentBackup="1";

getBackupPath = function(localPath)
{
 var backSlash = true;
 var dirPathPos = localPath.lastIndexOf("\\");
 if(dirPathPos == -1)
 {
 dirPathPos = localPath.lastIndexOf("/");
 backSlash = false;
 }
 var backupFolder = config.options.txtBackupFolder;
 if(!backupFolder || backupFolder == "")
 backupFolder = ".";
 var backupPath = localPath.substr(0,dirPathPos) + (backSlash ? "\\" :
"/") + backupFolder + localPath.substr(dirPathPos);
 backupNum = config.options["txtCurrentBackup"];
 backupNum++;
 if (backupNum>config.options["txtMaxBackups"]) {
 backupNum=1;
 }
 backupPath = backupPath.substr(0,backupPath.lastIndexOf(".")) + "." +
backupNum + ".html";
 config.options["txtCurrentBackup"]=backupNum;
 saveOptionCookie("txtCurrentBackup");
 return backupPath;
}

//}}}
Artist: [[MSA Project]]
Album: [[Istree]]
Lyrics: Alex S. Garcia
Music: Michel Fontes
----

For billions of years, Istree had dominion --
An immense Empire, corrupted by greed and ambition.
But, unbeknownst to men, other realities thrived,
And soon the thin layer separating them would rip and then...
Who would survive?

----
lyrics (c) 2010 Alex S. Garcia / music (c) 2010 Michel Fontes
----
Liste de mes nouvelles parues en langue française. Pour les textes anglphones, [[voir ici|Bibliography]].
J'ai également publié nombre d'[[articles|Articles_FR]] et de [[traductions|Traductions]].
|bgcolor(#000000):! n° |bgcolor(#000000):! Titre |bgcolor(#000000):! Ed. |bgcolor(#000000):! Parution |bgcolor(#000000):! Publication |bgcolor(#000000):! n° |
|22 |La chanson de Roland |1 |2012 |[[téléchargement gratuit|http://www.lulu.com/shop/alexandre-s-garcia/la-chanson-de-roland/ebook/product-20491069.html]] |n/a |
|21 |Des voix dans le vent |1 |2003 |[[Solaris]] [CA] |147 |
|20 |Au seuil des jours anciens |1 |2001.03 |[[Horrifique]] [CA] |31 |
|19 |L'île aux Sans Visages |1 |1999.07 |[[Les Manuscrits d'Edward Derby]] |6 |
|18 |L'enfant et la Marelle |1 |1997.01.20 |[[Chimères]] |34 |
|17 |Aquatique blues |1 |1995.06.29 |[[Miniature]] |23 |
|16 |Warlock |1 |1995.03.21 |[[Kaotic]] |11 |
|15 |Depuis la fin des temps |1 |1995.01 |[[Miniature]] |21 |
|14 |Ainsi soit-il... |1 |1994.12 |[[Octa]] [BE] |52 |
|13 |Il n'est pas facile d'être un dieu |1 |1994.11 |[[Atmosphère]] |7 |
|12 |Vestiges du passé (proche ?) |1 |1994.08.27 |[[Anti-Planète]] |2 |
|11 |Sombres cortèges |1 |1994.08.19 |[[Micronos]] |15 |
|10 |Leçon de coloriage |1 |1994.07.01 |[[Solstare]] |7 |
|9 |L'énigme du pendu assassiné |1 |1994.06.07 |[[La Lettre de Baker Street]] |HS 1994 |
|8 |Confession |1 |1994.04.19 |[[QLVDCVG]] |8 |
|7 |Prise de conscience |1 |1994.03.21 |[[Solstare]] |6 |
|6 |Digestif |1 |1993.03.14 |[[Gloubiboulgraph]] |3 |
|5 |Sous les griffes de Dame Nuit |2 |1993.03.31 |[[Horrifique]] [CA] |2 |
|" | " |1 |1993.03.14 |[[Gloubiboulgraph]] |3 |
|4 |Pris au piège |1 |1992.10.07 |[[Chimères]] |18 |
|3 |Blanche nuit |1 |1992.03.12 |[[Chimères]] |16 |
|2 |Chiens de nuit, chienne de vie ! |1 |1990.11.09 |[[Les ami(e)s de Stephen King]] (anthologie) |2 |
|1 |La nef du rêve de la fin des temps |2 |1990.10.11 |[[Chimères]] |11 |
|" | " |1 |1989.12.21 |[[Rushes]] |1 |
No fictions have been published in English yet.

For a list of French stories, check [[this page|Bibliographie]].
Je suis né en 1970. En tant qu'ingénieur, mon père a beaucoup voyagé pour son travail, emmenant la famille avec lui. Cela me donna l'occasion de découvrir très jeune d'autres cultures et langages -- et plus particulièrement l'Anglais, que j'appris pendant mon enfance en Arabie Séoudite, où je fus élevé durant huit ans parmi des Américains.

J'ai toujours su ce que je voulais faire dans la vie. Il n'y eut jamais aucun doute dans mon esprit. Je serai écrivain. Mon écriture se focalisa d'abord sur des romans (que je ne terminais jamais) puis des nouvelles (plus rapides à finir) et enfin des poèmes (très brièvement) et des textes de chansons dès 1986.

En 1989, je publie mes premières nouvelles qui sont rapidement suivies d'articles, critiques, dossiers, etc, me conduisant dans une "carrière" en dents de scie comme journaliste freelance (//Ecran Fantastique//, //Slash//, //Bifrost//...) tout en poursuivant mes études en audiovisuel, puis littérature et enfin journalisme.

Mes écrits sont généralement dans les domaines de la ~Science-Fiction et du "showbiz" (musique, cinéma, séries télé...).

Côté musique, j'ai écrit de nombreux morceaux avec un ami guitariste (~Jean-Michel Orsini) avant de m'installer sur Nice. Là, je rencontrais Michaël Kolomïets (alias MK), musicien de génie. A peu près à la même époque, je fus (brièvement) le chanteur-parolier d'un groupe de rock tâtonnant -- dont j'étais le membre le plus âgé.

Fin 2006, c'est la rencontre avec Serge Barbaro (Skeem) pour qui j'écris de nombreux textes, dont certains figureront sur son prochain album. Et en 2008, c'est la naissance du [[MSA Project]] avec Mitch et Serge.
I was born in 1970, of French parents. As an engineer, my father traveled throughout the world on various assignments, taking our family with him. This gave me early exposure to various cultures and languages -- especially English, which I learned as a child, while I was raised among Americans in Saudi Arabia for 8 years.

I have always known what I wanted to do in my life. There was never any doubt in my mind: I would be a writer. At first focusing on novels (which I would never finish) then on short stories (easier to complete) I finally started writing poetry (very briefly) and song lyrics in 1986.

In 1989, I began publishing short fictions, which were quickly followed by numerous articles, reviews, features and such, leading me into a haphazard "career" in freelance writing while pursuing my studies in film, then literature and finally journalism.

My writing is usually focused on ~Science-Fiction and entertainment (music, movies, TV...)

Music-wise, I wrote many songs with a guitarist friend of mine (~Jean-Michel Orsini) before moving to Nice. There, I met Michael (aka MK) a musical genius! About the same time I met him, I was also (briefly) the lead singer and lyricist for a fumbling (and unnamed) rock band, in which I was the eldest member.

In late 2006, I met Serge Barbaro (Skeem) for whom I wrote many lyrics which will be used on his upcoming album. Then 2008 saw the birth of the [[MSA Project]] with both Serge and Mitch.
Artist: [[MSA Project]]
Album: [[Istree]]
Lyrics: Alex S. Garcia
Music: Michel Fontes & Serge Barbaro
----

Once this world was proud, once this world had life,
Once this world had hope, now it's just so cold...
Through the endless night, water rules supreme,
Due to selfish greed, terraforming might...

Saved by a whale, from a burning wreckage,
Watching his ship sinking deep, a man is adrift on the sea.
Riding the waves, he hears voices in his head,
Telling him to hold on to hope...

''Rising high through the mist,
Floating on the tip
Of a rock, standing tall,
Cathedral of fate...''

This planetary engineering,
Instead of creating, spread out destruction.
Many through Istree, angered and dismayed
Sought all together for a solution...

Simon Farleigh gathered all of them here,
Creatures from all realities... Mythlania and Musania...
This wounded world would serve to shelter the
Magic Science Academy.

''Rising high through the mist,
Floating on the tip
Of a rock, standing tall,
Cathedral of fate...

Headquarter of the wise,
Here they live and die.
Searching for a way to heal
The universe that bleeds.''

The castaway has reached the rocky shore he'd seen.
Animals are here...
Greeting him with smiles, rushing him inside...

Within walls of stone, mirrored halls unknown,
Gathering has grown...
He's now one of them, they've accepted him...

''Rising high through the mist,
Floating on the tip
Of a rock, standing tall,
Cathedral of fate...''

//Union of magic and of science,
Maybe this could be the key...
Looking for new ways to fix that old breach
Seeking for answers that we need.//

''Headquarter of the wise,
Here they live and die.
Searching for a way to heal
The universe that bleeds.''

//Union of magic and of science,
Maybe this could be the key...
Looking for new ways to fix that old breach
Seeking for answers that we need.//

Maybe this is the key...

----
lyrics (c) 2010 Alex S. Garcia / music (c) 2010 Michel Fontes & Serge Barbaro
----
Artist: [[MK|MK_artist]]
Album: [[Humanity]] (1999) + [[MK|MK_album]] (2001)
Lyrics: Alex S. Garcia
Music: Michael Kolomiets
----

Someone, somewhere, stands staring at the sun,
On some seashore, in a sandstorm so strong.
Silent souls smile as slides a short song...
On stormswept soils, Steven stares so stunned.

''Sudden seen sorrow sweeps slowly,
Storm-strucked spiders spin sorry,
Some shapes -- some say -- stay strong,
But see now how snow snails sing their songs''

Ships sailing starwards slowly shine
As sailors sing strongly seaward to the shore
Shadows shiver and scream on the screen,
They seem so shallow, straight, sad, stiff and sore...

On a cobalt beach, a speechless preacher speaks
As he eats his peach he starts to preach his speech
"Since I sinned, I will submit my soul to the seven seas,
As I set sail on a black sea in the seventies"

//Slide like a snail, like a snake, in the middle of a pool so nake,
There you see the Sun still shines and shivers in the sky
And you wish you'd never asked to see it or now you die
Your crimson breath cries for shining air but you smile and cry cause you don't care//

So sell the shell stuff at the stare of the sea
Some will smile at me as ships stand and sail
Sorrow so still I must submit my soul to the sea
And set sail on a black sea, searching for the seasnail...

''Sudden seen sorrow sweeps slowly,
Storm-strucked spiders spin sorry,
Some shapes -- some say -- stay strong,
But see now how snow snails sing their songs''

----
[img[images/english.jpg]]  ABOUT THE SONG -- Written in 1988. This is quite likely, to this date, the oldest of my lyrics to have ever been put to music. It was a somewhat failed experiment, where I attempted to write a song using mostly words which started with an S. The reason I say I failed is because of the one verse ("On a cobalt beach...") where I focused on the 'ea' sound rather than the S words (ironically, this has become one of my favorite parts in the song). Still, I am rather fond and proud of this one, especially considering how old it is and the fact that I was only 18 when I wrote it...
----
lyrics (c) 1999 Alex S. Garcia / music (c) 1999 Michael Kolomiets
----
Background: #bbbbff
Foreground: #000
PrimaryPale: #99aacc
PrimaryLight: #006699
PrimaryMid: #002244
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #002244
TertiaryPale: #99aacc
TertiaryLight: #aaaaff
TertiaryMid: #000
TertiaryDark: #8B7355 
Artist: [[Skeem]]
Album: [[Just suggesting]]
Lyrics: Alex S. Garcia
Music: Serge Barbaro
----

A sight of the unseen in the glimpse of a dream,
A sign of what has been, is, and will be.
Aside the wind we cast the remnants of the past...
Nothing we say or do can ever last...

The words we write
In shades of black,
All lines in time
That alter life
In ways unknown.
And secret paths
Unfold before
Our weary eyes.

Where day and night
In mind unite
And silent laughs,
Echoing fright,
Shatter and shine
Darkly inside...
Quietly numb,
Quietly cry...

Glittering dust in the grips of the lost,
Gathering rust, fulfilling the gaps.
Faltering trust in the grasp of old hope,
Shimmering first the pages of our lives...

The words we read,
The crimes we see,
The hopes we free,
In hope we'll be
A better man,
A better son,
Before it all
Can come undone.

But now the times
Are passing by,
Quicker than
Could catch our eye.
A simple plan
Is all we need,
But in our greed
We fail to stand...

Hand in hand,
We can survive
What was then
And what will be.
For in the end
The page is blank,
For us to write
The final line...

----
[img[images/english.jpg]]  ABOUT THE SONG -- Life is much more complex than the manichean concept of Good vs. Evil... There are many shades of grey out there. And who we are, what we do, all stems from our own acts and choices.
----
lyrics (c) 2013 Alex S. Garcia / music (c) 2013 Serge Barbaro
----
Background: #FFFFFF
Foreground: #000
PrimaryPale: #FF8C69
PrimaryLight: #FF8C69
PrimaryMid: #8B4C39
PrimaryDark: #410
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #FFD39B
TertiaryLight: #EEC591
TertiaryMid: #CDAA7D
TertiaryDark: #8B7355 
<<calendar>>
Background: #ddcc99
Foreground: #000
PrimaryPale: #998855
PrimaryLight: #664411
PrimaryMid: #221111
PrimaryDark: #410
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #998855
TertiaryLight: #EEC591
TertiaryMid: #841
TertiaryDark: #8B7355
Background: #ffdd77
Foreground: #000
PrimaryPale: #aa8855
PrimaryLight: #dd9922
PrimaryMid: #554422
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #aa8855
TertiaryLight: #EEC591
TertiaryMid: #000
TertiaryDark: #8B7355
Toutes les chansons sur ce site sont protégées par le droit d'auteur.

Les textes plus anciens (pré 2002) sont déposés à la [[SNAC|http://www.snac.fr/]]. Les plus récents sont déposés à la [[SACEM|http://www.sacem.fr/]].

Cliquez sur le titre d'une chanson pour en lire les paroles.

<<tiddler Songlist>>
Artist: [[MSA Project]]
Album: [[Istree]]
Lyrics: Alex S. Garcia
Music: Michel Fontes & Serge Barbaro
----

I look at the sky, I look at my feet,
I look all around, I can't stand this anymore now...
I have been here for so many years that I can't think of any
Things that I used to believe in, this I fear now will destroy me.

Stranded and lost,
Homesick and caught in shadows...
Stranded and lost,
And caught...

''Long has it been since I've landed here
On these shores that I long to leave now forever
But this is my life and this is my curse
Yet I retain hope, for hope is all I've got''

I was on a ship that sailed here, greatest of an immense army,
Part of the Empire of Istree, writing what would become history.
But our fleet was caught in a trap, set by cunning minds with insight,
All within sight of this hated place where I now lie in despair!

Stranded and lost,
Homesick and caught in shadows... shadows...
Stranded and lost,
And caught...

//Istree has dominion over worlds and planets,
Moons and suns revolving, galaxies expanding,
Over lives so many, billion lands aplenty,
Reaching out through heavens, warring with all aliens...

Epic was the battle, cosmic and enthralling,
Leaving out so many drifting off or stranded
Floating in a vacuum, warping space and time,
Until all is over and silence claims its rights...

Istree has dominion, eternal and spreading,
Powerful Empire meant to rule through fear and
Mighty laws to tame all those who hope to break it,
Destiny revealing prophecies to hope in...

Epic was the battle, cosmic and enthralling,
Leaving out so many drifting off or stranded
Floating in a vacuum, warping space and time,
Until all is over and silence claims its rights...//

''Long has it been since I've landed here
On these shores that I long to leave now forever
But this is my life and this is my curse
Yet I retain hope, for hope is all I've got''

----
lyrics (c) 2010 Alex S. Garcia / music (c) 2010 Michel Fontes & Serge Barbaro
----
Titre original : Red Riding Hood
Film fantastique américain de Catherine Hardwicke
Scénario de David Leslie Johnson
Avec Amanda Seyfried, Gary Oldman, Billy Burke, Max Irons, Virginia Madsen, Lukas Haas et Julie Christie
Vu le 27 novembre 2011

Un village vit dans la peur constante du loup-garou qui les terrorise depuis plusieurs générations. Afin d'apaiser la créature, les villageois lui offrent régulièrement des sacrifices d'animaux. Mais tout bascule lorsque la soeur de l'héroïne est retrouvée morte, de toute évidence tuée par le loup-garou...

Ce film prouve, une fois de plus, qu'il faut se méfier des critiques. Celles de cette version du conte de Perrault sont particulièrement virulentes. On lui reproche notamment son abondance de clichés et d'être le Twilight des contes de fées... A se demander si nous avons bien vu le même film !

J'avoue avoir moi-même été un peu inquiet au départ, vu que la réalisatrice avait précédemment signé l'insipide Twilight (le premier de la série). Je soupçonne d'ailleurs que nombre de détracteurs de "Red Riding Hood" ont du se fier uniquement à ça, sans réellement prêter attention au film (s'ils l'ont même du tout visionné).

Lorsque j'entre dans un film, je possède cette faculté de pouvoir m'y immerger totalement en faisant abstraction de mes doutes, mes craintes, mes a priori ou autres ouï-dires. Je l'accepte pour ce qu'il est, du moins pendant la séance. Ce n'est qu'après que je m'élance dans la réflexion, la comparaison et/ou l'analyse.

Donc, pour en revenir à ce film, commençons par rappeler qu'il s'agit d'une adaptation d'un conte de fées. Je sais, cela peut paraître une évidence, pourtant il me semble nécessaire de remettre les points sur les i. Car, après tout, d'où viennent les clichés si ce n'est d'une répétition excessive d'anciens thèmes et sujets que nous connaissons tous par coeur ? Or les contes de fées font, justement, partie de ce vivier de textes qui ont de par leur popularité contribué à la naissance de nombreux clichés. Par conséquent, si l'on va voir ce genre de film, il me semble raisonnable de s'attendre à y trouver quelques clichés, de par la nature même du sujet.

Cela étant dit, le film m'a justement étonné par son traitement original. Certes, il n'échappe pas totalement aux clichés, mais le contraire m'eut encore plus étonné. Il arrive toutefois, je trouve, à offrir une interprétation nouvelle et originale du sujet tout en parvenant à maintenir le mystère sur l'identité du loup-garou. Franchement, si vous l'aviez devinée, chapeau ! On en vient à soupçonner tout le monde sauf la bonne personne !

J'ai trouvé le scénario surprenant, s'éloignant souvent du conte, tout en y insérant des éléments plus anciens... comme le loup-garou qui fait manger des morceaux de la grand-mère au chaperon rouge ! Il ne s'agit pas d'une idée neuve... cela vient en fait directement du [[conte oral, moins connu mais plus ancien encore|http://fr.wikipedia.org/wiki/Le_Petit_Chaperon_rouge#Versions_europ.C3.A9ennes]] que la version de Perrault !

Comme vous pouvez le constater, il s'agit d'une version très sombre et sanglante. L'atmosphère est glauque et la photographie époustouflante. Les acteurs sont bons, la bande originale est magnifique...

Quant à comparer à Twilight, non ! Nous sommes à des années-lumière de cette mièvre série vampirique. Le seul lien qu'on pourrait trouver (et reprocher à la réalisatrice) est ce côté un peu "rose" des dernières séquences. Mais cela reste très léger et, au final, nous sommes ici dans un film bien plus noir et violent (même si jamais gore, étonnamment).

Attention, je ne dis pas non plus qu'il s'agisse d'un chef-d'oeuvre... mais arrêtons en tout cas d'incendier des films juste à cause de leurs liens (souvent ténus) à d'autres oeuvres parfois, elles, plus contestables.

NOTE : 5 sur 8
Lorsque je regarde un film ou écoute de la musique, j'ai souvent tendance à noter ensuite dans un fichier quelques commentaires. Ce n'est pas systématique, mais cela m'arrive assez fréquemment -- surtout lorsqu'un élément spécifique (qu'il soit positif ou négatif, d'ailleurs) me marque. Ayant en outre une assez mauvaise mémoire, c'est donc en partie une manière pour moi de me souvenir de détails plus ou moins significatifs liés à une oeuvre donnée.

Jusqu'à présent, je me contentais à cantonner ces annotations -- qui ne sont ni des critiques ni de véritables chroniques, disons plutôt des 'opinons' ou des 'impressions' -- dans un fichier Excel sur mon disque dur.

Cherchant ce que je pouvais bien rajouter comme données à ce site (et sur Facebook, j'avoue !) j'ai repensé à ces textes.

J'ai donc décidé de les publier sur internet (en les retravaillant un minimum, tout de même !)

Les plus anciens seront uniquement disponibles ici. Quant à mes prochains écrits, ils seront visibles ici, mais également (du moins pour certains) sur ma page Facebook.

* [[Chroniques ciné]]
* [[Chroniques livres]]
* [[Chroniques musique]]
* [[Chroniques séries]]

Je rajouterai peut-être aussi ici quelques textes déjà publiés ailleurs.
Liste alphabétique des films chroniqués sur ce site.
<<list filter [tag[films]]>>
Cette page liste toutes les chansons que j'ai écrites (et qui ont été éditées) dans l'ordre chronologique de leur écriture.

Voir aussi : [[liste alphabétique|Chansons]] et [[ordre discographique|Albums]].

NOTE : Les dates données ici correspondent uniquement à la période d'écriture des paroles elles-mêmes sans tenir compte des autres phases de développement. Pour plus d'informations, voir les pages consacrées à des chansons spécifiques, qui peuvent dans certains cas contenir plus de détails.

Colonne A = Début d'écriture
Colonne B = Fin d'écriture
Colonne C = Titre de la chanson

<<tiddler Songlist2>>
Background: #cccccc
Foreground: #000
PrimaryPale: #999999
PrimaryLight: #667788
PrimaryMid: #334444
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #555566
TertiaryPale: #999999
TertiaryLight: #EEC591
TertiaryMid: #000
TertiaryDark: #8B7355
[img[images/english.jpg]] You can email me at the address below.
[img[images/french.jpg]] Vous pouvez me joindre à l'adresse ci-dessous.

asg ( at ) mvdbase ( dot ) com
/***
|Name|DatePlugin|
|Source|http://www.TiddlyTools.com/#DatePlugin|
|Version|2.2.1|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description||

There are quite a few calendar generators, reminders, to-do lists, 'dated tiddlers' journals, blog-makers and GTD-like schedule managers that have been built around TW.  While they all have different purposes, and vary in format, interaction, and style, in one way or another each of these plugins displays and/or uses date-based information to make finding, accessing and managing relevant tiddlers easier.  This plugin provides a general approach to embedding dates and date-based links/menus within tiddler content.

This plugin display formatted dates, for the specified year, month, day using number values or mathematical expressions such as (Y+1) or (D+30).  Optionally, you can create a link from the formatted output to a 'dated tiddler' for quick blogging or create a popup menu that includes the dated tiddler link plus links to changes made on that date as well as links to any pending reminders for the coming 31 days (if the RemindersPlugin is installed).  This plugin also provides a public API for easily incorporating formatted date output (with or without the links/popups) into other plugins, such as calendar generators, etc.
!!!!!Usage
<<<
When installed, this plugin defines a macro: {{{<<date [mode] [date] [format] [linkformat]>>}}}.  All of the macro parameters are optional and, in it's simplest form, {{{<<date>>}}}, it is equivalent to the ~TiddlyWiki core macro, {{{<<today>>}}}.

However, where {{{<<today>>}}} simply inserts the current date/time in a predefined format (or custom format, using {{{<<today [format]>>}}}), the {{{<<date>>}}} macro's parameters take it much further than that:
* [mode] is either ''display'', ''link'' or ''popup''.  If omitted, it defaults to ''display''.  This param let's you select between simply displaying a formatted date, or creating a link to a specific 'date titled' tiddler or a popup menu containing a dated tiddler link, plus links to changes and reminders.
* [date] lets you enter ANY date (not just today) as ''year, month, and day values or simple mathematical expressions'' using pre-defined variables, Y, M, and D for the current year, month and day, repectively.  You can display the modification date of the current tiddler by using the keyword: ''tiddler'' in place of the year, month and day parameters.  Use ''tiddler://name-of-tiddler//'' to display the modification date of a specific tiddler.  You can also use keywords ''today'' or ''filedate'' to refer to these //dynamically changing// date/time values.  
* [format] and [linkformat] uses standard ~TiddlyWiki date formatting syntax.  The default is "YYYY.0MM.0DD"
>^^''DDD'' - day of week in full (eg, "Monday"), ''DD'' - day of month, ''0DD'' - adds leading zero^^
>^^''MMM'' - month in full (eg, "July"), ''MM'' - month number, ''0MM'' - adds leading zero^^
>^^''YYYY'' - full year, ''YY'' - two digit year, ''hh'' - hours, ''mm'' - minutes, ''ss'' - seconds^^
>^^//note: use of hh, mm or ss format codes is only supported with ''tiddler'', ''today'' or ''filedate'' values//^^
* [linkformat] - specify an alternative date format so that the title of a 'dated tiddler' link can have a format that differs from the date's displayed format

In addition to the macro syntax, DatePlugin also provides a public javascript API so that other plugins that work with dates (such as calendar generators, etc.) can quickly incorporate date formatted links or popups into their output:

''{{{showDate(place, date, mode, format, linkformat, autostyle, weekend)}}}'' 

Note that in addition to the parameters provided by the macro interface, the javascript API also supports two optional true/false parameters:
* [autostyle] - when true, the font/background styles of formatted dates are automatically adjusted to show the date's status:  'today' is boxed, 'changes' are bold, 'reminders' are underlined, while weekends and holidays (as well as changes and reminders) can each have a different background color to make them more visibly distinct from each other.
* [weekend] - true indicates a weekend, false indicates a weekday.  When this parameter is omitted, the plugin uses internal defaults to automatically determine when a given date falls on a weekend.
<<<
!!!!!Examples
<<<
The current date: <<date>>
The current time: <<date today "0hh:0mm:0ss">>
Today's blog: <<date link today "DDD, MMM DDth, YYYY">>
Recent blogs/changes/reminders: <<date popup Y M D-1 "yesterday">> <<date popup today "today">> <<date popup Y M D+1 "tomorrow">>
The first day of next month will be a <<date Y M+1 1 "DDD">>
This tiddler (DatePlugin) was last updated on: <<date tiddler "DDD, MMM DDth, YYYY">>
The SiteUrl was last updated on: <<date tiddler:SiteUrl "DDD, MMM DDth, YYYY">>
This document was last saved on <<date filedate "DDD, MMM DDth, YYYY at 0hh:0mm:0ss">>
<<date 2006 07 24 "MMM DDth, YYYY">> will be a <<date 2006 07 24 "DDD">>
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''DatePlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
''2006.05.09 [2.2.1]'' added "todaybg" handling to set background color of current date.  Also, honor excludeLists tag when getting lists of tiddlers.  Based on suggestions by Mark Hulme.
''2006.05.05 [2.2.0]'' added "linkedbg" handling to set background color when a 'dated tiddler' exists.  Based on a suggestion by Mark Hulme.
''2006.03.08 [2.1.2]'' add 'override leadtime' flag param in call to findTiddlersWithReminders(), and add "Enter a title" default text to new reminder handler.  Thanks to Jeremy Sheeley for these additional tweaks.
''2006.03.06 [2.1.0]'' hasReminders() nows uses window.reminderCacheForCalendar[] when present.  If calendar cache is not present, indexReminders() now uses findTiddlersWithReminders() with a 90-day look ahead to check for reminders.  Also, switched default background colors for autostyled dates: reminders are now greenish ("c0ffee") and holidays are now reddish ("ffaace").
''2006.02.14 [2.0.5]'' when readOnly is set (by TW core), omit "new reminders..." popup menu item and, if a "dated tiddler" does not already exist, display the date as simple text instead of a link.
''2006.02.05 [2.0.4]'' added var to variables that were unintentionally global.  Avoids FireFox 1.5.0.1 crash bug when referencing global variables
''2006.01.18 [2.0.3]'' In 1.2.x the tiddler editor's text area control was given an element ID=("tiddlerBody"+title), so that it was easy to locate this field and programmatically modify its content.  With the addition of configuration templates in 2.x, the textarea no longer has an ID assigned.  To find this control we now look through all the child nodes of the tiddler editor to locate a "textarea" control where attribute("edit") equals "text", and then append the new reminder to the contents of that control.
''2006.01.11 [2.0.2]'' correct 'weekend' override detection logic in showDate()
''2006.01.10 [2.0.1]'' allow custom-defined weekend days (default defined in config.macros.date.weekend[] array)
added flag param to showDate() API to override internal weekend[] array
''2005.12.27 [2.0.0]'' Update for TW2.0
Added parameter handling for 'linkformat'
''2005.12.21 [1.2.2]'' FF's date.getYear() function returns 105 (for the current year, 2005).  When calculating a date value from Y M and D expressions, the plugin adds 1900 to the returned year value get the current year number.  But IE's date.getYear() already returns 2005.  As a result, plugin calculated date values on IE were incorrect (e.g., 3905 instead of 2005).  Adding +1900 is now conditional so the values will be correct on both browsers.
''2005.11.07 [1.2.1]'' added support for "tiddler" dynamic date parameter
''2005.11.06 [1.2.0]'' added support for "tiddler:title" dynamic date parameter
''2005.11.03 [1.1.2]'' when a reminder doesn't have a specified title parameter, use the title of the tiddler that contains the reminder as "fallback" text in the popup menu.  Based on a suggestion from BenjaminKudria.
''2005.11.03 [1.1.1]'' Temporarily bypass hasReminders() logic to avoid excessive overhead from generating the indexReminders() cache.  While reminders can still appear in the popup menu, they just won't be indicated by auto-styling the date number that is displayed.  This single change saves approx. 60% overhead (5 second delay reduced to under 2 seconds).
''2005.11.01 [1.1.0]'' corrected logic in hasModifieds() and hasReminders() so caching of indexed modifieds and reminders is done just once, as intended.  This should hopefully speed up calendar generators and other plugins that render multiple dates...
''2005.10.31 [1.0.1]'' documentation and code cleanup
''2005.10.31 [1.0.0]'' initial public release
''2005.10.30 [0.9.0]'' pre-release
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].
<<<
!!!!!Code
***/
//{{{
version.extensions.date = {major: 2, minor: 2, revision: 1, date: new Date(2006,5,9)};
//}}}

//{{{
config.macros.date = {
	format: "YYYY.0MM.0DD", // default date display format
	linkformat: "YYYY.0MM.0DD", // 'dated tiddler' link format
	linkedbg: "#babb1e", // "babble"
	todaybg: "#ffab1e", // "fable"
	weekendbg: "#c0c0c0", // "cocoa"
	holidaybg: "#ffaace", // "face"
	modifiedsbg: "#bbeeff", // "beef"
	remindersbg: "#c0ffee", // "coffee"
	holidays: [ "01/01", "07/04", "07/24", "11/24" ], // NewYearsDay, IndependenceDay(US), Eric's Birthday (hooray!), Thanksgiving(US)
	weekend: [ 1,0,0,0,0,0,1 ] // [ day index values: sun=0, mon=1, tue=2, wed=3, thu=4, fri=5, sat=6 ]
};
//}}}

//{{{
config.macros.date.handler = function(place,macroName,params)
{
	// do we want to see a link, a popup, or just a formatted date?
	var mode="display";
	if (params[0]=="display") { mode=params[0]; params.shift(); }
	if (params[0]=="popup") { mode=params[0]; params.shift(); }
	if (params[0]=="link") { mode=params[0]; params.shift(); }
	// get the date
	var now = new Date();
	var date = now;
	if (!params[0] || params[0]=="today")
		{ params.shift(); }
	else if (params[0]=="filedate")
		{ date=new Date(document.lastModified); params.shift(); }
	else if (params[0]=="tiddler")
		{ date=store.getTiddler(story.findContainingTiddler(place).id.substr(7)).modified; params.shift(); }
	else if (params[0].substr(0,8)=="tiddler:")
		{ var t; if ((t=store.getTiddler(params[0].substr(8)))) date=t.modified; params.shift(); }
	else {
		var y = eval(params.shift().replace(/Y/ig,(now.getYear()<1900)?now.getYear()+1900:now.getYear()));
		var m = eval(params.shift().replace(/M/ig,now.getMonth()+1));
		var d = eval(params.shift().replace(/D/ig,now.getDate()+0));
		date = new Date(y,m-1,d);
	}
	// date format with optional custom override
	var format=this.format; if (params[0]) format=params.shift();
	var linkformat=this.linkformat; if (params[0]) linkformat=params.shift();
	showDate(place,date,mode,format,linkformat);
}
//}}}

//{{{
window.showDate=showDate;
function showDate(place,date,mode,format,linkformat,autostyle,weekend)
{
	if (!mode) mode="display";
	if (!format) format=config.macros.date.format;
	if (!linkformat) linkformat=config.macros.date.linkformat;
	if (!autostyle) autostyle=false;

	// format the date output
	var title = date.formatString(format);
	var linkto = date.formatString(linkformat);

	// just show the formatted output
	if (mode=="display") { place.appendChild(document.createTextNode(title)); return; }

	// link to a 'dated tiddler'
	var link = createTiddlyLink(place, linkto, false);
	link.appendChild(document.createTextNode(title));
	link.title = linkto;
	link.date = date;
	link.format = format;
	link.linkformat = linkformat;

	// if using a popup menu, replace click handler for dated tiddler link
	// with handler for popup and make link text non-italic (i.e., an 'existing link' look)
	if (mode=="popup") {
		link.onclick = onClickDatePopup;
		link.style.fontStyle="normal";
	}

	// format the popup link to show what kind of info it contains (for use with calendar generators)
	if (!autostyle) return;
	if (hasModifieds(date))
		{ link.style.fontStyle="normal"; link.style.fontWeight="bold"; }
	if (hasReminders(date))
		{ link.style.textDecoration="underline"; }
	if(isToday(date))
		{ link.style.border="1px solid black"; }

	if( (weekend!=undefined?weekend:isWeekend(date)) && (config.macros.date.weekendbg!="") )
		{ place.style.background = config.macros.date.weekendbg; }
	if(isHoliday(date)&&(config.macros.date.holidaybg!=""))
		{ place.style.background = config.macros.date.holidaybg; }
	if (hasModifieds(date)&&(config.macros.date.modifiedsbg!=""))
		{ place.style.background = config.macros.date.modifiedsbg; }
	if (store.tiddlerExists(linkto)&&(config.macros.date.linkedbg!=""))
		{ place.style.background = config.macros.date.linkedbg; }
	if (hasReminders(date)&&(config.macros.date.remindersbg!=""))
		{ place.style.background = config.macros.date.remindersbg; }
	if(isToday(date)&&(config.macros.date.todaybg!=""))
		{ place.style.background = config.macros.date.todaybg; }
}
//}}}

//{{{
function isToday(date) // returns true if date is today
	{ var now=new Date(); return ((now-date>=0) && (now-date<86400000)); }

function isWeekend(date) // returns true if date is a weekend
	{ return (config.macros.date.weekend[date.getDay()]); }

function isHoliday(date) // returns true if date is a holiday
{
	var longHoliday = date.formatString("0MM/0DD/YYYY");
	var shortHoliday = date.formatString("0MM/0DD");
	for(var i = 0; i < config.macros.date.holidays.length; i++) {
		var holiday=config.macros.date.holidays[i];
		if (holiday==longHoliday||holiday==shortHoliday) return true;
	}
	return false;
}
//}}}

//{{{
// Event handler for clicking on a day popup
function onClickDatePopup(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);
	var popup = createTiddlerPopup(this);
	if(popup) {
		// always show dated tiddler link (or just date, if readOnly) at the top...
		if (!readOnly || store.tiddlerExists(this.date.formatString(this.linkformat)))
			createTiddlyLink(popup,this.date.formatString(this.linkformat),true);
		else
			createTiddlyText(popup,this.date.formatString(this.linkformat));
		addModifiedsToPopup(popup,this.date,this.format);
		addRemindersToPopup(popup,this.date,this.linkformat);
	}
	scrollToTiddlerPopup(popup,false);
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	return(false);
}
//}}}

//{{{
function indexModifieds() // build list of tiddlers, hash indexed by modification date
{
	var modifieds= { };
	var tiddlers = store.getTiddlers("title","excludeLists");
	for (var t = 0; t < tiddlers.length; t++) {
		var date = tiddlers[t].modified.formatString("YYYY0MM0DD")
		if (!modifieds[date])
			modifieds[date]=new Array();
		modifieds[date].push(tiddlers[t].title);
	}
	return modifieds;
}
function hasModifieds(date) // returns true if date has modified tiddlers
{
	if (!config.macros.date.modifieds) config.macros.date.modifieds = indexModifieds();
	return (config.macros.date.modifieds[date.formatString("YYYY0MM0DD")]!=undefined);
}

function addModifiedsToPopup(popup,when,format)
{
	if (!config.macros.date.modifieds) config.macros.date.modifieds = indexModifieds();
	var indent=String.fromCharCode(160)+String.fromCharCode(160);
	var mods = config.macros.date.modifieds[when.formatString("YYYY0MM0DD")];
	if (mods) {
		mods.sort();
		var e=createTiddlyElement(popup,"div",null,null,"changes:");
		for(var t=0; t<mods.length; t++) {
			var link=createTiddlyLink(popup,mods[t],false);
			link.appendChild(document.createTextNode(indent+mods[t]));
			createTiddlyElement(popup,"br",null,null,null);
		}
	}
}
//}}}

//{{{
function indexReminders(date,leadtime) // build list of tiddlers with reminders, hash indexed by reminder date
{
	var reminders = { };
	if(window.findTiddlersWithReminders!=undefined) { // reminder plugin is installed
		// DEBUG var starttime=new Date();
		var t = findTiddlersWithReminders(date, [0,leadtime], null, null, 1);
		for(var i=0; i<t.length; i++) reminders[t[i].matchedDate]=true;
		// DEBUG var out="Found "+t.length+" reminders in "+((new Date())-starttime+1)+"ms\n";
		// DEBUG out+="startdate: "+date.toLocaleDateString()+"\n"+"leadtime: "+leadtime+" days\n\n";
		// DEBUG for(var i=0; i<t.length; i++) { out+=t[i].matchedDate.toLocaleDateString()+" "+t[i].params.title+"\n"; }
		// DEBUG alert(out);
	}
	return reminders;
}

function hasReminders(date) // returns true if date has reminders
{
	if (window.reminderCacheForCalendar)
		return window.reminderCacheForCalendar[date]; // use calendar cache
	if (!config.macros.date.reminders)
		config.macros.date.reminders = indexReminders(date,90); // create a 90-day leadtime reminder cache
	return (config.macros.date.reminders[date]);
}

function addRemindersToPopup(popup,when,format)
{
	if(window.findTiddlersWithReminders==undefined) return; // reminder plugin not installed

	var indent = String.fromCharCode(160)+String.fromCharCode(160);
	var reminders=findTiddlersWithReminders(when, [0,31],null,null,1);
	var e=createTiddlyElement(popup,"div",null,null,"reminders:"+(!reminders.length?" none":""));
	for(var t=0; t<reminders.length; t++) {
		link = createTiddlyLink(popup,reminders[t].tiddler,false);
		var diff=reminders[t].diff;
		diff=(diff<1)?"Today":((diff==1)?"Tomorrow":diff+" days");
		var txt=(reminders[t].params["title"])?reminders[t].params["title"]:reminders[t].tiddler;
		link.appendChild(document.createTextNode(indent+diff+" - "+txt));
		createTiddlyElement(popup,"br",null,null,null);
	}
	if (readOnly) return;	// omit "new reminder..." link
	var link = createTiddlyLink(popup,indent+"new reminder...",true); createTiddlyElement(popup,"br");
	var title = when.formatString(format);
	link.title="add a reminder to '"+title+"'";
	link.onclick = function() {
		// show tiddler editor
		story.displayTiddler(null, title, 2, null, null, false, false);
		// find body 'textarea'
		var c =document.getElementById("tiddler" + title).getElementsByTagName("*");
		for (var i=0; i<c.length; i++) if ((c[i].tagName.toLowerCase()=="textarea") && (c[i].getAttribute("edit")=="text")) break;
		// append reminder macro to tiddler content
		if (i<c.length) {
			if (store.tiddlerExists(title)) c[i].value+="\n"; else c[i].value="";
			c[i].value += "<<reminder";
			c[i].value += " day:"+when.getDate();
			c[i].value += " month:"+(when.getMonth()+1);
			c[i].value += " year:"+when.getFullYear();
			c[i].value += ' title:"Enter a title" >>';
		}
	};
}
//}}}
[[Introduction]]
[[Menu]]
<!--{{{-->
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler wikibar'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></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'></span></div>
<!--}}}-->
Artist: [[MSA Project]]
Album: [[Istree]]
Lyrics: Alex S. Garcia
Music: Michel Fontes
----

When worlds collide, through space and time,
Moons and suns revolving, galaxies expanding,
Revealing the hearts of men,
All these hopes, cast to the wind.

So many have died, in the blink of an eye,
While others gather together, fighting the lies,
And in the end, through their strength,
All shall unite in a clash of light...

----
lyrics (c) 2010 Alex S. Garcia / music (c) 2010 Michel Fontes
----
Artist: [[MSA Project]]
Album: [[Istree]]
Lyrics: Alex S. Garcia
Music: Michel Fontes & Serge Barbaro
----

Spreading far and wide, reaching through the night,
Greater than all kingdoms of ancient history.
Feeling like a child in this game of life,
What's left of us is nothing like what once used to be.

Make it all go right, is it just a dream?
Sometimes I can't see how to set us all free...
This is where I hide, deep inside my mind,
Yearning to just scream the truths that we so need...

I'm just a man, I do what I can,
They whisper my name, it's spread by the wind.
I'm not a hero, nor some battered ego,
I go and I grow and sow the seeds of sorrow...

''Eternal Istree, not so eternal,
Rewriting history, and times to follow,
Tame all the hysterics, with scenes of tomorrow,
And burn all the heretics if they dare to show!''

Sensing what's about to alter all our ways,
Wishing to shout: let's end this endless tyranny...
Whispered tunes and hymns from forgotten days,
To cleanse our sins and set us now once and for all free...

They built the walls high to protect
They kept us caged within these gold and so cold gates,
Now we all rise, proud to protest,
Let us all march... until we can be free once again...

... it's our fate, I feel the change,
It's not too late if you have faith...
Nothing's the same, I feel the change,
We can create a better world for us all!

''Eternal Istree, not so eternal,
Rewriting history, and times to follow,
Tame all the hysterics, with scenes of tomorrow,
And burn all the heretics if they dare to show!''

All the Farleighs in history,
Are remembered, and will always.
Through their actions, life would alter,
Sometimes for worse, often better,
And forever, they have made
Choices that none would believe...

I'm just a man, I do what I can,
They whisper my name, it's spread by the wind.
I'm not a hero, nor some battered ego,
I go and I grow and sow the seeds of sorrow...

''Eternal Istree, not so eternal,
Rewriting history, and times to follow,
Tame all the hysterics, with scenes of tomorrow,
And burn all the heretics if they dare to show!''

----
lyrics (c) 2010 Alex S. Garcia / music (c) 2010 Michel Fontes & Serge Barbaro
----
Artist: [[MSA Project]]
Album: [[Istree]]
Lyrics: Alex S. Garcia
Music: Michel Fontes & Serge Barbaro
----

//Welcome to Evenodds,
Where cheating is permitted...
(if you don't get caught)//

First you search through this dark maze,
Second you check if all seems sane,
Third you hide from camera gaze,
Fourth you try to win this game...
Fifth you reach for what once was yours,
Sixth you hope they won't seal the doors,
Seventh you spring and run for air,
Eighth you realize, you've no time to spare...

Evens are odd and odds are even,
In this world, all bets are off...
Evenodds, ever growing,
Stake your soul, if you dare it...

Odd are the times and even as
All comes falling down on fast,
No matter the way it used to be,
Here so many come to be free...

''Odds are even, one two three,
Even as odd as hope can be,
All for one and one for all,
Take a stand before you fall...
Welcome friend, to the end,
Evenodds will help you see
It's all pretense, understand?
Play to win, but you never can...''

One, you know after the show,
Two, you see it all was rigged,
Three, you hold on to your hopes,
Four, you call out for help...
Five, you fold, then you go,
Six, you think you've been tricked,
Seven, you blow the whistle now,
Eight, the world comes crashing down...

Evens are odd and odds are even,
This is how it's meant to be.
Evenodds, ever growing,
Know your games, know your limits...

Odd are the times and even as
All comes back, it all goes spinning.
No matter the way it used to be,
This is where it all has started...

''Odds are even, one two three,
Even as odd as hope can be,
All for one and one for all,
Take a stand before you fall...
Welcome friend, to the end,
Evenodds will help you see
It's all pretense, understand?
Play to win, but you never can...''

Welcome to Evenodds
Where cheating is...
Where cheating is permitted..
If you don't... get caught!

''Odds are even, one two three,
Even as odd as hope can be,
All for one and one for all,
Take a stand before you fall...
Welcome friend, to the end,
Evenodds will help you see
It's all pretense, understand?
Play to win, but you never can...''

----
lyrics (c) 2010 Alex S. Garcia / music (c) 2010 Michel Fontes & Serge Barbaro
----
''Q. Why call the site 'Villa Arcadia'?''

A. Why not?

OK, more seriously... I was looking for a name that would work in any language, and at the very least in both French and English. That's when this name came to my mind, an old memory.

Back in the late 80's, my parents bought a house in the south of France. While looking for a name, I suggested Arcadia. There were several reasons for this. First, I was listening a lot to the "So red the rose" album by a band called... Arcadia! (a side project of Duran Duran band members.) Additionally, I liked the name, its link to Greek mythology and the fact that it often is associated with the concept of an "imaginary idyllic paradise." I've always been somewhat fascinated with utopias, so I guess that makes sense, right?

Everyone in the family liked the sound of that, so our house became Villa Arcadia. And since this site is my home on the web, I found the thought of calling it that an interesting notion. So there you have it.

----

''Q. Do you write lyrics before or after the music?''

A. I do both... though not at the same time!

For instance, all the music for [[Istree]] was composed before I wrote any line of text, while most of the stuff I did with [[MK|MK_artist]] (though not all) I wrote first... In some cases, like with [[Black sea]], I even handed him some fairly old material to work with.

----

''Q. When did you start writing?''

A. I have no idea. I've been writing since as far back as I can remember. I've always wanted to be a writer. I started with novels... because, well, I was reading novels, so that's what I wanted to write! When I heard about short stories, I first saw it as an inferior form of writing (which, let me tell you, is extremely stupid, as there are some absolutely amazing shorts out there!)... that is, until it struck me that the shorter format would give me more freedom.

What I mean by this is that, in those early days, I would be swamped with ideas. So I would start a novel, put it aside when a new idea came to me, then put that one aside and so on and so forth. I thus have hundreds of novels I started but never finished!

With short stories, however, it one day struck me that it would allow me to give "closure" (so to speak) to some of my ideas and so be able to move on without feeling so frustrated.

This, I can date more easily. It happened in the early to mid 80's, 1983/1984. That's about when I also started writing lyrics (yet another short form of writing, heheh). Thinking back, I'm guessing it's likely not totally unrelated with the fact that the first album I ever bought was Duran Duran's "Seven and the ragged tiger"... in 1983!

I quickly discovered that I had somewhat of a gift for writing lyrics. At least I was quick. Granted, in those early days, I was quick and bad! But, as with everything, writing requires experience and practice. I got lots of that over the years.

In the beginning, my songs tended to be quite surreal, with no plot and, well, no rhymes either, ha! Then some rhymes started popping up. Then, much later, half-stories (they would break into something else midway) and even later, full plots with, wow, rhymes!

I still do occasionally write surreal pieces, but at least they now have rhymes! An early example of a surreal song with rhymes is [[Black sea]] which I still love to this date (I especially like the line "Storm-strucked spiders spin sorry" which really doesn't mean anything but, hey, it sounds awesome!).

So now I'm still quick, but not that bad anymore! I won't say I'm great, that'd be presumptuous, and it's really not for me to say. My lyrics are [[available for reading|Songs]] on this site, however, so I'll let you decide for yourself!

----

''Q. Why do you write?''

A. Talk about a loaded question... Well, the only real, truthful and primal answer I can give is this: It's in my blood. I can't help it.

Perhaps someday I'll explore this in more depth. We shall see.

----

''Q. Do you write movies too?''

A. I wish... Perhaps someday. I've actually been approached a few times, oddly enough, though I have yet to come up with anything. Not for lack of ideas, but I'm a bit of a perfectionist and I tend to dislike the stuff I've written so far in this form.

I do have a TV show project in development, however... Well, in development hell might be a more appropriate term at the moment, ahem.

----

''Q. Who are your idols?''

A. My idols are... Well, actually, I don't have any. See, the thing is, I don't like the thought of "idolizing" another human being. I think that's just silly and, more importantly, quite unhealthy (and even dangerous.) The thing is, whether you are some huge movie star or the kid next door, and no matter how highly you think of yourself, we all really are the same, with our flaws and our tempers.

However... there ARE people I highly appreciate and have tremendous respect for. Some have even greatly shaped me as a writer. Roger Zelazny being first and foremost, without a moment's hesitation. I can't even begin to explain how deeply his work has influenced me.

Lyrics-wise, it's a bit more difficult as there are so many artists I listen to and love. Among the French, Noir Desir, Thiéfaine, Guidoni, Manset, Murat and Cabrel definitely left an impression. Aside from these, I would have to mention the amazing Peter Hamill (though I discovered his work quite late, he quickly became one of my top favorites, what a writer!) Duran Duran (and before you start laughing, consider reading some of their earlier and less known lyrics, like "The chauffeur", "Save a prayer", "The edge of America"... beautiful stuff), Kerry Livgren (of Kansas)... 

----

''Q. Do you have a blog?''

A. You're reading it!

----

''Q. Do you have a Facebook account?''

A. Yes. But I don't use it.

----

''Q. Do you have a Twitter account?''

A. Nope.

----

''Q. Do you have a ~MySpace account?''

A. Yep. And it's right here: http://www.myspace.com/asglyrics/

----

''Q. Do you use forums?''

A. Kinda. I'm not a big fan of forums. They take too much time to read and respond. I am a member on a bunch, though, I just don't use them all that often. I'd rather spend my free time writing or reading.

----

''Q. Are you on any other social networks?''

A. Actually, yes, I am. The first I ever joined was ~LinkedIn and I still do have that account, though I mainly use it for my film-related work.

----

''Q. Do you have a day job?''

A. I've had several over the years. Currently, I work as a cruise travel agent for an online French company.
config.fontSize={};

//configuration settings
config.fontSize.settings =
{
            defaultSize : 100,  // all sizes in %
            maxSize : 200,
            minSize : 40,
            stepSize : 10
};

//startup code
var fontSettings = config.fontSize.settings;

if (!config.options.txtFontSize)
            {config.options.txtFontSize = fontSettings.defaultSize;
            saveOptionCookie("txtFontSize");}
setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
setStylesheet("#contentWrapper .fontResizer .button {display:inline;font-size:105%; font-weight:bold; margin:0 1px; padding: 0 3px; text-align:center !important;}\n .fontResizer {margin:0 0.5em;}","fontResizerButtonStyles");

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

               var sp = createTiddlyElement(place,"span",null,"fontResizer");
               sp.ondblclick=this.onDblClick;
               if (params[0])
                           createTiddlyText(sp,params[0]);
               createTiddlyButton(sp,"+","increase font-size",this.incFont);
               createTiddlyButton(sp,"=","reset font-size",this.resetFont);
               createTiddlyButton(sp,"–","decrease font-size",this.decFont);
}

config.macros.fontSize.onDblClick = function (e)
{
             if (!e) var e = window.event;
             e.cancelBubble = true;
             if (e.stopPropagation) e.stopPropagation();
             return false;
}

config.macros.fontSize.setFont = function ()
{
               saveOptionCookie("txtFontSize");
               setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
}

config.macros.fontSize.incFont=function()
{
               if (config.options.txtFontSize < fontSettings.maxSize)
                  config.options.txtFontSize = (config.options.txtFontSize*1)+fontSettings.stepSize;
               config.macros.fontSize.setFont();
}

config.macros.fontSize.decFont=function()
{

               if (config.options.txtFontSize > fontSettings.minSize)
                  config.options.txtFontSize = (config.options.txtFontSize*1) - fontSettings.stepSize;
               config.macros.fontSize.setFont();
}

config.macros.fontSize.resetFont=function()
{

               config.options.txtFontSize=fontSettings.defaultSize;
               config.macros.fontSize.setFont();
}

config.paramifiers.font =
{
               onstart: function(v)
                  {
                   config.options.txtFontSize = v;
                   config.macros.fontSize.setFont();
                  }
};
* If you've never used a [[TiddlyWiki | http://www.tiddlywiki.com/#HelloThere]] before, don't panic.  It's sort of a cross between a blog and a website in that like a blog, the material is presented continuously on one page and like a website, you can navigate to parts of the page.

* Each 'tiddler' (a box with stuff in it) is a piece of micro content.  This ~GettingStarted is a tiddler.  If you mouse over the top of this tiddler, you will see a hover menu with the options:

**<html><b><u>close</b></u></html>   closes the current tiddler
**<html><b><u>close others </b></u></html>   closes all except for the current tiddler
**<html><b><u>permalink</b></></html>    a permanent link to the current tiddler
**<html><b><u>references</b></u></html>   other tiddlers that refer to this one
**<html><b><u>jump</b></u></html>   to any other open tiddlers

By opening different tiddlers in different orders, you experience a different webpage.  Sort of a dynamic experience with static content.  

* How to Use TWW:
**See the [[Help]] tiddler

*Personalizing TWW
**In the right hand sidebar, select 'admin tools' if it's not already open, then select 'options'
***Change the user name from 'YourName' to your own.

**By default, this file is called 'TiddlyWikiWrite.' To rename the wiki file, select 'side bar' in the right hand sidebar.  You will see a list of all tiddlers.  Navigate to 'site title' and click on it.  Click 'edit' and change 'TiddlyWikiWrite' to the title of your choice. Click 'done' and 'close'

**On the list of tiddlers, navigate to 'SiteSubtitle'.  Click on it.  Click 'edit' and change the content in the box to the content of your choice.  Click 'done' and 'close.'

**You can change colors to one of 11 preloaded palates.  For more specific customization than that, you can play with the code.  Some good resources [[here. |http://www.giffmex.org/twfortherestofus.html]]

*Saving Changes
**You MUST save your changes and hit reload on your browser to see them.  You can save under 'save changes' to the right under Admin Tools, or via the backstage (top right). Save will be in the menu across the top of the page on the left.

**If you attempt to reload or close the file, the program will prompt you to save. 

*Backups
**By default, TWW is set to save backups.  The backups will be placed in a subfolder named 'twBackups' under the main folder where you save your TWW file.

*Upgrading
**You can keep TWW upgraded to the most recent core code by using the upgrade link in the backstage area (top right). If you click upgrade, a dropdown menu will open, with an upgrade button on the bottom.  Once you upgrade, save and reload.  Don't panic when the wiki looks different. All your content and customized appearance will be preserved ONCE YOU RELOAD. 




This implementation of the Tiddlywiki concept is an experiment in mind mapping for writers.

This ~TiddlyWiki is a modification, initally based on the DevFire template (available here: http://tiddlythemes.com/#Home), and tweaked to allow for changing color palettes on the fly.  

If you wish to use this tool, go to your browser controls and click file/save as simple html (not webpage complete) so you can download a copy to your computer.

The file is a single html file.  <html><b><u>You can only edit/customize this tiddlywiki on your own computer.  By default, it hides all editing tools when it is shown over the web.</b></i></html>

<<top>>
Artist: [[Skeem]]
Album: [[Just suggesting]]
Lyrics: Alex S. Garcia
Music: Serge Barbaro
----

This is a time of warring and strife,
This is a world we've wounded inside.
This is a life we've wanted to shine,
This is a place that feels so alive...

There is no way we can recreate,
There is no shame in recognizing mistakes,
There is no gain that can alter the pain,
There is no wind to blow it away...

''Half the life that I have lived
Is half the time it takes to wake.
Take the time if you can
To have a life that's worth the wait.''

I know it's late, too late for this show,
I know my hope is only a joke.
I know our fate is written in stone,
But don't let the worse happen at home...

Is this a dream? I don't know for sure.
Is this tomorrow? It feels like today.
Is this all real? it hurts all the same,
And it all seems like it's starting again...

''Half the life that I have lived
Is half the time it takes to wake.
Take the time if you can
To have a life that's worth the wait.''

There is no way to be strong,
There is no way to be weak.
This is the day that we seek,
The time to be free!
This is how it was meant... to be.

The world that we know is bleeding, it dies,
Calling us now to do what is right.
We need to be strong and hold off the tide,
Let's make a change before it's too late.

''Half the life that I have lived
Is half the time it takes to wake.
Take the time if you can
To have a life that's worth the wait.''

''Half the life that I have lived
Is half the time it takes to wake.
Take the time if you can
To have a life that's worth the wait.''

----
[img[images/english.jpg]]  ABOUT THE SONG -- This one is about how the human race, as a whole, keeps repeating the same mistakes over and over again. But it's also about the choices we have in life, the opportunites we can seize (and often miss) to make our lives better. One should never forget that, in the end, we control our own destinies... we just have to make sure we make the right choices! Life is a tricky business.
----
lyrics (c) 2013 Alex S. Garcia / music (c) 2013 Serge Barbaro
----
<html><b><i>New Tiddler:</b></i></html>
Click on 'Admin Tools' in the right hand panel.  Click 'new tiddler'.  Follow the prompts to name your tiddler, add content, and add tags.  Or you may click on any existing tag in the main menu (to the left) and click on the option  'New (tagname) tiddler'.  Tagging is a powerful organizational tool and lets you view your Tiddlywiki as a dynamic creation.

<html><b><i>Edit Tiddler</b></i></html>
Open any tiddler.  Click 'edit' on the right hand floating menu.  A text box will open and you will have different options on the menu - - 'done', 'cancel', and 'delete'.  You can click the 'wikibar' option to open a menu bar for easier formatting.

<html><b><i>New Journal:</b></i></html>
Click on 'Admin Tools' in the right hand panel.  Click 'new journal'.  This will open up a new calendar tiddler, named for today's date. Follow the prompts to name your journal tiddler, add content, and add tags. 

<html><b><i>Calendar:</b></i></html>
You can also add journal tiddlers by accessing the calendar on the left hand menu.  Use for a submission calendar, for example.  Click on any number date on the calendar to create a tiddler linked to that date. 

<html><b><i>Navigation:</b></i></html>
Because the Tiddlywiki is a SINGLE webpage, you cannot navigate it with the forward/back buttons on your browser.  Use the 'close' button at the top of any tiddler to close that tiddler.  Use the 'close all' button on the right hand panel to close all open tiddlers.  You can also look at your tiddlers by tag (list of active tags in the main menu) which will open any particular tiddler with a specific tag or all tiddlers with a specific tag.

You can also search using the search box at the right and get a list with preview of all tiddlers that contain your target word or phrase.

<html><b><i>On or Off Line?</b></i></html>
Unlike most wikis, TiddyWiki is not mainly a collaborative tool.  Use it on a local computer (it's small enough that you can place the html file on a usb storage device and take it with you) or upload it to a webspace or in a web based storage space like dropbox and have access to your data wherever you happen to be.

<html><b><i>Tags:</b></i></html>
<html><i>Using Tags</i></html>
Tags are what make Tiddlywiki relational.  If you use tags efficiently, you can sort by tag and see all data relating to a specific tag.  All the current tags are listed in the main menu on the left.  Click on any tag and you can open a particular tiddler or select the 'open all' option to open all tiddlers with that particular tag. 

<html><i>Adding Tags</i></html>
To add a tag to the Tiddlywiki, type the text of the tag in the footer of the appropriate tiddler.  You can use wikiwords (words smashed together with a capital in the middle) or single words surrounded by double square brackets.  (Do NOT use multiple word tags with spaces between the words!) Save changes (right hand menu), click 'reload' on your browser window and the new tag will show up on the main menu.

<html><i>Changing Tag names</i></html>
To customize this for your own use, you will have to change the tag names.  Just click on any tag on the main menu, click 'open tag' option.  A new tiddler with the tag name as its tiddler name will open.  You can delete the tag or change its name.


<html><b><i>Upgrade TWW: </b></i></html> You can upgrade the core code by clicking on 'backstage' (upper right hand corner), and selecting the upgrade tab.


For more information about TWW, please download this [[free ebook|http://www.scribd.com/doc/5271682/Organize-Your-Novel-with-a-Wiki]], or take a look at this virtual workshop and other TWW tagged posts from my [[blog archives.|http://ljcbluemuse.blogspot.com/search/label/TiddlyWikiWrite]] While both these resources were written for earlier versions of TWW, the core information in them is still relevant.
<<top>>



[[MK|MK_artist]] demo tape
# [[Animal magnetism]]
# [[Lizardmen]]
# [[Black sea]]
# [[Humanity lost at last (... and now for something different!)]]
Artist: [[MK|MK_artist]]
Album: [[Humanity]] (1999) + [[MK|MK_album]] (2001)
Lyrics: Alex S. Garcia
Music: Michael Kolomiets
----

Been answering the phone too many times,
Think I'm alone in this city of crime,
Now I should take a stone, throw it away,
Like an old rusted bone made out of clay.

Words never mean a thing, they keep singing in my mind.
I shake and they start to ring like a good old rhyme.
Seems I've done it all before but I just can't remember
Those days when I rode through the country snows in winter.

So hail now to the rising King as he stands above his land.
Look at the shining white ring, so bright on the finger of his hand.

Oooh... Aaah...
Oooh... Aaah...

Now I've come to look upon fate, but I've still found no answer
To the mystery of the closed black gates which remain shut forever.

Have I now come to the day of my dying come at last?
Near the end of my stay here in Heaven
Listen to my heart beating so fast, the sound of fear and love.
Yes there is a worst thing than war, but now I've gone above.

Tearing at the very fabric of everything,
I lay open and scatter the ins of my dreams.
I now walk upon the brink of something
So very different from all I've ever seen... from all I've ever seen...

----
lyrics (c) 1999 Alex S. Garcia / music (c) 1999 Michael Kolomiets
----
Artist: [[MSA Project]]
Album: [[Istree]]
Lyrics: Alex S. Garcia
Music: Michel Fontes & Serge Barbaro
----

Running with the light dimming in the night,
Something's not quite right... but I don't know what.
Feeling fright's tight grip on my guts and heart,
Fearing what might slip through the cracked black gate...

Lightning in the sky, raining down on me,
Breaking through the clouds, thunder clapping loud...
Flames are leaping high, feeding on remains,
Fuming ruins so vile of ancient lores regained...

''I need to see what seeks entry, I need to find my destiny,
Go beyond the wall... beyond the wall...
I need to know what broke the world, I need to hold until my soul
Would just stop to fall... would stop to fall...''

Running to be free and escape the city,
Fallen once or twice, never felt the knife!
Fighting for my life, hoping to survive,
Whatever the price, I shall pay tonight...

''I need to see what seeks entry, I need to find my destiny,
Go beyond the wall... beyond the wall...
I need to know what broke the world, I need to hold until my soul
Would just stop to fall... would stop to fall...''

''I need to see what seeks entry, I need to find my destiny,
Go beyond the wall... beyond the wall...
I need to know what broke the world, I need to hold until my soul
Would just stop to fall...''

Straight ahead, I can see it...
Straight ahead, I can see it...

Rising high...
Light I see...
I am free!

''I need to see what seeks entry, I need to find my destiny,
Go beyond the wall... beyond the wall...
I need to know what broke the world, I need to hold until my soul
Would just stop to fall... would stop to fall...''

''I need to see what seeks entry, I need to find my destiny,
Go beyond the wall... beyond the wall...
I need to know what broke the world, I need to hold until my soul
Would just stop to fall... would stop to fall...''

''I need to see what seeks entry, I need to find my destiny,
Go beyond the wall... beyond the wall...
I need to know what broke the world, I need to hold until my soul
Would just stop to fall... fall...''

----
lyrics (c) 2010 Alex S. Garcia / music (c) 2010 Michel Fontes & Serge Barbaro
----
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Version|1.6.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Insert Javascript executable code directly into your tiddler content.|

''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!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.  You may also include a {{{title="..."}}} parameter to specify the 'tooltip' text that will appear whenever the mouse is moved over the onClick link text

''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" title="clicking this link will show an 'alert' box" 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
<<<
''2007.02.19 [1.6.0]'' added support for title="..." to specify mouseover tooltip when using an onclick (label="...") script
''2006.10.16 [1.5.2]'' add newline before closing '}' in 'function out_' wrapper.  Fixes error caused when last line of script is a comment.
''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: 6, revision: 0, date: new Date(2007,2,19)};

config.formatters.push( {
	name: "inlineJavascript",
	match: "\\<script",
	lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\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[5]) { // there is script code
				if (lookaheadMatch[4]) // 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[5]+"\n};_out(this);"
					link.setAttribute("title",lookaheadMatch[3]?lookaheadMatch[3]:"");
					link.setAttribute("href","javascript:;");
					link.style.cursor="pointer";
				}
				else { // run inline script code
					var code="function _out(place){"+lookaheadMatch[5]+"\n};_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;
		}
	}
} )
//}}}
Titre original : Zapreshchyonnaya realnost
Film SF russe de Konstantin Maximov
Scénario de Vasiliy Golovachev
Vu le 10 décembre 2011

Dans une Russie futuriste, un industriel (Kurylo) s'aprête à remporter les élections alors même qu'il achève le développement d'une nouvelle arme de destruction massive. Son ancien associé (Matvey) est recruté par les services secrets qui l'estiment être leur dernier espoir. En parallèle, un groupe de justiciers se faisant appeler "Stopcrime" élimine, sans scrupules ni procès, des politiciens corrompus.

Certains utilisateurs d'IMDB accusent ce film de ne pas avoir de scénario. Ce n'est pas vrai. Il y en a un. Il contient même quelques idées sympathiques. Le véritable problème repose ailleurs.

Mais voyons d'abord les qualités de ce film -- car il en possède tout de même quelques unes. Tout d'abord, le plus évident, des effets spéciaux souvent impressionnants. Mentionnons aussi une bande son envoûtante, une atmosphère travaillée et des décors futuristes plutôt réussis.

Malheureusement, cela ne suffit pas à sauver un film par ailleurs accablé de défauts. En commençant par son scénario bourré d'illogismes, de contradictions et d'incohérences.

Quelques exemples : on nous informe d'un côté que Matvey était à l'origine partenaire de Kurylo et qu'ils ont développé cette nouvelle arme ensemble. D'un autre, on nous dit qu'il est (et a priori l'a toujours été) un agent des services secrets, un "intercepteur". Peut-être s'était-il infiltré dans l'organisme de Kurylo, mais cela n'est jamais expliqué -- bien au contraire, les (rares) données qui nous sont fournies tendent plutôt à renforcer l'incohérence.

Autre détail inexpliqué : Kurylo est dépeint comme un personnage antipathique peu apprécié du public. Dans une scène, on le voit même repousser violemment, sans véritable motif, une personne dans la foule qui l'approchait d'un peu trop près. Pourtant, il est sur le point de remporter les élections...

Ou encore, lors d'un combat, un tueur professionnel d'une carrure non négligeable parvient à mettre Matvey KO. Il en profite pour se retourner contre une femme qui l'accompagnait. Il la tabasse pendant quelques instants, puis, alors qu'il est sur le point de l'achever, on le voit brusquement se raidir et se recourber avec une grimace au visage. Le mouvement de son corps laisse penser qu'on vient de lui enfoncer une arme tranchante dans le dos. Or, lorsqu'il s'écroule, on découvre Matvey les poings levés, près à combattre, un peu comme un boxeur... il aurait donc tuer son adversaire avec ses poings !

Ce ne sont là que quelques exemples parmi tant d'autres.

Mais les problèmes ne s'arrêtent pas là, que nenni ! Les personnages ne montrent quasiment jamais aucune émotion, ils sont tous d'une froideur et d'un sérieux effarant. Le jeu des acteurs laisse également souvent à désirer. Les effets spéciaux, bien que de qualité, sont trop fréquemment utilisés sans justification. Dans le même registre, nombre de scènes n'apportent strictement rien à l'histoire (Hitchcock aurait hurlé) ou se prolongent indéfiniment. Il faut d'ailleurs préciser que le film est d'une lenteur à la fois consternante et frustrante. Ajoutons à cela le leader de Stopcrime qui apparait souvent hors de nulle part -- d'accord, on sait qu'il détient ce pouvoir, mais cela n'explique pas qu'il sache comme par hasard exactement où se trouve le héro et à exactement quel moment il doit intervenir. Deus ex machina, quand tu nous tiens... Et puis, bien sûr, il y a aussi le côté très manichéen de l'histoire, qui présente somme toute une énième interprétation du thème très classique et hyper éculé du combat entre le Bien et le Mal.

Pour terminer, je vais m'amuser à un exercice inverse d'une pratique courante... En effet, on voit souvent des articles présenter la "meilleure citation du film". Je vais donc vous proposer plutôt la pire, celle qui m'aura le plus fait rire de par sa débilité : "Préserve ton temps" ! Je vous assure, même en la replaçant dans son contexte, elle ne veut strictement rien dire !

Vous l'aurez sans doute deviné, je vous invite très fortement à éviter ce film...

NOTE : 1,5 sur 8
[img[images/french.jpg]] 

Bienvenue dans mon cyber-espace.

Je suis un auteur, traducteur, anthologiste, parolier et webmestre, avec également de l'expérience dans l'audiovisuel.

Pour l'instant, ce site couvre mes activités dans l'écriture, mais j'y rajouterai d'autres choses par la suite.

[img[images/english.jpg]] 

Welcome to my little corner of cyberspace.

I am a writer, editor, translator, lyricist and webmaster, with also some experience in film.

This site currently focuses on my work as a writer, but more material shall be added later.
[[MSA Project]]

1. [[Beginnings and endings]]
2. [[Masquerade]]
3. [[Chant of the lost mariner]]
4. [[Rebellion on Planet V]]
5. [[Space mountain]]
6. [[Eternal Istree]]
7. [[Evenodds]]
8. [[Birth of a new myth]]
9. [[Shadows in the storm]]
10. [[In this city tonight]]
11. [[Like the wind]]
12. [[The wanderer]]
13. [[The leak in space and time]]
14. [[Two thrones]]
15. [[Endings and beginnings]]
[[Skeem]]

1. The grand scheme
2. All we are
3. Gone away muse
4. [[Half a life]]
5. Last days
6. Drowned dreams
7. [[The journey within]]
8. [[The perfect truth]]
9. [[The hidden path]]
10. [[Book of shadows]]
11. Colors
12. [[The end complete]]
13. [[Naked lies]]
14. [[The power of angels]]
15. The grand scheme resumption
Ar_EN: Artist
Ar_FR: Artiste
Sng_EN: Song
Sng_FR: Chanson
Artist: [[MSA Project]]
Album: [[Istree]]
Lyrics: Alex S. Garcia
Music: Michel Fontes & Serge Barbaro
----

Castles made of sand, cities in the sea,
Memories of men, things that used to be,
Ancient lores of old, secrets known before,
All the jewels and gold of worlds never known,
Of worlds never known...

All these treasures that hold our identity,
All the wonders that told who we used to be,
All the words and feelings exclusive to our kin,
All are now long gone... like the wind...

Colored streams that shine, vivid skies sublime,
Voices that won't die, echoes in the night,
Oddities of time, hieroglyphs and signs,
Traces of the lives of cultures we survived...

All these treasures that hold our identity,
All the wonders that told who we used to be,
All the words and feelings exclusive to our kin,
All are now long gone... like the wind...

''No matter the race, no matter the world, no matter the ways,
All that is unique, all that is special, all that is rare,
Gets twisted around, gets slammed to the ground, gets taken away,
Until Istree finally crushes all those who dare...
To be different.''

Each world has beliefs, religions to bear grief,
Politics and schemes, cultural divides,
Subtleties to hide all the pain inside,
Reasons to forgive all the shame they lived.

Animals that cry deep into the night,
Howling to somehow reconcile with life.
Warriors march in line, looking all so grim,
Striking like the wind...

''No matter the race, no matter the world, no matter the ways,
All that is unique, all that is special, all that is rare,
Gets twisted around, gets slammed to the ground, gets taken away,
Until Istree finally crushes all those who dare...
To be different.''

----
lyrics (c) 2010 Alex S. Garcia / music (c) 2010 Michel Fontes & Serge Barbaro
----
Artist: [[MK|MK_artist]]
Album: [[Humanity]] (1999) + [[MK|MK_album]] (2001)
Lyrics: Alex S. Garcia
Music: Michael Kolomiets
----

And in the courtyard, the lizards scream,
Looking for freedom, hiding their fear.
They've seen to the future and now they weep
Trying to escape this pain-filled dream.

Losing their temper, they gesture and move and voice the secret words.
Sentences, phrases, made to reveal the most awesome faces.
But they keep on turning like wheels on hot burning coals,
Always running wild to the music around, trading places...

And the hiss in his voice calls for the wild boys
And a kiss from his mouth takes you far away south...
And when he leaps to your throat, it takes you by surprise,
He just looks like a ghost and it doesn't feel right!
He sounds like a man who's lost his hand
He's fallen through a hole and now he's lost his soul.
The lizards come from the wind, they gather in the storm.
The lizards don't have any friends at all... now they're heading for home...

----
lyrics (c) 1999 Alex S. Garcia / music (c) 1999 Michael Kolomiets
----
[[MK|MK_artist]]
# [[Animal magnetism]]
# [[TV cars and magnet toys]]
# [[Space opera]]
# [[The stranded drifter]]
# [[The time traveler]]
# [[Lizardmen]]
# [[The Swordwielder and the Dragonking]]
# [[The going of Rose]]
# [[Black sea]]
# [[Humanity lost at last (... and now for something different!)]]
Alias Michael Kolomiets.

DISCOGRAPHY
* 1996 - [[TV cars and magnet toys|TV cars and magnet toys_album]] (demo tape)
* 1999 - [[Humanity]] (demo tape)
* 2001.12 - [[MK|MK_album]]
Band formed in 2008 by Michel Fontes, Serge Barbaro and Alex S. Garcia.

DISCOGRAPHY
* 2010.12.06 - [[Istree]]
 <<fontSize "font-size:">> 

<<tiddler Menu_EN>>

<<tiddler Menu_FR>>
Artist: [[MSA Project]]
Album: [[Istree]]
Lyrics: Alex S. Garcia
Music: Michel Fontes & Serge Barbaro
----

In a glittering room on some shadowy world, something's not quite right...
Foreseeing our doom, hoping to change the past, a man's playing with time.
Under false pretense, he tricked the government into funding his toy.
Now they're onto him and soon they will end his smart little ploy...

All the dials and bulbs
Lighted with colors,
Blinking, flashing white,
Sounding through the night...

On an official quest, in a sliding fast ship, soldiers are coming...
They are ready to act, to alter the facts, take out their target...
They do as they're told, so reckless and cold, restlessly moving...
Only but tools, silly old fools, headed for disaster...

All the dials and bulbs
Lighted with colors,
Blinking, flashing white,
Sounding through the night...

''Dr. Spinoza created a time machine
To modify and better what has come to pass
With his masquerade, no one knew what they had seen.
Oh what a charade, only to save us from ourselves!''

With a bang, it shook and came to life,
And suddenly all was bathed in light.
In a flash, time and space were merged and twisted around!
With a clash, it all fell apart.
When they came, the soldiers searched the grounds...
But there was nothing left to be found!

''Dr. Spinoza created a time machine
To modify and better what has come to pass
With his masquerade, no one knew what they had seen.
Oh what a charade, only to save us from ourselves!''

''Dr. Spinoza created a time machine
To modify and better what has come to pass
With his masquerade, no one knew what they had seen.
Oh what a charade, only to save us from ourselves!''

----
lyrics (c) 2010 Alex S. Garcia / music (c) 2010 Michel Fontes & Serge Barbaro
----
Background: #ffeedd
Foreground: #000
PrimaryPale: #ddaa99
PrimaryLight: #cc9999
PrimaryMid: #552233
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #cccccc
SecondaryDark: #552233
TertiaryPale: #ddaa99
TertiaryLight: #EEC591
TertiaryMid: #552233
TertiaryDark: #8B7355
|borderless|k
|<<tiddler Menu_EN>> | | | | | | | | | | |<<tiddler Menu_FR>> |
[img[images/english.jpg]] 
[[Introduction]]
[[Biography]]
[[News]]
----
[[Bibliography]]
[[Reviews]]
----
[[Discography|Albums]]
[[Songs]]
[[Timeline]]
[[Artists]]
----
[[Contact]]
[img[images/french.jpg]]
[[Introduction]]
[[Biographie]]
[[Actualités]]
----
[[Bibliographie]]
[[Chroniques]]
----
[[Discographie|Albums]]
[[Chansons]]
[[Chronologie]]
[[Artistes]]
----
[[Contact]]
Background: #eeddaa
Foreground: #000
PrimaryPale: #ddcc99
PrimaryLight: #bb8833
PrimaryMid: #553322
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #cccccc
SecondaryDark: #553322
TertiaryPale: #ddcc99
TertiaryLight: #EEC591
TertiaryMid: #553322
TertiaryDark: #8B7355

Artist: [[Skeem]]
Album: [[Just suggesting]]
Lyrics: Alex S. Garcia
Music: Serge Barbaro
----

They told me...

"The sky is red, the grass is blue,
The rain is dry, the people few,
All children dead, dead are living,
Day is night and falling is rising..."

This is the way, they say, to be happy.
A perfect day, today, this is crazy.
They want me to stay, to pay society.
I need to change my ways and be...
Sane again.

''Their smiles are all fake, their words are all lies,
Their hopes and their dreams all meant to be denied.
These tales that they spin in the heart of the night,
The remnants of sins that they never can hide.''

And they said...

"The world is flat, the sun is cold,
The earth is new, the new born old.
Out of all that, our death was born,
And all that is true, we threw to the storm."

Let me go back, I know what here awaits...
Let me go back before it is too late...
Let me go back, my soul is here at stake...
Let me go back before it is too late...

''Their smiles are all fake, their words are all lies,
Their hopes and their dreams all meant to be denied.
These tales that they spin in the heart of the night,
The remnants of sins that they never can hide.''

To be true is to be weak... or so they think.
To be free you must retreat... escape the real.
Pretense is the path... I start to sink.
Where is my life? Where is my life?

''Their smiles are all fake, their words are all lies,
Their hopes and their dreams all meant to be denied.
These tales that they spin in the heart of the night,
The remnants of sins that they never can hide.''

''Their smiles are all fake, their words are all lies,
Their hopes and their dreams all meant to be denied.
These tales that they spin in the heart of the night,
The remnants of sins that they never can hide.''

----
[img[images/english.jpg]]  ABOUT THE SONG -- I've always been fascinated with the concept of perceptions, the fact that our eyes do not necessarily show us what truly IS. In fact, two persons may even see different things. A good example of this is color blindess... and that's just the tip of the iceberg.
----
lyrics (c) 2013 Alex S. Garcia / music (c) 2013 Serge Barbaro
----
<<tiddler 2013.11.01_EN>>

----
See previous news entries [[here|Archives_EN]].
----
Artist: [[MK|MK_artist]]
Album: [[TV cars and magnet toys|TV cars and magnet toys_album]]
Lyrics: Alex S. Garcia
Music: Michael Kolomiets
----

Watching the child, old man cries.
When did it all start to fall?
He was alive, old man had a life!
Never had he dreamed that he'd survive the damn bomb -- and the old man cries...
Never thought he'd live to see the sun rise again -- and the old man cries...
And the old man cries, thinking 'bout the pain and all who've died.
Ta ta ta ta ta ta ta ta ta...
But the old man cries. But the old man cries.

Why want to raze Hiroshima?
Why drop the bomb, why my Lord?
But he was alive, old man had a life!
Never could he understand the reason for all this -- and the old man cries...
Never could he understand the meaning for these deaths -- and the old man cries...
And the old man cries, praying forgiveness for those who died.
Ta ta ta ta ta ta ta ta ta...
But the old man cries. But the old man cries.

Time now has passed, and he can
Remember the past -- so much pain.
He's still alive, old man has a life...

----
lyrics (c) 1996 Alex S. Garcia / music (c) 1996 Michael Kolomiets
----
/***
http://tiddlystyles.com/#theme:DevFire
Author: Clint Checketts
***/

/*{{{*/
body {
background: #000;
}
/*}}}*/
/***
!Link styles /% ============================================================= %/
***/
/*{{{*/
a,
a.button,
#mainMenu a.button,
#sidebarOptions .sliderPanel a{
 color: #ffbf00;
 border: 0;
 background: transparent;
}

a:hover,
a.button:hover,
#mainMenu a.button:hover,
#sidebarOptions .sliderPanel a:hover
#sidebarOptions .sliderPanel a:active{
 color: #ff7f00;
 border: 0;
 border-bottom: #ff7f00 1px dashed;
 background: transparent;
 text-decoration: none;
}

#displayArea .button.highlight{
 color: #ffbf00;
 background: #4c4c4c;
}
/*}}}*/
/***
!Header styles /% ============================================================= %/
***/
/*{{{*/
.header{
 border-bottom: 2px solid #ffbf00;
 color: #fff;
}

.headerForeground a {
 color: #fff;
}

.header a:hover {
 border-bottom: 1px dashed #fff;
}
/*}}}*/
/***
!Main menu styles /% ============================================================= %/
***/
/*{{{*/
#mainMenu {color: #fff;}
#mainMenu h1{
 font-size: 1.1em;
}
#mainMenu li,#mainMenu ul{
 list-style: none;
 margin: 0;
 padding: 0;
}
/*}}}*/
/***
!Sidebar styles /% ============================================================= %/
***/
/*{{{*/
#sidebar {
 right: 0;
 color: #fff;
 border: 2px solid #ffbf00;
 border-width: 0 0 2px 2px;
}

#sidebarOptions {
 background-color: #4c4c4c;
 padding: 0;
}

#sidebarOptions a{
 margin: 0;
 color: #ffbf00;
 border: 0;
}
#sidebarOptions a:hover {
 color: #4c4c4c;
 background-color: #ffbf00;

}

#sidebarOptions a:active {
 color: #ffbf00;
 background-color: transparent;
}

#sidebarOptions .sliderPanel {
 background-color: #333;
 margin: 0;
}

#sidebarTabs {background-color: #4c4c4c;}
#sidebarTabs .tabSelected {
 padding: 3px 3px;
 cursor: default;
 color: #ffbf00;
 background-color: #666;
}
#sidebarTabs .tabUnselected {
 color: #ffbf00;
 background-color: #5f5f5f;
 padding: 0 4px;
}

#sidebarTabs .tabUnselected:hover,
#sidebarTabs .tabContents {
 background-color: #666;
}

.listTitle{color: #FFF;}
#sidebarTabs .tabContents a{
 color: #ffbf00;
}

#sidebarTabs .tabContents a:hover{
 color: #ff7f00;
 background: transparent;
}

#sidebarTabs .txtMoreTab .tabSelected,
#sidebarTabs .txtMoreTab .tab:hover,
#sidebarTabs .txtMoreTab .tabContents{
 color: #ffbf00;
 background: #4c4c4c;
}

#sidebarTabs .txtMoreTab .tabUnselected {
 color: #ffbf00;
 background: #5f5f5f;
}

.tab.tabSelected, .tab.tabSelected:hover{color: #ffbf00; border: 0; background-color: #4c4c4c;cursor:default;}
.tab.tabUnselected {background-color: #666;}
.tab.tabUnselected:hover{color:#ffbf00; border: 0;background-color: #4c4c4c;}
.tabContents {
 background-color: #4c4c4c;
 border: 0;
}
.tabContents .tabContents{background: #666;}
.tabContents .tabSelected{background: #666;}
.tabContents .tabUnselected{background: #5f5f5f;}
.tabContents .tab:hover{background: #666;}
/*}}}*/
/***
!Message area styles /% ============================================================= %/
***/
/*{{{*/
#messageArea {background-color: #666; color: #fff; border: 2px solid #ffbf00;}
#messageArea a:link, #messageArea a:visited {color: #ffbf00; text-decoration:none;}
#messageArea a:hover {color: #ff7f00;}
#messageArea a:active {color: #ff7f00;}
#messageArea .messageToolbar a{
 border: 1px solid #ffbf00;
 background: #4c4c4c;
}
/*}}}*/
/***
!Popup styles /% ============================================================= %/
***/
/*{{{*/
.popup {color: #fff; background-color: #4c4c4c; border: 1px solid #ffbf00;}
.popup li.disabled{color: #fff;}
.popup a {color: #ffbf00; }
.popup a:hover { background: transparent; color: #ff7f00; border: 0;}
.popup hr {color: #ffbf00; background: #ffbf00;}
/*}}}*/
/***
!Tiddler Display styles /% ============================================================= %/
***/
/*{{{*/
.title{color: #fff;}
h1, h2, h3, h4, h5 {
 color: #fff;
 background-color: transparent;
 border-bottom: 1px solid #333;
}

.subtitle{
 color: #666;
}

.viewer {color: #fff; }

.viewer table{background: #666; color: #fff;}

.viewer th {background-color: #996; color: #fff;}

.viewer pre, .viewer code {color: #ddd; background-color: #4c4c4c; border: 1px solid #ffbf00;}

.viewer hr {color: #666;}

.tiddler .button {color: #4c4c4c;}
.tiddler .button:hover { color: #ffbf00; background-color: #4c4c4c;}
.tiddler .button:active {color: #ffbf00; background-color: #4c4c4c;}

.toolbar {
 color: #4c4c4c;
}

.toolbar a.button,
.toolbar a.button:hover,
.toolbar a.button:active,
.editorFooter a{
 border: 0;
}

.footer {
 color: #ddd;
}

.selected .footer {
 color: #888;
}

.highlight, .marked {
 color: #000;
 background-color: #ffe72f;
}
.editorFooter {
 color: #aaa;
}

.tab{
-moz-border-radius-topleft: 3px;
-moz-border-radius-topright: 3px;
}

.tagging,
.tagged{
 background: #4c4c4c;
 border: 1px solid #4c4c4c; 
}

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

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

.tagging .button,
.tagged .button{
 color: #ffbf00;
 border: 0;
 padding: 0;
}

.tagging .button:hover,
.tagged .button:hover{
background: transparent;
}

.selected .isTag .tagging.simple,
.selected .tagged.simple,
.isTag .tagging.simple,
.tagged.simple {
 float: none;
 display: inline;
 border: 0;
 background: transparent;
 color: #fff;
 margin: 0;
}

.cascade {
 background: #4c4c4c;
 color: #ddd;
 border: 1px solid #ffbf00;
}
/*}}}*/
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

----
AdvancedOptions
PluginManager
ImportTiddlers
<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'>
<div refresh='content' tiddler='MainMenu'></div>
</div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
// --------------------------------------------------------------------
// Calendar
// --------------------------------------------------------------------

config.macros.calendar = {holidays: []};
config.macros.calendar.options = {
 // day week starts from (normally 0-Su or 1-Mo)
 calendarWeekStart: 1,
 calendarToday: "Today",
 calendarHoliday: "Holiday: ",
 calendarLongDateFormat: "0MM/0DD/YYYY",
 calendarShortDateFormat: "0MM/0DD",
 calendarTag: ["schedule"]
};

/***************************************************************************
** Internal functions
***************************************************************************/
var cldTag;

config.macros.calendar.calendarIsHoliday = function(date) {
 var cm = config.macros.calendar;
 var longHoliday = date.formatString(cm.options.calendarLongDateFormat);
 var shortHoliday = date.formatString(cm.options.calendarShortDateFormat);
 for(var i = 0; i < cm.holidays.length; i++) {
 if(cm.holidays[i][0] == longHoliday || cm.holidays[i][0] == shortHoliday) {
 return cm.holidays[i];
 }
 }
 return null;
}

config.macros.calendar.onClickOtherDay = function() {
 var day = this.getAttribute('tiddlylink');
 story.displayTiddler(null,day,DEFAULT_EDIT_TEMPLATE);
 for(var i=0; i<cldTag.length;i++){
 Story.prototype.setTiddlerTag(day, cldTag[i], 1);
 }
 Story.prototype.focusTiddler(day,"text");
}

config.macros.calendar.getPopupText = function(title) {
 var popup_entries = store.getTiddlerText(title).split("\n");
 var popup = popup_entries[0];
 if(popup_entries.length>1) popup += " ...";
 return popup;
}

config.macros.calendar.findCalendar = function(child) {
 var parent;
 while (child && child.parentNode) {
 parent = child.parentNode;
 if (parent.id == "calendarWrapper") {
 return parent;
 }
 child = parent;
 }
 return null;
}

config.macros.calendar.selectDate = function(e) {
 if (!e) var e = window.event;
 var cm = config.macros.calendar;
 var calendar = cm.findCalendar(this);
 if (calendar) {
 var d = this.getAttribute("date");
 if (d != null) cm.makeCalendar(calendar, new Date(new Number(d)));
 }
 e.cancelBubble = true;
 if (e.stopPropagation) e.stopPropagation();
 return false;
}

config.macros.calendar.makeCalendar = function(calendar, dt_current) {
 var cm = config.macros.calendar;
 var dt_today = new Date(new Number(calendar.getAttribute("today")));
 var currentDay = new Date(new Number(calendar.getAttribute("currentDay")));
 var setControls = calendar.getAttribute("setControls");
 calendar.setAttribute("date", dt_current.valueOf());

 while (calendar.hasChildNodes())
 calendar.removeChild(calendar.firstChild);

if(setControls==1){
 // get same date in the previous year
 var dt_prev_year = new Date(dt_current);
 dt_prev_year.setFullYear(dt_prev_year.getFullYear() - 1);
 if (dt_prev_year.getDate() != dt_current.getDate())
 dt_prev_year.setDate(0);

 // get same date in the next year
 var dt_next_year = new Date(dt_current);
 dt_next_year.setFullYear(dt_next_year.getFullYear() + 1);
 if (dt_next_year.getDate() != dt_current.getDate())
 dt_next_year.setDate(0);

 // get same date in the previous month
 var dt_prev_month = new Date(dt_current);
 dt_prev_month.setMonth(dt_prev_month.getMonth() - 1);
 if (dt_prev_month.getDate() != dt_current.getDate())
 dt_prev_month.setDate(0);

 // get same date in the next month
 var dt_next_month = new Date(dt_current);
 dt_next_month.setMonth(dt_next_month.getMonth() + 1);
 if (dt_next_month.getDate() != dt_current.getDate())
 dt_next_month.setDate(0);
}

 // get first day to display in the grid for current month
 var dt_firstday = new Date(dt_current);
 dt_firstday.setDate(1);
 dt_firstday.setDate(1 - (7 + dt_firstday.getDay() - cm.options.calendarWeekStart) % 7);

 var area, header;
 var line, cell, i;

 // 1 - calendar header table
 // 2 - print weekdays titles
 // 3 - calendar days table 
calendar.cellPadding = 0;
calendar.cellSpacing = 0;
area = createTiddlyElement(calendar, "tbody");

 // 1 - calendar header table
 header = createTiddlyElement(area,"tr", "calendarHeader");
 header.cellPadding = 0;
 header.cellSpacing = 0;

if(setControls==1){ 
var headerValues = [
 [ "<<", "selectYear", dt_prev_year.valueOf() ],
 [ "<", "selectMonth", dt_prev_month.valueOf() ],
 [ config.messages.dates.months[dt_current.getMonth()] + ' ' + dt_current.getFullYear(),
 "selectToday", dt_today.valueOf() ],
 [ ">", "selectMonth", dt_next_month.valueOf() ],
 [ ">>", "selectYear", dt_next_year.valueOf() ]
 ];

 for (i = 0; i < headerValues.length; ++i) {
 var link = createTiddlyElement(header,"td", null, null, headerValues[i][0]);
 if(i==2) link.colSpan=3;
 link.onclick = cm.selectDate;
 link.setAttribute("date", headerValues[i][2]);
 }
} else {
 var link = createTiddlyElement(header,"td", null, null, 
config.messages.dates.months[dt_current.getMonth()] + ' ' + dt_current.getFullYear());
//cm.options.calendarMonths
link.colSpan=7;
}

 // 2 - print weekdays titles
 line = createTiddlyElement(area, "tr", "weekNames");
 for (var n = 0; n < 7; ++n) {
 createTiddlyElement(line, "td", null, null, config.messages.dates.shortDays[(cm.options.calendarWeekStart + n)%7]);
//cm.options.calendarWeekDays
 }

 // 3 - calendar days table
 var dt_current_day = new Date(dt_firstday);
 var day_class;
 var title;
 var holiday;
 var popup;
 var clickHandler;

 while (dt_current_day.getMonth() == dt_current.getMonth() ||
 dt_current_day.getMonth() == dt_firstday.getMonth()) {

 // print row header
 line = createTiddlyElement(area, "tr", "calendarLine", null, null);
 for (var n_current_wday = 0; n_current_wday < 7; ++n_current_wday) {
 title = dt_current_day.formatString(cm.options.calendarLongDateFormat);
 clickHandler = cm.onClickOtherDay;
 popup = null;
 holiday = cm.calendarIsHoliday(dt_current_day);

 if (holiday != null) {
 // holidays
 day_class = (holiday.length==3)? holiday[2]: "holiDay";
 popup = cm.options.calendarHoliday + holiday[1];
 } else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6) {
 // weekend days
 day_class = "weekDay";
 } else {
 // print working days of current month
 day_class = "workingDay";
 }

if(dt_current_day.getMonth() == dt_current.getMonth()){
 if (currentDay.valueOf() == dt_current_day.valueOf()) {
 // print current date
 if (store.tiddlerExists(title)){
 // day has a tiddler associated with it
 day_class += " currentscheduledDay";
 clickHandler = onClickTiddlerLink;
 popup = cm.options.calendarToday + ": "+ cm.getPopupText(title);
 } else {
 day_class += " currentDay";
 popup = cm.options.calendarToday;
}
}

 if (store.tiddlerExists(title) && store.getTiddler(title).isTagged(cldTag[0]) && dt_current_day.valueOf() != dt_today.valueOf()) {
 // day has a tiddler associated with it
 day_class += " scheduledDay";
 clickHandler = onClickTiddlerLink;
 popup = cm.getPopupText(title);
 }
}

 // extra formatting for days of previous or next month
 if (dt_current_day.getMonth() != dt_current.getMonth()) {
 day_class += " otherMonthDay";
 }

 var text = dt_current_day.getDate();
 var cell = createTiddlyElement(line, "td", null, day_class, text);
 cell.onclick=clickHandler;
 cell.setAttribute("date", dt_current_day.valueOf());
 cell.setAttribute("tiddlyLink", title);
 if(popup) cell.setAttribute("title", popup);

 dt_current_day.setDate(dt_current_day.getDate()+1);
 }
 }
}

config.macros.calendar.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
 var start_date = new Array();
 var date = new Date();
 var cldParams = paramString.parseParams('calendarParams', null, true);
 var cldYear = (cldParams[0].year)?parseFloat(cldParams[0].year[0]): date.getFullYear();
 var cldMonth = (cldParams[0].month)?parseFloat(cldParams[0].month[0]): date.getMonth();
 var n_months = (cldParams[0].numberMonths)?parseFloat(cldParams[0].numberMonths[0]): 1;
 var n_cols = (cldParams[0].numberColumns)?parseFloat(cldParams[0].numberColumns[0]): 3;
 cldTag = (cldParams[0].tag)?cldParams[0].tag[0].split("#"): config.macros.calendar.options.calendarTag;
 for(var i = 0; i < n_months; i++){
 start_date[i] = new Date(cldYear, cldMonth+i, 1);
 }
 var n_rows = Math.max(1,Math.ceil(n_months/n_cols));
 n_cols = Math.min(n_cols,n_months);
 var setControls=(n_months>1)? 0: 1;
 var currentDay = new Date();
 currentDay = new Date(currentDay.getFullYear(), currentDay.getMonth(), currentDay.getDate());
 var holder = createTiddlyElement(place, "table", null,"calendarHolder");
 var holderTable = createTiddlyElement(holder, "tbody");
 for(var i = 0; i < n_rows; i++){
 var holderLine = createTiddlyElement(holderTable, "tr");
 for(var j = 0; j < n_cols; j++){
 var holderCell = createTiddlyElement(holderLine, "td");
 if(n_cols*i+j+1<=n_months){
 var calendar = createTiddlyElement(holderCell, "table", "calendarWrapper");
 calendar.setAttribute("name", "calendarWrapper");
 calendar.setAttribute("setControls", setControls);
 calendar.setAttribute("today", start_date[n_cols*i+j].valueOf());
 calendar.setAttribute("currentDay", currentDay.valueOf());
 config.macros.calendar.makeCalendar(calendar, start_date[n_cols*i+j]);
 }
 }
 }
}

function refreshCalendars(hint) {
 var calendars = document.getElementsByName("calendarWrapper");
 var i, c;
 for (i = 0; i < calendars.length; ++i) {
 c = calendars.item(i);
 if (c.id == "calendarWrapper") {
 config.macros.calendar.makeCalendar(c, new Date(new Number(c.getAttribute("date"))));
 }
 }
}

store.addNotification(null, refreshCalendars);

setStylesheet("/***\n!Calendar Styles\n***/\n/*{{{*/\n .viewer .calendarHolder {\n margin-left: auto;\n margin-right: auto;\n border: none;\n}\n\n .viewer .calendarHolder table {\n border: none;\n margin: 0;\n}\n\n .viewer .calendarHolder tr {\n border: none;\n vertical-align: top;\n}\n\n .viewer .calendarHolder td {\n border: none;\n vertical-align: top;\n}\n\n .viewer #calendarWrapper {\n width: 21em;\n border: 2px solid #4682b4;\n cursor: pointer;\n}\n\n #calendarWrapper #calendarLine td {\n height: 2.5em;\n}\n\n #calendarWrapper tr {\n border:none;\n}\n\n #calendarWrapper td {\n text-align: center;\n vertical-align: middle;\n width: 14.28%;\n border:none;\n}\n\n #calendarWrapper #calendarHeader td{\n color: #ffffff;\n background-color: #666;\n height: 2em;\n}\n\n #calendarWrapper #weekNames td {\n color: #ffffff;\n background-color: #87cefa;\n height: 2em;\n}\n\n #calendarWrapper .weekDay {\n background-color: #ccff99;\n}\n\n #calendarWrapper .holiDay {\n background-color: #9acd32;\n}\n\n #calendarWrapper .currentDay {\n border: solid #ff0000 2px;\n font-weight: bold;\n}\n\n #calendarWrapper .currentscheduledDay {\n border: solid #ff0000 2px;\n font-weight: bold;\n}\n\n #calendarWrapper .workingDay {\n background-color: #999;\n}\n\n #calendarWrapper .scheduledDay {\n border: solid orange 2px;\n}\n\n #calendarWrapper .otherMonthDay {\n background-color: #014;\n}\n\n/*}}}*/","CalendarStyles");
Artist: [[MSA Project]]
Album: [[Istree]]
Lyrics: Alex S. Garcia
Music: Michel Fontes & Serge Barbaro
----

In space the brave
Face awesome adventures...
Then THEY appeared,
Through a leak
In time and matter.
News spread like a plague,
Seeds of fear
And of disaster...

Tame and silent,
Gently patient,
Knowing nothing...
Now there's something
They want to see,
To set them all free...

Torches flame
To proclaim
The start of slaughter.
Fires burn,
Vultures turn,
While men yearn
For relief
Where are their beliefs?

But the wisemen,
Who rule everything,
They now join hands
And they begin,
To sing and chant
An ancient hymn...

''For billions of years
Those words had never been spoken.
And now through the tears
Of those who they will kill.
The secret's revealed
As the weapon breaches the sphere.
And now it will heal
This wound that rebellion has caused...''

They wanted to act, oh what a mess,
They acted too fast, now they shall rest,
Now it's too late for changing their fates,
The end is at hand, Death's striking again,

<html>
&nbsp;&nbsp;&nbsp;&nbsp;
For now... 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
their world... 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
will soon... 
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
be gone! 
</html>

''For billions of years
Those words had never been spoken.
And now through the tears
Of those who they will kill.
The secret's revealed
As the weapon breaches the sphere.
And now it will heal
This wound that rebellion has caused...''

----
lyrics (c) 2010 Alex S. Garcia / music (c) 2010 Michel Fontes & Serge Barbaro
----
config.renameTags = {

	prompts: {
		rename: "Rename the tag '%0' to '%1' in %2 tidder%3?",
		remove: "Remove the tag '%0' from %1 tidder%2?"
	},

	removeTag: function(tag,tiddlers) {
		for (var i=0;i<tiddlers.length;i++) {
			store.setTiddlerTag(tiddlers[i].title,false,tag);
		}
	},

	renameTag: function(oldTag,newTag,tiddlers) {
		for (var i=0;i<tiddlers.length;i++) {
			store.setTiddlerTag(tiddlers[i].title,false,oldTag); // remove old
			store.setTiddlerTag(tiddlers[i].title,true,newTag);  // add new
		}
	},

	storeMethods: {

		saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,

		saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields) {
			if (title != newTitle) {
				var tagged = this.getTaggedTiddlers(title);
				if (tagged.length > 0) {
					// then we are renaming a tag
					if (confirm(config.renameTags.prompts.rename.format([title,newTitle,tagged.length,tagged.length>1?"s":""])))
						config.renameTags.renameTag(title,newTitle,tagged);

					if (!this.tiddlerExists(title) && newBody == "")
						// dont create unwanted tiddler
						return null;
				}
			}
			return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields);
		},

		removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,

		removeTiddler: function(title) {
			var tagged = this.getTaggedTiddlers(title);
			if (tagged.length > 0)
				if (confirm(config.renameTags.prompts.remove.format([title,tagged.length,tagged.length>1?"s":""])))
					config.renameTags.removeTag(title,tagged);
			return this.removeTiddler_orig_renameTags(title);
		}

	},

	init: function() {
		merge(TiddlyWiki.prototype,this.storeMethods);
	}
}

config.renameTags.init();
This will eventually hold a list of reviews written specifically for this website, and perhaps a few reprints as well. We shall see.
Background: #ccaabb
Foreground: #000
PrimaryPale: #eeaaff
PrimaryLight: #ff0033
PrimaryMid: #464544
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eeaaff
TertiaryLight: #EEC591
TertiaryMid: #000
TertiaryDark: #8B7355
!Aaron Spelling, un producteur en or

Outre les liens fournis... eh bien, c'est moi qui l'ai écrit, ce bouquin ! Donc, forcément, je sais de quoi je parle ;-)

Je trouve d'ailleurs dommage que dans les options vous n'ayez pas inclus un "je sais que c'est correct, car j'en suis l'auteur", voire une case "autre" avec un champ de commentaire.

Bref. Merci de faire la modif, car juste "Garcia" en nom d'auteur, c'est pas super précis, d'autant vu tous les Garcia qu'il y a sur la planète ! Sans compter que,  du coup, je peux même pas le rajouter sur ma page dans la "Plate-forme Auteurs" que je viens de créer sur Amazon...

J'essaierai de rajouter aussi un scan de la couverture bientôt.
/***
Quick and dirtly palette switcher for 2.1.x
<<selectPalette>>
WARNING this will overwrite your ColorPalette tiddler.
***/

//{{{

merge(config.macros,{

	setPalette: {

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			var paletteName = params[0] ? params[0] : tiddler.title;
			createTiddlyButton(place,"apply","Apply this palette",function(e) {
				config.macros.selectPalette.updatePalette(tiddler.title);
				return false;
			});
		}
	},

	selectPalette: {

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			createTiddlyDropDown(place,this.onPaletteChange,this.getPalettes());
		},

		getPalettes: function() {
			var result = [
				{caption:"-select palette-", name:""},
				{caption:"(Default)", name:"(default)"}
			];
			var tagged = store.getTaggedTiddlers("palette","title");
			for(var t=0; t<tagged.length; t++)
				result.push({caption:tagged[t].title, name:tagged[t].title});
			return result;
		},

		onPaletteChange: function(e) {
			config.macros.selectPalette.updatePalette(this.value);
			return true;
		},

		updatePalette: function(title) {
			if (title != "") {
				store.deleteTiddler("ColorPalette");
				if (title != "(default)")
					store.saveTiddler("ColorPalette","ColorPalette",store.getTiddlerText(title),
								config.options.txtUserName,undefined,"");
				this.refreshPalette();
				if(config.options.chkAutoSave)
					saveChanges(true);
			}
		},

		refreshPalette: function() {
			config.macros.refreshDisplay.onClick();
		}
	}
});

//}}}
Artist: [[MSA Project]]
Album: [[Istree]]
Lyrics: Alex S. Garcia
Music: Michel Fontes & Serge Barbaro
----

There's an eerie kind of feeling
When my brain starts screaming,
And my heart is bleeding...
For what once was, now's a fading dream...

There's a stinging sort of pain
That burns right through my veins,
I'll never be the same,
The change has begun, all that I've done...

I see the world through eyes awake,
Anger and strife...
I feel the void that in my wake,
Spreads out, dark and live...

''Images and sceneries, all that I see and hear, flashing in the sky,
Through the storm raging tonight, dreams that I had before, suddenly come to life.
Shadows slide and pass us by, hiding what lies inside from our prying eyes,
Shapes and sounds, underground, rising before my old and twisted soul...''

There's an ancient road that's leading
To the topmost summit
Of these hills I've vanquished,
To a castle, dark and so tall...

There upon I see,
What once used to be,
A liquid entry
Into voidless seas...

I see the world through eyes awake,
Anger and strife...
I feel the void that in my wake,
Spreads out, dark and live...

''Images and sceneries, all that I see and hear, flashing in the sky,
Through the storm raging tonight, dreams that I had before, suddenly come to life.
Shadows slide and pass us by, hiding what lies inside from our prying eyes,
Shapes and sounds, underground, rising before my old and twisted soul...''

I see shadows forming in the storm...
I see shadows forming...
I see shadows forming in the storm...
Oh, shadows in the storm!

I see the world through eyes awake,
Anger and strife...
I feel the void that in my wake,
Spreads out, dark and live...

''Images and sceneries, all that I see and hear, flashing in the sky,
Through the storm raging tonight, dreams that I had before, suddenly come to life.
Shadows slide and pass us by, hiding what lies inside from our prying eyes,
Shapes and sounds, underground, rising before my old and twisted soul...''

----
lyrics (c) 2010 Alex S. Garcia / music (c) 2010 Michel Fontes & Serge Barbaro
----
<<search>><<closeAll>><<permaview>><<slider chkSliderAdminTools AdminTools 'Admin Tools »'>>
<<tabs txtMainTab Timeline Timeline TabTimeline All 'All tiddlers' TabAll Tags 'All tags' TabTags More 'More lists' TabMore>>
(Alex S. Garcia / Alexandre Garcia)
Villa Arcadia
Alias Serge Barbaro.
Official website: http://www.skeemproject.com/

DISCOGRAPHY
* 2013.10.29 - [[Just suggesting]]

Skeem had previously released a self-titled album in 2001. [[Just suggesting]] is his second CD under this name.

See also [[MSA Project]] for some other work I've done with Serge.
Background: #cccccc
Foreground: #000
PrimaryPale: #999999
PrimaryLight: #667788
PrimaryMid: #334444
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #555566
TertiaryPale: #999999
TertiaryLight: #EEC591
TertiaryMid: #000
TertiaryDark: #8B7355
|bgcolor(#000000):! Song / Chanson |bgcolor(#000000):! Date |bgcolor(#000000):! Artist |bgcolor(#000000):! Album |bgcolor(#000000):! Music |
|[[Animal magnetism]] |2001.12 |[[MK|MK_artist]] |[[MK|MK_album]] |Michael Kolomiets |
|[[Beginnings and endings]] |2010.12 |[[MSA Project]] |[[Istree]] |Michel Fontes |
|[[Birth of a new myth]] |2010.12 |[[MSA Project]] |[[Istree]] |M. Fontes & S. Barbaro |
|[[Black sea]] |2001.12 |[[MK|MK_artist]] |[[MK|MK_album]] |Michael Kolomiets |
|[[Book of shadows]] |2013.10 |[[Skeem]] |[[Just suggesting]] |Serge Barbarao |
|[[Chant of the lost mariner]] |2010.12 |[[MSA Project]] |[[Istree]] |M. Fontes & S. Barbaro |
|[[Crimson crown (the)|The crimson crown]] |1996 |[[MK|MK_artist]] |[[TV cars and magnet toys|TV cars and magnet toys_album]] |Michael Kolomiets |
|[[The end complete]] |2013.10 |[[Skeem]] |[[Just suggesting]] |Serge Barbarao |
|[[Endings and beginnings]] |2010.12 |[[MSA Project]] |[[Istree]] |Michel Fontes |
|[[Eternal Istree]] |2010.12 |[[MSA Project]] |[[Istree]] |M. Fontes & S. Barbaro |
|[[Evenodds]] |2010.12 |[[MSA Project]] |[[Istree]] |M. Fontes & S. Barbaro |
|[[Going of Rose (the)|The going of Rose]] |2001.12 |[[MK|MK_artist]] |[[MK|MK_album]] |Michael Kolomiets |
|[[Half a life]] |2013.10 |[[Skeem]] |[[Just suggesting]] |Serge Barbarao |
|[[The hidden path]] |2013.10 |[[Skeem]] |[[Just suggesting]] |Serge Barbarao |
|[[Humanity lost at last|Humanity lost at last (... and now for something different!)]] |2001.12 |[[MK|MK_artist]] |[[MK|MK_album]] |Michael Kolomiets |
|[[In this city tonight]] |2010.12 |[[MSA Project]] |[[Istree]] |M. Fontes & S. Barbaro |
|[[The journey within]] |2013.10 |[[Skeem]] |[[Just suggesting]] |Serge Barbarao |
|[[Leak in space and time (the)|The leak in space and time]] |2010.12 |[[MSA Project]] |[[Istree]] |M. Fontes & S. Barbaro |
|[[Like the wind]] |2010.12 |[[MSA Project]] |[[Istree]] |M. Fontes & S. Barbaro |
|[[Lizardmen]] |2001.12 |[[MK|MK_artist]] |[[MK|MK_album]] |Michael Kolomiets |
|[[Masquerade]] |2010.12 |[[MSA Project]] |[[Istree]] |M. Fontes & S. Barbaro |
|[[Naked lies]] |2013.10 |[[Skeem]] |[[Just suggesting]] |Serge Barbarao |
|[[Old man cries]] |1996 |[[MK|MK_artist]] |[[TV cars and magnet toys|TV cars and magnet toys_album]] |Michael Kolomiets |
|[[The perfect truth]] |2013.10 |[[Skeem]] |[[Just suggesting]] |Serge Barbarao |
|[[The power of angels]] |2013.10 |[[Skeem]] |[[Just suggesting]] |Serge Barbarao |
|[[Rebellion on Planet V]] |2010.12 |[[MSA Project]] |[[Istree]] |M. Fontes & S. Barbaro |
|[[Shadows in the storm]] |2010.12 |[[MSA Project]] |[[Istree]] |M. Fontes & S. Barbaro |
|[[Space mountain]] |2010.12 |[[MSA Project]] |[[Istree]] |M. Fontes & S. Barbaro |
|[[Space opera]] |2001.12 |[[MK|MK_artist]] |[[MK|MK_album]] |Michael Kolomiets |
|[[Stranded drifter (the)|The stranded drifter]] |2001.12 |[[MK|MK_artist]] |[[MK|MK_album]] |Michael Kolomiets |
|[[Swordwielder and the Dragonking (the)|The Swordwielder and the Dragonking]] |2001.12 |[[MK|MK_artist]] |[[MK|MK_album]] |Michael Kolomiets |
|[[Time traveler (the)|The time traveler]] |2001.12 |[[MK|MK_artist]] |[[MK|MK_album]] |Michael Kolomiets |
|[[TV cars and magnet toys]] |2001.12 |[[MK|MK_artist]] |[[MK|MK_album]] |Michael Kolomiets |
|[[Two thrones]] |2010.12 |[[MSA Project]] |[[Istree]] |M. Fontes & S. Barbaro |
|[[Wanderer (the)|The wanderer]] |2010.12 |[[MSA Project]] |[[Istree]] |M. Fontes & S. Barbaro |
|[[What should I say?]] |1996 |[[MK|MK_artist]] |[[TV cars and magnet toys|TV cars and magnet toys_album]] |Michael Kolomiets |
|bgcolor(#000000):! Col. A |bgcolor(#000000):! Col. B |bgcolor(#000000):! Col. C |bgcolor(#000000):! Artist |bgcolor(#000000):! Album |
|unk |bgcolor(#000000): ! unk |[[Humanity lost at last|Humanity lost at last (... and now for something different!)]] |[[MK|MK_artist]] |[[MK|MK_album]] |
|1988 |bgcolor(#000000): ! 1988.12.25 |[[Black sea]] |[[MK|MK_artist]] |[[MK|MK_album]] |
|1991.12.20 |bgcolor(#000000): ! 1991.12.20 |[[The crimson crown]] |[[MK|MK_artist]] |[[TV cars and magnet toys|TV cars and magnet toys_album]] |
|1991.12.20 |bgcolor(#000000): ! 1991.12.20 |[[Lizardmen]] |[[MK|MK_artist]] |[[MK|MK_album]] |
|1992.03.12 |bgcolor(#000000): ! 1992.03.12 |[[TV cars and magnet toys]] |[[MK|MK_artist]] |[[MK|MK_album]] |
|1993.07.09 |bgcolor(#000000): ! 1993.07.09 |[[The going of Rose]] |[[MK|MK_artist]] |[[MK|MK_album]] |
|1993.11.19 |bgcolor(#000000): ! 1993.11.19 |[[The time traveler]] |[[MK|MK_artist]] |[[MK|MK_album]] |
|1995.10.25 |bgcolor(#000000): ! 1995.10.25 |[[Old man cries]] |[[MK|MK_artist]] |[[TV cars and magnet toys|TV cars and magnet toys_album]] |
|1995.10.25 |bgcolor(#000000): ! 1995.10.25 |[[What should I say?]] |[[MK|MK_artist]] |[[TV cars and magnet toys|TV cars and magnet toys_album]] |
|1996.04.03 |bgcolor(#000000): ! 1996.04.03 |[[Animal magnetism]] |[[MK|MK_artist]] |[[MK|MK_album]] |
|1996.06.02 |bgcolor(#000000): ! 1996.06.02 |[[Space opera]] |[[MK|MK_artist]] |[[MK|MK_album]] |
|1996.06.02 |bgcolor(#000000): ! 1996.06.02 |[[The stranded drifter]] |[[MK|MK_artist]] |[[MK|MK_album]] |
|1996.08 |bgcolor(#000000): ! 1996.08 |[[The Swordwielder and the Dragonking]] |[[MK|MK_artist]] |[[MK|MK_album]] |
|2006.11.23 |bgcolor(#000000): ! 2006.11.23 |[[The journey within]] |[[Skeem]] |[[Just suggesting]] |
|2006.11.27 |bgcolor(#000000): ! 2006.11.29 |[[The perfect truth]] |[[Skeem]] |[[Just suggesting]] |
|2007.01.21 |bgcolor(#000000): ! 2007.01.21 |[[The power of angels]] |[[Skeem]] |[[Just suggesting]] |
|2007.01.26 |bgcolor(#000000): ! 2007.01.27 |[[The hidden path]] |[[Skeem]] |[[Just suggesting]] |
|2007.02.21 |bgcolor(#000000): ! 2007.02.21 |[[Half a life]] |[[Skeem]] |[[Just suggesting]] |
|2007.02.22 |bgcolor(#000000): ! 2007.02.27 |[[The end complete]] |[[Skeem]] |[[Just suggesting]] |
|2007.05.03 |bgcolor(#000000): ! 2007.05.07 |[[Naked lies]] |[[Skeem]] |[[Just suggesting]] |
|2007.11.23 |bgcolor(#000000): ! 2007.11.24 |[[Book of shadows]] |[[Skeem]] |[[Just suggesting]] |
|2008.02.28 |bgcolor(#000000): ! 2008.03.01 |[[The wanderer]] |[[MSA Project]] |[[Istree]] |
|2008.05.23 |bgcolor(#000000): ! 2008.05.24 |[[Two thrones]] |[[MSA Project]] |[[Istree]] |
|2008.05.24 |bgcolor(#000000): ! 2008.05.24 |[[Chant of the lost mariner]] |[[MSA Project]] |[[Istree]] |
|2008.06.07 |bgcolor(#000000): ! 2008.06.07 |[[In this city tonight]] |[[MSA Project]] |[[Istree]] |
|2008.06.10 |bgcolor(#000000): ! 2008.06.11 |[[Shadows in the storm]] |[[MSA Project]] |[[Istree]] |
|2008.06.17 |bgcolor(#000000): ! 2008.06.17 |[[Evenodds]] |[[MSA Project]] |[[Istree]] |
|2008.06.22 |bgcolor(#000000): ! 2008.06.22 |[[Masquerade]] |[[MSA Project]] |[[Istree]] |
|2008.06.25 |bgcolor(#000000): ! 2008.06.25 |[[Like the wind]] |[[MSA Project]] |[[Istree]] |
|2008.07.11 |bgcolor(#000000): ! 2008.07.14 |[[Eternal Istree]] |[[MSA Project]] |[[Istree]] |
|2008.07.14 |bgcolor(#000000): ! 2008.07.14 |[[Birth of a new myth]] |[[MSA Project]] |[[Istree]] |
|2008.07.14 |bgcolor(#000000): ! 2008.07.14 |[[Endings and beginnings]] |[[MSA Project]] |[[Istree]] |
|2008.07.14 |bgcolor(#000000): ! 2008.07.19 |[[Beginnings and endings]] |[[MSA Project]] |[[Istree]] |
|2008.07.15 |bgcolor(#000000): ! 2008.08.01 |[[Rebellion on Planet V]] |[[MSA Project]] |[[Istree]] |
|2008.07.31 |bgcolor(#000000): ! 2008.08.02 |[[Space mountain]] |[[MSA Project]] |[[Istree]] |
|2008.08.03 |bgcolor(#000000): ! 2008.08.03 |[[The leak in space and time]] |[[MSA Project]] |[[Istree]] |
All songs on this site are copyrighted.

Older material (pre 2002) is protected by the [[SNAC|http://www.snac.fr/]] while more recent lyrics are protected by the [[SACEM|http://www.sacem.fr/]].

Click on a song title to read the lyrics.

<<tiddler Songlist>>
Artist: [[MSA Project]]
Album: [[Istree]]
Lyrics: Alex S. Garcia
Music: Michel Fontes & Serge Barbaro
----

There used to live, laughing and singing,
Next to the rim, creatures and beings of myth.
Then suddenly the earth was shaking,
And destiny made them all strangers and soldiers...

Dehumanized by crystalline light
Reflecting through the rift in space and time.
Dark deicide sentenced them to fight...
They must find who will pay for this horrendous crime!

This is not the way they were meant to die...

''Floating in space, land of the brave, home of their race,
Torn away from their world...
Fighting with rage, trying to save all that they crave,
Hopes and dreams of the young...
In a great wave, all that they hate will be enslaved,
What's at stake is their souls...
Mountain of fate, drifting so straight, until the day
The breach is closed...''

Desensitized by the starlit sky,
Surviving and saving memories from the past...
Seeking for a guide to answer why
The world has swirled and whirled, changing... but will it last?

''Floating in space, land of the brave, home of their race,
Torn away from their world...
Fighting with rage, trying to save all that they crave,
Hopes and dreams of the young...
In a great wave, all that they hate will be enslaved,
What's at stake is their souls...
Mountain of fate, drifting so straight, until the day
The breach is closed...''

Dehumanized... Desensitized...
Dehumanized... Desensitized...
Dehumanized... Desensitized...

----
lyrics (c) 2010 Alex S. Garcia / music (c) 2010 Michel Fontes & Serge Barbaro
----
Artist: [[MK|MK_artist]]
Album: [[MK|MK_album]]
Lyrics: Alex S. Garcia
Music: Michael Kolomiets
----

Heading away, ships racing through space,
Leading the way with haste at great pace,
Searching for a world to
Conquer and then subdue - then rule.

Lost in the stars, he travels with speed,
Gliding afar, see how he will free
The nations that besieged, pray
To regain their pride - they will pay!

''Lasers beaming, phasers aiming, dazers dazing, searing, tearing apart
Liquid fumes and solid light have merged and swirled and whirled in a world of wind
And now they see... he has come and he is here to save them all...
Speaking in another tongue!''

Making your way out of this fury,
You stumble and shout till you really
Understand why the stars don't fall
Down from the skies - at night...

''Lasers beaming, phasers aiming, dazers dazing, searing, tearing apart
Liquid fumes and solid light have merged and swirled and whirled in a world of wind
And now they see... he has come and he is here to save them all...
Speaking in another tongue!''

----
lyrics (c) 2001 Alex S. Garcia / music (c) 2001 Michael Kolomiets
----
APPEL A TEXTES 
ANTHOLOGIE SPACE OPERA 

Je recherche des textes pour un projet d'anthologie qui sera publiée par Black Coat Press / Rivière Blanche en 2012, dans leur collection "Dimension".

''Thème :'' space opéra
''Contexte :'' naissance ou chute d'un empire
''Mots clés :'' grandeur et/ou décadence

A noter que la grandeur peut être liée à la naissance d'un empire et la décadence à sa chute... comme cela peut représenter tout autre chose. Il n'est pas forcément nécessaire non plus d'évoquer les deux dans un même texte.

Idéalement, les nouvelles devraient faire entre 20,000 et 40,000 signes. Ceci dit, je ne souhaite pas vraiment imposer une contrainte de longueur. Si votre histoire nécessite plus, n'hésitez surtout pas, quitte même à en faire une novella. Simplement, n'oubliez pas qu'une novella prenant forcément plus de place, je serai nécessairement beaucoup plus exigeant. (Vous pouvez aussi faire plus court que 20,000, évidemment).

Outre le thème et le contexte énoncés, je recherche des nouvelles originales (si ce n'est par le sujet lui-même, tout au moins par son traitement... voire les deux idéalement !) et de qualité. Evitez toutefois les textes trop stylés ou trop complexes... on veut avant tout pour ce projet de l'action, de l'aventure, du divertissement !

Rémunération : chaque auteur publié recevra deux exemplaires de l'anthologie à parution et bénéficiera de fortes réductions sur l'achat éventuel d'exemplaires supplémentaires.

Tout texte devra être soumis au format standard (25 lignes de 60 caractères par page, dactylographiées, etc.) et envoyé avant le 22 juillet 2011 [MAJ: échéance repoussée à fin janvier 2012], à :

Alexandre Garcia 
Les Jardins du Boréon 
18 avenue Thiers 
06000 Nice 

Merci de ne pas faire d'envoi en recommandé ! Ni par e-mail, d'ailleurs (ils ne seront pas lus ! vous voilà prévenus...) 

La correspondance avec les auteurs se fera de préférance par e-mail. Donc si vous en avez une, pensez à l'inclure dans votre courrier. 

Si vous n'avez PAS d'adresse e-mail (ou ne souhaitez pas la communiquer ?!?), incluez une enveloppe pré-timbrée à votre adresse pour la réponse. Si vous souhaitez recevoir un avis de réception, pensez à inclure une *seconde* enveloppe pré-timbrée (ou une carte postale si vous préférez, mais timbrée également bien sûr).

''NOTE IMPORTANTE :'' Les manuscrits ne seront PAS retournés. N'envoyez donc que des copies.

Tout auteur est bienvenue, qu'il soit professionnel ou débutant... du moment bien sûr qu'il suive les règles du jeu !

Et bien entendu, n'hésitez pas à faire suivre cette annonce, à la transmettre, diffuser, publier, republier, recopier, photocopier, numériser, lasériser... enfin, bref, faites passer le message !

Au plaisir de vous lire. 

Alexandre Garcia.
Background: #FFBCAD
Foreground: #000
PrimaryPale: #F67276
PrimaryLight: #FF6633
PrimaryMid: #A73853
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #FFBCAD
TertiaryLight: #EEC591
TertiaryMid: #000
TertiaryDark: #8B7355 
.viewer table.borderless,
.viewer table.borderless * {
             border: 0;
}
Artist: [[MK|MK_artist]]
Albums: [[TV cars and magnet toys|TV cars and magnet toys_album]] (1996) + [[MK|MK_album]] (2001)
Lyrics: Alex S. Garcia
Music: Michael Kolomiets
----

They say they know what people need today - or so they say.
But what people need is more time to play,
More time to buy things they don't have.
So they made more TV shows, more cars and toys and magnet rolls
To calm the wave of maddened eyes and keep the crowd alive.

They throw the money, they hide the lies,
They call for more fun tonight...
Say they have what the people need,
Say they have what the people want...
But I'm telling you here, all they have is...

More TV cars and magnet toys,
More info crimes for scandal boys,
More lawless fakes and broken hearts,
More fallen tears for shattered fears...
And all they have is more illusions for naive children
More saddened words for mass persuasion,
More good impressions for hated sires,
More shredded tears for hidden fears
And so much more broken dreams... broken dreams...

----
lyrics (c) 1996 Alex S. Garcia / music (c) 1996 Michael Kolomiets
----
[[MK|MK_artist]] demo tape
# [[TV cars and magnet toys]]
# [[The crimson crown]]
# [[What should I say?]]
# [[Old man cries]]
<<allTags>>
/***
|!''Name:''|!''TemplatedTagTools''|
|''Description:''|this plugin replace the content of the tag popup with the one from TagToolTemplate (a new shadowTiddler).<<br>>It allows for quick and easy modification of this popup content (including some [[batchTagTools]] macros for example)|
|''Version:''|0.1.0|
|''Date:''|17/01/2007|
|''Source:''|http://yann.perrin.googlepages.com/twkd.html#TemplatedTagTools|
|''Author:''|[[Yann Perrin|YannPerrin]]|
|''License:''|[[BSD open source license]]|
|''~CoreVersion:''|2.x|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
***/
//{{{
function onClickTag(e)
{
 if (!e) var e = window.event;
 var theTarget = resolveTarget(e);
 var popup = Popup.create(this);
 var tag = this.getAttribute("tag");
 var title = this.getAttribute("tiddler");
 if(popup && tag) {
 wikify('<<tiddler TagToolTemplate with:"'+tag+'">>',popup);
 }
 Popup.show(popup,false);
 e.cancelBubble = true;
 if (e.stopPropagation) e.stopPropagation();
 return(false);
}
//}}}
//{{{
config.macros.openAll = {};
config.macros.openAll.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
 var lingo = config.views.wikified.tag;
 var openAll = createTiddlyButton(place,lingo.openAllText.format(params),lingo.openAllTooltip,onClickTagOpenAll);
 openAll.setAttribute("tag",params[0]);
}
//}}}
////definition de TagToolTemplate
//{{{
config.shadowTiddlers.TagToolTemplate = "[[Open tag '$1'|$1]]\n<<openAll $1>>\n<<tagging $1>><<newTiddler label:\"New $1 Tiddler\" tag:\"$1\">>";
//}}}
----
''1. LES JARDINS D’ALTAÏR''
//par Alexandre Garcia//
----
Les Jardins d’Altaïr – comme ceux de Babylone –,
Suspendus, si splendides, des prouesses de l’Homme
Témoignent sans faillir – si fiers et sans vergogne –,
Tandisque les Ombres décident et le peuple s’étonne...

Mais au cœur de l’Empire règne la flamme,
Celle qui éveille les espoirs et les âmes.
Elle transforme en martyrs les agonisant
Sous un soleil de cendres et de sang.

Au centre du losange qui encercle nos songes,
Des femmes aux visages d’anges recueillent les cendres
De ceux qui des ondes ternissent les franges
Des cent-six mille mondes de l’Ordre des Ombres.

Les Jardins d’Altaïr – comme ceux de Babylone –,
Les curieux attirent et de colère résonnent,
Emprisonnent les pires truands qu’homme pardonne...
Et à travers tout l’Empire, nul à présent ne s’étonne.

Si dans dix mille ans l’Humanité prétend
Survivre longtemps aux ravages du temps...
Sans doute que toi, moi... nous tous, quoi,
Nous serons immortels...
Tu y crois ?
----
Texte déposé à la SACEM (c) 2011 par Alexandre Garcia.
----
----
''2. LE PONT DES SOUPIRS''
//par Alexandre Garcia//
----
Sous le pont des soupirs, mes souvenirs s'évaouissent.
A l'abri du désir – des cris, des rires, de toute malice.
Seul ici je survis, loin des soucis, des tapis rouges...
Toujours de l'ennui je veux m'enfuir, loin dans mes songes.
Je sais qu'ils sont factices, mais qu'y puis-je ? Alors, je plonge...

Sous le pont des soupirs je me nourris d'un passé enfuis.
Caché par les ombres, loin de ce monde immonde qui gronde.
Ici nulle magie jamais ne puit briser l'oubli.
Finies toutes ces envies de faux sourires ou de grands bruits,
Ni devrais-je plus subir les joues rougies d'un homme meurtri.

: De cet abri, j'observe la vie
: De ceux qui s'enlisent sans réfléchir.
: Ils crient, ils rient... comme pour se punir
: De fautes commisent... paient le prix.

Sous le pont des soupirs, je peux grandir sans plus mentir.
Je regarde la pluie couvrir la ville, comme son empire.
Cette ville qui jadis fut envahie puis reconstruite,
Telle mon âme aussi – fragile et triste, mais qui résiste
Sans jamais se flétrir, malgré les dires que l'on peut lire.

: De cet abri, j'observe la vie
: De ceux qui s'enlisent sans réfléchir.
: Ils crient, ils rient... comme pour se punir
: De fautes commisent... paient le prix.

Sous le pont des soupirs,
Je veux périr
Comme un martyr.
Afin que personne n'oublie
Qui...
Je suis.
----
Texte déposé à la SACEM (c) 2011 par Alexandre Garcia.
----
----
''3. MORTE SAISON''
//par Alexandre Garcia//
----
A la morte saison, quand les âmes s'en vont,
Seules mes pensées maintiennent ma raison.
Au cœur d'un été empli d'illusions,
De sombres poisons entachent mes passions.

Mais si mes frayeurs n'effraient personne,
Et si mes fantômes s'envolent sans bruit,
Si mes erreurs ne gênent ni n'étonnent,
Alors, peut-être, de l'ombre, j'éclairerai la nuit...

Ce soir, j'ai capturé un ange.
Que croire parmi tous ses présages ?
Qu'il existe un dieu dans les nuages,
Qui persiste à vouloir des louanges ?

Au creux d'un lac sombre, j'étreins mes douleurs,
Du fond de ma tombe, s'éteint mon bonheur.
Des cieux, une voix tonne... j'enfreins toutes mes peurs...
Si long que mon cœur atteint l'aube, je me meurs...

Et si je savoure mes doutes, mes dégoûts,
C'est que je ne sais par où ma vie coule.
Et si mes amours m'envoûtent mais me coûtent,
C'est que je ne suis pas fou, ni si saoûl.

A la morte saison, dans cette triste maison,
J'emprisonne le vent, son son est plaisant.
Mais aucun pardon brisera cette prison,
Mon crime fut trop grand... aussi, voilà, j'attends...
----
Texte déposé à la SACEM (c) 2011 par Alexandre Garcia.
----
Artist: [[MK|MK_artist]]
Album: [[MK|MK_album]]
Lyrics: Alex S. Garcia
Music: Michael Kolomiets
----

In a far away kingdom of violence lived a pretty young girl.
Golden was her hair and in her silence, she would dream of the world...
And now she talks to her soul, which shows her a hidden cove,
Wherein she finds a great sword, made of the purest of stones...

On the road she goes, feeling in safety, looking for adventure.
Little does she know that her destiny is wrought in disaster.
(Then) one day she found a great hole, (hid) in the ground, in the path.
(There) she fell into the cold and (then) felt a chilling laugh...

Underground she knows what she will find, drawing her sword for the fight.
When the beast rushed out, she was all ready - and slew the dragonking.
She slew the dragonking - she knows what it means.
And she slew the dragonking - and she knows what it means...

----
lyrics (c) 2001 Alex S. Garcia / music (c) 2001 Michael Kolomiets
----
Artist: [[MK|MK_artist]]
Album: [[TV cars and magnet toys|TV cars and magnet toys_album]]
Lyrics: Alex S. Garcia
Music: Michael Kolomiets
----

Out in the fog the armies march, sounding like a billion men or more.
Shouts in the night make them watch every shadow upon the wall.
Crimson shades wither your pain as your fear grows every minute.
And in the haze, you feel the rain pouring upon your shoulders.

And now you blast my eyes with your shiny metal
You capture my smile on a frozen saddle
You make me cry like if I could never die
And you take my soul where it can never be found.

Aside from this burning temptation, you persuade me to wear the crown
I fear the armies coming, but you say they can never take me down.
Oh how I wish I could tell you I don't care for all this power
I never asked for all this and now here I am, caught in this slaughter !

And every night I dream of an unseen land
I dream a mighty kingdom at hand
Every night I see a vision of light and day
I hope one day to be free and the stars to guide my way
Crimson crown on my head, burns and scorches my bones
Crimson crown I wear, taking me so far from home...

----
lyrics (c) 1996 Alex S. Garcia / music (c) 1996 Michael Kolomiets
----
Artist: [[Skeem]]
Album: [[Just suggesting]]
Lyrics: Alex S. Garcia
Music: Serge Barbaro
----


''I. TO REMEMBER THE PAST...''

A game of amber and shades, through the shimmering veils,
Hidden silvery haze, held in a fiery gaze,
Golden goes in a blaze, open gate to olden days,
Secret path to shadowy ways -- a craze that could go far...

It lays there in the dark, shining bright, glimmering white,
Door is locked, key on the wall, calling strong, beckoning sight.
Who could dare be a part of the light drawn inside?
Within mirrored halls, we all feel its might...

I'm going back home...
I'm going back home...

''My memory lost, I fight to regain,
A past that has gone and yet it remains.
If all is the same the cost I shall pay,
For this is the game which we all play.''

Through shadow I walk, creating the scene...
Or had it all been, before I had come?
Formed from my thoughts, the visions appear,
Becoming more clear -- it was what I'd done.

I'm going back home...
I'm going back home...

''My memory lost, I fight to regain,
A past that has gone and yet it remains.
If all is the same the cost I shall pay,
For this is the game which we all play.''


''II. THE STRUGGLE FOR POWER''

I follow the lines traced on the stone,
And images flash, memories of home.
The truth is revealed, I know what is real,
It wasn't a dream, it is how I feel.

My blood has a power,
My mind was rewritten,
My soul has an answer
So abnormally plain.
My father is a master,
My mother forgotten,
My brothers and sisters,
Dysfunctionally sane.

''Who shall I trust? Who should I believe?
They all have a plan to do as they please.
Now that I've found who I really am,
Should I wear the crown or let it be him?''

The things that I've seen, the things that I've done,
The words that I've spoken, all the harm that has come.
The ways that we've lost, the ways that we've found,
The thoughts that have crossed my mind when I was down.

It now is all clear, the path I must take,
It's not about love and it's not about hate.
What here is at stake is more than the world,
A fate that I share with those of my blood.

''Who shall I trust? Who should I believe?
They all have a plan to do as they please.
Now that I've found who I really am,
Should I wear the crown or let it be him?''

Chaos is real, I've seen it live!
It shudders and reels with tendrils of steel.
A war to define all that we are,
Tracing a line before we all fall...

I have come home!
I have come home!
I have come home!
I have come home!

----
[img[images/english.jpg]]  ABOUT THE SONG -- Those who know will see this for what it is... For the others, well, just enjoy the words and the story ;-)
----
lyrics (c) 2013 Alex S. Garcia / music (c) 2013 Serge Barbaro
----
Artist: [[MK|MK_artist]]
Album: [[MK|MK_album]]
Lyrics: Alex S. Garcia
Music: Michael Kolomiets
----

Princess Rose looks at Prince Erwin
And she knows where this is leading.
With her nose she scents what's coming,
So she rose and slid out slowly.

Outside the castle, she rides on till dawn,
She ain't got no sword, so she hurries to hide.
Till the next morning comes, she needs control,
How she needs control over the Sun... over the Sun...

And out of the mist she rides, covered with frost and ice,
Until the wounded stars glide into her shining blue eyes... into her eyes...

Away, far away... running today... trying to find a way to slip away...
... And touch the morning sky with hands of worried pride
And hear the rising wind blowing through the rain,
To kill the tearing pain growing within your brain,
To hurt your very soul and thrust your hopes away... your hopes away...

And out of the mist she rides, covered with frost and ice,
Until the wounded stars glide into her shining blue eyes... into her eyes...

Figures of blackened ash, silhouettes in the night,
Reach out for the mask of terror and fright
To break the call of morning ghouls in need of souls to rest,
To heal the wound that howls and bleeds its best...

And Princess Rose fell to the ground,
Passed away slow in this garden of light, in this garden of light,
In this garden of light, in this garden of light...
Where has she gone? where has she gone now?

----
lyrics (c) 2001 Alex S. Garcia / music (c) 2001 Michael Kolomiets
----
Artist: [[Skeem]]
Album: [[Just suggesting]]
Lyrics: Alex S. Garcia
Music: Serge Barbaro
----

''I am the light, I am the dark,
I am the white, I am the storm,
I am the way, I am the path,
I am the day turning to night!''

They found me by the sea, naked and asleep,
Is this real or fantasy? I wish I were free.
I lay here with my fear, wasted and agrieved,
What I feel isn't clear, I've sunken too deep.

Let me be what I want in this land of crime,
Can't you see I'm too far, a mystery of time.
I wish I could go back to whence I came from,
I wish I could go forth, in trance and beyond...

But I can't.

The circle has been broken.
The circle has been broken.

''I am the light, I am the dark,
I am the white, I am the storm,
I am the way, I am the path,
I am the day turning to night!''

''I am the fire, I am the flame,
I am the smoke that smothers your pain.
I am the wire, I am the strain,
I am the water that runs through your veins.''

I hated the silence, it tested my patience,
I baited for violence and tasted my vegeance,
I traded her absence and shaded my presence,
I waited for balance and dated the offence.

''I am the light, I am the dark,
I am the white, I am the storm,
I am the way, I am the path,
I am the day turning to night!''

Reality, such futility...
A destiny, much to be envied...

Wandering through this land,
Wondering how it will end,
Now I walk through pretence,
Now I watch evidence...

I walk and I watch,
I walk and I watch,
I walk and I watch,
I walk and I watch...

What is the way? what is this war?
Why does a day tear us apart?
How can we play? How can we act?
Why do we make lie into fact?

What is this place? what is this face?
They would erase what God creates.
Now in distress, they sit and wait,
Hope it was fake and that it's not too late...

To anticipate all that they hate
They elaborate what they shall make
Ready to wake and retaliate,
To annihilate, or elevate,
If appropriate, what they tolerate
And can't immitate, or penetrate...

Enunciating the facts won't make them right.
Be ready to act, to protest and protect.

''I am the light, I am the dark,
I am the white, I am the storm,
I am the way, I am the path,
I am the day turning to night!''

Day turning to night...

----
lyrics (c) 2013 Alex S. Garcia / music (c) 2013 Serge Barbaro
----
Artist: [[Skeem]]
Album: [[Just suggesting]]
Lyrics: Alex S. Garcia
Music: Serge Barbaro
----

All of my dreams and all of my fears,
Locked within me, with my never-cried tears.

A world that is old, so lonesome and cold,
A place where I go when I feel alone.

There I was found, one day by a sound,
It lingered around and shattered the ground.

Nothing is real, it's all make believe,
But what if I feel that it's what I need?

All of my dreams, all of my fears,
Are locked within me, with my never-cried tears.

A world that is old, so lonesome and cold,
A place where I go when I feel alone.

Something inside has broken and died --
A piece of my mind -- to keep me alive.

I drift away far from all that I knew,
Here on this star looking for truth.

Looking for truth, yeah...
It's what I need...

----
lyrics (c) 2013 Alex S. Garcia / music (c) 2013 Serge Barbaro
----
Artist: [[MSA Project]]
Album: [[Istree]]
Lyrics: Alex S. Garcia
Music: Michel Fontes & Serge Barbaro
----

Silently sliding, gliding throughout the stars...
Shining... rising... daunting... protecting...
Quietly watching, this ship drifted too far,
Breach is opening, whole world is changing...

Visions of the new, scenes from what is to come,
Soldiers fighting, wondering what they've done!
Children now grown old facing their younger dads,
Oh such troubled souls, how's it come to that?

''And out of nowhere a light shone through the night,
Out from a black hole, like a vortex of sound.
The light that was there, suddenly it was gone!
A leak in time and space now showed in its place...''

Visions of before, scenes from what once has been,
Creatures of old lores, now all roaming free.
Running in the halls, warriors screaming in fear,
As from their past, ghosts come to haunt here...

''Then out of nowhere a light shone through the night,
Out from a black hole, like a vortex of sound.
The light that was there, suddenly it was gone!
A leak in time and space now showed in its place...''

And in the control room the Captain stares ahead
Watching the screen where he sees his dread
A gigantic mountain of doom, looming in the air...
Improbable sight... and yet it's right there!

''Now out of nowhere a light shone through the night,
Out from a black hole, like a vortex of sound.
The light that was there, suddenly it was gone!
A leak in time and space now showed in its place...''

----
lyrics (c) 2010 Alex S. Garcia / music (c) 2010 Michel Fontes & Serge Barbaro
----
Artist: [[Skeem]]
Album: [[Just suggesting]]
Lyrics: Alex S. Garcia
Music: Serge Barbaro
----

He whispered these words she'd heard him rehearse,
It hurt to observe the stuttering nerd,
She'd answer him first, just to be sure,
But all was a blur, it must be her worst...
In thirst for her lust, Kurt hoped to reach third,
But the dirt of his rust covered his shirt...

''She saw it coming.
She saw right through him.''

People in haste fear to be late,
All of them hate having to wait.
Their smiles are all fake, soon they'll awake,
Find out the state of their own fate.
So much at stake, so little taste,
Throwing out faith, such a lame waste.

''We saw it coming.
We saw right through them.''

Take this, take that, eat all, drink fast.
Life is a trap, you'll fall, won't last.
These pills will heal your aching heart,
But then your mind will fall apart.
The thrill to steal when all is dark,
A hand to find new ways to start...

''He saw it coming.
He saw right through it.''

The men in command, they don't understand,
Always pretend to be our best friends.
They promise us change, a joke we can't stand,
Try to arrange what others can't,
Trying to mend things that aren't broken,
But all is the same, unchanged in the end.

''We saw it coming.
We saw right through them.''

While the hypocrits are ruling the world,
We gather our wits and prepare.
So much around us, is taken for granted,
Placing our trust in what we perceive,
Yet all of our views are silently slanted,
What we thought that we knew is not what we believe...

''Our eye is a liar, it's all in our head.
Our eye is a liar, until we are dead.''

Perceptions are deceiving,
As visions in dry season,
Pretense is illusion,
Such intense an emotion,
Dancing while grieving,
Crying while laughing,
Searching for something
So fragile and rare,
A welcoming gesture
Perceived as an insult,
A sign of raw pleasure,
Could turn some to salt.

''What we see... is not... what we get...
What we see... is not... what we get...
What we see... is not... what we get...
What we see... is not... what we get...''

----
lyrics (c) 2013 Alex S. Garcia / music (c) 2013 Serge Barbaro
----
Artist: [[Skeem]]
Album: [[Just suggesting]]
Lyrics: Alex S. Garcia
Music: Serge Barbaro
----

The mystery was written, eons ago,
Of promises broken, we'd never know,
A shattering silence, stolen before,
From quiet repentance, fallen no more.

''All was so well, all was so light,
Heaven and Hell, dark to be bright.''

In ebony and jade, he would observe,
As beauty would fade, a scene so absurd.
Jealousy and shame ate at his nerves,
Corrupting what's sane... until it hurts.

Whispering words of deceit, spreading his lies,
Calling his brothers to arms, master of crimes.
Tonight, he said, they would all feast, alter their lives,
No cause to be alarmed, all would go right...

''All was so well, all was so light,
No one could tell what would arise.
Heaven and Hell, dark to be bright,
And they all fell far from our sights.''

Treason was the reason, sorry excuse,
A season for rising and to seduce,
A sinful objection made to confuse,
Inducing a falling after abuse...

''All was so well, all was so light,
No one could tell what would arise.
Heaven and Hell, dark to be bright,
And they all fell far from our sights.''

Refuse to produce, relieved to relive,
Employed to destroy all that was made.
Creation, pretension, searching redemption,
So silent and strong and yet... so damn wrong.

Void was their knowledge of what is good
They would vanquish their fears to become gods.
They jumped off the edge from where they stood
All heavens cried tears for what had been lost.

Now they are dead... and damned to the world.
Now they are dead... and damned to the world.

''All was so well, all was so light,
No one could tell what would arise.
Heaven and Hell, dark to be bright,
And they all fell far from our sights.''

''Angels they were, angels they are,
You can be sure they are not far,
Watching us grow, watching us fight,
Ready to show us they were right...''

Now they are dead... and damned to the world.
Now they are dead... and damned to the world.

----
[img[images/english.jpg]]  ABOUT THE SONG -- As everyone knows, Lucifer was originally an angel. This is the story of his fall from grace.
----
lyrics (c) 2013 Alex S. Garcia / music (c) 2013 Serge Barbaro
----
Artist: [[MK|MK_artist]]
Album: [[MK|MK_album]]
Lyrics: Alex S. Garcia
Music: Michael Kolomiets
----

Stranded on the shores of a barren sea of sand,
Yelling with the silent wind - fading away.
Fading away, time unravels all that is done,
While I try to contain all within the rain, without the pain...

''I have walked upon these soils
And I have heard many souls,
I have hurled my fears away
And now I lay here wide awake...''

Stranded on the shores of a planet plagued with storms,
I am borne by wings of stone, to my new birth.
To my new birth, I so eagerly plunge within,
Blind to all which surrounds me - became the earth, I am the earth!

''I have walked upon these soils
And I have heard many souls,
I have hurled my fears away
And now I lay here wide awake...''

''I have walked upon these soils
And I have heard many souls,
I have hurled my fears away
And now I lay here wide awake...''

----
lyrics (c) 2001 Alex S. Garcia / music (c) 2001 Michael Kolomiets
----
Artist: [[MK|MK_artist]]
Album: [[MK|MK_album]]
Lyrics: Alex S. Garcia
Music: Michael Kolomiets
----

Old Ben Golan now, through time he travels,
Always knowing how he can unravel
The secrets left behind by ancestors blind,
To future doubts and future fears unveiled.

Time is a maze - or so he says,
Always amazed by past ages.
Feeling so dazed by long gone days,
Fearing the gaze of others than he...

''And while the sun slowly fades
In the horizon with fiery haze,
Leaving just the stars now to light
What his eyes, bewildered, delight
To discover - here upon these desolate lands,
Where no man ever before has been...
So many incredible things under his hands,
And yet not much time left it seems!''

So he walks to his machine
And silently dreams of things unseen,
Of places in time he has to go,
To unearth secrets he yearns to know.

Old Ben Golan now, he was there,
First and last of men to ever dare.
Now he goes on to //somewhen// else,
To study the life of humanity...

''And while the sun slowly fades
In the horizon with fiery haze,
Leaving just the stars now to light
What his eyes, bewildered, delight
To discover - here upon these desolate lands,
Where no man ever before has been...
So many incredible things under his hands,
And yet not much time left it seems!''

----
lyrics (c) 2001 Alex S. Garcia / music (c) 2001 Michael Kolomiets
----
Artist: [[MSA Project]]
Album: [[Istree]]
Lyrics: Alex S. Garcia
Music: Michel Fontes & Serge Barbaro
----

In the dark of night, in the midst of fight,
Out where fall the lives of brave men who tried
To think it is right to die in the fields,
Cold and lone inside, for such false beliefs...

''He's walking through the mist,
Lonely survivor, looking for answers.
Relentless but adrift,
Whatever may occur, no matter the weather.
Wherever he may go,
No matter his reasons, no matter the way he
Runs on through the mist,
Someday he'll find them -- no matter what it takes!''

Wounded and hungered, many cried for help,
Grieved and so altered by the horrors of Hell
Hell on Earth, they swear, time for hate and despair.
So many dead in vain, too many wrought with pain...

''Whoever he may be,
No matter his color, no matter his faith.
Whatever he has seen,
No matter his secrets, no matter where he's from.
Whichever path he takes,
No matter direction, no matter the season.
Wherever it shall lead,
No matter what awaits, no matter how it ends...''

Running to be free,
Following the wind,
Reckless yet mourning.
Dancing by the sea,
Feeling the sweet breeze,
Laughing yet aching.
Crying in the rain,
Wondering how he'll live,
Wandering through ruins
Of cities built in sand...
Now crumbled to dust,
So sad and bereft...

''He's walking through the mist,
Lonely survivor, looking for answers.
Relentless but adrift,
Whatever may occur, no matter the weather.
Wherever he may go,
No matter his reasons, no matter the way he
Runs on through the mist,
Someday he'll find them -- no matter what it takes!''

----
lyrics (c) 2010 Alex S. Garcia / music (c) 2010 Michel Fontes & Serge Barbaro
----
This page lists all songs I've written (and which have been released) but in the chronological order in which they were written, rather than released.

Also available: [[alphabetical list|Songs]] and [[release chronology|Albums]].

NOTE: The dates given here only cover the writing of the lyrics, NOT any other stage of the development. For more information, see the individual song pages which may in some cases contain more details.

Column A = Started writing
Column B = Finished writing
Column C = Song title

<<tiddler Songlist2>>
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);
}
Type the text for 'toDo'
Liste de mes traductions parues en langue française.
J'ai également publié nombre de [[nouvelles|Bibliographie]] et d'[[articles|Articles_FR]].
|bgcolor(#000000):! Titre |bgcolor(#000000):! Ed. |bgcolor(#000000):! Parution |bgcolor(#000000):! Publication |bgcolor(#000000):! n° |bgcolor(#000000):! Commentaire |
|Au coeur de la nuit |1 |2010.06 |[[Galaxies]] |HS |Nouvelle d'Anil Menon. |
|Profession ~Science-Fiction : magie et scène nue |1 |2004.01 |[[Bifrost]] |33 |Article inédit de Brian Aldiss. |
|Le syndrome de l'homme augmenté |3 |2009.11 |Monstres sur orbite |Antho |Réédition chez Pocket (n°5903). |
|" |2 |2005.05 |Monstres sur orbite |Antho |Réédition au Bélial. |
|" |1 |2003.09 |[[Bifrost]] |HS 2 |Novella de Jack Vance. |
|De la faculté de l'être humain à s'adapter aux milieux exotiques |1 |2003.01 |[[Bifrost]] |29 |Nouvelle inédite de Michael Moorcock. |
|Daniel Gildenlow |1 |2001.12 |[[Rock In Progress]] |- |Interview. |
|Stephan Lill |1 |2001.12 |[[Rock In Progress]] |- |Interview. |
|Mike Resnick |1 |1998.03 |[[Slash]] |11 |Interview. |
|Steven Brust |1 |1998.01 |[[Slash]] |9 |Interview. |
|Bryce Zabel |1 |1997.12 |[[Slash]] |8 |Interview. |
|C.J. Cherryh |1 |1997.05 |[[Slash]] |2 |Interview. |
|Racines et quelques vignes |1 |1997.05 |[[Bifrost]] |5 |Article de Mike Resnick. |
|Mike Resnick |1 |1997.05 |[[Bifrost]] |5 |Interview. |
|John E. Stith |1 |1997.01 |[[Slash]] |0 |Interview. |
|The World of H.P. Lovecraft |1 |1995.10 |[[Le Bulletin de l'Université Miskatonic]] |3 |Intégralité d'un fanzine. |
|Christopher Monger |1 |1995.08 |[[Génération Scénario]] |1 |Interview. |
|A Monsieur Johan, avec amour |1 |1995.06 |[[Dragon & Microchips]] |9 |Nouvelle. |
|Les inédits de la Hammer |1 |1995.05 |[[Fantastyka]] |8 |Dossier. |
|Norman Spinrad |1 |1992.10 |[[Chimères]] |18 |Interview. |
Artist: [[MSA Project]]
Album: [[Istree]]
Lyrics: Alex S. Garcia
Music: Michel Fontes & Serge Barbaro
----

Here within mirrored jewels lies the realm of dreaming,
Here wherein all that was, will forever remain
This is how it's meant to be -- out of reach, out of sight.
This is where it all makes sense -- all our griefs, all our pains.

Deep inside sheltered moons lie the hopes of many,
Deep as pride that some have hidden in their glory,
This is how it's meant to be -- out of reach, out of sight.
This is where it all makes sense -- all our griefs, all our pains.

''A throne of light, a throne of might, of ebony and jade,
A throne that shines, a throne that hides all fears within its haze.
Shaping thoughts and nascent dreams of an agonizing queen
Into shapes and forms that shift to colored streams.''

''A sight of worlds, of barren earths, that die before their times,
A view of lives of solitude that never truly shine,
All gaping wide, awaiting time to quickly pass them by,
In hope all stays the same...''

Hear the wind whisper tunes over hills and valleys,
Hear it sing of past dues and ancient victories,
This is how we won the wars -- with our pride, with our hopes,
This is where we fought those wars -- in our lands, in our hearts.

This real world, we hold dear, we've bled to believe in,
This old world, with our fears, we've altered and demeaned.
This is how we won the wars -- with our pride, with our hopes,
This is where we fought those wars -- in our lands, in our hearts.

''A throne of hate, a throne of fate, of sorrow and of shade,
A throne so dark, a throne that harks the heralds of old pains,
Shaping sounds and haunted hounds that roamed the earth with glee,
Now soldiers of this ancient enemy...''

''Melodies and symphonies and forgotten chants and rhymes,
All rising now so eagerly to blast the night with life,
For change is here, the time is near, the things we fear shall die,
That is what I hear...''

Two thrones, two lords... in two worlds, two homes...
Too long to hope, too old to cope, yes.
Shimmer and fade, a shivering daze,
In spiralling ways, look...
Emerald King and Opaline Queen,
Sapphire and gold and obsidian cold, oh!
Altering shapes of crescent arcades
To brighten the days, hey...

Two thrones, two lords... in two worlds, two homes...
Too long to hope, too old to cope, yes.
Shimmer and fade, a shivering daze,
In spiralling ways, look...
Emerald King and Opaline Queen,
Sapphire and gold and obsidian cold, oh!
Altering shapes of crescent arcades
To brighten the days, hey...

----
lyrics (c) 2010 Alex S. Garcia / music (c) 2010 Michel Fontes & Serge Barbaro
----
IN ODIN'S NAME
https://www.facebook.com/In-Odins-Name-319074218144552/
http://www.soundclick.com/bands/page_music.cfm?bandID=320490
* a musical inspired by Norse mythology
* music by Justin Radford
** Lyrics: completed
** Music: completed
** Current status: recording in process
** NOTES: Some singers are still needed for some of the parts.

MESSFINDER
https://soundcloud.com/zicopilote
https://my.zikinf.com/messfinder
* metal
* music by Franck "Zicopilote"
** Lyrics: partly completed
** Music: partly completed
** Current status: still writing songs

[[MSA PROJECT|MSA Project]]
http://facebook.com/msaproject/
* hard rock / metal / prog concept album
* music by Michel Fontes & Serge Barbaro
** Lyrics: in the works
** Music: partly completed
** Current status: we just started working on the band's second album, which will be a sequel (of sorts) to [[Istree]].

<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler permalink references jump'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date [[DD MMM YYYY]]'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date [[DD MMM YYYY]]'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='viewer' macro='view text wikified'></div>
<div class="viewer" macro="tiddler CommentScript"></div> 
<div class='tagClear'></div>
<!--}}}-->
Artist: [[MK|MK_artist]]
Album: [[TV cars and magnet toys|TV cars and magnet toys_album]]
Lyrics: Michael Kolomiets & Alex S. Garcia
Music: Michael Kolomiets
----

I had been walking all day when I came to your door
And I knocked and then you let me in.
You taught me to love the night, never asked who I was,
Where I went, nor where I had come from...

''You gave me the key to your door -- opened it for me...
From the boy I was -- changed me to the man I am today
You showed me the way to the sea,
Erased all pain -- what should I say?''

I asked her "what color is the wind?" and my dear blew
At my face, and her whiff took my old
Skin away from my bones -- made me a brand new man.
So I am, yes I am, I sure am...

''She gave me the key to her door -- opened it for me...
From the boy I was -- changed me to the man I am today
She showed me the way to the sea,
Erased all pain -- what should I say?''

Every night I need you, hold me tight by your side,
Please be there, every night, please be there...
And our love will live on, forever stay strong,
So stay here, yes my dear, very near...

----
lyrics (c) 1996 Michael Kolomiets & Alex S. Garcia / music (c) 1996 Michael Kolomiets
----
/***
|''Name:''|WikiBar|
|''Version:''|2.0.0 beta3|
|''Source:''|[[AiddlyWiki|http://aiddlywiki.sourceforge.net]]|
|''Author:''|[[Arphen Lin|mailto:arphenlin@gmail.com]]|
|''Type:''|toolbar macro command extension|
|''Required:''|TiddlyWiki 2.0.0 beta6|
!Description
WikiBar is a toolbar that gives access to most of TiddlyWiki's formatting features with a few clicks. It's a handy tool for people who are not familiar with TiddlyWiki syntax.
Besides, with WikiBar-addons, users can extend the power of WikiBar.
!Support browser
*Firefox 1.5
!Revision history
*v2.0.0 beta3 (2005/12/30)
** remove macros (replaced by TWMacro addon)
** add wikibar command in toolbar automatically
** rename DOIT to HANDLER
** rename TIP to TOOLTIP
*v2.0.0 beta2 (2005/12/21)
** re-design Wikibar addon framework
*v2.0.0 beta1 (2005/12/14)
** Note:
*** WikiBarPlugin is renamed to WikiBar
** New Features:
*** support TiddlyWiki 2.0.0 template mechanism
*** new wikibar data structure
*** new wikibar-addon framework for developers
**** support dynamic popup menu generator
*** support most new macros added in TiddlyWiki 2.0.0
*** multi-level popup menu
*** fix wikibar tab stop
*** remove paletteSelector
** Known Bugs:
*** popup-menu and color-picker can't be closed correctly
*** some macros can't be displayed correctly in previewer
*** text in previewer will be displayed italic
*v1.2.0 (2005/11/21)
**New Features:
***User defined color palettes supported
####Get color palettes from [[ColorZilla Palettes|http://www.iosart.com/firefox/colorzilla/palettes.html]].
####Save the palette file(*.gpl) as a new tiddler and tag it with 'ColorPalettes', then you can use it in WikiBar.
***WikiBar style sheet supported
***Click on document to close current colorPicker, paletteSelector or aboutWikibar
*v1.1.1 (2005/11/03)
**Bugs fixed:
***'Not enough parameters!' message is displayed when the parameter includes '%+number', ex: 'hello%20world!'
*v1.1.0 (2005/11/01)
**Bugs fixed:
***WikiBar overruns (reported by by GeoffS <gslocock@yahoo.co.uk>)
**New features:
***Insert a color code at the cursor. (Thanks to RunningUtes <RunningUtes@gmail.com>)
***Enable gradient macro. (Thanks to RunningUtes <RunningUtes@gmail.com>)
***Insert tiddler comment tags {{{/% ... %/}}}. (new feature supported by TiddlyWiki 1.2.37)
***Insert DateFormatString for {{{<<today>>}}} macro. (new feature supported by TiddlyWiki 1.2.37)
**Enhanced:
***Allow optional parameters in syntax.
**Bugs:
***'Not enough parameters!' message is displayed when the parameter includes '%+number', ex: 'hello%20world!'
*v1.0.0 (2005/10/30)
**Initial release
!Code
***/
//{{{
config.macros.wikibar = {major: 2, minor: 0, revision: 0, beta: 3, date: new Date(2005,12,30)};
config.macros.wikibar.handler = function(place,macroName,params,wikifier,paramString,tiddler){
  if(!(tiddler instanceof Tiddler))  {return;}
	story.setDirty(tiddler.title,true);
  place.id = 'wikibar'+tiddler.title;
  place.className = 'toolbar wikibar';
};
function wikibar_install(){
  config.commands.wikibar = {
  	text: 'wikibar',
  	tooltip: 'wikibar on/off',
  	handler: function(e,src,title) {
      if(!e){ e = window.event; }
      var theButton = resolveTarget(e);
      theButton.id = 'wikibarButton'+title;
      wikibarPopup.remove();
      wikibar_installAddons(theButton, title);
      wikibar_createWikibar(title);
      return(false);
    }
  };
  config.shadowTiddlers['EditTemplate'] = wikibar_addWikibarCommand(config.shadowTiddlers['EditTemplate']);
  var tiddler = store.getTiddler('EditTemplate');
  if(tiddler){
    tiddler.text = wikibar_addWikibarCommand(tiddler.text);
  }
}
function wikibar_installAddons(theButton, title){
 	var tiddlers = store.getTaggedTiddlers('wikibarAddons');
	if(!tiddlers)	  { return; }
	theButton.addons=[];
  for(var i=0; i<tiddlers.length; i++){
    try{
      eval(tiddlers[i].text);
      try{
        wikibar_addonInstall(title);
        wikibar_addonInstall = null;
        theButton.addons.push({ok:true, name:tiddlers[i].title});
      }catch(ex){
        theButton.addons.push({ok:false, name:tiddlers[i].title, error:ex});
      }
    }catch(ex){
      theButton.addons.push({ok:false, name:tiddlers[i].title, error:ex});
    }
  }
}
function wikibar_addWikibarCommand(tiddlerText){
  var div = document.createElement('div');
  div.style.display = 'none';
  div.innerHTML = tiddlerText;
  for(var i=0; i<div.childNodes.length; i++){
    var o=div.childNodes[i];
    if(o.tagName==='DIV'){
      if(o.className=='toolbar'){
        var macroText = o.getAttribute('macro').trim();
        if(macroText.search('wikibar')<=0){
          macroText += ' wikibar';
          o.setAttribute('macro', macroText);
        }
        break;
      }
    }
  }
  return div.innerHTML.replace(/\"/g, "\'");
}
function wikibar_processSyntaxParams(theSyntax, params){
  try{
    var pcr = 'AplWikibarPcr';
    var rx=null;
    var allParams=null;
    if(params){
      if(typeof(params)=='object'){
        for(var i=0; i<params.length; i++){
          if(params[i]){
            params[i] = params[i].replace(new RegExp('%','g'), pcr).trim();
            rx = '(\\[%'+(i+1)+'\\])' + '|' + '(%'+(i+1)+')';
            theSyntax = theSyntax.replace(new RegExp(rx,'g'), params[i] );
          }
        }
        allParams = params.join(' ').trim();
      }else{
        allParams = params.replace(new RegExp('%','g'), pcr).trim();
        rx = /(\[%1{1}\])|(%1{1})/g;
        theSyntax = theSyntax.replace(rx, allParams);
      }
    }
    if(allParams){
      theSyntax = theSyntax.replace(new RegExp('%N{1}','g'), allParams);
    }
    rx=/\[%(([1-9]{1,}[0-9]{0,})|(N{1}))\]/g;
    theSyntax = theSyntax.replace(rx, '');
    rx=/%(([1-9]{1,}[0-9]{0,})|(N{1}))/g;
    if( theSyntax.match(rx) ){
      throw 'Not enough parameters! ' + theSyntax;
    }
    theSyntax=theSyntax.replace(new RegExp(pcr,'g'), '%');
    return theSyntax;
  } catch(ex){
    return null;
  }
}
function wikibar_resolveEditItem(tiddlerWrapper, itemName){
  if(tiddlerWrapper.hasChildNodes()){
    var c=tiddlerWrapper.childNodes;
    for(var i=0; i<c.length; i++){
      var txt=wikibar_resolveEditItem(c[i], itemName);
      if(!txt){
        continue;
      }else{
        return txt;
      }
    }
  }
  return ((tiddlerWrapper.getAttribute && tiddlerWrapper.getAttribute('edit')==itemName)? tiddlerWrapper : null);
}
function wikibar_resolveEditItemValue(tiddlerWrapper, itemName){
  var o = wikibar_resolveEditItem(tiddlerWrapper, itemName);
  return (o? o.value.replace(/\r/mg,'') : null);
}
function wikibar_resolveTiddlerEditorWrapper(obj){
  if(obj.id=='tiddlerDisplay'){return null;}
  if((obj.getAttribute && obj.getAttribute('macro')=='edit text')){return obj;}
  return wikibar_resolveTiddlerEditorWrapper(obj.parentNode);
}
function wikibar_resolveTiddlerEditor(obj){
  if(obj.hasChildNodes()){
    var c = obj.childNodes;
    for(var i=0; i<c.length; i++){
      var o=wikibar_resolveTiddlerEditor(c[i]);
      if(o){ return o;}
    }
  }
  return ((obj.getAttribute && obj.getAttribute('edit')=='text')? obj : null);
}
function wikibar_resolveTargetButton(obj){
  if(obj.id && obj.id.substring(0,7)=='wikibar'){ return null; }
  if(obj.tiddlerTitle){
    return obj;
  }else{
    return wikibar_resolveTargetButton(obj.parentNode);
  }
}
function wikibar_isValidMenuItem(tool){
  if(!tool){  return false; }
  if(tool.TYPE=='MENU' || tool.TYPE=='MAIN_MENU'){
    for(var key in tool){
      if(key.substring(0,8)=='DYNAITEM'){ return true; }
      if(wikibar_isValidMenuItem(tool[key])){ return true; }
    }
    return false;
  }else{
    return (tool.HANDLER? true : false);
  }
}
function wikibar_editFormat(param){
  var editor = param.button.editor;
  var params = param.params;
  clearMessage();
  if(!editor){ return; }
  var repText = wikibar_processSyntaxParams(this.syntax, params);
  if(repText===null){ return; }
	var st = editor.scrollTop;
	var ss = editor.selectionStart;
	var se = editor.selectionEnd;
	var frontText= '';
	var endText  = '';
	var fullText = editor.value;
	if(se>ss && ss>=0){
	  frontText  = fullText.substring(0, ss);
	  endText    = fullText.substring(se, fullText.length);
	}
	else if(ss===0 && (se===0 || se == fullText.length) ){
    endText    = fullText;
	}
	else if(se==ss && ss>0){
    frontText  = fullText.substring(0, ss);
    endText    = fullText.substring(se, fullText.length);
	}
	if(repText.indexOf('user_text')>=0 && this.hint){
		repText = repText.replace('user_text', this.hint);
	}
	editor.value = frontText + repText + endText;
	editor.selectionStart = ss;
	editor.selectionEnd   = ss + repText.length;
	editor.scrollTop      = st;
	editor.focus();
}
function wikibar_editFormatByWord(param){
  var editor = param.button.editor;
  var params = param.params;
  clearMessage();
  if(!editor){return;}
  var repText = wikibar_processSyntaxParams(this.syntax, params);
  if(repText===null){ return; }
	var st = editor.scrollTop;
	var ss = editor.selectionStart;
	var se = editor.selectionEnd;
	var frontText= '';
	var selText  = '';
	var endText  = '';
	var fullText = editor.value;
	if(se>ss && ss>=0){
	  frontText  = fullText.substring(0, ss);
	  selText	   = fullText.substring(ss,se);
	  endText    = fullText.substring(se, fullText.length);
	}
	else if(ss===0 && (se===0 || se == fullText.length) ){
    endText    = fullText;
	}
	else if(se==ss && ss>0){
    frontText  = fullText.substring(0, ss);
    endText    = fullText.substring(se, fullText.length);
	  if(!( fullText.charAt(ss-1).match(/\W/gi) || fullText.charAt(ss).match(/\W/gi) )){
      var m = frontText.match(/\W/gi);
      if(m){
        ss = frontText.lastIndexOf(m[m.length-1])+1;
      }
      else{
        ss = 0;
      }
      m = endText.match(/\W/gi);
      if(m){
        se += endText.indexOf(m[0]);
      }
      else{
        se = fullText.length;
      }
      frontText = fullText.substring(0, ss);
  	  endText   = fullText.substring(se, fullText.length);
  	  selText   = fullText.substring(ss,se);
	  }
	}
	if(selText.length>0){
		repText = repText.replace('user_text', selText);
	}
	if(repText.indexOf('user_text')>=0 && this.hint){
		repText = repText.replace('user_text', this.hint);
	}
	editor.value = frontText + repText + endText;
	editor.selectionStart = ss;
	editor.selectionEnd   = ss + repText.length;
	editor.scrollTop      = st;
	editor.focus();
}
function wikibar_editFormatByCursor(param){
  var editor = param.button.editor;
  var params = param.params;
  clearMessage();
  if(!editor){ return; }
  var repText = wikibar_processSyntaxParams(this.syntax, params);
  if(repText===null){ return; }
	var st = editor.scrollTop;
	var ss = editor.selectionStart;
	var se = editor.selectionEnd;
	var frontText= '';
	var endText  = '';
	var fullText = editor.value;
	if(se>ss && ss>=0){
	  frontText  = fullText.substring(0, ss);
	  endText    = fullText.substring(se, fullText.length);
	}
	else if(ss===0 && (se===0 || se == fullText.length) ){
    endText    = fullText;
	}
	else if(se==ss && ss>0){
    frontText  = fullText.substring(0, ss);
    endText    = fullText.substring(se, fullText.length);
	}
	if(repText.indexOf('user_text')>=0 && this.hint){
		repText = repText.replace('user_text', this.hint);
	}
	editor.value = frontText + repText + endText;
	editor.selectionStart = ss;
	editor.selectionEnd   = ss + repText.length;
	editor.scrollTop      = st;
	editor.focus();
}
function wikibar_editFormatByLine(param){
  var editor = param.button.editor;
  var params = param.params;
  clearMessage();
  if(!editor){ return; }
  var repText = wikibar_processSyntaxParams(this.syntax, params);
  if(repText===null){ return; }
	var st = editor.scrollTop;
	var ss = editor.selectionStart;
	var se = editor.selectionEnd;
	var frontText= '';
	var selText  = '';
	var endText  = '';
	var fullText = editor.value;
	if(se>ss && ss>=0){
		if(this.byBlock){
	    frontText  = fullText.substring(0, ss);
	    selText		 = fullText.substring(ss,se);
	    endText    = fullText.substring(se, fullText.length);
		}
		else{
	  	se = ss;
		}
	}
  if(ss===0 && (se===0 || se == fullText.length) ){
    var m=fullText.match(/(\n|\r)/g);
    if(m){
      se = fullText.indexOf(m[0]);
    }else{
      se = fullText.length;
    }
    selText    = fullText.substring(0, se);
    endText    = fullText.substring(se, fullText.length);
	}
	else if(se==ss && ss>0){
    frontText  = fullText.substring(0, ss);
    endText    = fullText.substring(se, fullText.length);
    m = frontText.match(/(\n|\r)/g);
    if(m){
      ss = frontText.lastIndexOf(m[m.length-1])+1;
    }
    else{
      ss = 0;
    }
    m = endText.match(/(\n|\r)/g);
    if(m){
      se += endText.indexOf(m[0]);
    }
    else{
      se = fullText.length;
    }
    frontText = fullText.substring(0, ss);
	  selText   = fullText.substring(ss,se);
	  endText   = fullText.substring(se, fullText.length);
	}
	if(selText.length>0){
		repText = repText.replace('user_text', selText);
	}
	if(repText.indexOf('user_text')>=0 && this.hint){
		repText = repText.replace('user_text', this.hint);
	}
	if(this.byBlock){
    if( (frontText.charAt(frontText.length-1)!='\n') && ss>0 ){
    	repText = '\n' + repText;
    }
    if( (endText.charAt(0)!='\n') || se==fullText.length){
    	repText += '\n';
    }
	}
	editor.value = frontText + repText + endText;
	editor.selectionStart = ss;
	editor.selectionEnd   = ss + repText.length;
	editor.scrollTop      = st;
	editor.focus();
}
function wikibar_editFormatByTableCell(param){
  var editor = param.button.editor;
  var params = param.params;
  clearMessage();
  if(!editor){ return; }
  var repText = wikibar_processSyntaxParams(this.syntax, params);
  if(repText===null){ return; }
	var st = editor.scrollTop;
	var ss = editor.selectionStart;
	var se = editor.selectionEnd;
	var frontText= '';
	var selText  = '';
	var endText  = '';
	var fullText = editor.value;
	if(ss===0 || ss==fullText.length){
		throw 'not valid cell!';
	}
	se=ss;
  frontText  = fullText.substring(0, ss);
  endText    = fullText.substring(se, fullText.length);
  i=frontText.lastIndexOf('\n');
  j=frontText.lastIndexOf('|');
  if(i>j || j<0){
  	throw 'not valid cell!';
  }
	ss = j+1;
  i=endText.indexOf('\n');
  j=endText.indexOf('|');
  if(i<j || j<0){
  	throw 'not valid cell!';
  }
  se += j;
  frontText = fullText.substring(0, ss-1);
  selText   = fullText.substring(ss,se);
  endText   = fullText.substring(se+1, fullText.length);
	if(this.key.substring(0,5)=='align'){
		selText = selText.trim();
		if(	selText=='>' || selText=='~' ||	selText.substring(0,8)=='bgcolor(')	{return; }
	}
	if(selText.length>0){
		repText = repText.replace('user_text', selText);
	}
	if(repText.indexOf('user_text')>=0 && this.hint){
		repText = repText.replace('user_text', this.hint);
	}
	editor.value = frontText + repText + endText;
	editor.selectionStart = ss;
	editor.selectionEnd   = ss + repText.length - 2;
	editor.scrollTop      = st;
	editor.focus();
}
function wikibar_editSelectAll(param){
  var editor = param.button.editor;
	editor.selectionStart = 0;
	editor.selectionEnd   = editor.value.length;
	editor.scrollTop      = 0;
	editor.focus();
}
function wikibar_doPreview(param){
  var theButton = param.button;
  var editor = param.button.editor;
  var wikibar = theButton.parentNode;
  if(!wikibar)  { return; }
  title = theButton.tiddlerTitle;
  var editorWrapper = wikibar_resolveTiddlerEditorWrapper(editor);
  var tiddlerWrapper = editorWrapper.parentNode;
  var previewer = document.getElementById('previewer'+title);
  if(previewer){
    previewer.parentNode.removeChild(previewer);
    editorWrapper.style.display = 'block';
    visible=true;
  }else{
    previewer = document.createElement('div');
    previewer.id = 'previewer'+title;
    previewer.className = 'viewer previewer';
    previewer.style.height = (editor.offsetHeight) + 'px';
    wikify(editor.value, previewer);
    tiddlerWrapper.insertBefore(previewer, editorWrapper);
    editorWrapper.style.display = 'none';
    visible=false;
  }
  var pv=null;
  for(var i=0; i<wikibar.childNodes.length; i++){
    try{
      var btn = wikibar.childNodes[i];
      if(btn.toolItem.key == 'preview'){ pv=btn; }
      if(btn.toolItem.key != 'preview'){
        btn.style.display = visible ? '': 'none';
      }
    }catch(ex){}
  }
  if(!pv) { return; }
  if(visible){
    pv.innerHTML = '<font face=\"verdana\">&infin;</font>';
    pv.title = 'preview current tiddler';
  }
  else{
    pv.innerHTML = '<font face=\"verdana\">&larr;</font>';
    pv.title = 'back to editor';
  }
}
function wikibar_doListAddons(param){
  clearMessage();
  var title = param.button.tiddlerTitle;
  var wikibarButton = document.getElementById('wikibarButton'+title);
  var ok=0, fail=0;
  for(var i=0; i<wikibarButton.addons.length; i++){
    var addon=wikibarButton.addons[i];
    if(addon.ok){
      displayMessage('[ o ] '+addon.name);
      ok++;
    }
    else{
      displayMessage('[ x ] '+addon.name + ': ' + addon.error);
      fail++;
    }
  }
  displayMessage('---------------------------------');
  displayMessage(ok + ' ok ; ' + fail + ' failed');
}
function wikibar_getColorCode(param){
  var cbOnPickColor = function(colorCode, param){
    param.params = colorCode;
    param.button.toolItem.doMore(param);
  };
  wikibarColorTool.openColorPicker(param.button, cbOnPickColor, param);
}
function wikibar_getLinkUrl(param){
  var url= prompt('Please enter the link target', (this.param? this.param : ''));
  if (url && url.trim().length>0){
    param.params = url;
    this.doMore(param);
  }
}
function wikibar_getTableRowCol(param){
  var rc= prompt('Please enter (rows x cols) of the table', '2 x 3');
  if (!rc || (rc.trim()).length<=0){ return; }
  var arr = rc.toUpperCase().split('X');
  if(arr.length != 2)   { return; }
  for(var i=0; i<arr.length; i++){
    if(isNaN(arr[i].trim()))  { return; }
  }
  var rows = parseInt(arr[0].trim(), 10);
  var cols = parseInt(arr[1].trim(), 10);
  var txtTable='';
  for(var r=0; r<rows; r++){
    for(var c=0; c<=cols; c++){
      if(c===0){
        txtTable += '|';
      }else{
        txtTable += ' |';
      }
    }
    txtTable += '\n';
  }
  if(txtTable.trim().length>0){
    param.params = txtTable.trim();
    this.doMore(param);
  }
}
function wikibar_getMacroParam(param){
  var p = prompt('Please enter the parameters of macro \"' + this.key + '\":' +
                 '\nSyntax: ' + this.syntax +
                 '\n\nNote: '+
                 '\n%1,%2,... - parameter needed'+
                 '\n[%1] - optional parameter'+
                 '\n%N   - more than one parameter(1~n)'+
                 '\n[%N] - any number of parameters(0~n)'+
                 '\n\nPS:'+
                 '\n1. Parameters should be seperated with space character'+
                 '\n2. Use \" to wrap the parameter that includes space character, ex: \"hello world\"'+
                 '\n3. Input the word(null) for the optional parameter ignored',
                 (this.param? this.param : '') );
  if(!p)  { return; }
  p=p.readMacroParams();
  for(var i=0; i<p.length; i++){
    var s=p[i].trim();
    if(s.indexOf(' ')>0){ p[i]="'"+s+"'"; }
    if(s.toLowerCase()=='null'){ p[i]=null; }
  }
  param.params = p;
  this.doMore(param);
}
function wikibar_getMorePalette(unused){
  clearMessage();
  displayMessage('Get more color palettes(*.gpl) from ColorZilla Palettes site', 'http:\/\/www.iosart.com/firefox/colorzilla/palettes.html');
  displayMessage('Save it as a new tiddler with \"ColorPalettes\" tag');
}
function wikibar_createWikibar(title){
  var theWikibar = document.getElementById('wikibar' + title);
  if(theWikibar){
    if(theWikibar.hasChildNodes()){
      theWikibar.style.display = (theWikibar.style.display=='block'? 'none':'block');
      return;
    }
  }
  var tiddlerWrapper = document.getElementById('tiddler'+title);
  var theTextarea = wikibar_resolveTiddlerEditor(tiddlerWrapper);
  if(!theTextarea){
    clearMessage();
    displayMessage('WikiBar only works in tiddler edit mode now');
    return;
  }else{
    if(!theTextarea.id){ theTextarea.id = 'editor'+title; }
    if(!theTextarea.parentNode.id){ theTextarea.parentNode.id='editorWrapper'+title;  }
  }
  if(theWikibar){
    theWikibar = document.getElementById('wikibar'+title);
  }else{
    var editorWrapper = wikibar_resolveTiddlerEditorWrapper(theTextarea);
    theWikibar = createTiddlyElement(tiddlerWrapper, 'div', 'wikibar'+title, 'toolbar');
    addClass(theWikibar, 'wikibar');
    var previewer = document.getElementById('previewer'+title);
    if(previewer){
      tiddlerWrapper.insertBefore(theWikibar, previewer);
    }else{
      tiddlerWrapper.insertBefore(theWikibar, editorWrapper);
    }
  }
  wikibar_createMenu(theWikibar,wikibarStore,title,theTextarea);
  if(config.options['chkWikibarSetEditorHeight'] && config.options['txtWikibarEditorRows']){
    theTextarea.rows = config.options['txtWikibarEditorRows'];
  }
  setStylesheet(
    '.wikibar{text-align:left;visibility:visible;margin:2px;padding:1px;}.previewer{overflow:auto;display:block;border:1px solid;}#colorPicker{position:absolute;display:none;z-index:10;margin:0px;padding:0px;}#colorPicker table{margin:0px;padding:0px;border:2px solid #000;border-spacing:0px;border-collapse:collapse;}#colorPicker td{margin:0px;padding:0px;border:1px solid;font-size:11px;text-align:center;cursor:auto;}#colorPicker .header{background-color:#fff;}#colorPicker .button{background-color:#fff;cursor:pointer;cursor:hand;}#colorPicker .button:hover{padding-top:3px;padding-bottom:3px;color:#fff;background-color:#136;}#colorPicker .cell{padding:4px;font-size:7px;cursor:crosshair;}#colorPicker .cell:hover{padding:10px;}.wikibarPopup{position:absolute;z-index:10;border:1px solid #014;color:#014;background-color:#cef;}.wikibarPopup table{margin:0;padding:0;border:0;border-spacing:0;border-collapse:collapse;}.wikibarPopup .button:hover{color:#eee;background-color:#014;}.wikibarPopup .disabled{color:#888;}.wikibarPopup .disabled:hover{color:#888;background-color:#cef;}.wikibarPopup tr .seperator hr{margin:0;padding:0;background-color:#cef;width:100%;border:0;border-top:1px dashed #014;}.wikibarPopup tr .icon{font-family:verdana;font-weight:bolder;}.wikibarPopup tr .marker{font-family:verdana;font-weight:bolder;}.wikibarPopup td{font-size:0.9em;padding:2px;}.wikibarPopup input{border:0;border-bottom:1px solid #014;margin:0;padding:0;font-family:arial;font-size:100%;background-color:#fff;}',
  	'WikiBarStyleSheet');
}
function wikibar_createMenu(place,toolset,title,editor){
  if(!wikibar_isValidMenuItem(toolset)){return;}
  if(!(toolset.TYPE=='MAIN_MENU' || toolset.TYPE=='MENU')){ return; }
    for(var key in toolset){
      if(key.substring(0,9)=='SEPERATOR'){
        wikibar_createMenuSeperator(place);
        continue;
      }
      if(key.substring(0,8)=='DYNAITEM'){
        var dynaTools = toolset[key](title,editor);
        if(dynaTools.TYPE && dynaTools.TYPE=='MENU'){
          wikibar_createMenuItem(place,dynaTools,null,editor,title);
        }else{
          dynaTools.TYPE = 'MENU';
          wikibar_createMenu(place, dynaTools, title, editor);
        }
        continue;
      }
      if((toolset[key].TYPE!='MENU' && toolset[key].TYPE!='MAIN_MENU') && !toolset[key].HANDLER){continue;}
      wikibar_createMenuItem(place,toolset,key,editor,title);
    }
}
function wikibar_createMenuItem(place,toolset,key,editor,title){
  if(!key){
    var tool = toolset;
  }else{
    tool = toolset[key];
    tool.key = key;
  }
  if(!wikibar_isValidMenuItem(tool)){return;}
  var toolIsOnMainMenu = (toolset.TYPE=='MAIN_MENU');
  var toolIsMenu = (tool.TYPE=='MENU');
  var theButton;
  if(toolIsOnMainMenu){
    theButton = createTiddlyButton(
                  place,
                  '',
                  (tool.TOOLTIP? tool.TOOLTIP : ''),
                  (toolIsMenu? wikibar_onClickMenuItem : wikibar_onClickItem),
                  'button');
    theButton.innerHTML = (tool.CAPTION? tool.CAPTION : key);
    theButton.isOnMainMenu = true;
    addClass(theButton, (toolIsMenu? 'menu' : 'item'));
  	place.appendChild( document.createTextNode('\n') );
    if(!toolIsMenu){
      if(config.options['chkWikibarPopmenuOnMouseOver']){
        theButton.onmouseover = function(e){ wikibarPopup.remove(); };
      }
    }
  }else{
    theButton=createTiddlyElement(place, 'tr',key,'button');
    theButton.title = (tool.TOOLTIP? tool.TOOLTIP : '');
    theButton.onclick = (toolIsMenu? wikibar_onClickMenuItem : wikibar_onClickItem);
    var tdL = createTiddlyElement(theButton, 'td','','marker');
    var td = createTiddlyElement(theButton, 'td');
    var tdR = createTiddlyElement(theButton, 'td','','marker');
    td.innerHTML = (tool.CAPTION? tool.CAPTION : key);
    if(toolIsMenu){
      tdR.innerHTML='&nbsp;&nbsp;&rsaquo;';
    }
    if(tool.SELECTED){
      tdL.innerHTML = '&radic; ';
      addClass(theButton, 'selected');
    }
    if(tool.DISABLED){
      addClass(theButton, 'disabled');
    }
  }
  theButton.tiddlerTitle = title;
  theButton.toolItem = tool;
  theButton.editor = editor;
  theButton.tabIndex = 999;
  if(toolIsMenu){
    if(config.options['chkWikibarPopmenuOnMouseOver']){
      theButton.onmouseover = wikibar_onClickMenuItem;
    }
  }
}
function wikibar_createMenuSeperator(place){
  if(place.id.substring(0,7)=='wikibar')  { return; }
  var onclickSeperator=function(e){
  	if(!e){ e = window.event; }
  	e.cancelBubble = true;
    if (e.stopPropagation){ e.stopPropagation();  }
  	return(false);
  };
  var theButton=createTiddlyElement(place,'tr','','seperator');
  var td = createTiddlyElement(theButton, 'td','','seperator');
  td.colSpan=3;
  theButton.onclick=onclickSeperator;
	td.innerHTML = '<hr>';
}
function wikibar_genWikibarAbout(){
  var toolset={};
  toolset.version = {
    CAPTION: '<center>WikiBar ' +
              config.macros.wikibar.major + '.' +
              config.macros.wikibar.minor + '.' +
              config.macros.wikibar.revision +
              (config.macros.wikibar.beta? ' beta '+config.macros.wikibar.beta : '') +
              '</center>',
    HANDLER: function(){}
  };
  toolset.SEPERATOR = {};
  toolset.author = {
    CAPTION: '<center>Arphen Lin<br>arphenlin@gmail.com</center>',
    TOOLTIP: 'send mail to the author',
    HANDLER: function(){ window.open('mailto:arphenlin@gmail.com'); }
  };
  toolset.website = {
    CAPTION: '<center>aiddlywiki.sourceforge.net</center>',
    TOOLTIP: 'go to the web site of WikiBar',
    HANDLER: function(){ window.open('http:\/\/aiddlywiki.sourceforge.net/'); }
  };
  return toolset;
}
function wikibar_genWikibarOptions(title, editor){
  var toolset={};
  toolset.popOnMouseOver = {
    CAPTION:'popup menu on mouse over',
    SELECTED: config.options['chkWikibarPopmenuOnMouseOver'],
    HANDLER: function(param){
      config.options['chkWikibarPopmenuOnMouseOver'] = !config.options['chkWikibarPopmenuOnMouseOver'];
      saveOptionCookie('chkWikibarPopmenuOnMouseOver');
      var title = param.button.tiddlerTitle;
      var wikibar = document.getElementById('wikibar'+title);
      if(wikibar){ wikibar.parentNode.removeChild(wikibar); }
      wikibar_createWikibar(title);
    }
  };
  toolset.setEditorSize = {
    CAPTION:'set editor height: <input id=\"txtWikibarEditorRows\" type=text size=1 MAXLENGTH=3 value=\"' +
            (config.options['txtWikibarEditorRows']? config.options['txtWikibarEditorRows']:editor.rows) + '\"> ok',
    HANDLER: function(param){
      var input = document.getElementById('txtWikibarEditorRows');
      if(input){
        var rows = parseInt(input.value, 10);
        if(!isNaN(rows)){
          var editor = param.button.editor;
          editor.rows = rows;
        }else{
          rows=config.maxEditRows;
        }
        config.options['txtWikibarEditorRows'] = rows;
        saveOptionCookie('txtWikibarEditorRows');
        config.maxEditRows = rows;
      }
    }
  };
  toolset.setEditorSizeOnLoadingWikibar = {
    CAPTION:'set editor height on loading wikibar',
    SELECTED: config.options['chkWikibarSetEditorHeight'],
    HANDLER: function(param){
      config.options['chkWikibarSetEditorHeight'] = !config.options['chkWikibarSetEditorHeight'];
      saveOptionCookie('chkWikibarSetEditorHeight');
      if(config.options['chkWikibarSetEditorHeight']){
        var rows = config.options['txtWikibarEditorRows'];
        if(!isNaN(rows)){ rows = 15; }
        var editor = param.button.editor;
        editor.rows = rows;
        config.options['txtWikibarEditorRows'] = rows;
        saveOptionCookie('txtWikibarEditorRows');
      }
    }
  };
  toolset.SEPERATOR = {};
  toolset.update = {
    CAPTION: 'check for updates',
    DISABLED: true,
    HANDLER: function(){}
  };
  return toolset;
}
function wikibar_genPaletteSelector(){
  try{
  	var cpTiddlers = store.getTaggedTiddlers('ColorPalettes');
  	if(!cpTiddlers) { return; }
  	var palettes=[];
  	palettes.push(wikibarColorTool.defaultPaletteName);
  	for(var i=0; i<cpTiddlers.length; i++){
  		palettes.push(cpTiddlers[i].title.trim());
  	}
    var toolset={};
    for(i=0; i<palettes.length; i++){
      toolset[palettes[i]] = {
        TOOLTIP: palettes[i],
        SELECTED: (palettes[i]==wikibarColorTool.paletteName),
        HANDLER: wikibar_doSelectPalette
      };
    }
    return toolset;
  }catch(ex){ return null; }
}
function wikibar_onClickItem(e){
	if(!e){ e = window.event; }
	var theTarget = resolveTarget(e);
	if(theTarget.tagName=='INPUT'){
    e.cancelBubble = true;
    if (e.stopPropagation){ e.stopPropagation(); }
    return;
	}
	var theButton = wikibar_resolveTargetButton(theTarget);
	if(!theButton){ return(false);  }
  	var o = theButton.toolItem;
    if(!o) { return; }
    var param = {
      event: e,
      button: theButton
    };
    if(o.HANDLER){ o.HANDLER(param);  }
  if(o.DISABLED){
    e.cancelBubble = true;
    if (e.stopPropagation){ e.stopPropagation(); }
  }
	return(false);
}
function wikibar_onClickMenuItem(e){
	if(!e){ e = window.event; }
	var theButton = wikibar_resolveTargetButton(resolveTarget(e));
	if(!theButton){ return(false);  }
	e.cancelBubble = true;
	if (e.stopPropagation){ e.stopPropagation(); }
    var title = theButton.tiddlerTitle;
    var editor = theButton.editor;
    var tool = theButton.toolItem;
    if(!tool) { return; }
    var popup = wikibarPopup.create(this);
  	if(popup){
      wikibar_createMenu(popup,tool,title,editor);
      if(!popup.hasChildNodes()){
        wikibarPopup.remove();
      }else{
        wikibarPopup.show(popup, false);
      }
    }
	return(false);
}
var wikibarColorTool = {
  defaultPaletteName : 'default',
  defaultColumns : 16,
  defaultPalette : [
    '#FFF','#DDD','#CCC','#BBB','#AAA','#999','#666','#333','#111','#000','#FC0','#F90','#F60','#F30','#C30','#C03',
    '#9C0','#9D0','#9E0','#E90','#D90','#C90','#FC3','#FC6','#F96','#F63','#600','#900','#C00','#F00','#F36','#F03',
    '#CF0','#CF3','#330','#660','#990','#CC0','#FF0','#C93','#C63','#300','#933','#C33','#F33','#C36','#F69','#F06',
    '#9F0','#CF6','#9C3','#663','#993','#CC3','#FF3','#960','#930','#633','#C66','#F66','#903','#C39','#F6C','#F09',
    '#6F0','#9F6','#6C3','#690','#996','#CC6','#FF6','#963','#630','#966','#F99','#F39','#C06','#906','#F3C','#F0C',
    '#3F0','#6F3','#390','#6C0','#9F3','#CC9','#FF9','#C96','#C60','#C99','#F9C','#C69','#936','#603','#C09','#303',
    '#0C0','#3C0','#360','#693','#9C6','#CF9','#FFC','#FC9','#F93','#FCC','#C9C','#969','#939','#909','#636','#606',
    '#060','#3C3','#6C6','#0F0','#3F3','#6F6','#9F9','#CFC','#9CF','#FCF','#F9F','#F6F','#F3F','#F0F','#C6C','#C3C',
    '#030','#363','#090','#393','#696','#9C9','#CFF','#39F','#69C','#CCF','#C9F','#96C','#639','#306','#90C','#C0C',
    '#0F3','#0C3','#063','#396','#6C9','#9FC','#9CC','#06C','#369','#99F','#99C','#93F','#60C','#609','#C3F','#C0F',
    '#0F6','#3F6','#093','#0C6','#3F9','#9FF','#699','#036','#039','#66F','#66C','#669','#309','#93C','#C6F','#90F',
    '#0F9','#6F9','#3C6','#096','#6FF','#6CC','#366','#069','#36C','#33F','#33C','#339','#336','#63C','#96F','#60F',
    '#0FC','#6FC','#3C9','#3FF','#3CC','#399','#033','#39C','#69F','#00F','#00C','#009','#006','#003','#63F','#30F',
    '#0C9','#3FC','#0FF','#0CC','#099','#066','#3CF','#6CF','#09C','#36F','#0CF','#09F','#06F','#03F','#03C','#30C'
  ],
	colorPicker : null,
  pickColorHandler: null,
  userData: null
};
wikibarColorTool.paletteName = wikibarColorTool.defaultPaletteName;
wikibarColorTool.columns = wikibarColorTool.defaultColumns;
wikibarColorTool.palette = wikibarColorTool.defaultPalette;
wikibarColorTool.onPickColor = function(e){
	if (!e){ e = window.event; }
	var theCell = resolveTarget(e);
	if(!theCell){ return(false); }
    color = theCell.bgColor.toLowerCase();
    if(!color)  { return; }
    wikibarColorTool.displayColorPicker(false);
    if(wikibarColorTool.pickColorHandler){
      wikibarColorTool.pickColorHandler(color, wikibarColorTool.userData);
    }
	return(false);
};
wikibarColorTool.onMouseOver = function(e){
	if (!e){ e = window.event; }
	var theButton = resolveTarget(e);
	if(!theButton){ return(false);  }
  	if(!wikibarColorTool)  { return; }
    color = theButton.bgColor.toUpperCase();
    if(!color)  { return; }
    td=document.getElementById('colorPickerInfo');
  	if(!td) { return; }
  	td.bgColor = color;
  	td.innerHTML = '<span style=\"color:#000;\">'+color+'</span>&nbsp;&nbsp;&nbsp;' +
  	               '<span style=\"color:#fff;\">'+color+'</span>';
	e.cancelBubble = true;
	if (e.stopPropagation){ e.stopPropagation(); }
	return(false);
};
wikibarColorTool.openColorPicker = function(theTarget, pickColorHandler, userData){
  wikibarColorTool.skipClickDocumentEvent = true;
  wikibarColorTool.pickColorHandler = pickColorHandler;
  wikibarColorTool.userData = userData;
  wikibarColorTool.moveColorPicker(theTarget);
};
wikibarColorTool.convert3to6HexColor = function(c){
  c=c.trim();
  var rx=/^\#(\d|[a-f])(\d|[a-f])(\d|[a-f])$/gi;
  return (rx.test(c)? c.replace(rx, '#$1$1$2$2$3$3') : c);
};
wikibarColorTool.numToHexColor = function (n){
  if(typeof(n)=='number' && (n>=0 && n<=255)) {
  		s = n.toString(16).toLowerCase();
  		return ((s.length==1)? '0'+s : s);
  }else{
	 return null;
	}
};
wikibarColorTool.renderColorPalette = function(){
	if(wikibarColorTool.paletteName==wikibarColorTool.defaultPaletteName){
		wikibarColorTool.palette=wikibarColorTool.defaultPalette;
		wikibarColorTool.columns=wikibarColorTool.defaultColumns;
		return;
	}
	tiddlerText = (store.getTiddlerText(wikibarColorTool.paletteName, '')).trim();
	if(tiddlerText.length<=0) { return; }
	var cpContents = tiddlerText.split('\n');
	var colors=[];
	columns = wikibarColorTool.defaultColumns;
	var tmpArray=null;
	errCount=0;
	for(var i=0; i<cpContents.length; i++){
		cpLine=cpContents[i].trim();
    if( (!cpLine) || (cpLine.length<=0) || (cpLine.charAt(0) == '#') ){ continue; }
		if(cpLine.substring(0,8).toLowerCase()=='columns:'){
			tmpArray = cpLine.split(':');
			try{
				columns = parseInt(tmpArray[1],10);
			}catch(ex){
				columns = wikibarColorTool.defaultColumns;
			}
		}else{
			tmpArray = cpLine.replace('\t', ' ').split(/[ ]{1,}/);
			try{
				color='';
				for(var j=0; j<3; j++){
          c=parseInt(tmpArray[j].trim(), 10);
          if(isNaN(c)){
						break;
          }else{
						c=wikibarColorTool.numToHexColor(c);
						if(!c) {break;}
            color+=c;
					}
				}
				if(color.length==6){
					colors.push('#'+color);
				}	else {
					throw 'error';
				}
			}catch(ex){
			}
		}
	}
	if(colors.length>0){
		wikibarColorTool.palette = colors;
		wikibarColorTool.columns = columns;
	}else{
		throw 'renderColorPalette(): No color defined in the palette.';
	}
};
wikibarColorTool.displayColorPicker = function(visible){
  if(wikibarColorTool.colorPicker){
    wikibarColorTool.colorPicker.style.display = (visible? 'block' : 'none');
  }
};
wikibarColorTool.moveColorPicker = function(theTarget){
  if(!wikibarColorTool.colorPicker){
  	wikibarColorTool.createColorPicker();
  }
	var cp = wikibarColorTool.colorPicker;
	var rootLeft = findPosX(theTarget);
  var rootTop = findPosY(theTarget);
  var popupLeft = rootLeft;
  var popupTop = rootTop;
  var popupWidth = cp.offsetWidth;
  var winWidth = findWindowWidth();
  if(popupLeft + popupWidth > winWidth){
	  popupLeft = winWidth - popupWidth;
	}
  cp.style.left = popupLeft + 'px';
  cp.style.top = popupTop + 'px';
  wikibarColorTool.displayColorPicker(true);
};
wikibarColorTool.createColorPicker = function(unused, palette){
  if(palette){	wikibarColorTool.paletteName=palette; }
	wikibarColorTool.renderColorPalette();
	wikibarColorTool.colorPicker = document.createElement('div');
	wikibarColorTool.colorPicker.id = 'colorPicker';
	document.body.appendChild(wikibarColorTool.colorPicker);
  var theTable = document.createElement('table');
  wikibarColorTool.colorPicker.appendChild(theTable);
  var theTR = document.createElement('tr');
	theTable.appendChild(theTR);
	var theTD = document.createElement('td');
	theTD.className = 'header';
	theTD.colSpan = wikibarColorTool.columns;
	theTD.innerHTML = wikibarColorTool.paletteName;
  theTR.appendChild(theTD);
  for(var i=0; i<wikibarColorTool.palette.length; i++){
    if((i%wikibarColorTool.columns)===0){
      theTR = document.createElement('tr');
      theTable.appendChild(theTR);
    }
    theTD = document.createElement('td');
    theTD.className = 'cell';
    theTD.bgColor = wikibarColorTool.convert3to6HexColor(wikibarColorTool.palette[i]);
    theTD.onclick = wikibarColorTool.onPickColor;
    theTD.onmouseover = wikibarColorTool.onMouseOver;
    theTR.appendChild(theTD);
  }
  rest = wikibarColorTool.palette.length % wikibarColorTool.columns;
  if(rest>0){
    theTD = document.createElement('td');
		theTD.colSpan = wikibarColorTool.columns-rest;
    theTD.bgColor = '#000000';
    theTR.appendChild(theTD);
  }
  theTR = document.createElement('tr');
	theTable.appendChild(theTR);
	theTD = document.createElement('td');
	theTD.colSpan = wikibarColorTool.columns;
	theTD.id = 'colorPickerInfo';
  theTR.appendChild(theTD);
};
wikibarColorTool.onDocumentClick = function(e){
	if (!e){ e = window.event; }
	if(wikibarColorTool.skipClickDocumentEvent) {
	  wikibarColorTool.skipClickDocumentEvent = false;
    return true;
	}
	if((!e.eventPhase) || e.eventPhase == Event.BUBBLING_PHASE || e.eventPhase == Event.AT_TARGET){
    wikibarColorTool.displayColorPicker(false);
  }
	return true;
};
function wikibar_doSelectPalette(param){
	clearMessage();
	var theButton = param.button;
	if(!theButton.toolItem.key)  { return; }
	var palette = theButton.toolItem.key;
	var oldPaletteName = wikibarColorTool.paletteName;
	if(oldPaletteName != palette){
		try{
			wikibarColorTool.createColorPicker(theButton, palette);
			displayMessage('Palette \"'+palette+'\" ('+ wikibarColorTool.palette.length +' colors) is selected');
		}catch(ex){
			errMsg = ex;
			if(errMsg.substring(0,18)=='renderColorPalette'){
				displayMessage('Invalid palette \"' + palette + '\", please check it out!');
				wikibarColorTool.createColorPicker(theButton, oldPaletteName);
			}
		}
	}
}
var wikibarPopup = {
  skipClickDocumentEvent: false,
	stack: []
};
wikibarPopup.resolveRootPopup = function(o){
  if(o.isOnMainMenu){  return null; }
  if(o.className.substring(0,12)=='wikibarPopup'){  return o;}
  return wikibarPopup.resolveRootPopup(o.parentNode);
};
wikibarPopup.create = function(root){
  for(var i=0; i<wikibarPopup.stack.length; i++){
    var p=wikibarPopup.stack[i];
    if(p.root==root){
      wikibarPopup.removeFrom(i+1);
      return null;
    }
  }
  var rootPopup = wikibarPopup.resolveRootPopup(root);
  if(!rootPopup){
    wikibarPopup.remove();
  }else{
    wikibarPopup.removeFromRootPopup(rootPopup);
  }
	var popup = createTiddlyElement(document.body,'div','wikibarPopup'+root.toolItem.key,'wikibarPopup');
	var pop = createTiddlyElement(popup,'table','','');
	wikibarPopup.stack.push({rootPopup: rootPopup, root: root, popup: popup});
	return pop;
};
wikibarPopup.show = function(unused,slowly){
	var curr = wikibarPopup.stack[wikibarPopup.stack.length-1];
	var overlayWidth = 1;
  var rootLeft, rootTop, rootWidth, rootHeight, popupLeft, popupTop, popupWidth;
  if(curr.rootPopup){
  	rootLeft = findPosX(curr.rootPopup);
  	rootTop = findPosY(curr.root);
  	rootWidth = curr.rootPopup.offsetWidth;
  	popupLeft = rootLeft + rootWidth - overlayWidth;
  	popupTop = rootTop;
  }else{
  	rootLeft = findPosX(curr.root);
  	rootTop = findPosY(curr.root);
  	rootHeight = curr.root.offsetHeight;
  	popupLeft = rootLeft;
  	popupTop = rootTop + rootHeight;
  }
	var winWidth = findWindowWidth();
	popupWidth = curr.popup.offsetWidth;
	if(popupLeft + popupWidth > winWidth){
		popupLeft = rootLeft - popupWidth + overlayWidth;
	}
	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));
	}
};
wikibarPopup.remove = function(){
	if(wikibarPopup.stack.length > 0){
		wikibarPopup.removeFrom(0);
  }
};
wikibarPopup.removeFrom = function(from){
	for(var t=wikibarPopup.stack.length-1; t>=from; t--){
		var p = wikibarPopup.stack[t];
		removeClass(p.root,'highlight');
		p.popup.parentNode.removeChild(p.popup);
  }
	wikibarPopup.stack = wikibarPopup.stack.slice(0,from);
};
wikibarPopup.removeFromRootPopup = function(from){
  for(var t=0; t<wikibarPopup.stack.length; t++){
    var p = wikibarPopup.stack[t];
    if(p.rootPopup==from){
      wikibarPopup.removeFrom(t);
      break;
    }
  }
};
wikibarPopup.onDocumentClick = function(e){
	if (!e){ e = window.event; }
	if(wikibarPopup.skipClickDocumentEvent){
	 wikibarPopup.skipClickDocumentEvent=false;
	 return true;
	}
	if((!e.eventPhase) || e.eventPhase == Event.BUBBLING_PHASE || e.eventPhase == Event.AT_TARGET){
		wikibarPopup.remove();
	}
	return true;
};
var wikibarStore = {
  TYPE: 'MAIN_MENU',
  help:{
    TYPE:'MENU',
    CAPTION: '<font face=\"verdana\">?</font>',
    TOOLTIP:     'about WikiBar',
    options:{
      TYPE:'MENU',
      DYNAITEM: wikibar_genWikibarOptions
    },
    about:{
      TYPE:'MENU',
      DYNAITEM: wikibar_genWikibarAbout
    }
  },
  preview:{
    TOOLTIP:     'preview this tiddler',
    CAPTION: '<font face=\"verdana\">&infin;</font>',
    HANDLER: wikibar_doPreview
  },
	line:{
		TOOLTIP:    'horizontal line',
		CAPTION: '<font face=\"verdana\">&mdash;</font>',
		syntax: '\n----\n',
		HANDLER: wikibar_editFormatByCursor
	},
	crlf:{
		TOOLTIP:    'new line',
		CAPTION: '<font face=\"verdana\">&para;</font>',
		syntax: '\n',
		HANDLER: wikibar_editFormatByCursor
	},
	selectAll:{
		TOOLTIP:    'select all',
		CAPTION: '<font face=\"verdana\">&sect;</font>',
		HANDLER: wikibar_editSelectAll
	},
	deleteSelected:{
		TOOLTIP:    'delete selected',
		CAPTION: '<font face=\"verdana\">&times;</font>',
		syntax: '',
		HANDLER: wikibar_editFormat
	},
  textFormat:{
    TYPE: 'MENU',
    CAPTION: 'text',
    TOOLTIP: 'text formatters',
    ignore:{
			TOOLTIP:     'ignore wiki word',
			CAPTION: 'ignore wikiWord',
			syntax:  '~user_text',
			hint:    'wiki_word',
			HANDLER:    wikibar_editFormatByWord
		},
		bolder:{
			TOOLTIP:     'bolder text',
			CAPTION: '<strong>bolder</strong>',
			syntax:  "''user_text''",
			hint:		 'bold_text',
			HANDLER:    wikibar_editFormatByWord
		},
		italic:{
			TOOLTIP:    'italic text',
			CAPTION: '<em>italic</em>',
			syntax: '\/\/user_text\/\/',
			hint:		'italic_text',
			HANDLER: wikibar_editFormatByWord
		},
		underline:{
			TOOLTIP:    'underline text',
			CAPTION: '<u>underline</u>',
			syntax: '__user_text__',
			hint:		'underline_text',
			HANDLER: wikibar_editFormatByWord
		},
		strikethrough:{
			TOOLTIP:    'strikethrough text',
			CAPTION: '<strike>strikethrough</strike>',
			syntax: '==user_text==',
			hint:		'strikethrough_text',
			HANDLER: wikibar_editFormatByWord
		},
		superscript:{
			TOOLTIP:    'superscript text',
			CAPTION: 'X<sup>superscript</sup>',
			syntax: '^^user_text^^',
			hint:		'superscript_text',
			HANDLER: wikibar_editFormatByWord
		},
		subscript:{
			TOOLTIP:    'subscript text',
			CAPTION: 'X<sub>subscript</sub>',
			syntax: '~~user_text~~',
			hint:		'subscript_text',
			HANDLER: wikibar_editFormatByWord
		},
		comment:{
			TOOLTIP:    'comment text',
			CAPTION: 'comment text',
			syntax: '/%user_text%/',
			hint:		'comment_text',
			HANDLER: wikibar_editFormatByWord
		},
		monospaced:{
			TOOLTIP:    'monospaced text',
			CAPTION: '<code>monospaced</code>',
			syntax: '{{{user_text}}}',
			hint:		'monospaced_text',
			HANDLER: wikibar_editFormatByWord
		}
  },
  paragraph:{
    TYPE: 'MENU',
    TOOLTIP: 'paragarph formatters',
    list:{
      TYPE: 'MENU',
      TOOLTIP: 'list tools',
      bullet:{
  			TOOLTIP:    'bullet point',
  			syntax: '*user_text',
  			hint:		'bullet_text',
  			HANDLER: wikibar_editFormatByLine
  		},
  		numbered:{
  			TOOLTIP:    'numbered list',
  			syntax: '#user_text',
  			hint:		'numbered_text',
  			HANDLER: wikibar_editFormatByLine
  		}
    },
    heading:{
      TYPE: 'MENU',
      heading1:{
  		  CAPTION:'<h1>Heading 1</h1>',
  			TOOLTIP:    'Heading 1',
  			syntax: '!user_text',
  			hint:		'heading_1',
  			HANDLER: wikibar_editFormatByLine
  		},
  		heading2:{
  		  CAPTION:'<h2>Heading 2<h2>',
  			TOOLTIP:    'Heading 2',
  			syntax: '!!user_text',
  			hint:		'heading_2',
  			HANDLER: wikibar_editFormatByLine
  		},
  		heading3:{
  		  CAPTION:'<h3>Heading 3</h3>',
  			TOOLTIP:    'Heading 3',
  			syntax: '!!!user_text',
  			hint:		'heading_3',
  			HANDLER: wikibar_editFormatByLine
  		},
  		heading4:{
  		  CAPTION:'<h4>Heading 4</h4>',
  			TOOLTIP:    'Heading 4',
  			syntax: '!!!!user_text',
  			hint:		'heading_4',
  			HANDLER: wikibar_editFormatByLine
  		},
  		heading5:{
  		  CAPTION:'<h5>Heading 5</h5>',
  			TOOLTIP:    'Heading 5',
  			syntax: '!!!!!user_text',
  			hint:		'heading_5',
  			HANDLER: wikibar_editFormatByLine
  		}
    },
    comment:{
      TYPE: 'MENU',
      commentByLine:{
  			CAPTION:'comment by line',
  			TOOLTIP:    'line comment',
  			syntax: '/%user_text%/',
  			hint:		'comment_text',
  			HANDLER: wikibar_editFormatByLine
  		},
  		commentByBlock:{
  			CAPTION:'comment by block',
  			TOOLTIP:    'block comment',
  			syntax: '/%\nuser_text\n%/',
  			hint:		'comment_text',
  			byBlock: true,
  			HANDLER: wikibar_editFormatByLine
  		}
    },
    monospaced:{
      TYPE: 'MENU',
  		monosByLine:{
  			CAPTION: 	'monospaced by line',
  			TOOLTIP:    'line monospaced',
  			syntax: '{{{\nuser_text\n}}}',
  			hint:		'monospaced_text',
  			HANDLER: wikibar_editFormatByLine
  		},
  		monosByBlock:{
  			CAPTION: 	'monospaced by block',
  			TOOLTIP:    'block monospaced',
  			syntax: '{{{\nuser_text\n}}}',
  			hint:		'monospaced_text',
  			byBlock: true,
  			HANDLER: wikibar_editFormatByLine
  		}
    },
    quote:{
      TYPE: 'MENU',
  		quoteByLine:{
  			CAPTION: 	'quote by line',
  			TOOLTIP:    'line quote',
  			syntax: '>user_text',
  			hint:		'quote_text',
  			HANDLER: wikibar_editFormatByLine
  		},
  		quoteByBlcok:{
  			CAPTION: 	'quote by block',
  			TOOLTIP:    'block quote',
  			syntax: '<<<\nuser_text\n<<<',
  			hint:		'quote_text',
  			byBlock: true,
  			HANDLER: wikibar_editFormatByLine
  		}
    },
    plugin:{
      TYPE: 'MENU',
      code:{
  			CAPTION: 	'code area',
  			TOOLTIP:    'block monospaced for plugin',
  			syntax: '\n\/\/{{{\nuser_text\n\/\/}}}\n',
  			hint:		'monospaced_plugin_code',
  			byBlock: true,
  			HANDLER: wikibar_editFormatByLine
  		},
  		commentByLine:{
  			CAPTION: 	'comment by line',
  			TOOLTIP:    'line comment',
  			syntax: '\/\/user_text',
  			hint:		'plugin_comment',
  			HANDLER: wikibar_editFormatByLine
  		},
  		commentByBlock:{
  			CAPTION: 	'comment by block',
  			TOOLTIP:    'block comment',
  			syntax: '\/\***\nuser_text\n***\/',
  			hint:		'plugin_comment',
  			byBlock: true,
  			HANDLER: wikibar_editFormatByLine
  		}
    },
    css:{
      TYPE: 'MENU',
      code:{
  			CAPTION: 	'code area',
  			TOOLTIP:    'block monospaced for css',
  			syntax: '\n\nuser_text\n\n',
  			hint:		'monospaced_css_code',
  			byBlock: true,
  			HANDLER: wikibar_editFormatByLine
  		},
  		commentByLine:{
  			CAPTION: 	'comment by line',
  			TOOLTIP:    'line comment',
  			syntax: '',
  			hint:		'css_comment',
  			HANDLER: wikibar_editFormatByLine
  		},
  		commentByBlock:{
  			CAPTION: 	'comment by block',
  			TOOLTIP:    'block comment',
  			syntax: '',
  			hint:		'css_comment',
  			byBlock: true,
  			HANDLER: wikibar_editFormatByLine
  		}
    }
  },
  color:{
    TYPE: 'MENU',
    TOOLTIP: 'color tools',
    highlight:{
		  CAPTION:'highlight text',
			TOOLTIP:    'highlight text',
			syntax: '@@user_text@@',
			hint:		'highlight_text',
			HANDLER: wikibar_editFormatByWord
		},
		color:{
		  CAPTION:'text color',
			TOOLTIP:    'text color',
			hint:		'your_text',
			syntax: '@@color(%1):user_text@@',
			HANDLER:   wikibar_getColorCode,
			doMore: wikibar_editFormatByWord
		},
		bgcolor:{
		  CAPTION:'background color',
			TOOLTIP:    'background color',
			hint:		'your_text',
			syntax: '@@bgcolor(%1):user_text@@',
			HANDLER: wikibar_getColorCode,
			doMore: wikibar_editFormatByWord
		},
		colorcode:{
      CAPTION:'color code',
      TOOLTIP:    'insert color code',
      syntax: '%1',
      HANDLER: wikibar_getColorCode,
      doMore: wikibar_editFormatByCursor
    },
    'color palette':{
      TYPE:'MENU',
      DYNAITEM: wikibar_genPaletteSelector,
  		SEPERATOR:{},
  		morePalette:{
  		  CAPTION:'more palettes',
  		  TOOLTIP:'get more palettes',
  		  HANDLER: wikibar_getMorePalette
  		}
    }
  },
  link:{
    TYPE: 'MENU',
    TOOLTIP: 'insert link',
    wiki:{
		  CAPTION:'wiki link',
			TOOLTIP:    'wiki link',
			syntax: '[[user_text]]',
			hint:		'wiki_word',
			HANDLER: wikibar_editFormatByWord
		},
		pretty:{
			CAPTION: 	'pretty link',
			TOOLTIP:    'pretty link',
			syntax: '[[user_text|%1]]',
			hint:		'pretty_word',
			param:	'PrettyLink Target',
			HANDLER:   wikibar_getLinkUrl,
			doMore: wikibar_editFormatByWord
		},
		url:{
			TOOLTIP:    'url link',
			syntax: '[[user_text|%1]]',
			hint:		'your_text',
			param:	'http:\/\/...',
			HANDLER:   wikibar_getLinkUrl,
			doMore: wikibar_editFormatByWord
		},
		image:{
			TOOLTIP:    'image link',
			syntax: '[img[user_text|%1]]',
			hint:		'alt_text',
			param:	'image/icon.jpg',
			HANDLER:   wikibar_getLinkUrl,
			doMore: wikibar_editFormatByWord
		}
  },
  macro:{},
  more:{
    TYPE: 'MENU',
    TOOLTIP: 'more tools',
    table:{
      TYPE: 'MENU',
      TOOLTIP: 'table',
      table:{
  		  CAPTION:'create table',
  			TOOLTIP:    'create a new table',
  			syntax: '\n%1\n',
  			HANDLER: wikibar_getTableRowCol,
  			doMore: wikibar_editFormatByWord
  		},
  		header:{
  			TOOLTIP:    'table header text',
  			syntax: '|user_text|c',
  			hint:		'table_header',
  			HANDLER: wikibar_editFormatByWord
  		},
  		cell:{
  			TOOLTIP:    'create a tabel cell',
  			syntax: '|user_text|',
  			hint:		'your_text',
  			HANDLER: wikibar_editFormatByWord
  		},
  		columnHeader:{
  		  CAPTION:'column header',
  			TOOLTIP:    'create a column header cell',
  			syntax: '|!user_text|',
  			hint:		'column_header',
  			HANDLER: wikibar_editFormatByWord
  		},
  	  cell:{
  	    TYPE: 'MENU',
        CAPTION: 'cell options',
    		bgcolor:{
    			CAPTION: 	'background color',
    			TOOLTIP:    'cell bgcolor',
    			syntax: '|bgcolor(%1):user_text|',
    			hint:		'your_text',
    			HANDLER: wikibar_getColorCode,
    			doMore: wikibar_editFormatByTableCell
    		},
    		alignLeft:{
    			CAPTION: 	'align left',
    			TOOLTIP:    'left align cell text',
    			syntax: '|user_text|',
    			hint:		'your_text',
    			HANDLER: wikibar_editFormatByTableCell
    		},
    		alignCenter:{
    			CAPTION: 	'align center',
    			TOOLTIP:    'center align cell text',
    			syntax: '| user_text |',
    			hint:		'your_text',
    			HANDLER: wikibar_editFormatByTableCell
    		},
    		alignRight:{
    			CAPTION: 	'align right',
    			TOOLTIP:    'right align cell text',
    			syntax: '| user_text|',
    			hint:		'your_text',
    			HANDLER: wikibar_editFormatByTableCell
    		}
    	}
    },
    html:{
      TYPE: 'MENU',
      html:{
  			CAPTION: 	'&lt;html&gt;',
  			TOOLTIP:    'html tag',
  			syntax: '<html>\nuser_text\n</html>',
  			hint:		'html_content',
  			byBlock: true,
  			HANDLER: wikibar_editFormatByLine
  		}
    }
  },
  addon:{
    TYPE: 'MENU',
    TOOLTIP:'3rd party tools',
    'about addons':{
      TOOLTIP: 'list loaded addons',
      HANDLER: wikibar_doListAddons
    },
    SEPERATOR:{}
  }
};
addEvent(document, 'click', wikibarColorTool.onDocumentClick);
addEvent(document, 'click', wikibarPopup.onDocumentClick);
wikibar_install();
//}}}
/***
|''Name:''|YourSearchPlugin|
|''Version:''|2.1.0 (2006-10-12)|
|''Source:''|http://tiddlywiki.abego-software.de/#YourSearchPlugin ([[del.icio.us|http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23YourSearchPlugin]])|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|&copy; 2005-2006 [[abego Software|http://www.abego-software.de]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; ~InternetExplorer 6.0|
!About YourSearch
YourSearch gives you a bunch of new features to simplify and speed up your daily searches in TiddlyWiki. It seamlessly integrates into the standard TiddlyWiki search: just start typing into the 'search' field and explore!

For more information see [[Help|YourSearch Help]].
!Compatibility
This plugin requires TiddlyWiki 2.1. 
Check the [[archive|http://tiddlywiki.abego-software.de/archive]] for ~YourSearchPlugins supporting older versions of TiddlyWiki.
!Revision history
* v2.1.0 (2006-10-12)
** Release version with TiddlyWiki 2.1 support
*** Support (Extended) Field search
*** Support parenthesis in Boolean Search
*** Support direct regular expression input
*** Support JavaScript Expressions for filtering
*** "new tiddler" feature (create tiddler based on search text)
* v2.0.2 (2006-02-13)
** Bugfix for Firefox 1.5.0.1 related to the "Show prefix" checkbox. Thanks to Ted Pavlic for reporting and to BramChen for fixing. 
** Internal
*** Make "JSLint" conform
* v2.0.1 (2006-02-05)
** Support "Exact Word Match" (use '=' to prefix word)
** Support default filter settings (when no filter flags are given in search term)
** Rework on the "less than 3 chars search text" feature (thanks to EricShulman)
** Better support SinglePageMode when doing "Open all tiddlers" (thanks to EricShulman)
** Support Firefox 1.5.0.1
** Bug: Fixed a hilite bug in "classic search mode" (thanks to EricShulman)
* v2.0.0 (2006-01-16)
** Add User Interface
* v1.0.1 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.0 (2005-12-28)
** initial version
!Source Code
***/
//{{{
//============================================================================
//============================================================================
//                           YourSearchPlugin
//============================================================================
//============================================================================

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

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

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

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

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

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

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

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

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

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

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

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

	var reText = text;
	if (!options.textIsRegExp) {
		reText = text.escapeRegExp();
		if (options.fullWordMatch) 
			reText = "\\b"+reText+"\\b";
	}
	var regExp = new RegExp(reText, "m"+(options.caseSensitive ? "" : "i"));

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



(function() {

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

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

abego.YourSearch = {};

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

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

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

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

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

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

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

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

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

	return rank;
};

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

	var results = lastQuery.filter(candidates);

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

var pager = new abego.PageWiseRenderer();

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

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

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

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

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

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

	ensureResultIsDisplayedNicely();
};

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

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

var 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()) {
		// For speedup we check re-use the previously created resultElement, if possible.
		if (resultElement && (resultElement.parentNode != document.body)) {
			document.body.appendChild(resultElement);
			ensureResultIsDisplayedNicely();
		} else {
			showResult();
		}
	}
};


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



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

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

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

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


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

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

	highlightHack = lastQuery ? lastQuery.getMarkRegExp() : null;
	pager.setItems(getLastResults());
	showResult();
	highlightHack = null;
};


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

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

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


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

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

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

	searchInputField = txt;
	searchButton = btn;
};

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

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

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

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



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

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

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

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

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

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

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


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

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


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

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




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

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

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

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

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

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

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

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

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

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

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

setTimeout(checkForOtherHijacker, 5000);

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

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

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

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

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

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

// ... JavaScript Core
/*global 	alert,clearTimeout,confirm */
// ... TiddlyWiki Core
/*global 	Tiddler, applyHtmlMacros, clearMessage, createTiddlyElement, createTiddlyButton, createTiddlyText, ensureVisible ,findPosX, highlightHack, findPosY,findWindowWidth, invokeMacro, saveChanges, refreshElements, story */
//}}}
/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005-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.
***/


/***
Macro: allTagsExcept
Author: Clint Checketts
Version: 1.0 Sept 8, 2005

usage: {{{<< allTagsExcept systemConfig systemTiddlers >>}}} This will show all tags but those listed (e.g. systemConfig and systemTiddlers

<<allTagsExcept systemConfig systemTiddlers >>
***/
//{{{
version.extensions.allTagsExcept = {major: 0, minor: 1, revision: 0, date: new Date(2005,8,15)};
config.macros.allTagsExcept = {tooltip: "Show tiddlers tagged with '%0'",noTags: "There are no tags to display"};

config.macros.allTagsExcept.handler = function(place,macroName,params)
{
	var tags = store.getTags();
	var theTagList = createTiddlyElement(place,"ul",null,null,null);
	if(tags.length == 0)
		createTiddlyElement(theTagList,"li",null,"listTitle",this.noTags);
	for (var t=0; t<tags.length; t++) {
            var includeTag = true;
            for (var p=0;p<params.length; p++) if (tags[t][0] == params[p]) includeTag = false;
            if (includeTag){
		var theListItem =createTiddlyElement(theTagList,"li",null,null,null);
		var theTag = createTiddlyButton(theListItem,tags[t][0] + " (" + tags[t][1] + ")",this.tooltip.format([tags[t][0]]),onClickTag);
		theTag.setAttribute("tag",tags[t][0]);
           }
	}
}
//}}}
Background: #eeffcc
Foreground: #000
PrimaryPale: #bbcc99
PrimaryLight: #bbdd88
PrimaryMid: #445533
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #99dd55
SecondaryMid: #cccccc
SecondaryDark: #445533
TertiaryPale: #bbcc99
TertiaryLight: #EEC591
TertiaryMid: #552233
TertiaryDark: #8B7355