<!--{{{-->
<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]];}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing 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'></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 +saveTiddler -cancelTiddler deleteTiddler'></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'></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>>
{{borderlessL{
<<forEachTiddler
 where
 'tiddler.tags.contains("movie")'
 sortBy
  'tiddler.title'
  ascending
 script
'
 function getFirstLine(s) {
 var m = s.match(/\s*(.*)/);
 return m != null && m.length >= 1 ? m[1] : "";
 }
 '
 write
 '"|" + getFirstLine(tiddler.text) + "|[["+tiddler.title+"]]" +"|\n"' 
>>
}}}
[img[http://www.siff.net/_uploaded/image/film/29988l.jpg][Apollo 54]]
[[TRAILER|http://www.youtube.com/watch?v=BLbO1B-gSwc]]
    * Country: Italy
    * Year: 2007
    * Running time: 98 Minutes
    * Genres: Comedy , Cult , Science Fiction
    * Program: New Directors Showcase
    * Language: Italian
    * ~Sub-Titles:English ~Sub-Titles

As a mysterious television signal threatens to reduce the Italian populace to mindless drones, dashing fair-haired scientist Bobby Joe constructs an interstellar cable car and takes to the skies with his slightly less intrepid co-pilot Jim Bob to defeat the alien threat. This sepia-toned homage to 1950s space operas stands as a complete trip, in all senses of the word. Director Giordano Giulivi and producers Duccio Giulivi, Luca Silvani and Silvano Bertolin are scheduled to attend both screenings

__Harvard Exit__
    Thursday June 12, 2008 @ 9:30 PM
    Sunday June 15, 2008 @ 4:00 PM

__Frosty Mike sez:__
It could be funny, but it also looks like it could be dumb.  It might also be too artsy.

Source: [[Apollo 54 : 2008 Seattle International Film Festival : Giordano Giulivi : Italy < Films|http://www.siff.net/festival/film/detail.aspx?id=27334&FID=64]]
/***
|''Name:''|AutoRefreshPlugin|
|''Version:''|1.0.1 (2007-01-20)|
|''Type:''|plugin|
|''Source:''|http://tiddlywiki.abego-software.de/#AutoRefreshPlugin|
|''Author:''|Udo Borkowski (ub [at] abego-software [dot] de)|
|''Documentation:''|[[AutoRefreshPlugin Documentation|http://tiddlywiki.abego-software.de/#%5B%5BAutoRefreshPlugin%20Documentation%5D%5D]]|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''~CoreVersion:''|2.1.3|
|''Browser:''|Firefox 1.5.0.9 or better; Internet Explorer 6.0|
A tiddler containing the {{{<<autoRefresh...>>}}} macro is automatically refreshed (re-painted) whenever a tiddler changes.
!Syntax
{{{
<<autoRefresh [observeTiddler: tiddler ...]>>
}}}
|{{{observeTiddler}}}|(optional) when specified the refresh will only happen when one of the tiddlers specified is changed.|
!Source Code
***/
//{{{

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

// autoRefresh Macro =============================================================
//
(function() {


var REFRESHER_NAME = "abego_onEveryChange";

var tiddlersToRefresh = {}; // A set holding the names of tiddlers to be refreshed

var onEveryChangeRefresher = function(e,changeList) {
	
	var tiddlerElem = story.findContainingTiddler(e);
	if (!tiddlerElem) return false;

	var title = tiddlerElem.getAttribute("tiddler");
	if (!title) return false;

	// if "observeTiddler" are specified we only refresh if one of the given 
	// tiddlers has changed.
	var observedTiddlers = e.getAttribute("observedTiddlers");
	if (observedTiddlers) {
		var a = observedTiddlers.readBracketedList();
		if (!changeList || !a.containsAny(changeList))
			return;
	}

	// Refresh the tiddler asynchronously. 
	// This way we can avoid repeated refreshes (e.g. when a tiddler is renamed)
	tiddlersToRefresh[title] = true;
	setTimeout(function() {
		// Refresh all tiddlers in tiddlersToRefresh
		for(var title in tiddlersToRefresh)
			story.refreshTiddler(title,null,true);

		// We have refreshed all pending tiddlers. Clear the set.
		tiddlersToRefresh = {};
	}, 0);

	return true;
}

config.refreshers[REFRESHER_NAME] = onEveryChangeRefresher;


config.macros.autoRefresh = {};

config.macros.autoRefresh.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
    params = paramString.parseParams("observeTiddler",null,true,false,true); // allowEval, cascadeDefaults, names allowed

	var e = createTiddlyElement(place,"span");
	e.setAttribute("refresh",REFRESHER_NAME);
	var observedTiddlers = params[0]["observeTiddler"];
	if (observedTiddlers && observedTiddlers.length) {
		var s = "[["+observedTiddlers.join("]] [[")+"]]";
		e.setAttribute("observedTiddlers",s);
	}
};


})();

//}}}
[img[http://www.siff.net/_uploaded/image/film/28894l.jpg][Baghead]] @@bgcolor:#FF0000;color:#fff;Crap?@@
[[TRAILER|http://mftm.blogspot.com/2008/05/baghead-2008-trailer.html]]
    * Country: USA
    * Year: 2008
    * Running time: 84 Minutes
    * Genres: Black Comedy , Cult
    * Program: Contemporary World Cinema
    * Language: English

The creators of cult-favorite The Puffy Chair bring us Baghead, a lurid tale of four would-be movie stars who sequester themselves in the woods to write their masterpiece screenplay. Soon they find themselves menaced by an unwelcome visitor with a bag over his head.

__Egyptian Theatre__
Sunday June 8, 2008 @ 6:30 PM
Monday June 9, 2008 @ 4:30 PM

__Frosty Mike sez:__
Looks pretty awful to me.  I only included it here in the hopes that the movie is not as crappy as the trailer, and because the picture is funny.

Source: [[Baghead : 2008 Seattle International Film Festival : Jay Duplass : Mark Duplass : USA < Films|http://www.siff.net/festival/film/detail.aspx?id=27267&FID=64]]
~IMDb: http://www.imdb.com/title/tt0923600/
[img[http://www.siff.net/_uploaded/image/film/27414l.jpg][Ben X]] @@bgcolor:#CC6714;color:#fff;Maybe?@@
[[TRAILER|http://movieclock.com/aw/cvpa.aw/e/188524/Ben_X.html]]
    * Country: Belgium
    * Year: 2007
    * Running time: 90 Minutes
    * Genres: Drama , Fantasy , Teen Flick
    * Program: Contemporary World Cinema
    * Language: Flemish
    * ~Sub-Titles:English ~Sub-Titles
    * Other Countries: Netherlands
Bullied by classmates and locked in silence by Asperger syndrome, Ben finds his only solace through online gaming. After an especially cruel prank, he starts to view his school tormentors as video game combatants. Reminiscent of the alienation of Donnie Darko, this dazzling debut won the audience award at the Montreal Film Festival. Director Nic Balthazar scheduled to attend both screenings

__Uptown Cinema__
    Friday May 30, 2008 @ 9:30 PM
    Sunday June 1, 2008 @ 4:00 PM

__Frosty Mike sez:__
Even though it's a drama, it looks cool.  If the SIFF folks aren't stretching the truth with the Donnie Darko reference, I'm in.

Source: [[Ben X : 2008 Seattle International Film Festival : Nic Balthazar : Belgium < Films|http://www.siff.net/festival/film/detail.aspx?id=27183&FID=64]]
~IMDb: http://www.imdb.com/title/tt0953318/
[img[http://www.siff.net/_uploaded/image/film/28905l.jpg][Choke]] @@bgcolor:green;color:#fff;Recommended@@
[[TRAILER|http://www.worstpreviews.com/trailer.php?id=1088&item=0]]
    * Country: USA
    * Year: 2007
    * Running time: 89 Minutes
    * Genres: Black Comedy , Erotic
    * Program: Contemporary World Cinema
    * Language: English

Sex-addict and medical school dropout Victor Mancini pays his mother's medical bills with an indigestible scam-–he fakes choking on his food in expensive restaurants and cons his rescuers for money. His compulsive-masturbator best friend add to this light-hearted, filthy-minded farce loaded with delightful performances based on Chuck Palahniuk's novel.

__Egyptian Theatre__
    Thursday June 5, 2008 @ 9:15 PM

__Uptown Cinema__
    Saturday June 7, 2008 @ 4:00 PM

__Frosty Mike sez:__
Even though I heard from a friend that is wasn't hillarious, I still think it's worth catching at some point.  Sounded funny to me! 

Source: [[Choke : 2008 Seattle International Film Festival : Clark Gregg : USA < Films|http://www.siff.net/festival/film/detail.aspx?id=27274&FID=64]]
~IMDb: http://www.imdb.com/title/tt1024715/
[img[http://www.siff.net/_uploaded/image/film/27574l.jpg][Chrysalis]] @@bgcolor:green;color:#fff;Recommended@@
[[TRAILER|http://www.youtube.com/watch?v=Fj8ntU-DUt0]]
    * Country: France
    * Year: 2007
    * Running time: 91 Minutes
    * Genres: Science Fiction , Thriller
    * Program: Midnight Adrenaline
    * Language: French
    * ~Sub-Titles:English ~Sub-Titles

A high-octane sci-fi noir thrill ride. When Lieutenant David Hoffman finds the mutilated corpse of an illegal immigrant, it leads him on a fever-pitched investigation through futuristic Paris. The hunt starts with a high-priced plastic surgery clinic and leads to the notorious human trafficker Dimitri Nicolov, the man who killed Hoffman's wife five years earlier. Director Julien Leclercq scheduled to attend both screenings

__Egyptian Theatre__
    Friday June 13, 2008 @ 11:55 PM

__Cinerama__
    Saturday June 14, 2008 @ 10:00 PM

__Frosty Mike sez:__
WOW!  This looks like an awesome blend of sci-fi and action.  I'm in.

Source: [[Chrysalis : 2008 Seattle International Film Festival : Julien Leclercq : France < Films|http://www.siff.net/festival/film/detail.aspx?id=27205&FID=64]]
~IMDb: http://www.imdb.com/title/tt0884335/
/***
|''Name:''|CryptoFunctionsPlugin|
|''Description:''|Support for cryptographic functions|
***/
//{{{
if(!version.extensions.CryptoFunctionsPlugin) {
version.extensions.CryptoFunctionsPlugin = {installed:true};

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

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

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

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

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

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

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

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

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

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

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

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

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


}
//}}}
[[Welcome]]
/***
|''Name:''|DeprecatedFunctionsPlugin|
|''Description:''|Support for deprecated functions removed from core|
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};

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

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

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

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

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

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

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

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

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

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

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

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

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

}
//}}}
The 27 movies listed here are my initial picks for the SIFF.  I combed through all the movie listings and whittled the mess down to these 27.  There are hundreds of others at the [[official website|http://www.siff.net/festival/index.aspx]].

Just because I think the rest are probably crap doesn't mean you will.  It turns out that some of the movies I listed here seem to be crap after closer inspection, but maybe I missed a few gems?  Go explore.  Be artsy.  Enlighten yourself.  See movies!  Just don't tell me about documentaries involving sheep herders, or edgy experimental films where the director leaves the lens cap on the whole time...  Ok?

Most of the content here is taken from the official [[SIFF|http://www.siff.net/festival/index.aspx]] pages.  But there may be errors.  Always check the official site for up to date movie times, etc.  That is, of course, if you can stand to look at the awful colors and layout of their site.  What were they thinking this year?!?

/***
|Name|DisplayOpenTiddlersPlugin|
|Location|http://www.orst.edu/~woodswa/tiddlywikiplugs.html|
|Version|1.0|
|Author|Walt Woods|
|Requirements||

!Description
Displays similar to the popular BreadCrumbsPlugin by AlanHecht, this plugin instead keeps a list of currently open tiddlers.

!History
08-06-2007: Initial version.

!Code
***/
//{{{
version.extensions.DisplayOpenTiddlers = {major: 1, minor: 0, revision: 0};

function addOpenTiddlerLine(title, element)
{
 if (title != openTiddlerClosing)
 {
  if (tiddlerLine != "")
   tiddlerLine += " | ";
  tiddlerLine += "[[" + title + "]]";
 }
}

function refreshOpenTiddlersList()
{
 if (!document.getElementById("openTiddlers")) {
  var ta = document.createElement("div");
  ta.id = "openTiddlers";
  ta.style.visibility= "hidden";
  var targetArea = document.getElementById("tiddlerDisplay")||document.getElementById("storyDisplay");
  targetArea.parentNode.insertBefore(ta,targetArea);
 }

 var tiddlers = document.getElementById("openTiddlers");
 tiddlers.style.visibility = "visible";
 removeChildren(tiddlers);
 
 tiddlerLine = "";
 story.forEachTiddler(addOpenTiddlerLine);
 wikify(tiddlerLine,tiddlers)
}

Story.prototype.displayTiddlerDisplayOpenTiddlers = Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,title,template,animate,slowly)
{
 this.displayTiddlerDisplayOpenTiddlers(srcElement,title,template,animate,slowly);
 openTiddlerClosing = "";
 refreshOpenTiddlersList();
}

Story.prototype.closeTiddlerDisplayOpenTiddlers = Story.prototype.closeTiddler;
Story.prototype.closeTiddler = function(title,animate,unused)
{
 this.closeTiddlerDisplayOpenTiddlers(title,animate,unused);
 openTiddlerClosing = title;
 refreshOpenTiddlersList();
}
//}}}
[img[http://www.siff.net/_uploaded/image/film/28914l.jpg][Donkey Punch]] @@bgcolor:#FF0000;color:#fff;Crap?@@
[[TRAILER|http://www.lumina-films.com/DP/donkey%20punch%20clip%201.html]]
    * Country: United Kingdom
    * Year: 2008
    * Running time: 90 Minutes
    * Genres: Erotic , Thriller
    * Program: Midnight Adrenaline
    * Language: English

While vacationing at a Spanish resort, three young women soak up sun, booze, and drugs. One evening, they meet three charming young lads and sail off on an impromptu cruise and subsequent orgy, aboard a borrowed yacht. Then, far from shore, everything goes horribly, horribly wrong.

__Egyptian Theatre__
    Saturday June 14, 2008 @ 11:55 PM
    Sunday June 15, 2008 @ 9:00 PM

__Frosty Mike sez:__
Sounded interesting until I watched the movie clip.  Perhaps that just shows the only boring part of the movie?

Source: [[Donkey Punch : 2008 Seattle International Film Festival : Olly Blackburn : United Kingdom < Films|http://www.siff.net/festival/film/detail.aspx?id=27276&FID=64]]
~IMDb: http://www.imdb.com/title/tt0988849/
[img[http://www.siff.net/_uploaded/image/film/27614l.jpg][Epitaph (Gidam)]] @@bgcolor:#CC6714;color:#fff;Maybe?@@
[[TRAILER|http://www.sinematurk.com/film.php?action=goToViewTrailerPage&filmid=20549&no=0]]&nbsp;&nbsp;[[Rent it!|http://www.scarecrow.com/rental/item_rental.asp?Number=75077]]
    * Country: South Korea
    * Year: 2007
    * Running time: 98 Minutes
    * Genres: Horror , Horror/Thriller , Thriller
    * Program: Midnight Adrenaline
    * Language: Korean
    * ~Sub-Titles:English ~Sub-Titles

Set in Japanese-occupied Korea, Epitaph interweaves three chilling stories: a young Korean doctor falls in love with a corpse that refuses to decay; a little girl, near catatonic after a car crash, sees horrific visions of her dead mother; and two married doctors perform autopsy on dead Japanese soldiers—all victims of a mysterious serial killer.

__Egyptian Theatre__
    Saturday May 24, 2008 @ 11:55 PM

__Frosty Mike sez:__
Asian horror.  Sounds promising, probably weird, and worth checking out.

Source: [[Epitaph (Gidam) : 2008 Seattle International Film Festival : Jung Brothers : South Korea < Films|http://www.siff.net/festival/film/detail.aspx?id=27214&FID=64]]
~IMDb: http://www.imdb.com/title/tt1124378/
[img[http://www.siff.net/_uploaded/image/film/30322l.jpg][Female Agents (Les femmes de l'Ombre)]]
[[TRAILER|http://www.cinema.ch/video/Femmes-de-l'ombre,-Les]]
    * Country: France
    * Year: 2008
    * Running time: 121 Minutes
    * Genre: Thriller
    * Program: Contemporary World Cinema
    * Language: French
    * ~Sub-Titles:English ~Sub-Titles

A high-octane French blockbuster action pick with an all-star international cast. During World War II, a tenacious quintet of female commandos parachute into Nazi occupied France on a perilous mission to conceal plans for the ~D-Day invasion. The agents: a partisan, a prostitute, an explosives expert, a showgirl, and a countess must work together to thwart an equally determined Nazi Colonel.

__Cinerama__
    Friday June 13, 2008 @ 6:30 PM
    Sunday June 15, 2008 @ 3:00 PM 

__Frosty Mike sez:__
Looks like a serious female spy action flick.  

Source: [[Female Agents (Les femmes de l'Ombre) : 2008 Seattle International Film Festival : Jean-Paul Salomé : France < Films|http://www.siff.net/festival/film/detail.aspx?id=27364&FID=64]]

~IMDb: http://www.imdb.com/title/tt0824330/
/***
|''Name:''|ForEachTiddlerPlugin|
|''Version:''|1.0.8 (2007-04-12)|
|''Source:''|http://tiddlywiki.abego-software.de/#ForEachTiddlerPlugin|
|''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-2007 [[abego Software|http://www.abego-software.de]]|
|''TiddlyWiki:''|1.2.38+, 2.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
!Description

Create customizable lists, tables etc. for your selections of tiddlers. Specify the tiddlers to include and their order through a powerful language.

''Syntax:'' 
|>|{{{<<}}}''forEachTiddler'' [''in'' //tiddlyWikiPath//] [''where'' //whereCondition//] [''sortBy'' //sortExpression// [''ascending'' //or// ''descending'']] [''script'' //scriptText//] [//action// [//actionParameters//]]{{{>>}}}|
|//tiddlyWikiPath//|The filepath to the TiddlyWiki the macro should work on. When missing the current TiddlyWiki is used.|
|//whereCondition//|(quoted) JavaScript boolean expression. May refer to the build-in variables {{{tiddler}}} and  {{{context}}}.|
|//sortExpression//|(quoted) JavaScript expression returning "comparable" objects (using '{{{<}}}','{{{>}}}','{{{==}}}'. May refer to the build-in variables {{{tiddler}}} and  {{{context}}}.|
|//scriptText//|(quoted) JavaScript text. Typically defines JavaScript functions that are called by the various JavaScript expressions (whereClause, sortClause, action arguments,...)|
|//action//|The action that should be performed on every selected tiddler, in the given order. By default the actions [[addToList|AddToListAction]] and [[write|WriteAction]] are supported. When no action is specified [[addToList|AddToListAction]]  is used.|
|//actionParameters//|(action specific) parameters the action may refer while processing the tiddlers (see action descriptions for details). <<tiddler [[JavaScript in actionParameters]]>>|
|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|

See details see [[ForEachTiddlerMacro]] and [[ForEachTiddlerExamples]].

!Revision history
* v1.0.8 (2007-04-12)
** Adapted to latest TiddlyWiki 2.2 Beta importTiddlyWiki API (introduced with changeset 2004). TiddlyWiki 2.2 Beta builds prior to changeset 2004 are no longer supported (but TiddlyWiki 2.1 and earlier, of cause)
* v1.0.7 (2007-03-28)
** Also support "pre" formatted TiddlyWikis (introduced with TW 2.2) (when using "in" clause to work on external tiddlers)
* v1.0.6 (2006-09-16)
** Context provides "viewerTiddler", i.e. the tiddler used to view the macro. Most times this is equal to the "inTiddler", but when using the "tiddler" macro both may be different.
** Support "begin", "end" and "none" expressions in "write" action
* v1.0.5 (2006-02-05)
** Pass tiddler containing the macro with wikify, context object also holds reference to tiddler containing the macro ("inTiddler"). Thanks to SimonBaird.
** Support Firefox 1.5.0.1
** Internal
*** Make "JSLint" conform
*** "Only install once"
* v1.0.4 (2006-01-06)
** Support TiddlyWiki 2.0
* v1.0.3 (2005-12-22)
** Features: 
*** Write output to a file supports multi-byte environments (Thanks to Bram Chen) 
*** Provide API to access the forEachTiddler functionality directly through JavaScript (see getTiddlers and performMacro)
** Enhancements:
*** Improved error messages on InternetExplorer.
* v1.0.2 (2005-12-10)
** Features: 
*** context object also holds reference to store (TiddlyWiki)
** Fixed Bugs: 
*** ForEachTiddler 1.0.1 has broken support on win32 Opera 8.51 (Thanks to BrunoSabin for reporting)
* v1.0.1 (2005-12-08)
** Features: 
*** Access tiddlers stored in separated TiddlyWikis through the "in" option. I.e. you are no longer limited to only work on the "current TiddlyWiki".
*** Write output to an external file using the "toFile" option of the "write" action. With this option you may write your customized tiddler exports.
*** Use the "script" section to define "helper" JavaScript functions etc. to be used in the various JavaScript expressions (whereClause, sortClause, action arguments,...).
*** Access and store context information for the current forEachTiddler invocation (through the build-in "context" object) .
*** Improved script evaluation (for where/sort clause and write scripts).
* v1.0.0 (2005-11-20)
** initial version

!Code
***/
//{{{

	
//============================================================================
//============================================================================
//		   ForEachTiddlerPlugin
//============================================================================
//============================================================================

// Only install once
if (!version.extensions.ForEachTiddlerPlugin) {

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

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

// For backward compatibility with TW 1.2.x
//
if (!TiddlyWiki.prototype.forEachTiddler) {
	TiddlyWiki.prototype.forEachTiddler = function(callback) {
		for(var t in this.tiddlers) {
			callback.call(this,t,this.tiddlers[t]);
		}
	};
}

//============================================================================
// forEachTiddler Macro
//============================================================================

version.extensions.forEachTiddler = {
	major: 1, minor: 0, revision: 8, date: new Date(2007,3,12), provider: "http://tiddlywiki.abego-software.de"};

// ---------------------------------------------------------------------------
// Configurations and constants 
// ---------------------------------------------------------------------------

config.macros.forEachTiddler = {
	 // Standard Properties
	 label: "forEachTiddler",
	 prompt: "Perform actions on a (sorted) selection of tiddlers",

	 // actions
	 actions: {
		 addToList: {},
		 write: {}
	 }
};

// ---------------------------------------------------------------------------
//  The forEachTiddler Macro Handler 
// ---------------------------------------------------------------------------

config.macros.forEachTiddler.getContainingTiddler = function(e) {
	while(e && !hasClass(e,"tiddler"))
		e = e.parentNode;
	var title = e ? e.getAttribute("tiddler") : null; 
	return title ? store.getTiddler(title) : null;
};

config.macros.forEachTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
	// config.macros.forEachTiddler.traceMacroCall(place,macroName,params,wikifier,paramString,tiddler);

	if (!tiddler) tiddler = config.macros.forEachTiddler.getContainingTiddler(place);
	// --- Parsing ------------------------------------------

	var i = 0; // index running over the params
	// Parse the "in" clause
	var tiddlyWikiPath = undefined;
	if ((i < params.length) && params[i] == "in") {
		i++;
		if (i >= params.length) {
			this.handleError(place, "TiddlyWiki path expected behind 'in'.");
			return;
		}
		tiddlyWikiPath = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the where clause
	var whereClause ="true";
	if ((i < params.length) && params[i] == "where") {
		i++;
		whereClause = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the sort stuff
	var sortClause = null;
	var sortAscending = true; 
	if ((i < params.length) && params[i] == "sortBy") {
		i++;
		if (i >= params.length) {
			this.handleError(place, "sortClause missing behind 'sortBy'.");
			return;
		}
		sortClause = this.paramEncode(params[i]);
		i++;

		if ((i < params.length) && (params[i] == "ascending" || params[i] == "descending")) {
			 sortAscending = params[i] == "ascending";
			 i++;
		}
	}

	// Parse the script
	var scriptText = null;
	if ((i < params.length) && params[i] == "script") {
		i++;
		scriptText = this.paramEncode((i < params.length) ? params[i] : "");
		i++;
	}

	// Parse the action. 
	// When we are already at the end use the default action
	var actionName = "addToList";
	if (i < params.length) {
	   if (!config.macros.forEachTiddler.actions[params[i]]) {
			this.handleError(place, "Unknown action '"+params[i]+"'.");
			return;
		} else {
			actionName = params[i]; 
			i++;
		}
	} 
	
	// Get the action parameter
	// (the parsing is done inside the individual action implementation.)
	var actionParameter = params.slice(i);


	// --- Processing ------------------------------------------
	try {
		this.performMacro({
				place: place, 
				inTiddler: tiddler,
				whereClause: whereClause, 
				sortClause: sortClause, 
				sortAscending: sortAscending, 
				actionName: actionName, 
				actionParameter: actionParameter, 
				scriptText: scriptText, 
				tiddlyWikiPath: tiddlyWikiPath});

	} catch (e) {
		this.handleError(place, e);
	}
};

// Returns an object with properties "tiddlers" and "context".
// tiddlers holds the (sorted) tiddlers selected by the parameter,
// context the context of the execution of the macro.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlersAndContext = function(parameter) {

	var context = config.macros.forEachTiddler.createContext(parameter.place, parameter.whereClause, parameter.sortClause, parameter.sortAscending, parameter.actionName, parameter.actionParameter, parameter.scriptText, parameter.tiddlyWikiPath, parameter.inTiddler);

	var tiddlyWiki = parameter.tiddlyWikiPath ? this.loadTiddlyWiki(parameter.tiddlyWikiPath) : store;
	context["tiddlyWiki"] = tiddlyWiki;
	
	// Get the tiddlers, as defined by the whereClause
	var tiddlers = this.findTiddlers(parameter.whereClause, context, tiddlyWiki);
	context["tiddlers"] = tiddlers;

	// Sort the tiddlers, when sorting is required.
	if (parameter.sortClause) {
		this.sortTiddlers(tiddlers, parameter.sortClause, parameter.sortAscending, context);
	}

	return {tiddlers: tiddlers, context: context};
};

// Returns the (sorted) tiddlers selected by the parameter.
//
// The action is not yet performed.
//
// @parameter see performMacro
//
config.macros.forEachTiddler.getTiddlers = function(parameter) {
	return this.getTiddlersAndContext(parameter).tiddlers;
};

// Performs the macros with the given parameter.
//
// @param parameter holds the parameter of the macro as separate properties.
//				  The following properties are supported:
//
//						place
//						whereClause
//						sortClause
//						sortAscending
//						actionName
//						actionParameter
//						scriptText
//						tiddlyWikiPath
//
//					All properties are optional. 
//					For most actions the place property must be defined.
//
config.macros.forEachTiddler.performMacro = function(parameter) {
	var tiddlersAndContext = this.getTiddlersAndContext(parameter);

	// Perform the action
	var actionName = parameter.actionName ? parameter.actionName : "addToList";
	var action = config.macros.forEachTiddler.actions[actionName];
	if (!action) {
		this.handleError(parameter.place, "Unknown action '"+actionName+"'.");
		return;
	}

	var actionHandler = action.handler;
	actionHandler(parameter.place, tiddlersAndContext.tiddlers, parameter.actionParameter, tiddlersAndContext.context);
};

// ---------------------------------------------------------------------------
//  The actions 
// ---------------------------------------------------------------------------

// Internal.
//
// --- The addToList Action -----------------------------------------------
//
config.macros.forEachTiddler.actions.addToList.handler = function(place, tiddlers, parameter, context) {
	// Parse the parameter
	var p = 0;

	// Check for extra parameters
	if (parameter.length > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "addToList", parameter, p);
		return;
	}

	// Perform the action.
	var list = document.createElement("ul");
	place.appendChild(list);
	for (var i = 0; i < tiddlers.length; i++) {
		var tiddler = tiddlers[i];
		var listItem = document.createElement("li");
		list.appendChild(listItem);
		createTiddlyLink(listItem, tiddler.title, true);
	}
};

abego.parseNamedParameter = function(name, parameter, i) {
	var beginExpression = null;
	if ((i < parameter.length) && parameter[i] == name) {
		i++;
		if (i >= parameter.length) {
			throw "Missing text behind '%0'".format([name]);
		}
		
		return config.macros.forEachTiddler.paramEncode(parameter[i]);
	}
	return null;
}

// Internal.
//
// --- The write Action ---------------------------------------------------
//
config.macros.forEachTiddler.actions.write.handler = function(place, tiddlers, parameter, context) {
	// Parse the parameter
	var p = 0;
	if (p >= parameter.length) {
		this.handleError(place, "Missing expression behind 'write'.");
		return;
	}

	var textExpression = config.macros.forEachTiddler.paramEncode(parameter[p]);
	p++;

	// Parse the "begin" option
	var beginExpression = abego.parseNamedParameter("begin", parameter, p);
	if (beginExpression !== null) 
		p += 2;
	var endExpression = abego.parseNamedParameter("end", parameter, p);
	if (endExpression !== null) 
		p += 2;
	var noneExpression = abego.parseNamedParameter("none", parameter, p);
	if (noneExpression !== null) 
		p += 2;

	// Parse the "toFile" option
	var filename = null;
	var lineSeparator = undefined;
	if ((p < parameter.length) && parameter[p] == "toFile") {
		p++;
		if (p >= parameter.length) {
			this.handleError(place, "Filename expected behind 'toFile' of 'write' action.");
			return;
		}
		
		filename = config.macros.forEachTiddler.getLocalPath(config.macros.forEachTiddler.paramEncode(parameter[p]));
		p++;
		if ((p < parameter.length) && parameter[p] == "withLineSeparator") {
			p++;
			if (p >= parameter.length) {
				this.handleError(place, "Line separator text expected behind 'withLineSeparator' of 'write' action.");
				return;
			}
			lineSeparator = config.macros.forEachTiddler.paramEncode(parameter[p]);
			p++;
		}
	}
	
	// Check for extra parameters
	if (parameter.length > p) {
		config.macros.forEachTiddler.createExtraParameterErrorElement(place, "write", parameter, p);
		return;
	}

	// Perform the action.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(textExpression, context);
	var count = tiddlers.length;
	var text = "";
	if (count > 0 && beginExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(beginExpression, context)(undefined, context, count, undefined);
	
	for (var i = 0; i < count; i++) {
		var tiddler = tiddlers[i];
		text += func(tiddler, context, count, i);
	}
	
	if (count > 0 && endExpression)
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(endExpression, context)(undefined, context, count, undefined);

	if (count == 0 && noneExpression) 
		text += config.macros.forEachTiddler.getEvalTiddlerFunction(noneExpression, context)(undefined, context, count, undefined);
		

	if (filename) {
		if (lineSeparator !== undefined) {
			lineSeparator = lineSeparator.replace(/\\n/mg, "\n").replace(/\\r/mg, "\r");
			text = text.replace(/\n/mg,lineSeparator);
		}
		saveFile(filename, convertUnicodeToUTF8(text));
	} else {
		var wrapper = createTiddlyElement(place, "span");
		wikify(text, wrapper, null/* highlightRegExp */, context.inTiddler);
	}
};


// ---------------------------------------------------------------------------
//  Helpers
// ---------------------------------------------------------------------------

// Internal.
//
config.macros.forEachTiddler.createContext = function(placeParam, whereClauseParam, sortClauseParam, sortAscendingParam, actionNameParam, actionParameterParam, scriptText, tiddlyWikiPathParam, inTiddlerParam) {
	return {
		place : placeParam, 
		whereClause : whereClauseParam, 
		sortClause : sortClauseParam, 
		sortAscending : sortAscendingParam, 
		script : scriptText,
		actionName : actionNameParam, 
		actionParameter : actionParameterParam,
		tiddlyWikiPath : tiddlyWikiPathParam,
		inTiddler : inTiddlerParam, // the tiddler containing the <<forEachTiddler ...>> macro call.
		viewerTiddler : config.macros.forEachTiddler.getContainingTiddler(placeParam) // the tiddler showing the forEachTiddler result
	};
};

// Internal.
//
// Returns a TiddlyWiki with the tiddlers loaded from the TiddlyWiki of 
// the given path.
//
config.macros.forEachTiddler.loadTiddlyWiki = function(path, idPrefix) {
	if (!idPrefix) {
		idPrefix = "store";
	}
	var lenPrefix = idPrefix.length;
	
	// Read the content of the given file
	var content = loadFile(this.getLocalPath(path));
	if(content === null) {
		throw "TiddlyWiki '"+path+"' not found.";
	}
	
	var tiddlyWiki = new TiddlyWiki();

	// Starting with TW 2.2 there is a helper function to import the tiddlers
	if (tiddlyWiki.importTiddlyWiki) {
		if (!tiddlyWiki.importTiddlyWiki(content))
			throw "File '"+path+"' is not a TiddlyWiki.";
		tiddlyWiki.dirty = false;
		return tiddlyWiki;
	}
	
	// The legacy code, for TW < 2.2
	
	// Locate the storeArea div's
	var posOpeningDiv = content.indexOf(startSaveArea);
	var posClosingDiv = content.lastIndexOf(endSaveArea);
	if((posOpeningDiv == -1) || (posClosingDiv == -1)) {
		throw "File '"+path+"' is not a TiddlyWiki.";
	}
	var storageText = content.substr(posOpeningDiv + startSaveArea.length, posClosingDiv);
	
	// Create a "div" element that contains the storage text
	var myStorageDiv = document.createElement("div");
	myStorageDiv.innerHTML = storageText;
	myStorageDiv.normalize();
	
	// Create all tiddlers in a new TiddlyWiki
	// (following code is modified copy of TiddlyWiki.prototype.loadFromDiv)
	var store = myStorageDiv.childNodes;
	for(var t = 0; t < store.length; t++) {
		var e = store[t];
		var title = null;
		if(e.getAttribute)
			title = e.getAttribute("tiddler");
		if(!title && e.id && e.id.substr(0,lenPrefix) == idPrefix)
			title = e.id.substr(lenPrefix);
		if(title && title !== "") {
			var tiddler = tiddlyWiki.createTiddler(title);
			tiddler.loadFromDiv(e,title);
		}
	}
	tiddlyWiki.dirty = false;

	return tiddlyWiki;
};


	
// Internal.
//
// Returns a function that has a function body returning the given javaScriptExpression.
// The function has the parameters:
// 
//	 (tiddler, context, count, index)
//
config.macros.forEachTiddler.getEvalTiddlerFunction = function (javaScriptExpression, context) {
	var script = context["script"];
	var functionText = "var theFunction = function(tiddler, context, count, index) { return "+javaScriptExpression+"}";
	var fullText = (script ? script+";" : "")+functionText+";theFunction;";
	return eval(fullText);
};

// Internal.
//
config.macros.forEachTiddler.findTiddlers = function(whereClause, context, tiddlyWiki) {
	var result = [];
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(whereClause, context);
	tiddlyWiki.forEachTiddler(function(title,tiddler) {
		if (func(tiddler, context, undefined, undefined)) {
			result.push(tiddler);
		}
	});
	return result;
};

// Internal.
//
config.macros.forEachTiddler.createExtraParameterErrorElement = function(place, actionName, parameter, firstUnusedIndex) {
	var message = "Extra parameter behind '"+actionName+"':";
	for (var i = firstUnusedIndex; i < parameter.length; i++) {
		message += " "+parameter[i];
	}
	this.handleError(place, message);
};

// Internal.
//
config.macros.forEachTiddler.sortAscending = function(tiddlerA, tiddlerB) {
	var result = 
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) 
			? 0
			: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
			   ? -1 
			   : +1; 
	return result;
};

// Internal.
//
config.macros.forEachTiddler.sortDescending = function(tiddlerA, tiddlerB) {
	var result = 
		(tiddlerA.forEachTiddlerSortValue == tiddlerB.forEachTiddlerSortValue) 
			? 0
			: (tiddlerA.forEachTiddlerSortValue < tiddlerB.forEachTiddlerSortValue)
			   ? +1 
			   : -1; 
	return result;
};

// Internal.
//
config.macros.forEachTiddler.sortTiddlers = function(tiddlers, sortClause, ascending, context) {
	// To avoid evaluating the sortClause whenever two items are compared 
	// we pre-calculate the sortValue for every item in the array and store it in a 
	// temporary property ("forEachTiddlerSortValue") of the tiddlers.
	var func = config.macros.forEachTiddler.getEvalTiddlerFunction(sortClause, context);
	var count = tiddlers.length;
	var i;
	for (i = 0; i < count; i++) {
		var tiddler = tiddlers[i];
		tiddler.forEachTiddlerSortValue = func(tiddler,context, undefined, undefined);
	}

	// Do the sorting
	tiddlers.sort(ascending ? this.sortAscending : this.sortDescending);

	// Delete the temporary property that holds the sortValue.	
	for (i = 0; i < tiddlers.length; i++) {
		delete tiddlers[i].forEachTiddlerSortValue;
	}
};


// Internal.
//
config.macros.forEachTiddler.trace = function(message) {
	displayMessage(message);
};

// Internal.
//
config.macros.forEachTiddler.traceMacroCall = function(place,macroName,params) {
	var message ="<<"+macroName;
	for (var i = 0; i < params.length; i++) {
		message += " "+params[i];
	}
	message += ">>";
	displayMessage(message);
};


// Internal.
//
// Creates an element that holds an error message
// 
config.macros.forEachTiddler.createErrorElement = function(place, exception) {
	var message = (exception.description) ? exception.description : exception.toString();
	return createTiddlyElement(place,"span",null,"forEachTiddlerError","<<forEachTiddler ...>>: "+message);
};

// Internal.
//
// @param place [may be null]
//
config.macros.forEachTiddler.handleError = function(place, exception) {
	if (place) {
		this.createErrorElement(place, exception);
	} else {
		throw exception;
	}
};

// Internal.
//
// Encodes the given string.
//
// Replaces 
//	 "$))" to ">>"
//	 "$)" to ">"
//
config.macros.forEachTiddler.paramEncode = function(s) {
	var reGTGT = new RegExp("\\$\\)\\)","mg");
	var reGT = new RegExp("\\$\\)","mg");
	return s.replace(reGTGT, ">>").replace(reGT, ">");
};

// Internal.
//
// Returns the given original path (that is a file path, starting with "file:")
// as a path to a local file, in the systems native file format.
//
// Location information in the originalPath (i.e. the "#" and stuff following)
// is stripped.
// 
config.macros.forEachTiddler.getLocalPath = function(originalPath) {
	// Remove any location part of the URL
	var hashPos = originalPath.indexOf("#");
	if(hashPos != -1)
		originalPath = originalPath.substr(0,hashPos);
	// Convert to a native file format assuming
	// "file:///x:/path/path/path..." - pc local file --> "x:\path\path\path..."
	// "file://///server/share/path/path/path..." - FireFox pc network file --> "\\server\share\path\path\path..."
	// "file:///path/path/path..." - mac/unix local file --> "/path/path/path..."
	// "file://server/share/path/path/path..." - pc network file --> "\\server\share\path\path\path..."
	var localPath;
	if(originalPath.charAt(9) == ":") // pc local file
		localPath = unescape(originalPath.substr(8)).replace(new RegExp("/","g"),"\\");
	else if(originalPath.indexOf("file://///") === 0) // FireFox pc network file
		localPath = "\\\\" + unescape(originalPath.substr(10)).replace(new RegExp("/","g"),"\\");
	else if(originalPath.indexOf("file:///") === 0) // mac/unix local file
		localPath = unescape(originalPath.substr(7));
	else if(originalPath.indexOf("file:/") === 0) // mac/unix local file
		localPath = unescape(originalPath.substr(5));
	else // pc network file
		localPath = "\\\\" + unescape(originalPath.substr(7)).replace(new RegExp("/","g"),"\\");	
	return localPath;
};

// ---------------------------------------------------------------------------
// Stylesheet Extensions (may be overridden by local StyleSheet)
// ---------------------------------------------------------------------------
//
setStylesheet(
	".forEachTiddlerError{color: #ffffff;background-color: #880000;}",
	"forEachTiddler");

//============================================================================
// End of forEachTiddler Macro
//============================================================================


//============================================================================
// String.startsWith Function
//============================================================================
//
// Returns true if the string starts with the given prefix, false otherwise.
//
version.extensions["String.startsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.startsWith = function(prefix) {
	var n =  prefix.length;
	return (this.length >= n) && (this.slice(0, n) == prefix);
};



//============================================================================
// String.endsWith Function
//============================================================================
//
// Returns true if the string ends with the given suffix, false otherwise.
//
version.extensions["String.endsWith"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.endsWith = function(suffix) {
	var n = suffix.length;
	return (this.length >= n) && (this.right(n) == suffix);
};


//============================================================================
// String.contains Function
//============================================================================
//
// Returns true when the string contains the given substring, false otherwise.
//
version.extensions["String.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
String.prototype.contains = function(substring) {
	return this.indexOf(substring) >= 0;
};

//============================================================================
// Array.indexOf Function
//============================================================================
//
// Returns the index of the first occurance of the given item in the array or 
// -1 when no such item exists.
//
// @param item [may be null]
//
version.extensions["Array.indexOf"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.indexOf = function(item) {
	for (var i = 0; i < this.length; i++) {
		if (this[i] == item) {
			return i;
		}
	}
	return -1;
};

//============================================================================
// Array.contains Function
//============================================================================
//
// Returns true when the array contains the given item, otherwise false. 
//
// @param item [may be null]
//
version.extensions["Array.contains"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.contains = function(item) {
	return (this.indexOf(item) >= 0);
};

//============================================================================
// Array.containsAny Function
//============================================================================
//
// Returns true when the array contains at least one of the elements 
// of the item. Otherwise (or when items contains no elements) false is returned.
//
version.extensions["Array.containsAny"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAny = function(items) {
	for(var i = 0; i < items.length; i++) {
		if (this.contains(items[i])) {
			return true;
		}
	}
	return false;
};


//============================================================================
// Array.containsAll Function
//============================================================================
//
// Returns true when the array contains all the items, otherwise false.
// 
// When items is null false is returned (even if the array contains a null).
//
// @param items [may be null] 
//
version.extensions["Array.containsAll"] = {major: 1, minor: 0, revision: 0, date: new Date(2005,11,20), provider: "http://tiddlywiki.abego-software.de"};
//
Array.prototype.containsAll = function(items) {
	for(var i = 0; i < items.length; i++) {
		if (!this.contains(items[i])) {
			return false;
		}
	}
	return true;
};


} // of "install only once"

// Used Globals (for JSLint) ==============
// ... DOM
/*global 	document */
// ... TiddlyWiki Core
/*global 	convertUnicodeToUTF8, createTiddlyElement, createTiddlyLink, 
			displayMessage, endSaveArea, hasClass, loadFile, saveFile, 
			startSaveArea, store, wikify */
//}}}


/***
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005 ([[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.
***/

/***
|Name:|HideWhenPlugin|
|Description:|Allows conditional inclusion/exclusion in templates|
|Version:|3.1 ($Rev: 3919 $)|
|Date:|$Date: 2008-03-13 02:03:12 +1000 (Thu, 13 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}
***/
//{{{

window.hideWhenLastTest = false;

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


merge(config.macros,{

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

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

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

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

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

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

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

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

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

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

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

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

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

});

//}}}

!!!General stuff
This is a [[TiddlyWiki|http://www.tiddlywiki.com/]].  It's not just a web page.

The good news is that you can search the content here.
You can also right-click on this link and [[download|index.html]] the entire thing, and play.

The bad news is, if you hit the ''back button'' on your browser, you will probably lose your place when you come back.  So don't do that, ok?  There is also no ''undo'' feature.  But you can't break anything so it shouldn't be that bad, really...
!!!Browsing movies
Use the ''tag cloud'' at the top of the page to view by type of movie.
Use the ''links at the left'' to view by my recommendations, should you care.
Be ''patient'' -- you might have to wait a few seconds if you're opening up all the movies!
You can close each entry by clicking ''close on the toolbar'' at the top of the entry, or you can close everything with the ''button on the left''.

I've linked ''~IMDb entries'' and ''trailers'' for movies that have them.  And, of course, I link to the ''SIFF page'' for each movie, since I stole most of the content from there.
!!!Calendar
I haven't done one this year.  I may not have time to.  Oh well.
[img[http://www.siff.net/_uploaded/image/film/idiotsandangelsl_802132.jpg][Idiots and Angels]] @@bgcolor:green;color:#fff;Recommended@@
[[TRAILER|http://www.idiotsandangels.com/videos]]
    * Country: USA
    * Year: 2008
    * Running time: 78 Minutes
    * Genres: Animation , Black Comedy , Cult
    * Program: Contemporary World Cinema
    * Language: English (no dialogue)

In Bill Plympton's newest animated feature film, a morally ambiguous man spends his days at a dead-end job and his nights in an unfriendly dive bar. And then, one morning, a pair of wings begins to sprout from his shoulders. Filled with Plympton's trademark weirdness and visual fluidity, Idiots and Angels is a surreal masterpiece. Director Bill Plympton scheduled to attend both screenings

__Harvard Exit__
    Friday May 30, 2008 @ 9:30 PM
    Saturday May 31, 2008 @ 4:00 PM

__Frosty Mike sez:__
Plympton makes some freaky animation.  I heard from friends that it was nothing earth-shattering, but it was entertaining like all his past stuff has been.  Maybe one day I'll get a chance to see it, but it didn't sound like I missed much.

Source: [[Idiots and Angels : 2008 Seattle International Film Festival : Bill Plympton : USA < Films|http://www.siff.net/festival/film/detail.aspx?id=27467&FID=64]]
~IMDb: http://www.imdb.com/title/tt1013607/
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.2|
|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.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2008.03.03 [1.9.2] corrected declaration of wikifyPlainText() for 'TW 2.1.x compatibility fallback' (fixes Safari "parse error")
2008.02.23 [1.9.1] in onclick function, use string instead of array for 'bufferedHTML' attribute on link element (fixes IE errors)
2008.02.21 [1.9.0] 'onclick' scripts now allow returned text (or document.write() calls) to be wikified into a span that immediately follows the onclick link.  Also, added default 'return false' handling if no return value provided (prevents HREF from being triggered -- return TRUE to allow HREF to be processed).  Thanks to Xavier Verges for suggestion and preliminary code.
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.inlineJavascript= {major: 1, minor: 9, revision: 2, date: new Date(2008,3,3)};

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

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

// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
	if(limit > 0) text = text.substr(0,limit);
	var wikifier = new Wikifier(text,formatter,null,tiddler);
	return wikifier.wikifyPlain();
}
//}}}
// //''Description:'' Inserts a small star graphic at the location of the macro and does not require any external graphics.  The method used should work on most current browser platforms.

// //Examples: <<star>>

// //''Code section:''
version.extensions.star = {major: 0, minor: 1, revision: 1, date: new Date("Mar 13, 2008")};
config.macros.star = {}
config.macros.star.handler = function(place,macroName,params)
{
	var palette = ["transparent","#cbb339","#e0bf39","#dec344","#edca3f","#e7d24a","#f3d645","#dfca5d","#f7d854","#fbe262","#d6c677","#e4d27f","#e0d494","#f9e78e","#d2cead","#e7d6a5","#e9dbb2","#ded6ce","#e7e1d3","#efe7c6","#efe7ce","#efe7d6","#f1efde","#f7efe7","#f7f7e7","#fffff7"];
	var data = params;
	var imageMap = null;
	if(!data[0])
		imageMap = "aaaaaaaraaaaaaaaaaaaaaqxaaaaaaaaaaaaxltaaaaaaaaaaaamilaaaaaaaaaaaahihaaaaaarttstpiieptsttrxkfnnjjigjnnfkxaxmdfiiiiifdmxaaaapddefecdpaaaaaaamecbfemaaaaaaaalebbcelaaaaaaavfcbkbcfvaaaaaaqcbtathcqaaaaaakksaaaxkkaaaaaaoaaaaaaaoaaa";
	else
		createTiddlyElement(place,"span",null,"errorNoSuchMacro","unknown star");
	if(imageMap)
	{
		var box = createTiddlyElement(place,"span",null,"star",String.fromCharCode(160));
		box.style.position = "relative";
		box.style.width = "15px";
		box.style.height = "15px";
		box.style.marginLeft = "1px";
		box.style.marginRight = "1px";
		box.style.paddingRight = "12px";
		box.style.verticalAlign = "top";

		//now divide into 15x15 grid and create each pixel
		// rows
		for(r=0; r<15; r++)
		{
			// columns
			for(c=0; c<15; c++)
			{
				var pixelcolor = palette[imageMap.charCodeAt((r*15)+c)-97];
				if (pixelcolor != "transparent")
				{
					//create each pixel with the correct background
					var pix = document.createElement("img");
					pix.className = "starPixel";
					pix.style.position = "absolute";
					pix.border = 0;
					pix.style.top = r + "px";
					pix.style.left = c + "px";
					pix.style.width = "1px";
					pix.style.height = "1px";
					pix.style.backgroundColor = pixelcolor;
					pix.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
					box.appendChild(pix);
				}
			}
		}
	}
}
/***
|''Name:''|IntelliTaggerPlugin|
|''Version:''|1.0.2 (2007-07-25)|
|''Type:''|plugin|
|''Source:''|http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin|
|''Author:''|Udo Borkowski (ub [at] abego-software [dot] de)|
|''Documentation:''|[[IntelliTaggerPlugin Documentation]]|
|''~SourceCode:''|[[IntelliTaggerPlugin SourceCode]]|
|''Licence:''|[[BSD open source license (abego Software)]]|
|''~CoreVersion:''|2.0.8|
|''Browser:''|Firefox 1.5.0.2 or better|
***/
/***
!Version History
* 1.0.2 (2007-07-25): 
** Feature: "Return" key may be used to accept first tag suggestion (beside "Alt-1")
** Bugfix: Keyboard shortcuts (Alt+3 etc.) shifted
* 1.0.1 (2007-05-18): Improvement: Speedup when using TiddlyWikis with many tags
* 1.0.0 (2006-04-26): Initial release

***/
// /%
if(!version.extensions.IntelliTaggerPlugin){if(!window.abego){window.abego={};}if(!abego.internal){abego.internal={};}abego.alertAndThrow=function(s){alert(s);throw s;};if(version.major<2){abego.alertAndThrow("Use TiddlyWiki 2.0.8 or better to run the IntelliTagger Plugin.");}version.extensions.IntelliTaggerPlugin={major:1,minor:0,revision:2,date:new Date(2007,6,25),type:"plugin",source:"http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin",documentation:"[[IntelliTaggerPlugin Documentation]]",sourcecode:"[[IntelliTaggerPlugin SourceCode]]",author:"Udo Borkowski (ub [at] abego-software [dot] de)",licence:"[[BSD open source license (abego Software)]]",tiddlywiki:"Version 2.0.8 or better",browser:"Firefox 1.5.0.2 or better"};abego.createEllipsis=function(_2){var e=createTiddlyElement(_2,"span");e.innerHTML="&hellip;";};abego.isPopupOpen=function(_4){return _4&&_4.parentNode==document.body;};abego.openAsPopup=function(_5){if(_5.parentNode!=document.body){document.body.appendChild(_5);}};abego.closePopup=function(_6){if(abego.isPopupOpen(_6)){document.body.removeChild(_6);}};abego.getWindowRect=function(){return {left:findScrollX(),top:findScrollY(),height:findWindowHeight(),width:findWindowWidth()};};abego.moveElement=function(_7,_8,_9){_7.style.left=_8+"px";_7.style.top=_9+"px";};abego.centerOnWindow=function(_a){if(_a.style.position!="absolute"){throw "abego.centerOnWindow: element must have absolute position";}var _b=abego.getWindowRect();abego.moveElement(_a,_b.left+(_b.width-_a.offsetWidth)/2,_b.top+(_b.height-_a.offsetHeight)/2);};abego.isDescendantOrSelf=function(_c,e){while(e){if(_c==e){return true;}e=e.parentNode;}return false;};abego.toSet=function(_e){var _f={};for(var i=0;i<_e.length;i++){_f[_e[i]]=true;}return _f;};abego.filterStrings=function(_11,_12,_13){var _14=[];for(var i=0;i<_11.length&&(_13===undefined||_14.length<_13);i++){var s=_11[i];if(s.match(_12)){_14.push(s);}}return _14;};abego.arraysAreEqual=function(a,b){if(!a){return !b;}if(!b){return false;}var n=a.length;if(n!=b.length){return false;}for(var i=0;i<n;i++){if(a[i]!=b[i]){return false;}}return true;};abego.moveBelowAndClip=function(_1b,_1c){if(!_1c){return;}var _1d=findPosX(_1c);var _1e=findPosY(_1c);var _1f=_1c.offsetHeight;var _20=_1d;var _21=_1e+_1f;var _22=findWindowWidth();if(_22<_1b.offsetWidth){_1b.style.width=(_22-100)+"px";}var _23=_1b.offsetWidth;if(_20+_23>_22){_20=_22-_23-30;}if(_20<0){_20=0;}_1b.style.left=_20+"px";_1b.style.top=_21+"px";_1b.style.display="block";};abego.compareStrings=function(a,b){return (a==b)?0:(a<b)?-1:1;};abego.sortIgnoreCase=function(arr){var _27=[];var n=arr.length;for(var i=0;i<n;i++){var s=arr[i];_27.push([s.toString().toLowerCase(),s]);}_27.sort(function(a,b){return (a[0]==b[0])?0:(a[0]<b[0])?-1:1;});for(i=0;i<n;i++){arr[i]=_27[i][1];}};abego.getTiddlerField=function(_2d,_2e,_2f){var _30=document.getElementById(_2d.idPrefix+_2e);var e=null;if(_30!=null){var _32=_30.getElementsByTagName("*");for(var t=0;t<_32.length;t++){var c=_32[t];if(c.tagName.toLowerCase()=="input"||c.tagName.toLowerCase()=="textarea"){if(!e){e=c;}if(c.getAttribute("edit")==_2f){e=c;}}}}return e;};abego.setRange=function(_35,_36,end){if(_35.setSelectionRange){_35.setSelectionRange(_36,end);var max=0+_35.scrollHeight;var len=_35.textLength;var top=max*_36/len,bot=max*end/len;_35.scrollTop=Math.min(top,(bot+top-_35.clientHeight)/2);}else{if(_35.createTextRange!=undefined){var _3b=_35.createTextRange();_3b.collapse();_3b.moveEnd("character",end);_3b.moveStart("character",_36);_3b.select();}else{_35.select();}}};abego.internal.TagManager=function(){var _3c=null;var _3d=function(){if(_3c){return;}_3c={};store.forEachTiddler(function(_3e,_3f){for(var i=0;i<_3f.tags.length;i++){var tag=_3f.tags[i];var _42=_3c[tag];if(!_42){_42=_3c[tag]={count:0,tiddlers:{}};}_42.tiddlers[_3f.title]=true;_42.count+=1;}});};var _43=TiddlyWiki.prototype.saveTiddler;TiddlyWiki.prototype.saveTiddler=function(_44,_45,_46,_47,_48,_49){var _4a=this.fetchTiddler(_44);var _4b=_4a?_4a.tags:[];var _4c=(typeof _49=="string")?_49.readBracketedList():_49;_43.apply(this,arguments);if(!abego.arraysAreEqual(_4b,_4c)){abego.internal.getTagManager().reset();}};var _4d=TiddlyWiki.prototype.removeTiddler;TiddlyWiki.prototype.removeTiddler=function(_4e){var _4f=this.fetchTiddler(_4e);var _50=_4f&&_4f.tags.length>0;_4d.apply(this,arguments);if(_50){abego.internal.getTagManager().reset();}};this.reset=function(){_3c=null;};this.getTiddlersWithTag=function(tag){_3d();var _52=_3c[tag];return _52?_52.tiddlers:null;};this.getAllTags=function(_53){_3d();var _54=[];for(var i in _3c){_54.push(i);}for(i=0;_53&&i<_53.length;i++){_54.pushUnique(_53[i],true);}abego.sortIgnoreCase(_54);return _54;};this.getTagInfos=function(){_3d();var _56=[];for(var _57 in _3c){_56.push([_57,_3c[_57]]);}return _56;};var _58=function(a,b){var a1=a[1];var b1=b[1];var d=b[1].count-a[1].count;return d!=0?d:abego.compareStrings(a[0].toLowerCase(),b[0].toLowerCase());};this.getSortedTagInfos=function(){_3d();var _5e=this.getTagInfos();_5e.sort(_58);return _5e;};this.getPartnerRankedTags=function(_5f){var _60={};for(var i=0;i<_5f.length;i++){var _62=this.getTiddlersWithTag(_5f[i]);for(var _63 in _62){var _64=store.getTiddler(_63);if(!(_64 instanceof Tiddler)){continue;}for(var j=0;j<_64.tags.length;j++){var tag=_64.tags[j];var c=_60[tag];_60[tag]=c?c+1:1;}}}var _68=abego.toSet(_5f);var _69=[];for(var n in _60){if(!_68[n]){_69.push(n);}}_69.sort(function(a,b){var d=_60[b]-_60[a];return d!=0?d:abego.compareStrings(a.toLowerCase(),b.toLowerCase());});return _69;};};abego.internal.getTagManager=function(){if(!abego.internal.gTagManager){abego.internal.gTagManager=new abego.internal.TagManager();}return abego.internal.gTagManager;};(function(){var _6e=2;var _6f=1;var _70=30;var _71;var _72;var _73;var _74;var _75;var _76;if(!abego.IntelliTagger){abego.IntelliTagger={};}var _77=function(){return _72;};var _78=function(tag){return _75[tag];};var _7a=function(s){var i=s.lastIndexOf(" ");return (i>=0)?s.substr(0,i):"";};var _7d=function(_7e){var s=_7e.value;var len=s.length;return (len>0&&s[len-1]!=" ");};var _81=function(_82){var s=_82.value;var len=s.length;if(len>0&&s[len-1]!=" "){_82.value+=" ";}};var _85=function(tag,_87,_88){if(_7d(_87)){_87.value=_7a(_87.value);}story.setTiddlerTag(_88.title,tag,0);_81(_87);abego.IntelliTagger.assistTagging(_87,_88);};var _89=function(n){if(_76&&_76.length>n){return _76[n];}return (_74&&_74.length>n)?_74[n]:null;};var _8b=function(n,_8d,_8e){var _8f=_89(n);if(_8f){_85(_8f,_8d,_8e);}};var _90=function(_91){var pos=_91.value.lastIndexOf(" ");var _93=(pos>=0)?_91.value.substr(++pos,_91.value.length):_91.value;return new RegExp(_93.escapeRegExp(),"i");};var _94=function(_95,_96){var _97=0;for(var i=0;i<_95.length;i++){if(_96[_95[i]]){_97++;}}return _97;};var _99=function(_9a,_9b,_9c){var _9d=1;var c=_9a[_9b];for(var i=_9b+1;i<_9a.length;i++){if(_9a[i][1].count==c){if(_9a[i][0].match(_9c)){_9d++;}}else{break;}}return _9d;};var _a0=function(_a1,_a2){var _a3=abego.internal.getTagManager().getSortedTagInfos();var _a4=[];var _a5=0;for(var i=0;i<_a3.length;i++){var c=_a3[i][1].count;if(c!=_a5){if(_a2&&(_a4.length+_99(_a3,i,_a1)>_a2)){break;}_a5=c;}if(c==1){break;}var s=_a3[i][0];if(s.match(_a1)){_a4.push(s);}}return _a4;};var _a9=function(_aa,_ab){return abego.filterStrings(abego.internal.getTagManager().getAllTags(_ab),_aa);};var _ac=function(){if(!_71){return;}var _ad=store.getTiddlerText("IntelliTaggerMainTemplate");if(!_ad){_ad="<b>Tiddler IntelliTaggerMainTemplate not found</b>";}_71.innerHTML=_ad;applyHtmlMacros(_71,null);refreshElements(_71,null);};var _ae=function(e){if(!e){var e=window.event;}var tag=this.getAttribute("tag");if(_73){_73.call(this,tag,e);}return false;};var _b2=function(_b3){createTiddlyElement(_b3,"span",null,"tagSeparator"," | ");};var _b4=function(_b5,_b6,_b7,_b8,_b9){if(!_b6){return;}var _ba=_b8?abego.toSet(_b8):{};var n=_b6.length;var c=0;for(var i=0;i<n;i++){var tag=_b6[i];if(_ba[tag]){continue;}if(c>0){_b2(_b5);}if(_b9&&c>=_b9){abego.createEllipsis(_b5);break;}c++;var _bf="";var _c0=_b5;if(_b7<10){_c0=createTiddlyElement(_b5,"span",null,"numberedSuggestion");_b7++;var key=_b7<10?""+(_b7):"0";createTiddlyElement(_c0,"span",null,"suggestionNumber",key+") ");var _c2=_b7==1?"Return or ":"";_bf=" (Shortcut: %1Alt-%0)".format([key,_c2]);}var _c3=config.views.wikified.tag.tooltip.format([tag]);var _c4=(_78(tag)?"Remove tag '%0'%1":"Add tag '%0'%1").format([tag,_bf]);var _c5="%0; Shift-Click: %1".format([_c4,_c3]);var btn=createTiddlyButton(_c0,tag,_c5,_ae,_78(tag)?"currentTag":null);btn.setAttribute("tag",tag);}};var _c7=function(){if(_71){window.scrollTo(0,ensureVisible(_71));}if(_77()){window.scrollTo(0,ensureVisible(_77()));}};var _c8=function(e){if(!e){var e=window.event;}if(!_71){return;}var _cb=resolveTarget(e);if(_cb==_77()){return;}if(abego.isDescendantOrSelf(_71,_cb)){return;}abego.IntelliTagger.close();};addEvent(document,"click",_c8);var _cc=Story.prototype.gatherSaveFields;Story.prototype.gatherSaveFields=function(e,_ce){_cc.apply(this,arguments);var _cf=_ce.tags;if(_cf){_ce.tags=_cf.trim();}};var _d0=function(_d1){story.focusTiddler(_d1,"tags");var _d2=abego.getTiddlerField(story,_d1,"tags");if(_d2){var len=_d2.value.length;abego.setRange(_d2,len,len);window.scrollTo(0,ensureVisible(_d2));}};var _d4=config.macros.edit.handler;config.macros.edit.handler=function(_d5,_d6,_d7,_d8,_d9,_da){_d4.apply(this,arguments);var _db=_d7[0];if((_da instanceof Tiddler)&&_db=="tags"){var _dc=_d5.lastChild;_dc.onfocus=function(e){abego.IntelliTagger.assistTagging(_dc,_da);setTimeout(function(){_d0(_da.title);},100);};_dc.onkeyup=function(e){if(!e){var e=window.event;}if(e.altKey&&!e.ctrlKey&&!e.metaKey&&(e.keyCode>=48&&e.keyCode<=57)){_8b(e.keyCode==48?9:e.keyCode-49,_dc,_da);}else{if(e.ctrlKey&&e.keyCode==32){_8b(0,_dc,_da);}}if(!e.ctrlKey&&(e.keyCode==13||e.keyCode==10)){_8b(0,_dc,_da);}setTimeout(function(){abego.IntelliTagger.assistTagging(_dc,_da);},100);return false;};_81(_dc);}};var _e0=function(e){if(!e){var e=window.event;}var _e3=resolveTarget(e);var _e4=_e3.getAttribute("tiddler");if(_e4){story.displayTiddler(_e3,_e4,"IntelliTaggerEditTagsTemplate",false);_d0(_e4);}return false;};var _e5=config.macros.tags.handler;config.macros.tags.handler=function(_e6,_e7,_e8,_e9,_ea,_eb){_e5.apply(this,arguments);abego.IntelliTagger.createEditTagsButton(_eb,createTiddlyElement(_e6.lastChild,"li"));};var _ec=function(){if(_71&&_72&&!abego.isDescendantOrSelf(document,_72)){abego.IntelliTagger.close();}};setInterval(_ec,100);abego.IntelliTagger.displayTagSuggestions=function(_ed,_ee,_ef,_f0,_f1){_74=_ed;_75=abego.toSet(_ee);_76=_ef;_72=_f0;_73=_f1;if(!_71){_71=createTiddlyElement(document.body,"div",null,"intelliTaggerSuggestions");_71.style.position="absolute";}_ac();abego.openAsPopup(_71);if(_77()){var w=_77().offsetWidth;if(_71.offsetWidth<w){_71.style.width=(w-2*(_6e+_6f))+"px";}abego.moveBelowAndClip(_71,_77());}else{abego.centerOnWindow(_71);}_c7();};abego.IntelliTagger.assistTagging=function(_f3,_f4){var _f5=_90(_f3);var s=_f3.value;if(_7d(_f3)){s=_7a(s);}var _f7=s.readBracketedList();var _f8=_f7.length>0?abego.filterStrings(abego.internal.getTagManager().getPartnerRankedTags(_f7),_f5,_70):_a0(_f5,_70);abego.IntelliTagger.displayTagSuggestions(_a9(_f5,_f7),_f7,_f8,_f3,function(tag,e){if(e.shiftKey){onClickTag.call(this,e);}else{_85(tag,_f3,_f4);}});};abego.IntelliTagger.close=function(){abego.closePopup(_71);_71=null;return false;};abego.IntelliTagger.createEditTagsButton=function(_fb,_fc,_fd,_fe,_ff,id,_101){if(!_fd){_fd="[edit]";}if(!_fe){_fe="Edit the tags";}if(!_ff){_ff="editTags";}var _102=createTiddlyButton(_fc,_fd,_fe,_e0,_ff,id,_101);_102.setAttribute("tiddler",(_fb instanceof Tiddler)?_fb.title:String(_fb));return _102;};abego.IntelliTagger.getSuggestionTagsMaxCount=function(){return 100;};config.macros.intelliTagger={label:"intelliTagger",handler:function(_103,_104,_105,_106,_107,_108){var _109=_107.parseParams("list",null,true);var _10a=_109[0]["action"];for(var i=0;_10a&&i<_10a.length;i++){var _10c=_10a[i];var _10d=config.macros.intelliTagger.subhandlers[_10c];if(!_10d){abego.alertAndThrow("Unsupported action '%0'".format([_10c]));}_10d(_103,_104,_105,_106,_107,_108);}},subhandlers:{showTags:function(_10e,_10f,_110,_111,_112,_113){_b4(_10e,_74,_76?_76.length:0,_76,abego.IntelliTagger.getSuggestionTagsMaxCount());},showFavorites:function(_114,_115,_116,_117,_118,_119){_b4(_114,_76,0);},closeButton:function(_11a,_11b,_11c,_11d,_11e,_11f){var _120=createTiddlyButton(_11a,"close","Close the suggestions",abego.IntelliTagger.close);},version:function(_121){var t="IntelliTagger %0.%1.%2".format([version.extensions.IntelliTaggerPlugin.major,version.extensions.IntelliTaggerPlugin.minor,version.extensions.IntelliTaggerPlugin.revision]);var e=createTiddlyElement(_121,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">"+t+"<font>";},copyright:function(_124){var e=createTiddlyElement(_124,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">&copy; 2006-2007 <b><font color=\"red\">abego</font></b> Software<font>";}}};})();config.shadowTiddlers["IntelliTaggerStyleSheet"]="/***\n"+"!~IntelliTagger Stylesheet\n"+"***/\n"+"/*{{{*/\n"+".intelliTaggerSuggestions {\n"+"\tposition: absolute;\n"+"\twidth: 600px;\n"+"\n"+"\tpadding: 2px;\n"+"\tlist-style: none;\n"+"\tmargin: 0;\n"+"\n"+"\tbackground: #eeeeee;\n"+"\tborder: 1px solid DarkGray;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .currentTag   {\n"+"\tfont-weight: bold;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .suggestionNumber {\n"+"\tcolor: #808080;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .numberedSuggestion{\n"+"\twhite-space: nowrap;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .intelliTaggerFooter {\n"+"\tmargin-top: 4px;\n"+"\tborder-top-width: thin;\n"+"\tborder-top-style: solid;\n"+"\tborder-top-color: #999999;\n"+"}\n"+".intelliTaggerSuggestions .favorites {\n"+"\tborder-bottom-width: thin;\n"+"\tborder-bottom-style: solid;\n"+"\tborder-bottom-color: #999999;\n"+"\tpadding-bottom: 2px;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .normalTags {\n"+"\tpadding-top: 2px;\n"+"}\n"+"\n"+".intelliTaggerSuggestions .intelliTaggerFooter .button {\n"+"\tfont-size: 10px;\n"+"\n"+"\tpadding-left: 0.3em;\n"+"\tpadding-right: 0.3em;\n"+"}\n"+"\n"+"/*}}}*/\n";config.shadowTiddlers["IntelliTaggerMainTemplate"]="<!--\n"+"{{{\n"+"-->\n"+"<div class=\"favorites\" macro=\"intelliTagger action: showFavorites\"></div>\n"+"<div class=\"normalTags\" macro=\"intelliTagger action: showTags\"></div>\n"+"<!-- The Footer (with the Navigation) ============================================ -->\n"+"<table class=\"intelliTaggerFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n"+"  <tr>\n"+"\t<td align=\"left\">\n"+"\t\t<span macro=\"intelliTagger action: closeButton\"></span>\n"+"\t</td>\n"+"\t<td align=\"right\">\n"+"\t\t<span macro=\"intelliTagger action: version\"></span>, <span macro=\"intelliTagger action: copyright \"></span>\n"+"\t</td>\n"+"  </tr>\n"+"</tbody></table>\n"+"<!--\n"+"}}}\n"+"-->\n";config.shadowTiddlers["IntelliTaggerEditTagsTemplate"]="<!--\n"+"{{{\n"+"-->\n"+"<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\n"+"<div class='title' macro='view title'></div>\n"+"<div class='tagged' macro='tags'></div>\n"+"<div class='viewer' macro='view text wikified'></div>\n"+"<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\n"+"<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>\n"+"<!--\n"+"}}}\n"+"-->\n";config.shadowTiddlers["BSD open source license (abego Software)"]="See [[Licence|http://tiddlywiki.abego-software.de/#%5B%5BBSD%20open%20source%20license%5D%5D]].";config.shadowTiddlers["IntelliTaggerPlugin Documentation"]="[[Documentation on abego Software website|http://tiddlywiki.abego-software.de/doc/IntelliTagger.pdf]].";config.shadowTiddlers["IntelliTaggerPlugin SourceCode"]="[[Plugin source code on abego Software website|http://tiddlywiki.abego-software.de/archive/IntelliTaggerPlugin/Plugin-IntelliTagger-src.1.0.2.js]]\n";(function(){var _126=restart;restart=function(){setStylesheet(store.getTiddlerText("IntelliTaggerStyleSheet"),"IntelliTaggerStyleSheet");_126.apply(this,arguments);};})();}
// %/
/***
|''Name:''|LegacyStrikeThroughPlugin|
|''Description:''|Support for legacy (pre 2.1) strike through formatting|
|''Version:''|1.0.2|
|''Date:''|Jul 21, 2006|
|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|
|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.0|
***/

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

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

} //# end of "install only once"
//}}}
[img[http://www.siff.net/_uploaded/image/film/27428l.jpg][Mad Detective (Shentan)]]
[[TRAILER|http://www.ctvint.fr/pages/fiche.asp?id=3546]]&nbsp;&nbsp;[[Rent it!|http://www.scarecrow.com/rental/item_rental.asp?Number=76711]]
    * Country: Hong Kong
    * Year: 2007
    * Running time: 89 Minutes
    * Genres: Black Comedy , Buddy Picture , Detective/Mystery , Film Noir
    * Program: Contemporary World Cinema
    * Language: Cantonese, English
    * ~Sub-Titles:English ~Sub-Titles
    * Other Countries: China

Forced into early retirement for his psychic (or are they psychotic) methods, Inspector Bun lives in seclusion with his wife. When a missing police officer's gun is used in a number of recent robberies and murders, Inspector Ho seeks Bun's guidance in Johnnie To's blackly comedic neo-noir.

__Egyptian Theatre__
    Monday June 2, 2008 @ 4:00 PM
    Tuesday June 3, 2008 @ 7:00 PM

__Frosty Mike sez:__
Looks like an interesting detective mystery with a crazy detective.

Source: [[Mad Detective (Shentan) : 2008 Seattle International Film Festival : Wai Ka-fai : Johnny To : Hong Kong < Films|http://www.siff.net/festival/film/detail.aspx?id=27186&FID=64]]
~IMDb: http://www.imdb.com/title/tt0969269/
[[Welcome]]
*[[How To Use]]
*[[Disclaimer]]
<<tiddler OpenTaggedTiddlers with: "All Movies" "movie" "title">>
*<<tiddler OpenTaggedTiddlers with: "Recommended" "Recommended" "title">>
*<<tiddler OpenTaggedTiddlers with: "Maybe" "Maybe?" "title">>
*<<tiddler OpenTaggedTiddlers with: "Blah" "Blah!" "title">>
*<<tiddler OpenTaggedTiddlers with: "Crappy" "Crap?" "title">>
*<<tiddler OpenTaggedTiddlers with: "Reviewed" "Reviewed" "title">>
*<<tiddler OpenTaggedTiddlers with: "Missed" "Missed" "title">>
[[Selected Screenings]]
<<tiddler OpenTaggedTiddlers with: "Rent from Scarecrow" "ScarecrowVideo" "title">>
<!--{{{-->
<script> // See StorySaverPlugin for more info
if (window.coreTweaks_getParameters==undefined) {
	window.coreTweaks_getParameters=window.getParameters;
	window.getParameters=function() {
		var p=window.coreTweaks_getParameters.apply(this,arguments);
		if (!p) {
			var cookies = document.cookie.split("; ");
			for (var c=0; c<cookies.length; c++) {
				var name=cookies[c].split("=")[0]; var value=cookies[c].split("=")[1];
				if (name=="txtSavedStory" && value.length) p=unescape(value);
			}
		}
		return p;
	}
}
</script>
<!--}}}-->
[img[http://www.siff.net/_uploaded/image/film/31774l.jpg][Mirageman]] @@bgcolor:green;color:#fff;Recommended@@
[[TRAILER|http://www.youtube.com/watch?v=xj7MQb6QseE]]
    * Country: Chile
    * Year: 2007
    * Running time: 80 Minutes
    * Genres: Action/Adventure , Martial Arts
    * Program: Midnight Adrenaline
    * Language: Spanish
    * ~Sub-Titles:English ~Sub-Titles
    * Other Countries: USA

Orphaned as a young man when his parents were killed in a violent attack that also left his brother institutionalized, Maco spends nearly every free moment mastering the martial arts. After foiling a home invasion, Maco goes on to inspire and kick criminal ass as the masked Chilean, Mirageman.

__Egyptian Theatre__
    Friday May 30, 2008 @ 11:55 PM
    Tuesday June 3, 2008 @ 9:15 PM

__Frosty Mike sez:__
I heard great things about this movie, but sadly I missed it due to homework obligations.  Justice will prevail, and I am determined to see it one day!

Source: [[Mirageman : 2008 Seattle International Film Festival : Ernesto Diaz Espinoza : Chile < Films|http://www.siff.net/festival/film/detail.aspx?id=27502&FID=64]]
~IMDb: http://www.imdb.com/title/tt1046183/
<<closeAll>><<permaview>><<newTiddler>><<newJournal 'DD MMM YYYY'>><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>
Friends of mine want to see these movies:

__iSchool peeps (and more!)__
* [[Check the spreadsheet!|http://spreadsheets.google.com/ccc?key=p-uM6SgVpocEaGpsBQ37fAA&hl=en]]

__Chris Jones__
*[[Choke]]
*[[The Art of Negative Thinking (Kunsten å Tenke Negativt)]]
*[[Young People Fucking]]
[img[http://www.siff.net/_uploaded/image/film/27449l.jpg][Nocturna]] @@bgcolor:#CC6714;color:#fff;Maybe?@@
[[TRAILER|http://www.youtube.com/watch?v=fafSU5bbRg0]]
    * Country: Spain
    * Year: 2007
    * Running time: 83 Minutes
    * Genres: Animation , Family Friendly , Fantasy , Teen Flick
    * Program: ~Films4Families
    * Language: English
    * Other Countries: France

A magical blend of Monsters Inc. and Hayao Miyazaki, Nocturna follows Tim who is afraid of the dark and finds comfort in a star he names Adhara. When his star disappears, Tim ventures into the darkness to do battle with the star thief in a world of mischievous do-gooders and scary monsters.

__SIFF Cinema__
    Saturday May 24, 2008 @ 11:00 AM

__Pacific Place Cinema__
    Monday May 26, 2008 @ 11:00 AM

__Frosty Mike sez:__
The animation looks really cool.  Who cares if it's for kids?

Source: [[Nocturna : 2008 Seattle International Film Festival : Adria Garcia : Victor Maldonado : Spain < Films|http://www.siff.net/festival/film/detail.aspx?id=27190&FID=64]]
~IMDb: http://www.imdb.com/title/tt0836682/
<<closeAll>>
/%
|Name|OpenTaggedTiddlers|
|Source|http://www.TiddlyTools.com/#OpenTaggedTiddlers|
|Version|1.1.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|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|open multiple tagged tiddlers with a single click|

Usage: <<tiddler OpenTaggedTiddlers with: "label" "tagToMatch" "sortBy" "reverse" "close">>

"sortBy" is an optional tiddler fieldname, and defaults to "title" (use "modified" or "created" for dates)
"reverse" is an optional KEYWORD, and reverses the order of display of the matched tiddler (i.e., descending vs. ascending)
"close" is an optional KEYWORD, that closes all open tiddlers before opening the tagged tiddlers

%/<script label="$1">
	var list=[];
	var sortBy="$3"; if ((sortBy=="$"+"3")||(sortBy=="")) sortBy="title";
	var tids=store.getTaggedTiddlers("$2",sortBy);
	if ("$4"=="reverse") tids=tids.reverse();
	for (var t=0;t<tids.length;t++) list.push(tids[t].title);
	if ("$5"=="close") story.closeAllTiddlers();
	story.displayTiddlers(story.findContainingTiddler(place),list);
	return false;
</script>
/***
|Name|OpenTiddlersMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#OpenTiddlersMacro|
|Version|0.2 |
|Requires|~TW2.08+|
!Description:
*Allows creation of tiddlyLinks that open multiple tiddlers.
*Also useful for creating links to shadowTiddlers, which if normally created are not in bold.

!Usage
{{{<<openTiddlers text:"TextForLink" tiddlers:"Tiddler1 Tiddler2 [[Tiddler with spaces]] Tiddler4">>}}}

!Example:
{{{<<openTiddlers text:"This link opens multiple tiddlers" tiddlers:"Project Saq">>}}}
<<openTiddlers text:"This link opens multiple tiddlers" tiddlers:"Project Saq">>

!History
*30-04-06, version 0.2, modifed and rename following feedback from Eric.
*29-04-06, version 0.1, working.

!To Do:
*option to close other tiddlers
*option to open in edit template

!Code
***/
//{{{
window.onClickMultiLink= function(e){
                         story.displayTiddlers(this,this.getAttribute("tiddlerstring").readBracketedList());
                         return(false);
}

config.macros.openTiddlers={};
config.macros.openTiddlers.handler = function(place,macroName,params,wikifier,paramString,tiddler){
                           var nAV = paramString.parseParams('test', null, true);
                           var text = nAV[0].text[0];
                           var tiddlerstring = nAV[0].tiddlers[0];
                           var btn= createTiddlyButton(place,text,null,onClickMultiLink,"tiddlyLinkExisting");
                           btn.setAttribute("tiddlerstring",tiddlerstring);
}
//}}}
[img[http://www.siff.net/_uploaded/image/film/29911l.jpg][Otto; or, Up With Dead People]] @@bgcolor:#FF0000;color:#fff;Crap?@@
[[TRAILER|http://www.youtube.com/watch?v=CIIUIs8YmIs]]
    * Country: Germany
    * Year: 2008
    * Running time: 94 Minutes
    * Genres: Black Comedy , Cult , Erotic , Gay/Lesbian , Horror
    * Program: Midnight Adrenaline
    * Language: English, German
    * ~Sub-Titles:English ~Sub-Titles
    * Other Countries: Canada

The world's first gay zombie movie! In cinematic provocateur Bruce ~LaBruce's latest film, the eponymous zombie wanders the streets of Berlin until he falls under the tutelage of underground filmmaker Medea Yarn. He soon becomes the lead subject for her documentary film while also being cast in her "politico-porno-zombie" film, Up With Dead People. Director Bruce ~LaBruce scheduled to attend both screenings

__Egyptian Theatre__
    Friday June 6, 2008 @ 11:55 PM

__SIFF Cinema__
    Saturday June 7, 2008 @ 7:00 PM

__Frosty Mike sez:__
The trailer and reviews seem to imply more "gay porn" than "zombie".  It also seems to be more about message than about being a fun zombie movie.

Source: [[Otto; or, Up With Dead People : 2008 Seattle International Film Festival : Bruce LaBruce : Germany < Films|http://www.siff.net/festival/film/detail.aspx?id=27323&FID=64]]
~IMDb: http://www.imdb.com/title/tt1151384/
<!--{{{-->
<div id='header' class='header'>
<div class='headerShadow'>
<span class='searchBar' macro='search'></span>
<span id='noticeBoard' refresh='content' tiddler='NoticeBoard'></span>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>

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

</div>

<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<div id='contentFooter' style='text-align:center;' refresh='content' tiddler='contentFooter'></div>
<!--}}}-->
I've been doing this a while now...  Check out the links below if you what to see what you missed!

[[SIFF 2007|http://adcockm.serversidewiki.com]] 

[[SIFF 2006|http://adcockm.googlepages.com/siff2006]] (trailers are offline now)

[[SIFF 2005|http://www.ncplus.net/~adcockm/SIFF2005/passed.htm]] (trailers are offline now)

[[SIFF 2004|http://www.ncplus.net/~adcockm/SIFF2004/]]

[[SIFF 2003|http://www.ncplus.net/~adcockm/SIFF2003/]]
"You give them recommendations. You throw different angles at them where, hopefully, they can get something out of it."
-Mike Butcher

{{borderlessL{
<<forEachTiddler
 where
 'tiddler.tags.contains("Recommended")'
 sortBy
  'tiddler.title'
  ascending
 script
'
 function getFirstLine(s) {
 var m = s.match(/\s*(.*)/);
 return m != null && m.length >= 1 ? m[1] : "";
 }
 '
 write
 '"|" + getFirstLine(tiddler.text) + "|[["+tiddler.title+"]]" +"|\n"' 
>>
}}}
Last day!  

!!!Sunday June 15
4:30 PM @ Egyptian Theatre -- [[Sleep Dealer]]
@@7:00 PM @ Egyptian Theatre -- [[Timecrimes (Los Cronocrímenes)]]@@
9:00 PM @ Egyptian Theatre -- [[Donkey Punch]]
<<tagCloud excludeSearch excludeLists movie systemConfig MochaTheme lewcidExtension Recommended CoreTiddlers NavigationPackage plugininfo TidIDEPackage BackstagePackage CatalogPackage DiscoveryPackage IconPackage MediaPackage QuickEditPackage script ScrollbarPackage TaskPackage Blah! Crap? Maybe? Plugins ScarecrowVideo>>
2008 SIFF
[img[http://www.siff.net/_uploaded/image/film/26105l.jpg][Sleep Dealer]] @@bgcolor:#FF0000;color:#fff;Crap?@@
[[TRAILER|http://sleepdealer.com/]]
    * Country: USA
    * Year: 2008
    * Running time: 90 Minutes
    * Genres: Science Fiction , Thriller
    * Program: Contemporary World Cinema
    * Language: Spanish
    * ~Sub-Titles:English ~Sub-Titles
    * Other Countries: Mexico

In this ambitious and topical sci-fi film set in the near future, a youngster from a remote Mexican village relocates to Tijuana where he gets a job working "virtually" by having a set of nodes implanted in his upper body.

__Egyptian Theatre__
    Saturday June 14, 2008 @ 9:30 PM
    Sunday June 15, 2008 @ 4:30 PM

__Frosty Mike sez:__
Looks like more thoughtful sci-fi, with a message.  It could turn out to be boring.  It's hard to tell, really.  Might be worth a look.

Source: [[Sleep Dealer : 2008 Seattle International Film Festival : Alex Rivera : USA < Films|http://www.siff.net/festival/film/detail.aspx?id=27155&FID=64]]
~IMDb: http://www.imdb.com/title/tt0804529/
/***
|''Name:''|SparklinePlugin|
|''Description:''|Sparklines macro|
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};

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

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


}
//}}}
/***
|Name|StorySaverPlugin|
|Source|http://www.TiddlyTools.com/#StorySaverPlugin|
|Documentation|http://www.TiddlyTools.com/#StorySaverPluginInfo|
|Version|1.4.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|MarkupPostBody|
|Overrides|confirmExit(), getParameters()|
|Description|save/restore current tiddler view between browser sessions|
This plugin automatically saves a list of the currently viewed tiddlers (the "story") in a local cookie, {{{txtSavedStory}}} and then opens those tiddlers when the document is subsequently reloaded... the tiddlers you were viewing in the last browser session are automatically redisplayed in the next session, allowing you to quickly resume working with the document from the same place you left off!!

In addition to automatic cookie-based story tracking, the plugin also provides {{{<<saveStory>>}}} and {{{<<openStory>>}}} macros that allow you to quickly save the current story definition to a tiddler, and then re-display saved stories using simple, one-click command links or droplists.
!!!!!Documentation
>see [[StorySaverPluginInfo]]
!!!!!Revisions
<<<
2008.03.10 [*.*.*] plugin size reduction: documentation moved to [[StorySaverPluginInfo]]
|please see [[StorySaverPluginInfo]] for additional revision details|
2007.10.05 [1.0.0] initial release.   Moved [[SetDefaultTiddlers]] inline script and rewrote as a {{{<<saveStory>>}}} macro.
<<<
!!!!!Code
***/
//{{{
version.extensions.StorySaver= {major: 1, minor: 4, revision: 1, date: new Date(2008,1,1)};
//}}}
// // ''save or clear story cookie on exit:''
//{{{
if (config.options.chkSaveStory==undefined) config.options.chkSaveStory=false; 
if (window.coreTweaks_confirmExit==undefined) {
	window.coreTweaks_confirmExit=window.confirmExit;
	window.confirmExit=function() {
		if (config.options.chkSaveStory) { // save cookie
			var links=[]; story.forEachTiddler(function(title,element){links.push(String.encodeTiddlyLink(title));});
			document.cookie="txtSavedStory=[["+links.join("]] [[")+"]]; expires=Fri, 1 Jan 2038 12:00:00 UTC; path=/";
		}
		else {
			var ex=new Date(); ex.setTime(ex.getTime()-1000);
			document.cookie="txtSavedStory=; path=/; expires="+ex.toGMTString(); // remove cookie
		}
		return window.coreTweaks_confirmExit.apply(this,arguments);
	}
}
//}}}
/***
''apply saved story on startup:'' //important note: the following code is actually located in [[MarkupPostBody]].  This is because it needs to supercede the core's getParameters() function, which is called BEFORE plugins are loaded, preventing the normal plugin-based hijack method from working, while code loaded into [[MarkupPostBody]] will be processed as soon as the document is read, even before the TW main() function is invoked.//
<<tiddler MarkupPostBody>>
***/
// // MACRO definitions
//{{{
config.macros.saveStory = {
	label: "set default tiddlers",
	defaultTiddler: "DefaultTiddlers",
	prompt: "store a list of currently displayed tiddlers in another tiddler",
	askMsg: "Enter the name of a tiddler in which to save the current story:",
	tag: "story",
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var tid=params[0]?params[0]:"DefaultTiddlers";
		var label=params[1]?params[1]:this.label;
		var tip=params[2]?params[2]:this.prompt;
		var btn=createTiddlyButton(place,label,tip,this.setTiddler,"button");
		btn.setAttribute("tid",tid);
	},
	setTiddler: function() {
		// get list of current open tiddlers
		var tids=[];
		story.forEachTiddler(function(title,element){tids.push("[["+title+"]]")}); // always put titles in brackets
		// get target tiddler
		var tid=this.getAttribute("tid");
		if (!tid || tid=="ask") {
			tid=prompt(config.macros.saveStory.askMsg,config.macros.saveStory.defaultTiddler);
			if (!tid || !tid.length) return; // cancelled by user
		}
		if(store.tiddlerExists(tid) && !confirm(config.messages.overwriteWarning.format([tid]))) return;
		tids=tids.join("\n"); // separate tiddler links by newlines for easier reading
		var t=store.getTiddler(tid); var tags=t?t.tags:[]; tags.push(config.macros.saveStory.tag);
		store.saveTiddler(tid,tid,tids,config.options.txtUserName,new Date(),tags,t?t.fields:null);
		story.displayTiddler(null,tid); story.refreshTiddler(tid,null,true);
		displayMessage(tid+" has been "+(t?"updated":"created"));
	}
}
//}}}

//{{{
if (config.options.chkStoryFold==undefined) config.options.chkStoryFold=true;
if (config.options.chkStoryClose==undefined) config.options.chkStoryClose=true;
config.macros.openStory = {
	label: "open story: %0",
	prompt: "open the set of tiddlers listed in: '%0'",
	popuplabel: "stories",
	popupprompt: "view a set of tiddlers",
	tag: "story",
	selectprompt: "select a story...",
	optionsprompt: "viewing options...",
	foldcmd: "[%0] fold story",
	foldprompt: "fold story tiddlers when opening a story",
	closecmd: "[%0] close others",
	closeprompt: "close other tiddlers when opening a story",
	addcmd: "add a story...",
	addprompt: "create a new story",
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		if (params[0].toLowerCase()=="list") return this.createList(place,params);
		else if (params[0].toLowerCase()=="popup") return this.createPopup(place,params);
		else this.createButton(place,params);
	},
	showStory: function(tid) {
		var tids=[];
		var tagged=store.getTaggedTiddlers(tid,"title");
		if (tagged.length) // if tiddler IS a tag, use tagged tiddlers as story
			for (var t=0; t<tagged.length; t++) tids.push(tagged[t].title);
		else { // get tiddler list from content
			var t=store.getTiddler(tid);
			if (t) { if (!t.linksUpdated) t.changed(); tids=t.links; }
		}
		// see [[CollapseTiddlersPlugin]] for more info, re: folding tiddlers
		var template=null;
		if (config.options.chkStoryFold) template="CollapsedTemplate";
		if (!store.tiddlerExists("CollapsedTemplate")) template=null;
		if (config.options.chkStoryClose) story.closeAllTiddlers();
		story.displayTiddlers(null,tids,template);
	},
	createButton: function(place,params) {
		var tid=params[0]?params[0]:"";
		var label=params[1]?params[1]:this.label; label=label.format([tid]);
		var tip=params[2]?params[2]:this.prompt; tip=tip.format([tid]);
		var fn=function(){config.macros.openStory.showStory(this.getAttribute("tid"))};
		var btn=createTiddlyButton(place,label,tip,fn,"button");
		btn.setAttribute("tid",tid);
	},
	createPopup: function(place,params) {
		var label=params[1]?params[1]:this.popuplabel;
		var tip=params[2]?params[2]:this.popupprompt;
		var btn=createTiddlyButton(place,label,tip,this.showPopup,"button");
	},
	showPopup: function(ev) { var e=ev||window.event;
		var indent="\xa0\xa0";
		var p=Popup.create(this); if (!p) return false;
		createTiddlyText(createTiddlyElement(p,"li"),config.macros.openStory.selectprompt);
		var stories=store.getTaggedTiddlers("story","title");
		for (var s=0; s<stories.length; s++) {
			var label=indent+stories[s].title;
			var tip=config.macros.openStory.prompt.format([stories[s].title]);
			var fn=function(){config.macros.openStory.showStory(this.getAttribute("tid"))};
			var btn=createTiddlyButton(createTiddlyElement(p,"li"),label,tip,fn,"button");
			btn.setAttribute("tid",stories[s].title);
		}
		createTiddlyText(createTiddlyElement(p,"li"),config.macros.openStory.optionsprompt);
		if (store.tiddlerExists("CollapsedTemplate")) {
			var label=indent+config.macros.openStory.foldcmd.format([config.options.chkStoryFold?"x":"\xa0\xa0"]);
			var tip=config.macros.openStory.foldprompt;
			var fn=function(){config.options.chkStoryFold=!config.options.chkStoryFold;saveOptionCookie('chkStoryFold')};
			var btn=createTiddlyButton(createTiddlyElement(p,"li"),label,tip,fn,"button");
		}
		var label=indent+config.macros.openStory.closecmd.format([config.options.chkStoryClose?"x":"\xa0\xa0"]);
		var tip=indent+config.macros.openStory.closeprompt;
		var fn=function(){config.options.chkStoryClose=!config.options.chkStoryClose;saveOptionCookie('chkStoryClose')};
		var btn=createTiddlyButton(createTiddlyElement(p,"li"),label,tip,fn,"button");
		if (!readOnly) {
			var label=config.macros.openStory.addcmd;
			var tip=config.macros.openStory.addprompt;
			var fn=config.macros.saveStory.setTiddler;
			createTiddlyElement(createTiddlyElement(p,"li"),"hr");
			var btn=createTiddlyButton(createTiddlyElement(p,"li"),label,tip,fn,"button");
		}
		Popup.show(p,false);
		e.cancelBubble=true;if(e.stopPropagation)e.stopPropagation();
		return false;
	},
	createList: function(place,params) {
		var s=createTiddlyElement(place,"select",null,"storyListbox");
		s.size=1;
		s.onchange=function() {
			if (this.value=="_fold") {
				config.options.chkStoryFold=!config.options.chkStoryFold; saveOptionCookie('chkStoryFold');
				config.macros.openStory.refreshList();
			} else if (this.value=="_close") {
				config.options.chkStoryClose=!config.options.chkStoryClose; saveOptionCookie('chkStoryClose');
				config.macros.openStory.refreshList();
			} else if (this.value=="_add")
				config.macros.saveStory.setTiddler.apply(this,arguments);
			else config.macros.openStory.showStory(this.value);
		}
		setStylesheet(".storyListbox { width:100%; }", "StorySaverStyles");
		store.addNotification(null,this.refreshList); this.refreshList();
		return;
	},
	refreshList: function() {
		var indent="\xa0\xa0\xa0\xa0";
		var lists=document.getElementsByTagName("select");
		for (var i=0; i<lists.length; i++) { if (lists[i].className!="storyListbox") continue;
			var here=lists[i];
			while (here.length) here.options[0]=null; // remove current list items
			here.options[here.length]=new Option(config.macros.openStory.selectprompt,"",true,true);
			var stories=store.getTaggedTiddlers("story","title");
			for (var s=0; s<stories.length; s++)
				here.options[here.length]=new Option(indent+stories[s].title,stories[s].title,false,false);
			if (!readOnly)
				here.options[here.length]=new Option(config.macros.openStory.addcmd,"_add",false,false);
			here.options[here.length]=new Option(config.macros.openStory.optionsprompt,"",false,false);
			if (store.tiddlerExists("CollapsedTemplate")) {
				var msg=config.macros.openStory.foldcmd.format([config.options.chkStoryFold?"x":"\xa0\xa0"]);
				here.options[here.length]=new Option(indent+msg,"_fold",false,false);
			}
			var msg=config.macros.openStory.closecmd.format([config.options.chkStoryClose?"x":"\xa0\xa0"]);
			here.options[here.length]=new Option(indent+msg,"_close",false,false);
		}
	}
}
//}}}
/***
|Name|StorySaverPlugin|
|Source|http://www.TiddlyTools.com/#StorySaverPlugin|
|Documentation|http://www.TiddlyTools.com/#StorySaverPluginInfo|
|Version|1.4.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|documentation|
|Requires|MarkupPostBody|
|Overrides|confirmExit(), getParameters()|
|Description|documentation for StorySaverPlugin|
This plugin automatically saves a list of the currently viewed tiddlers (the "story") in a local cookie, {{{txtSavedStory}}} and then opens those tiddlers when the document is subsequently reloaded... the tiddlers you were viewing in the last browser session are automatically redisplayed in the next session, allowing you to quickly resume working with the document from the same place you left off!!

In addition to automatic cookie-based story tracking, the plugin also provides {{{<<saveStory>>}}} and {{{<<openStory>>}}} macros that allow you to quickly save the current story definition to a tiddler, and then re-display saved stories using simple, one-click command links or droplists.
!!!!!Usage
<<<
If a document URL does not contain a 'paramifier' (i.e., a "#..." suffix), then the saved story cookie (if any) will be used ''//as if//'' it had been entered as a 'permaview' (e.g., a "#tiddler tiddler tiddler..." suffix on the URL), bypassing the [[DefaultTiddlers]] definition.  This behavior is automatically applied whenever the plugin is installed in your document.  You can enable/disable the automatic cookie-based StorySaver feature by using the checkbox below:
>''<<option chkSaveStory>> enable StorySaverPlugin''
>//usage:// {{{<<option chkSaveStory>>}}}
You can also temporarily //bypass// the redisplay of a saved story ''without disabling the StorySaver cookie'' by including a trailing "#" at the end of the document URL.  This will cause your document to be loaded into the browser without displaying //any// initial tiddlers at all.  Alternatively, you can enter {{{#story:storyname}}} on the end of the URL (e.g., {{{#story:DefaultTiddlers}}}) to display any specific saved story, regardless of the value of the cookie-based saved story.

__''saveStory macro:''__
The {{{<<saveStory>>}}} macro lets you write the list of currently viewed tiddlers to a specified tiddler name (e.g., "DefaultTiddlers", "MyFavorites", etc.).  Tiddlers containing saved stories are automatically tagged with <<tag story>>, so that they can be recognized by the {{{<<storyViewer>>}}} macro (see [[StoryViewerPlugin]]).  The syntax for the {{{<<saveStory>>}}} macro is:
{{{
<<saveStory storyname label tooltip>>  or   <<saveStory ask label tooltip>>
}}}
where:
* ''storyname''<br>is the target tiddler in which to save the current story.  If you use the keyword, ''ask'', in place of the tiddlername, you will be prompted to enter a tiddler title when saving the story (default: DefaultTiddlers).
* ''label''<br>is the command link text (default: "set default tiddlers").
* ''tooltip''<br>is the command mouseover guide-text (default: "store a list of currently displayed tiddlers in another tiddler").

__''openStory macro:''__
To redisplay a saved story, the {{{<<openStory>>}}} macro can be used to embed either a droplist of all saved stories, or a link for a specified story.  Selecting from the droplist or clicking the link opens the corresponding set of tiddlers.  
{{{
<<openStory list>> OR <<openStory popup label tooltip>> OR <<openStory storyname label tooltip>>
}}}
where:
* ''list''<br>shows a droplist of all saved stories, plus additional commands/viewing options.  Selecting a story opens the corresponding tiddlers.
* ''popup''<br>shows a popup display containing a list of all saved stories, plus additional commands/viewing options.  Selecting a story opens the corresponding tiddlers.  ''label'' and ''tooltip'' are optional and provide alternative display text and 'mouseover' help text, respectively.
* ''storyname''<br>is a tiddler containing a saved story.  //Note: ''You can also use a tag value as a storyname.''  Instead of reading the tiddler list from the contents of the storyname tiddler, the story view will be composed of all tiddlers tagged with the specified tag value.//
* ''label''<br>is the command link text (default: "open story: %0", where %0 is replaced by the storyname).
* ''tooltip''<br>is the command mouseover guide-text (default: "open the set of tiddlers listed in: '%0'"),

__''PermaView command link enhancement:''__
In order to further aide in saving/restoring the list of tiddlers currently being viewed, the core {{{<<permaview>>}}} command has been enhanced, so its link value always includes the current story view tiddler list as a paramifier in the URL.  This let you quickly use the browser's right-click menu directly on the permalink command text to "bookmark this link...".  Depending upon your system, you may also be able to drag the 'permaview' link directly from the page and drop it onto your desktop to create an instant permaview-bearing URL shortcut icon.
<<<
!!!!!Examples
<<<
*{{{<<saveStory TestStory "save a test story">>}}}<br>{{smallform{<<saveStory TestStory "save a test story">>}}}
*{{{<<openStory TestStory>>}}}<br><<openStory TestStory>>
*{{{<<openStory list>>}}}<br>{{smallform{<<openStory list>>}}}
*{{{<<openStory popup label tooltip>>}}}<br>{{smallform{<<openStory popup>>}}}
<<<
!!!!!Revisions
<<<
2008.03.10 [*.*.*] plugin size reduction: documentation moved to [[StorySaverPluginInfo]]
2008.01.01 [1.4.1] sort list of stories alphabetically
2008.01.01 [1.4.0] added option to display a popup instead of a droplist control.  (Provides more compact presentation)
2007.12.31 [1.3.1] instead of readBracketedList(), use internal tiddler.links[] to retrieve story list from tiddler content. Allows more flexible formatting of story tiddler content: anything content that is not a tiddler link is automatically filtered out of the list.
2007.10.23 [1.3.0] split {{{<<storyViewer>>}}} macro definition into stand-alone [[StoryViewerPlugin]] to allow separate installation of story saving vs. story viewing features.
2007.10.21 [1.2.0] added {{{<<openStory>>}}} and {{{<<storyViewer>>}}} macros.
2007.10.20 [1.1.0] in setTiddler(), automatically add "story" tag to saved story tiddlers
2007.10.18 [1.0.1] added default initialization for chkSaveStory option value.  Also, in setTiddler(), call displayTiddler() after saving story to ensure that altered tiddler is shown to the user.
2007.10.05 [1.0.0] initial release.   Moved [[SetDefaultTiddlers]] inline script and rewrote as a {{{<<saveStory>>}}} macro.  Moved permaview "mouseover HREF" enhancement from [[CoreTweaks]].
<<<
[img[http://www.siff.net/_uploaded/image/film/strangedaysl_723071.jpg][Strange Days (Shorts)]]
    * Running time: 95 Minutes
    * Program: Short Film Packages

Between the bizarre and the beautiful is a world filled with dreams, desires, and delusions.

Includes:
*[[Cherries|http://www.siff.net/festival/film/detail.aspx?id=27345&FID=64]]
*[[Dog Altogether|http://www.siff.net/festival/film/detail.aspx?id=27444&FID=64]]
*[[Fawn|http://www.siff.net/festival/film/detail.aspx?id=27429&FID=64]]
*[[Hirsute|http://www.siff.net/festival/film/detail.aspx?id=27260&FID=64]]
*[[I Love Sarah Jane|http://www.siff.net/festival/film/detail.aspx?id=27359&FID=64]]
*[[Rewind|http://www.siff.net/festival/film/detail.aspx?id=27245&FID=64]]
*[[Safari|http://www.siff.net/festival/film/detail.aspx?id=27241&FID=64]]
*[[Teat Beat of Sex, episodes 1,2,3|http://www.siff.net/festival/film/detail.aspx?id=27212&FID=64]]
*[[Third Days Child|http://www.siff.net/festival/film/detail.aspx?id=27474&FID=64]]
__SIFF Cinema__
    Friday May 30, 2008 @ 9:30 PM

__Frosty Mike sez:__
Hirsute has time travel, and I Love Sarah Jane has a zombie apocalypse.  The others may be interesting too.  It's always a crapshoot with shorts.

Source: [[Strange Days : 2008 Seattle International Film Festival < Films|http://www.siff.net/festival/film/detail.aspx?id=27517&FID=64]]
/*{{{*/
/*Mocha TiddlyWiki Theme*/
/*Version 1.0*/
/*Design and CSS originally by Anthonyy, ported to TiddlyWiki by Saq Imtiaz.*/
/*}}}*/
/*{{{*/
 #contentWrapper{
margin: 0 3.4em;

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

.header {
 background: #fff; 
			padding-top: 10px;
			clear: both;

border-bottom: 4px solid #948979;
}

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

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

.siteTitle a{color:#CC6633; border-bottom:1px dotted #cc6633;}

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

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

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

.tagClear {clear:none;}

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

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

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

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

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

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

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


		#mainMenu a {
			display: block;
			padding: 5px;
			border-bottom: 1px dotted #CCC;
		}

		#mainMenu a:link, #navlist a:visited {
			color:#CC6714;
			text-decoration: none;
		}
		
		#mainMenu a:hover {
			background: #000000 url(arrow.gif) 96% 50% no-repeat;
			background-color: #F5F5F5;
			color:#CC6714;
		}
		
		#mainMenu a:hover, #mainMenu a:active, #mainMenu .highlight, #mainMenu .marked {
			background: #000000 url(arrow.gif) 96% 50% no-repeat;
			background-color: #F5F5F5;
			color:#CC6714;
		}

#mainMenu span {position:relative;}

#mainMenu br {display:none;}

.borderlessL, .borderlessL table, .borderlessL td, .borderlessL tr, .borderlessL th, .borderlessL tbody { border:0 !important; margin:0 !important; padding:2px !important; td.vertical-align:top !important;margin-left: 0 !important; margin-right: auto !important;}

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

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

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

.viewer code {
	color: #2F2A29;
}

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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


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

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

.searchBar {float:right;font-size: 1.0em;}
.searchBar .button {color:#999;display:block;}
.searchBar .button:hover {border:1px solid #fff;color:#4F4B45;}
.searchBar input {			
                        background-color: #FFF;
			color: #999999;
			border: 1px solid #CCC;		margin-right:3px;
}

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

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

#noticeBoard { clear: both;float:right;position:relative;background:#fff; font-weight:bold; font-size: 1em; color:#CC6633;margin-top:32px; margin-right:3px;margin-left:15px;}

#mainMenu #noticeBoard a,#mainMenu #noticeBoard .tiddlyLink {display:inline;border:none;padding:5px 2px;color:#DF9153 }
#noticeBoard a:hover {border:none;}	

#noticeBoard br {display:inline;}

#noticeBoard .button:hover{
	color:#CC6714;
        font-weight:bold;
	background: #F5F5F5;
	border: none;
}

#noticeBoard .button{
	color:#CC6714;
        font-weight:bold;
	border: none;
}

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

#mainMenu .button:hover{
	color: #fff;
	background: #DF9153;
	border-color: #DF9153;
}

.searchbar {position:relative; width:11em;}
.searchbar .button{margin:0; width:11em;}
#header {display:inline-block;}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

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

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

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, #breadCrumbs, #openTiddlers, #topMenu, #hoverMenu, #contentFooter,
#backstage, #backstageButton, .tagged,
#backstageArea, .toolbar, .siteSubtitle, .siteTitle, .header, .subtitle
{display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the
noscript content */
noscript {display:none;}
} 

/*}}}*/
[img[http://www.siff.net/_uploaded/image/film/27439l.jpg][Sukiyaki Western Django]] @@bgcolor:green;color:#fff;Recommended@@
[[TRAILER|http://latefilm.com/sukiyaki-western-django-trailer]]&nbsp;&nbsp;[[Rent it!|http://www.scarecrow.com/rental/item_rental.asp?Number=76558]]
    * Country: Japan
    * Year: 2007
    * Running time: 121 Minutes
    * Genres: Action/Adventure , Cult , Martial Arts , Western
    * Program: Midnight Adrenaline
    * Language: English
    * Other Countries: English

The latest camp epic from Takashi Miike is a virtuosic mash-up of East and West. The arrival of a black-clad gunfighter into a town divided between two warring clans—the Heike and the Genji—heralds a sword-slinging, bullets-flying increase in the local body count.

__Egyptian Theatre__
    Saturday June 7, 2008 @ 11:55 PM

__Uptown Cinema__
    Monday June 9, 2008 @ 9:45 PM

__Frosty Mike sez:__
Oooh!  Wow!  Yes!!!  It was the only midnight movie I could see this year, and it was awesome!  Once again, Miike put his insanity to great use.  From the opening scene with the egg, to the crazy sheriff that wouldn't die, to Tarantino in two roles (well, one actually), to gratuitous chaingun action, to the crazy awesome hot chick that appears out of nowhere.  This is what midnight movies at the Egyptian are about!  I rated this a 5 out of 5 because even though it could have made more sense, it didn't need to.  Miike, you have made up for Izo.  Now don't mess up next time!  :-)

Source: [[Sukiyaki Western Django : 2008 Seattle International Film Festival : Takashi Miike : Japan < Films|http://www.siff.net/festival/film/detail.aspx?id=27188&FID=64]]
~IMDb: http://www.imdb.com/title/tt0906665/
/***
''Plugin:'' Tag Cloud Macro
''Author:'' Clint Checketts
''Source URL:''

!Usage
<<tagCloud>>

!Code
***/
//{{{
version.extensions.tagCloud = {major: 1, minor: 0 , revision: 0, date: new Date(2006,2,04)};
//Created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman

config.macros.tagCloud = {
 noTags: "No tag cloud created because there are no tags.",
 tooltip: "%1 %0 movies"
};

config.macros.tagCloud.handler = function(place,macroName,params) {
 
var tagCloudWrapper = createTiddlyElement(place,"div",null,"tagCloud",null);

var tags = store.getTags();
for (var t=0; t<tags.length; t++) {
 for (var p=0;p<params.length; p++) if (tags[t][0] == params[p]) tags[t][0] = "";
}

 if(tags.length == 0) 
 createTiddlyElement(tagCloudWrapper,"span",null,null,this.noTags);
 //Findout the maximum number of tags
 var mostTags = 0;
 for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){
 if (tags[t][1] > mostTags) mostTags = tags[t][1];
 }
 //divide the mostTags into 4 segments for the 4 different tagCloud sizes
 var tagSegment = mostTags / 4;

 for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){
 var tagCloudElement = createTiddlyElement(tagCloudWrapper,"span",null,null,null);
 tagCloudWrapper.appendChild(document.createTextNode(" "));
 var theTag = createTiddlyButton(tagCloudElement,tags[t][0],this.tooltip.format(tags[t]),onClickTag,"tagCloudtag tagCloud" + (Math.round(tags[t][1]/tagSegment)+1));
 theTag.setAttribute("tag",tags[t][0]);
 }

};

setStylesheet(".tagCloud span{height: 1.8em;margin: 3px;}.tagCloud1{font-size: 1.2em;}.tagCloud2{font-size: 1.4em;}.tagCloud3{font-size: 1.6em;}.tagCloud4{font-size: 1.8em;}.tagCloud5{font-size: 1.8em;font-weight: bold;}","tagCloudsStyles");
//}}}
/***
''Plugin:'' TagglyTag Cloud Macro
''Author:'' Clint Checketts
''Source URL:''

//Note the macro name was changed to stop it from clashing with the original TagCloud plugin//

!Usage
<<tagglyTagCloud excludeSearch excludeLists>>

!Code
***/
//{{{
version.extensions.tagglyTagCloud = {major: 1, minor: 0 , revision: 0, date: new Date(2006,2,4)};
//Created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman

config.macros.tagglyTagCloud = {
 noTags: "No tag cloud created because there are no tags.",
 tooltip: "%1 tiddlers tagged with '%0'"
};

config.macros.tagglyTagCloud .handler = function(place,macroName,params) {
 
var tagCloudWrapper = createTiddlyElement(place,"div",null,"tagCloud",null);

var tags = store.getTags();
for (var t=0; t<tags.length; t++) {
 for (var p=0;p<params.length; p++) if (tags[t][0] == params[p]) tags[t][0] = "";
}

 if(tags.length == 0) 
 createTiddlyElement(tagCloudWrapper,"span",null,null,this.noTags);
 //Findout the maximum number of tags
 var mostTags = 0;
 for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){
 if (tags[t][1] > mostTags) mostTags = tags[t][1];
 }
 //divide the mostTags into 4 segments for the 4 different tagCloud sizes
 var tagSegment = mostTags / 4;

 for (var t=0; t<tags.length; t++) if (tags[t][0].length > 0){
 var tagCloudElement = createTiddlyElement(tagCloudWrapper,"span",null,null,null);
 tagCloudWrapper.appendChild(document.createTextNode(" "));
 var theTag = createTiddlyLink(tagCloudElement,tags[t][0],true);
 theTag.className += " tagCloudtag tagCloud" + (Math.round(tags[t][1]/tagSegment)+1);

// theTag.setAttribute("tag",tags[t][0]);
 }

};

setStylesheet(".tagCloud span{height: 2.5em;margin: 3px;}.tagCloud1{font-size: 1.3em; color:#dcf4b6;}.tagCloud2{font-size: 1.6em; color:#b7cc8e;}.tagCloud3{font-size: 1.9em; color:#98b55b;}.tagCloud4{font-size: 2.2em; color:#5c7133;}.tagCloud5{font-size: 2.5em;font-weight: bold; color:#5c7133;}","tagCloudsStyles");
//}}}
[img[http://www.siff.net/_uploaded/image/film/27518l.jpg][Terra]] @@bgcolor:green;color:#fff;Recommended@@
    * Country: USA
    * Year: 2007
    * Running time: 85 Minutes
    * Genres: Action/Adventure , Animation , Drama , Family Friendly , Fantasy , Political , Social Issues , Teen Flick
    * Program: ~Films4Families
    * Language: English

Terra weaves a cautionary tale of human's expansion on the planet Terra. A young Terran joins with a human to fight the dark political forces that threaten her people's existence. Featuring eye-popping animation and a star-studded voice cast, Terra is an environmental adventure for the entire family. Director Aristomenis Tsirbas scheduled to attend both screenings

__Uptown Cinema__
    Sunday May 25, 2008 @ 11:00 AM
    Monday May 26, 2008 @ 11:00 AM

__Frosty Mike sez:__
It's supposed to be cutting edge CGI, and sounds like a solid movie to boot.  Hopefully the "environmental adventure" part of it doesn't bring it down.

Source: [[Terra : 2008 Seattle International Film Festival : Aristomenis Tsirbas : USA < Films|http://www.siff.net/festival/film/detail.aspx?id=27198&FID=64]]
~IMDb: http://www.imdb.com/title/tt0858486/
[img[http://www.siff.net/_uploaded/image/film/27793l.jpg][The Art of Negative Thinking (Kunsten å Tenke Negativt)]] @@bgcolor:green;color:#fff;Recommended@@
[[TRAILER|http://www.youtube.com/watch?v=-D94XR1KWxk]]
    * Country: Norway
    * Year: 2007
    * Running time: 79 Minutes
    * Genre: Black Comedy
    * Program: Contemporary World Cinema
    * Language: Norwegian
    * ~Sub-Titles:English ~Sub-Titles

A darkly comic burlesque about a therapy group for disabled persons trying to persuade a recently paralyzed and suicidal young man to join, with surprising results. He quickly learns that, behind all the forced smiles, none of the members are really dealing with their issues—a revelation he leverages into a coup for negative thinking.

__Uptown Cinema__
    Tuesday May 27, 2008 @ 9:30 PM

__Pacific Place Cinema__
    Thursday May 29, 2008 @ 9:30 PM

__Frosty Mike sez:__
This was really funny and thoughtful!  I never expected to see people acting out my philosophy on life. :-)  The characters were excellent, the story was tight, and the comedy was enjoyable but also very real.  I gave it a ''5 out of 5'' (which I don't give lightly!), because it entertained me, I connected with it, and it made a lasting impression on me.  Quality stuff!

Source: [[The Art of Negative Thinking (Kunsten å Tenke Negativt) : 2008 Seattle International Film Festival : Bård Breien : Norway < Films|http://www.siff.net/festival/film/detail.aspx?id=27227&FID=64]]
~IMDb: http://www.imdb.com/title/tt0945356/
[img[http://www.siff.net/_uploaded/image/film/thedisappearedl_187731.jpg][The Disappeared]]
[[TRAILER|http://www.thedisappearedthemovie.com/trailer.php]]
    * Country: United Kingdom
    * Year: 2008
    * Running time: 95 Minutes
    * Genres: Drama , Horror
    * Premiere:World Premiere
    * Program: Midnight Adrenaline
    * Language: English

A disturbing, supernatural modern gothic thriller reminiscent Don't Look Now and The Dead Zone. Devastated by the disappearance of his younger brother Tom years earlier, Matthew finally returns home to live with his father in their rundown London flat. But when Tom's voice begins to haunt Matthew, he undertakes a dark, gothic journey to discover his brother's fate.

__Egyptian Theatre__
    Saturday May 31, 2008 @ 11:55 PM

__Harvard Exit__
    Wednesday June 4, 2008 @ 9:30 PM

__Frosty Mike sez:__
Hmm...  A ghost story with mystery. Doesn't seem terribly original, but might be worth checking out.

Source: [[The Disappeared : 2008 Seattle International Film Festival : Johnny Kevorkian : United Kingdom < Films|http://www.siff.net/festival/film/detail.aspx?id=27449&FID=64]]
~IMDb: http://www.imdb.com/title/tt1094295/
[img[http://www.siff.net/_uploaded/image/film/26327l.jpg][The Island of Lost Souls (De Fortabte sjæles ø)]] @@bgcolor:green;color:#fff;Recommended@@
[[TRAILER|http://www.sinematurk.com/film.php?action=goToViewTrailerPage&filmid=20438&no=0]]
    * Country: Denmark
    * Year: 2007
    * Running time: 100 Minutes
    * Genres: Action/Adventure , Fantasy , Teen Flick , Thriller
    * Program: ~FutureWave
    * Language: Danish
    * ~Sub-Titles:English ~Sub-Titles

When a 19th-century wizard enters her brother's body, 14-year-old Lulu joins with the spirit to battle the evil Necromancer and his dark, supernatural forces gathering at the land of the dead in this thrilling, effects-laden fantasy adventure.

__Pacific Place Cinema__
    Tuesday June 10, 2008 @ 7:00 PM

__Cinerama__
    Saturday June 14, 2008 @ 11:55 AM

__Frosty Mike sez:__
Sounds Harry Potter-ish.  Reviews imply it's good for adults, even though the main characters are kids.  Looks awesome!

Source: [[The Island of Lost Souls (De Fortabte sjæles ø) : 2008 Seattle International Film Festival : Nicolai Arcel : Denmark < Films|http://www.siff.net/festival/film/detail.aspx?id=27158&FID=64]]
~IMDb: http://www.imdb.com/title/tt0466449/
[img[http://www.siff.net/_uploaded/image/film/motheroftearsl_614387.jpg][The Mother of Tears (La terza Madre)]]
[[TRAILER|http://mftm.blogspot.com/2007/09/la-terza-madre-2007-mother-of-tears-us.html]]&nbsp;&nbsp;[[Rent it!|http://www.scarecrow.com/rental/item_rental.asp?Number=77060]]
    * Country: Italy
    * Year: 2007
    * Running time: 98 Minutes
    * Genres: Cult , Horror
    * Program: Midnight Adrenaline
    * Language: English
    * Other Countries: USA

Dario Argento's final installment in his Three Mothers trilogy, which began with Suspiria and continued with Inferno, finally arrives in all its gory glory. When Sarah and her colleague open a sealed urn, they release the powerful witch Mater Lachrimarum, who seeks to plunge the world into chaos.

__Egyptian Theatre__
    Friday May 23, 2008 @ 11:55 PM

__Frosty Mike sez:__
Looks like pretty standard horror.  Didn't strike me as anything new.

Source: [[The Mother of Tears (La terza Madre) : 2008 Seattle International Film Festival : Dario Argento : Italy < Films|http://www.siff.net/festival/film/detail.aspx?id=27200&FID=64]]
~IMDb: http://www.imdb.com/title/tt0804507/
/***
|Name|TiddlerDisplayTopPlugin|
|Location|http://www.orst.edu/~woodswa/tiddlywikiplugs.html|
|Version|1.0|
|Author:|Walt Woods|
|Requirements:|Should NOT be used in tandem with SinglePageModePlugin.|

!Description
Keeps the tiddlers display looking fresh by opening new tiddlers at the top of the page.  This keeps toolbars and menus accessible at all times, while allowing for multiple tiddlers to be open.

!History
08-06-2007: Initial version. 

!Code
***/
//{{{
version.extensions.TiddlerDisplayTopPlugin = {major: 1, minor: 0, revision: 0};

Story.prototype.displayTiddlerTiddlerDisplayTop = Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,title,template,animate,slowly)
{
 if (story.hasChanges(title))
 {
  this.displayTiddlerTiddlerDisplayTop(srcElement,title,template,animate,slowly);
 }
 else
 {
  story.closeTiddler(title);
  this.displayTiddlerTiddlerDisplayTop(null,title,template,animate,slowly)
  var tiddlerElem = document.getElementById(this.idPrefix + title);
  if (animate)
   anim.startAnimating(new Zoomer(title,srcElement,tiddlerElem),new Scroller("top"));
 }
}
//}}}
[img[http://www.siff.net/_uploaded/image/film/timecrimesl_382524.jpg][Timecrimes (Los Cronocrímenes)]] @@bgcolor:#CC6714;color:#fff;Maybe?@@
[[TRAILER|http://www.youtube.com/watch?v=FI-Kv_X_k3k]]
    * Country: Spain
    * Year: 2007
    * Running time: 88 Minutes
    * Genres: Science Fiction , Thriller
    * Program: Contemporary World Cinema
    * Language: Spanish
    * ~Sub-Titles:English ~Sub-Titles

While enjoying a quiet weekend in the country with his wife Clara, Hector spies a naked, unconscious woman in the neighboring woods. When he investigates, he's attacked by a grotesquely bandaged figure. Pursued through the forest, Hector stumbles into a neighboring mansion, where he finds the strangest of all hiding places.

__Pacific Place Cinema__
    Saturday June 7, 2008 @ 9:30 PM

__Egyptian Theatre__
    Sunday June 15, 2008 @ 7:00 PM

__Frosty Mike sez:__
IMDB comments make this sound interesting.  It is compared to Primer, which was at an earlier SIFF.  Primer was ok, and now I'm curious...

Source: [[Timecrimes (Los Cronocrímenes) : 2008 Seattle International Film Festival : Nacho Vigalondo : Spain < Films|http://www.siff.net/festival/film/detail.aspx?id=27232&FID=64]]
~IMDb: http://www.imdb.com/title/tt0480669/
/***

An under construction replacement for toggleTag

<<tTag mode:text text:D tag:Done>>
<<tTag mode:text text:N tag:Next>>
***/
//{{{

merge(config.macros,{

	tTag: {

		createIfRequired: true,
		shortLabel: "[[%0]]",
		longLabel: "[[%0]] [[%1]]",

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {

			var parsedParams = paramString.parseParams("tags",null,true);
			
			if (!tiddler)
				tiddler = store.getTiddler(getParam(parsedParams,"title"));
			
			var tag = getParam(parsedParams,"tag","checked");
			var title = getParam(parsedParams,"title",tiddler.title);

			var refreshAll = getParam(parsedParams,"refreshAll",false);

			var defaultLabel = (title == tiddler.title ? this.shortLabel : this.longLabel);
			var label = getParam(parsedParams,"label",defaultLabel);

			var theTiddler =  title == tiddler.title ? tiddler : store.getTiddler(title);

			var mode = getParam(parsedParams,"mode","checkbox");

			var theClass = getParam(parsedParams,"class",tag+"Button");


			var currentValue = theTiddler && 
				(macroName == "tTag" ? theTiddler.isTagged(tag) : store.getValue(theTiddler,tag)=="true");

			if (mode == "checkbox") {
				// create the checkbox

				var cb = createTiddlyCheckbox(place, label.format([tag,title]), currentValue, function(e) {
					if (!store.tiddlerExists(title)) {
						if (config.macros.tTag.createIfRequired) {
							var content = store.getTiddlerText(title); // just in case it's a shadow
							store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);
						}
						else 
							return false;
					}
					//store.suspendNotifications(); 
					if (macroName == "tTag")
						store.setTiddlerTag(title,this.checked,tag);
					else // it must be tField
						store.setValue(title,tag,this.checked?"true":null);

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

					//store.resumeNotifications();
					return true;
				});
			}
			else if (mode == "text") {
				var text = getParam(parsedParams,"text","X");

				var cl = createTiddlyButton(place, text, text, function(e) {
					if(!e) var e = window.event;

					if (!store.tiddlerExists(title)) {
						if (config.macros.tTag.createIfRequired) {
							var content = store.getTiddlerText(title); // just in case it's a shadow
							store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);
						}
						else 
							return false;
					}
					//store.suspendNotifications(); 
					var currentState = this.getAttribute("state")=="true";
					var newState = !currentState;

					store.setTiddlerTag(title,newState,tag);
					if (macroName == "tTag")
						store.setTiddlerTag(title,newState,tag);
					else // it must be tField
						store.setValue(title,tag,newState?"true":null);

					// this is terrible please refactor
					if (currentState) {
						cl.setAttribute("state","false");
						removeClass(cl,"on");
						addClass(cl,"off");
					}
					else {
						cl.setAttribute("state","true");
						removeClass(cl,"off");
						addClass(cl,"on");
					}

					//refreshDisplay(); 
					if (refreshAll) {
						 story.forEachTiddler(function(title,element) {
						   if (element.getAttribute("dirty") != "true") 
						     story.refreshTiddler(title,false,true);
						 });
					}
					//store.resumeNotifications();

					e.cancelBubble = true;
					if(e.stopPropagation) e.stopPropagation();

					return false;
				});

				addClass(cl,theClass.replace(/ /g,''));

				if (currentValue) {
					cl.setAttribute("state","true");
					removeClass(cl,"off");
					addClass(cl,"on");
				}
				else {
					cl.setAttribute("state","false");
					removeClass(cl,"on");
					addClass(cl,"off");
				}
				
			}
			else if (mode == "popup") {
				var cl = createTiddlyButton(place, "zzz", text, function(e) {
					// props to Saq
					if(!e) var e = window.event;
					var popup = Popup.create(this);
					createTiddlyButton(createTiddlyElement(popup,"li"),"foo","bar",function(e) {
						// under contruction
						alert(this.getAttribute("tag"));
					});
					Popup.show(popup,false);
					e.cancelBubble = true;
					if(e.stopPropagation) e.stopPropagation();
					return false ;
				});
			}

		}
	}

});

config.macros.tField = config.macros.tTag;

setStylesheet(["",
".button.off {border-style:none;background:#fff;color:#ccc;}",
".button.on {border-style:none;background:#ddd;color:#000;}",
// TODO move this css elsewhere
"#realmSelector .button.off {margin:0 0.5em;padding:0 1em;border:2px solid #aaa;background:#eee;color:#333;}", // actually reversed, ie off is "on"
"#realmSelector .button.on {margin:0 0.5em;padding:0 1em;border:2px solid #999;background:#999;color:#ccc;}", // actually reversed, ie off is "on"
""].join("\n"),"tTa3:28 AM 5/10/2008g");

//}}}




[img[http://www.siff.net/_uploaded/image/film/24314l.jpg][Triangle (Tie saam gok)]]
[[Rent it!|http://www.scarecrow.com/rental/item_rental.asp?Number=81470]]
    * Country: Hong Kong
    * Year: 2007
    * Running time: 93 Minutes
    * Genre: Thriller
    * Program: Contemporary World Cinema
    * Language: Cantonese
    * ~Sub-Titles:English ~Sub-Titles
    * Other Countries: China

Three giants of Hong Kong crime cinema—Tsui Hark, Ringo Lam, and Johnnie To—join forces to create Triangle. Longtime pals ~Bo-Sam, Fai, and Mok contend with criminal hoods, a corrupt cop, and an unfaithful wife in their quest to unearth a treasure buried beneath the Hong Kong legislative building.

__Cinerama__
    Friday June 13, 2008 @ 4:00 PM
    Sunday June 15, 2008 @ 9:00 PM

__Frosty Mike sez:__
Looks like it could be good, and seemed to do ok in ~IMDb reviews.

Source: [[Triangle (Tie saam gok) : 2008 Seattle International Film Festival : Tsui Hark : Ringo Lam : Johnny To : Hong Kong < Films|http://www.siff.net/festival/film/detail.aspx?id=27142&FID=64]]
~IMDb: http://www.imdb.com/title/tt0846017/
[img[http://www.siff.net/_uploaded/image/film/27312l.jpg][Vexille]] @@bgcolor:green;color:#fff;Recommended@@
[[TRAILER|http://www.boomtrailers.com/view.php?id=384]]&nbsp;&nbsp;[[Rent it!|http://www.scarecrow.com/rental/item_rental.asp?Number=94420]]
    * Country: Japan
    * Year: 2007
    * Running time: 109 Minutes
    * Genres: Action/Adventure , Animation , Science Fiction , Teen Flick
    * Program: Contemporary World Cinema
    * Language: Japanese
    * ~Sub-Titles:English ~Sub-Titles

The team behind "Appleseed" trump themselves with exhilarating action sequences and frequently astonishing imagery. Vexille takes place later this century, decades after Japan closed itself off to the rest of the world. Vexille and her squad of special agents infiltrate Japan's borders and are shocked to discover what has happened there.

__Egyptian Theatre__
    Friday May 23, 2008 @ 4:00 PM

__SIFF Cinema__
    Sunday May 25, 2008 @ 9:30 PM

__Frosty Mike sez:__
Nice looking animation, with that Final Fantasy movie kind of look.  Cool.

Source: [[Vexille : 2008 Seattle International Film Festival : Fumihiko Sori : Japan < Films|http://www.siff.net/festival/film/detail.aspx?id=27165&FID=64]]
~IMDb: http://www.imdb.com/title/tt0970472/
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></div>
<div class='title' macro='view title'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
[img[http://www.siff.net/_uploaded/image/film/visioneers2_175724.jpg][Visioneers]] @@bgcolor:#FF0000;color:#fff;Crap?@@
[[TRAILER|http://www.youtube.com/watch?v=QI8UdlAw8VA]]
    * Country: USA
    * Year: 2008
    * Running time: 94 Minutes
    * Genres: Black Comedy , Comedy , Drama
    * Premiere:World Premiere
    * Programs: New American Cinema, Northwest Connections


In the future, the Jeffers Corporation is the largest business in history thanks to its philosophy of happiness through mindless productivity. But there's a growing epidemic of people literally exploding from unhappiness. Zach Galifianakis stars in this funny and smart social satire shot in the Seattle area, and featuring music by Polyphonic Spree's Tim ~DeLaughter. Director Jared Drake and producer Jory Weitz scheduled to attend both screenings

__Egyptian Theatre__
    Thursday June 12, 2008 @ 9:30 PM
    Saturday June 14, 2008 @ 4:00 PM

__Frosty Mike sez:__
Could be funny.  Maybe.  But the trailer makes it look really slow.

Source: [[Visioneers : 2008 Seattle International Film Festival : Jared Drake : USA < Films|http://www.siff.net/festival/film/detail.aspx?id=27357&FID=64]]
~IMDb: http://www.imdb.com/title/tt0833557/
//It appears that this ~TidlyWiki based site is broken on Internet Explorer 7.  I failed to test on that, but apparently one or more plugins I've used don't behave properly.  Since I have no time to troubleshoot right now, it's going to stay this way for a while, or maybe indefinitely.  Why anyone would use ~IE7 over Firefox, Safari, Opera, or any standards compliant browser is beyond me...  I apologize for the incompatibility though.  You ~IE7 folks take care.//

It's time again for another [[Seattle International Film Festival|http://www.siff.net/festival/index.aspx]], and that means it's time to sift through the mounds of movies and find some ''//good//'' ones.  Good is a subjective term, of course, and in my case it's easier to list what I don't like than what I do...

You ''won't find'' any of these films listed here:
* ''artsy/experimental films'' : I don't want to see your experiments -- once you've figured out how to make a film, //then// show me something!
* ''coming of age films'' : It's bad enough we all have to do this ourselves -- why would we want to //suffer// watching others go through it?
* ''documentaries'' : I don't go to a movie at the theater to //learn// something, I go to be entertained!
* ''persuasion/cause films'' : Politics, religion, saving the planet, saving people...  Do what you like, but //I// don't want to see a movie about it!
* ''sexual identity/exploration films'' : I don't want to show you //mine//, and I don't want you to show me //yours//!

Now we've gotten that out of the way, what ''will'' you find here?
* ''[[action]]'' : Whether it's kung-fu dudes, chicks with swords, or guns that never run out of bullets, do whatever it takes to blow me away.
* ''[[animation]]'' : Don't just make a cartoon for it's own sake.  Anime isn't really my thing either.  But do something weird and cool and I'm there.
* ''[[comedy]]'' : Make me laugh.  Construct an array of goofs that intertwine and resolve themselves into a well-formed and thought out comedy.
* ''[[horror]]'' : Shock me, but maintain a sense of humor.  Showing gore and making me jump is fine, but I want a good ride with surprises.
* ''[[midnight]]'' : Originally thought to showcase the best movies, some of the midnight movies are best avoided...
* ''[[mystery/thriller]]'' : Thoughtfully dropping clues, not being sloppy, and maintaining tension are what it's all about.
* ''[[science fiction|sci-fi]]'' : Send me to a different place, don't just tack on some time travel to an otherwise crappy movie.

Of course, the //best// movies are often a creative mix of all these.  Bonus points are awarded for effective use of zombies, robots, ninjas, aliens, crazy stunts, explosions, etc.

Note that the categories applied to films on the SIFF website are dubious at best.  (Everything is a black comedy?  Yeah, right.)  I've copied them into the details for each film, and then tagged them with my own categories.  But don't take anyone's word for it -- evaluate these movies yourself!
[img[http://www.siff.net/_uploaded/image/film/hotdogl_610325.jpg][Wild Bunch (Shorts)]]
    * Running time: 95 Minutes
    * Program: Short Film Packages

Join a band of cinematic outlaws as they revel in fear, loathing, and mayhem.

Includes:
*[[Advantage|http://www.siff.net/festival/film/detail.aspx?id=27346&FID=64]]
*[[Fringe|http://www.siff.net/festival/film/detail.aspx?id=27261&FID=64]]
*[[Hot Dog|http://www.siff.net/festival/film/detail.aspx?id=27466&FID=64]]
*[[Louis & Anne|http://www.siff.net/festival/film/detail.aspx?id=27448&FID=64]]
*[[Night Light|http://www.siff.net/festival/film/detail.aspx?id=27238&FID=64]]
*[[On the Assassination of the President|http://www.siff.net/festival/film/detail.aspx?id=27377&FID=64]]
*[[Piñatas Revenge|http://www.siff.net/festival/film/detail.aspx?id=27388&FID=64]]
*[[Spider|http://www.siff.net/festival/film/detail.aspx?id=27343&FID=64]]
*[[Tits and Blood|http://www.siff.net/festival/film/detail.aspx?id=27315&FID=64]]
*[[Twenty One|http://www.siff.net/festival/film/detail.aspx?id=27283&FID=64]]
*[[Yellow|http://www.siff.net/festival/film/detail.aspx?id=27296&FID=64]]
__SIFF Cinema__
    Saturday May 31, 2008 @ 9:30 PM

__Frosty Mike sez:__
Hot Dog (Plymptoon), Piñatas Revenge, and Tits and Blood look like they might be good.  It's always a crapshoot with shorts.

Source: [[Wild Bunch : 2008 Seattle International Film Festival < Films|http://www.siff.net/festival/film/detail.aspx?id=27522&FID=64]]
[img[http://www.siff.net/_uploaded/image/film/27351l.jpg][Young People Fucking]] @@bgcolor:green;color:#fff;Recommended@@
[[TRAILER|http://www.alltrailers.net/young-people-fucking.html]]
    * Country: Canada
    * Year: 2007
    * Running time: 90 Minutes
    * Genres: Comedy , Erotic , Romance
    * Program: Contemporary World Cinema
    * Language: English

Played out in six chapters—Prelude, Foreplay, Sex, Interlude, Orgasm, and Afterglow—Young People Fucking follows four couples and one threesome as they attempt to enjoy a night of sexual delights only to find that nothing ever goes according to plan (no matter how "impossibly hot" you are).

__Egyptian Theatre__
    Saturday May 31, 2008 @ 9:30 PM
    Sunday June 1, 2008 @ 4:30 PM

__Frosty Mike sez:__
This was really entertaining!  It was thoughtful, funny, and I could relate to one of the guys in it.  (I'm not saying which!)  I hope it does well when it hits mainstream theaters, but I suspect the title will scare a lot of people away.  Their loss.  I rated this a ''4 out of 5'' because it was fun, clever, and honest.

Source: [[Young People Fucking : 2008 Seattle International Film Festival : Martin Gero : Canada < Films|http://www.siff.net/festival/film/detail.aspx?id=27168&FID=64]]
~IMDb: http://www.imdb.com/title/tt0913445/
Whether it's kung-fu dudes, chicks with swords, or guns that never run out of bullets, do whatever it takes to blow me away.

"Action is the antidote to despair."
- Joan Baez

{{borderlessL{
<<forEachTiddler
 where
 'tiddler.tags.contains("action")'
 sortBy
  'tiddler.title'
  ascending
 script
'
 function getFirstLine(s) {
 var m = s.match(/\s*(.*)/);
 return m != null && m.length >= 1 ? m[1] : "";
 }
 '
 write
 '"|" + getFirstLine(tiddler.text) + "|[["+tiddler.title+"]]" +"|\n"' 
>>
}}}
Don't just make a cartoon for it's own sake. Anime isn't really my thing either. But do something weird and cool and I'm there.

"Animation is about creating the illusion of life. And you can't create it if you don't have one."
- Brad Bird

{{borderlessL{
<<forEachTiddler
 where
 'tiddler.tags.contains("animation")'
 sortBy
  'tiddler.title'
  ascending
 script
'
 function getFirstLine(s) {
 var m = s.match(/\s*(.*)/);
 return m != null && m.length >= 1 ? m[1] : "";
 }
 '
 write
 '"|" + getFirstLine(tiddler.text) + "|[["+tiddler.title+"]]" +"|\n"' 
>>
}}}
//{{{
config.tasks.SideBarTabs= {
	text: "SideBar Tabs",
	tooltip: "SideBar Tabs",
	content: "<<tiddler [[SideBarTabs]]>>"
};
config.tasks.SideBarOptions= {
	text: "SideBarOptions",
	tooltip: "SideBarOptions",
	content: "<<tiddler [[SideBarOptions]]>>"};

config.backstageTasks.push("SideBarOptions");
config.backstageTasks.push("SideBarTabs");
//}}}
Make me laugh. Construct an array of goofs that intertwine and resolve themselves into a well-formed and thought out comedy.

"Comedy is tragedy that happens to other people."
- Angela Carter

{{borderlessL{
<<forEachTiddler
 where
 'tiddler.tags.contains("comedy")'
 sortBy
  'tiddler.title'
  ascending
 script
'
 function getFirstLine(s) {
 var m = s.match(/\s*(.*)/);
 return m != null && m.length >= 1 ? m[1] : "";
 }
 '
 write
 '"|" + getFirstLine(tiddler.text) + "|[["+tiddler.title+"]]" +"|\n"' 
>>
}}}
=-=-=-=-=-=[[TiddlyWiki|http://www.tiddlywiki.com]] &copy; Osmosoft =-=-=-=-=-= Want to go down [[memory lane|Previous Years]]? =-=-=-=-=-= [[SIFF 2008 official website|http://www.siff.net/festival/index.aspx]] =-=-=-=-=[[-|Movies you want to see!]]=
I didn't know what else to call it. You know it though. Think "The Happiness of the Katakuris".

"Crazy people don't sit around wondering if they're nuts."
- Jake Gyllenhaal

{{borderlessL{
<<forEachTiddler
 where
 'tiddler.tags.contains("crazy")'
 sortBy
  'tiddler.title'
  ascending
 script
'
 function getFirstLine(s) {
 var m = s.match(/\s*(.*)/);
 return m != null && m.length >= 1 ? m[1] : "";
 }
 '
 write
 '"|" + getFirstLine(tiddler.text) + "|[["+tiddler.title+"]]" +"|\n"' 
>>
}}}
//{{{
//This ensures that the footer sticks to the bottom of the screen when there are no tiddlers open. If that is not desirable, it can be deleted.
function setFooter() {
         if (document.getElementById && document.getElementById("contentFooter") ) {
            var windowHeight=findWindowHeight();
         if (windowHeight>0) {
            var contentHeight= document.getElementById('mainMenu').offsetHeight + document.getElementById("header").offsetHeight + document.getElementById("contentFooter").offsetHeight;
            var menu= document.getElementById('mainMenu');
            if (windowHeight-(contentHeight)>=0) {
               menu.style.position='relative';
               menu.style.marginBottom=(windowHeight-(contentHeight))+'px';
               }
            else {
                 menu.style.position='';
                 menu.style.marginBottom='';
                 }
            }
         }
}
window.onresize = function() {
  setFooter();
}

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

//}}}
Shock me, but maintain a sense of humor. Showing gore and making me jump is fine, but I want a good ride with surprises.

"The horror of it is, every goddamn thing you look at seems pretty scary to me."
- Kary Mullis

{{borderlessL{
<<forEachTiddler
 where
 'tiddler.tags.contains("horror")'
 sortBy
  'tiddler.title'
  ascending
 script
'
 function getFirstLine(s) {
 var m = s.match(/\s*(.*)/);
 return m != null && m.length >= 1 ? m[1] : "";
 }
 '
 write
 '"|" + getFirstLine(tiddler.text) + "|[["+tiddler.title+"]]" +"|\n"' 
>>
}}}
Originally thought to showcase the best movies, some of the midnight movies are best avoided...

"Crazy people don't sit around wondering if they're nuts."
- Jake Gyllenhaal

{{borderlessL{
<<forEachTiddler
 where
 'tiddler.tags.contains("midnight")'
 sortBy
  'tiddler.title'
  ascending
 script
'
 function getFirstLine(s) {
 var m = s.match(/\s*(.*)/);
 return m != null && m.length >= 1 ? m[1] : "";
 }
 '
 write
 '"|" + getFirstLine(tiddler.text) + "|[["+tiddler.title+"]]" +"|\n"' 
>>
}}}
Thoughtfully dropping clues, not being sloppy, and maintaining tension are what it's all about.

"...it's a film about the fact that, if you only look at a person through one lens, or only believe what you're told, you can often miss the truth that is staring you in the face."
- Kevin Spacey

{{borderlessL{
<<forEachTiddler
 where
 'tiddler.tags.contains("mystery/thriller")'
 sortBy
  'tiddler.title'
  ascending
 script
'
 function getFirstLine(s) {
 var m = s.match(/\s*(.*)/);
 return m != null && m.length >= 1 ? m[1] : "";
 }
 '
 write
 '"|" + getFirstLine(tiddler.text) + "|[["+tiddler.title+"]]" +"|\n"' 
>>
}}}
Send me to a different place, don't just tack on some time travel to an otherwise crappy movie.

"I wish everyone was a sci-fi geek because then there would be no violence in the world. There'd be no wars. There'd only be people e-mailing each other."
- Claudia Christian

{{borderlessL{
<<forEachTiddler
 where
 'tiddler.tags.contains("sci-fi")'
 sortBy
  'tiddler.title'
  ascending
 script
'
 function getFirstLine(s) {
 var m = s.match(/\s*(.*)/);
 return m != null && m.length >= 1 ? m[1] : "";
 }
 '
 write
 '"|" + getFirstLine(tiddler.text) + "|[["+tiddler.title+"]]" +"|\n"' 
>>
}}}