Internship Summer Program in Salamanca, Spain
is loading ...

Best Viewed on Firefox
Requires Javascript.
Internship Summer Program in Salamanca, Spain - a reusable non-linear personal web notebook
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
LLEGADA A ESPAÑA
INICIO DEL INTERNSHIP
FIN DEL INTERNSHIP (SUMMER 1)
ESPAÑA - USA (SUMMER 1)
 LLEGADA A ESPAÑA DE SUMMER 2
INICIO DEL INTERNSHIP (SUMMER 2)
FIN INTERNSHIP
ESPAÑA - USA
<html><img hspace="12" align="right" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/ascol.jpg" alt="" /><p>The purpose of ASCOL is to provide blood disease patients and their families with the necesary assistance to improve their quality of life. Interns work directly with patients and their families at the Hospital of Salamanca (nationally and internationally recognized for treatment and research of blood diseases and bone marrow transplants). In this internship you will be required to participate in care by::

attending ASCOL meetings
providing emotional support for hospitalized patients and their families
participating in outpatient support and respite care services
offering play therapy to reduce stress caused by the disease

This internship is especially useful for pre-med majors.&nbsp;</p></html>
To allow for maximum interaction and immersion in the Salamanca community and the Spanish language, all students may choose to live with Spanish families carefully selected by Cursos Internacionales of the University of Salamanca or in Colegios Mayores (Student Residence Halls). 
Students may not arrange for their own accommodations, nor make any changes in their residence without the permission of the program director. The home-stay is considered an essential element of the WFU in Salamanca program, and all accommodations must be properly approved.
<html><p><span>Adecco S.A. is a Global Fortune 500 company and the world leader in workforce solutions. Adecco connects over 700,000 associates with business clients each day through its network of over 33,000 employees and 6,600 offices in over 70 countries and territories around the world. Registered in Switzerland, and managed by a multinational team with expertise in markets spanning the globe, Adecco delivers an unparalleled range of flexible staffing and career resources to corporate clients and qualified associates.</span><span lang="en-gb"><span> </span></span><span> 		</span><span lang="EN-GB" style=""><span> 		</span><o:p><span> &nbsp;</span><br /><span> 		</span></o:p></span><span>         </span><span lang="EN-GB" style=""><span>Students wishing to intern with Adecco will meet a small and friendly team in the office in Salamanca. You will help them welcoming </span></span><span lang="en-gb"><span>candidates by collecting their curricula and having an initial interview, where the objective is to filter profiles. You will also speak with those candidates about the conditions and characteristics of available jobs. Other duties are evaluations of candidates through Expert tests, collaborating with the team in the day to day work, recruitment of candidates, in the different sources: Associations, programs of labor insertion, websites: Adecco.es, Infojobs, infoempleo&hellip;</span></span></p><span> 	</span><p><span lang="EN-GB" style=""><span>&nbsp;</span></span><span lang="EN-GB" style=""><o:p><img width="564" vspace="6" hspace="6" height="190" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/adecco.jpg" alt="ADECCO" v:shapes="_x0000_s1048" /></o:p></span></p></html>
/***
|Name|AdvancedOptionsPlugin|
|Source|http://www.TiddlyTools.com/#AdvancedOptionsPlugin|
|Documentation|http://www.TiddlyTools.com/#AdvancedOptionsPlugin|
|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.3|
|Type|plugin|
|Requires||
|Overrides||
|Options|##Configuration|
|Description|automatically add plugin-defined options to the [[AdvancedOptions]] shadow tiddler|
!!!!!Usage
<<<
At document startup, this plugin examines each tiddler tagged with <<tag systemConfig>> and looks for a tiddler slice named "Options" whose value refers to a tiddler section (or separate tiddler) that contains an 'advanced options control panel' for configuring that plugin's features and behavior.  For each plugin that contains an "Options" slice, a tabbed entry is automatically created in the [[AdvancedOptions]] shadow tiddler to display that plugin's control panel.

As an optional fallback for backward-compatibility with plugin tiddlers that do not define the "Options" slice, this plugin will also look for a section heading named "Configuration" within those tiddlers, so that older plugins that define this section can automatically have their settings added to the [[AdvancedOptions]] tiddler without requiring the "Options" slice to be added.
<<<
!!!!!Configuration
<<<
<<option chkAdvancedOptions>> automatically add plugin-defined options to the [[AdvancedOptions]] shadow tiddler
<<option chkAdvancedOptionsBackstage>> automatically add plugin-defined options to Backstage menu
<<option chkAdvancedOptionsFallback>> use <<option txtAdvancedOptionsFallback>> section as a fallback for plugins that don't define an ~AdvancedOptions slice
//note: these settings only take effect after reloading the document//
<<<
!!!!!Revisions
<<<
2008.05.09 [1.1.0] add "options" panel to backstage
2008.04.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.AdvancedOptionsPlugin= {major: 1, minor: 1, revision: 0, date: new Date(2008,5,9)};

if (config.options.chkAdvancedOptions===undefined)
	config.options.chkAdvancedOptions=true;
if (config.options.chkAdvancedOptionsBackstage===undefined)
	config.options.chkAdvancedOptionsBackstage=true;
if (config.options.chkAdvancedOptionsFallback===undefined)
	config.options.chkAdvancedOptionsFallback=true;
if (config.options.txtAdvancedOptionsFallback===undefined)
	config.options.txtAdvancedOptionsFallback="Configuration";
if (config.optionsDesc) config.optionsDesc.chkAdvancedOptions=
	"automatically add plugin-defined options to [[AdvancedOptions]]";

var items=[];
var fmt="[[%0 ]] [[view options for %0]] [[%1]]\n";
var section=config.options.txtAdvancedOptionsFallback;
var plugins=store.getTaggedTiddlers("systemConfig");
for (var p=0; p<plugins.length; p++) {
	var tid=plugins[p].title;
	var settings=store.getTiddlerSlice(tid,"Options");
	if (!settings && config.options.chkAdvancedOptionsFallback && store.getTiddlerText(tid+"##"+section))
		settings="##"+section; // fallback handling for older plugins
	if (settings&&settings.length) {
		if (settings.substr(0,2)=="##") settings=tid+settings;
		items.push(fmt.format([tid,settings]));
	}
}
if (items.length) config.shadowTiddlers.PluginOptions=
	"!!![[Plugin-defined options|PluginManager]]\n@@text-align:left;<<tabs '' \n"+items.join(' ')+">>@@";

if (config.options.chkAdvancedOptions)
	config.shadowTiddlers.AdvancedOptions+="{{smallform{{{wrap{<<tiddler PluginOptions>>}}}}}}";

// add "options" backstage task
if (config.tasks && config.options.chkAdvancedOptionsBackstage) { // for TW2.2b3 or above
	config.tasks.options = {
		text: "options",
		tooltip: "manage plugin-defined option settings",
		content: "{{smallform{{{groupbox{{{wrap{<<tiddler PluginOptions>>}}}}}}\n{{groupbox small {<<options>>}}}}}}"
	}
	config.backstageTasks.splice(config.backstageTasks.indexOf("plugins")+1,0,"options");
}
//}}}
<html><img hspace="12" align="right" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/protectora.jpg" alt="" /><p>The main activity of the animal protection society is the care of the animals that live in their shelter and make them all feel loved and secure. The animals will live there until they have a family to take them home responsibly and ensure them a happy future and a dignified life.
Your work will mainly be at the shelter. They also need caring individuals that will gently care for the animals, take them on walks, and play with them.
Also, you will be required to clean their shelter, take them to the veterinarian, and help with the organization and the management of the Society.
This internship is specially suitable for biology majors who are aware about animals welfare.&nbsp;</p></html>
Students wishing to apply for this program must complete the WFU Salamanca Program application by April 1 for both summer sessions.

Completed applications must be returned to the Department of Romance Languages, Wake Forest University, 323 Greene Hall, Winston-Salem, NC 27109.

Applications can be obtained by writing to the Department of Romance Languages, by sending an email to the program coordinator (galacs@wfu.edu) or from the website link - Application Form.

Applications from other institutions are welcomed and encouraged.
<html><p><img width="164" vspace="6" hspace="12" height="124" align="right" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/academic_program_clip_image008.jpg" v:shapes="_x0000_s1030" alt="" /><span><span><p><span>Students visit local schools on a regular basis in order to assist in English language classes. Schools available include elementary and high school levels.</span><br /><span>This option represents an excellent opportunity for those interested in foreign language education or education in general. 
This internship site is highly recommended for future teachers as interns will be immersed in daily classroom activities. It is also an excellent site to improve the knowledge of Spanish as interns will be in constant contact with school children (5-10 years of age). They will also work closely with teachers and educators in the development of educational activities for the children, and will assist them during recess periods. A complementary activity will be the organization of the dining hall/cafeteria and assisting during meal time.</span></span></p></html>
<html><img hspace="12" align="right" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/bookshop.jpg" alt="" /><p>Plaza Nueva is one of the oldest and most familiar bookshops in Salamanca. It is very well located next to the old university buildings and in front of the big cathedral. In this internship you will help organising the numerous bookshelves, helping English speaking customers (Spanish learning students), archiving invoices, preparing orders for large orders, etc... There is always something to do because of the many customers that visit this store daily.&nbsp;</p></html>
<html><p><img hspace="10" align="right" src="http://www.wfu.edu/romancelanguages/study_abroad/Salamanca/images/salamanca5.jpg" alt="" /></p><p><span style="font-size: larger;"><strong>Summer 2014</strong></span></p></html>- [[Summer 1 2015]] 

- [[Summer 2 2015]]<html><p><strong>NOTE:</strong><br />These dates are subject to change due to availability in hotels and transportation reservations.&nbsp;Your Program Director will inform you ahead of time about possible changes.</p></html>
<html><img hspace="12" src="http://cde.usal.es/jpg/cabecera_index.jpg" alt="" /><p>

The network of European Documentation Centres, established in 1963 by the European Commission, aims to assist institutions of higher education and research centers to promote and develop teaching and research on European integration, encourage these institutions in the debate on the European Union and contribute to the knowledge of Community policies.Therefore, the purpose of the European Documentation Centres, usually linked to the university, is none other than responding to the needs of students, researchers and citizens by making information about the European Union and its policies accessible.
The European Publications Office is responsible for sending a copy of each document and facilitate the connection to some of the EU databases for free, thus constituting the European Documentation Centres as the main repositories with official documentation from the European institutions. </html>
http://cde.usal.es/index.html
<html><p>Wake Forest University has signed a valuable partnership with the Chamber of Commerce in Salamanca to provide a variety of internship opportunities for students. Thanks to this agreement students will be able to intern in numerous business locations throughout the city. Please, check the different business areas below. All these internships are recommended for business students.  ''All these internships have an extra cost of $500. The information appears in Spanish on the left and you can find the English translation on the right side.''</p><table width="100%" cellspacing="0" cellpadding="0" border="1" class="MsoTableGrid" style="width:100.0%;border-collapse:collapse;border:none">  <tbody><tr>   <td width="50%" valign="top" style="width:50.0%;border:solid windowtext 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt"><p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><b><span style="color:white;background:blue">TRANSPORTE, COMERCIO   EXTERIOR Y LOG&Iacute;STICA&nbsp;&nbsp;</span></b>&nbsp;&nbsp; Ejemplos de internships <a href="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/CAMARA/SPANISH/CITYCESA.pdf"><span style="background-color: Yellow;">aqu&iacute; </span></a>y <a href="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/CAMARA/SPANISH/ADVENTIA.pdf"><span style="background-color: Yellow;">aqu&iacute;</span></a></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">&nbsp;<b>-Centro Internacional de Transportes y de Comercio Exterior de   Salamanca:</b></p>      <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Agencia de aduanas (despachos de importaci&oacute;n y exportaci&oacute;n /   despachos de veh&iacute;culos para particulares)</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Dep&oacute;sito temporal aduanero&nbsp;</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Consultor&iacute;a en Comercio Exterior</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Operador de Transporte</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Alquiler de almacenes</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Gesti&oacute;n de una licencia privada de dep&oacute;sito de recepci&oacute;n de   hidrocarburos.&nbsp;</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">&nbsp;<b>-Centro Integrado de Transportes y Mercanc&iacute;as de Salamanca   (Plataforma log&iacute;stica)</b></p>      <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">&Aacute;rea de servicios al veh&iacute;culo</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">&Aacute;rea log&iacute;stica para operadores log&iacute;sticos</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">&Aacute;rea administrativa y comercial d&oacute;nde se ubican las empresas de   transporte y las actividades complementarias del sector</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Central de compras: Agrupaci&oacute;n empresarial de compras de Salamanca,   gestiona compras conjuntas para las empresas asociadas, buscando siempre la   mejor relaci&oacute;n calidad-precio.</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">&nbsp;<b>-Operadores Log&iacute;sticos y Operadores de Transporte</b></p>      <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Planificaci&oacute;n y gesti&oacute;n de la cadena de abastecimiento, incluyendo el   suministro de materias primas a la industria, la gesti&oacute;n de materiales en el   lugar de fabricaci&oacute;n, la distribuci&oacute;n a almacenes, clasificaci&oacute;n,   mantenimiento, embalaje y reparto al punto de consumo final.</p><p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">&nbsp;</p></td>   <td width="50%" valign="top" style="width:50.0%;border:solid windowtext 1.0pt;
  border-left:none;padding:0cm 5.4pt 0cm 5.4pt"><p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><b><span lang="EN-US" style="color:white;background:blue">TRANSPORTATION,   FOREIGN COMMERCE, AND LOGISTICS</span></b>&nbsp; Examples of internships <a href="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/CAMARA/ENGLISH/citycesa.pdf"><span style="background-color: Yellow;">here </span></a>and <a href="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/CAMARA/ENGLISH/adventia.pdf"><span style="background-color: Yellow;">here</span></a></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">&nbsp;</span><b><span lang="EN-US">-Salamanca International Center of Transportation   and Foreign Commerce:</span></b></p>      <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Customs (import/export offices; offices of vehicles   for individual customers)</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Temporary custom deposit</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Information Bureau on Foreign Commerce</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Transportation Operator</span></p><p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Rental of Storage Facilities</span></p><p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Processing of private licenses for deposits to store   hydrocarbons</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">&nbsp;</span><b><span lang="EN-US">-Salamanca Integrated Center for Transportation   and Merchandise (Logistical Platform)</span></b></p>      <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Service area for vehicles</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Logistical area for logistical operators</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Administrative and commercial area where transportation   companies and complementary activities of this area are located</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Central Location for Purchases: Salamanca Enterprise   Association for Purchases: it manages/processes joint purchases for   associated enterprises always seeking the best correlation between quality   and price</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">&nbsp;</span><b><span lang="EN-US">-Logistical and Transportation Operators</span></b></p>      <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Planning and Management of the supply chain   including the supply of raw materials to industry, the processing of   materials in the manufacturing site, the distribution to warehouses and   stores, classification, maintenance, packing and distribution to the final   point of consumption.</span></p></td>  </tr>  <tr>   <td width="50%" valign="top" style="width:50.0%;border:solid windowtext 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt"><p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><b><span style="color:white;background:blue">EMPRESAS DE BASE   TECNOL&Oacute;GICA</span></b></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">&nbsp;Gesti&oacute;n de su red de centros: Desarrollo de negocio y balanceo de   carga</p>      <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Departamento de I+D</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Departamento de RRHH</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Desarrollo de proyectos integrales</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Mantenimiento</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Gesti&oacute;n de la informaci&oacute;n</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Desarrollo de software</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Internet Factory</span></p></td>   <td width="50%" valign="top" style="width:50.0%;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt"><p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><b><span lang="EN-US" style="color:white;background:blue">TECHNOLOGY-BASED   ENTERPRISES</span><span lang="EN-US" style="color:white"> </span></b></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">&nbsp;</span><span lang="EN-US">Management of their Network of Centers: business   development and balancing charges</span></p>      <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Department of I+D (Research and Development)</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Department of RRHH (Human Resources)</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Development of integrated Projects</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Maintenance</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Information Management</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Software Development</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Internet Factory</span></p><p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">&nbsp;</p></td>  </tr>  <tr style="height:83.75pt">   <td width="50%" valign="top" style="width:50.0%;border:solid windowtext 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt;height:83.75pt"><p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><b><span lang="EN-US" style="color:white;background:blue">EMPRESAS   AGROALIMENTARIAS</span></b></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">&nbsp;</span>Gesti&oacute;n de producci&oacute;n</p>      <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Gesti&oacute;n de calidad</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Gesti&oacute;n log&iacute;stica</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Gesti&oacute;n comercial</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">&Aacute;rea de comercio exterior</p></td>   <td width="50%" valign="top" style="width:50.0%;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt;height:83.75pt"><p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><b><span lang="EN-US" style="color:white;background:blue">AGRICULTURAL   AND NUTRITION COMPANIES</span></b></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">&nbsp;</span><span lang="EN-US">Production Management</span></p>      <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Quality Control</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Logistical Management</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Commercial Management</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Foreign Commerce</p><p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">&nbsp;</p></td>  </tr>  <tr>   <td width="50%" valign="top" style="width:50.0%;border:solid windowtext 1.0pt;
  border-top:none;padding:0cm 5.4pt 0cm 5.4pt"><p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><b><span style="color:white;background:blue">ORGANIZACIONES   EMPRESARIALES </span></b>&nbsp;&nbsp; Ejemplos de internships <a href="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/CAMARA/SPANISH/CONFAES.pdf"><span style="background-color: Yellow;">aqu&iacute; </span></a>y <a href="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/CAMARA/SPANISH/CAMARA.pdf"><span style="background-color: Yellow;">aqu&iacute;</span></a></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">&nbsp;<strong>Prestaci&oacute;n de servicios para las empresas:</strong></p>      <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Creaci&oacute;n de empresas</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Asesor&iacute;a Jur&iacute;dica</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Asesor&iacute;a en Innovaci&oacute;n y Desarrollo</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Asesor&iacute;a en Comunicaci&oacute;n y Marketing corporativo</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Asesor&iacute;a en Comercio Exterior</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Informes de coyuntura econ&oacute;mica</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Cursos de formaci&oacute;n para empresarios</p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal">Seminarios, Talleres, jornadas.</p></td>   <td width="50%" valign="top" style="width:50.0%;border-top:none;border-left:
  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
  padding:0cm 5.4pt 0cm 5.4pt"><p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><b><span lang="EN-US" style="color:white;background:blue">ORGANIZATION   OF ENTERPRISES</span></b>&nbsp; Examples of internships <a href="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/CAMARA/ENGLISH/confaes.pdf"><span style="background-color: Yellow;">here </span></a>and <a href="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/CAMARA/ENGLISH/camara.pdf"><span style="background-color: Yellow;">here</span></a></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><strong><span lang="EN-US">Services for Companies:</span></strong></p>      <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Creation of Companies</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Legal Advising</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Innovation and Development Advising</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Communication and Corporative Marketing Advising</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Foreign Commerce Advising</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Reports on Economic Stituation</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Educational Courses for Managers</span></p>   <p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:
  normal"><span lang="EN-US">Seminars, Workshops, Working days</span></p></td>  </tr> </tbody></table><p>&nbsp;</p></html>
<html><!--[if !vml]--><p><span>         </span><img width="256" hspace="12" height="193" align="right" alt="" v:shapes="_x0000_s1029" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/academic_program_clip_image006.jpg" /><span>         </span><!--[endif]--><span lang="EN-GB" style=""><span>This is an internship opportunity where Interns will assist as English-Spanish-English interpreters in general medicine consultations between the physician and the large number of international students who come to </span><st1:city w:st="on"><span>Salamanca</span></st1:city><span> in the summer to learn Spanish through </span><em><span>Cursos Internacionales </span></em><span>offered by the </span><st1:place w:st="on"><st1:placetype w:st="on"><span>University</span></st1:placetype><span> of </span><st1:placename w:st="on"><span>Salamanca</span></st1:placename></st1:place><span>. Inters will also have the opportunity to assist with consultations related to sports medicine.</span></span></p></html>
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
//{{{
config.options.chkHttpReadOnly = false;
readOnly = false;
showBackstage = true;
//}}}
<html><span>       </span><p><!--[if !vml]--><span>         </span><img width="266" vspace="6" hspace="12" height="133" align="left" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/academic_program_clip_image004.jpg" alt="Salamanca Clay Formacion" v:shapes="_x0000_s1028" /><span>         </span><!--[endif]--><span>         </span><span lang="EN-GB" style=""><span>Clay Formaci&oacute;n Internacional S.L. is a firm, a spin-off of the </span><st1:place w:st="on"><st1:placetype w:st="on"><span>University</span></st1:placetype><span> of </span><st1:placename w:st="on"><span>Salamanca</span></st1:placename></st1:place><span>, which offers consulting services in Information Technologies. Students wishing to intern with Clay Formaci&oacute;n will be interviewed to ascertain their social, communicative and customer service skills. Clay Formaci&oacute;n offers one internship in each of the two summer sessions. The main aspect of the intern&rsquo;s work will center on dealings with potential international customers for the sale of products related with education in new technologies.</span></span></p></html>
<html><table height="305" cellspacing="0" cellpadding="0" border="0" width="453" style=""><tbody><tr><td><p><span style="font-size: larger;"><span style="font-family: Arial;">Professor Candelas Gala <br />  Program Director<br />  538 Greene Hall <br />  Winston-Salem, NC 27109 <br />  Tel: (336) 758-5485; (336) 758-4206 <br />  Fax: (336) 758-4432 <br />      Email: </span></span><font face="Bell MT"><a href="mailto:galacs@wfu.edu"><span style="font-size: larger;"><span style="font-family: Arial;">galacs@wfu.edu</span></span></a></font><a href="mailto:petersjr@wfu.edu"><span style="font-size: larger;"><span style="font-family: Arial;"><br />      </span></span></a></p></td><td><p><span style="font-size: larger;"><span style="font-family: Arial;"><img hspace="10" height="108" align="middle" width="165" src="http://www.wfu.edu/romancelanguages/faculty/Photos/Candelas%20Gala.jpg" alt="" /></span></span></p></td></tr><tr><td><span style="font-size: larger;"><span style="border-collapse: separate; color: rgb(0, 0, 0); font-family: arial; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;" class="Apple-style-span">Prof. G&ordf; Garrido, Javier<br />On-Site Director<br />Coordinaci&oacute;n de Grupos<br />Wake Forest University en Salamanca<br />C/ Toro, 84-90, Oficina Izquierda<br />37001 Salamanca<br />Telf/Fax: (+34) 923 21 24 66<br />M&oacute;vil/cell: (+34) 655 61 23 98<br /></span></span><span style="font-size: larger;"><span style="font-family: Arial;">Email: </span></span><font face="Bell MT"><a href="javascript:location.href='mailto:'+String.fromCharCode(103,97,114,114,105,100,111,64,119,102,117,46,101,100,117)+'?'"><span style="font-size: larger;"><span style="font-family: Arial;">garrido@wfu.edu</span></span></a></font><span style="font-size: larger;"><span style="border-collapse: separate; color: rgb(0, 0, 0); font-family: arial; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;" class="Apple-style-span"><br /></span></span></td><td><img src="http://www.wfu.edu/romancelanguages/study_abroad/Salamanca/images/yo1.jpg" alt="" /></td></tr></tbody></table><p><span style="font-family: Arial;"><span style="font-size: medium;"><b>For more information on admissions and       tuition please visit the Wake Forest University website:</b><br />      </span></span><font face="Bell MT"><a set="yes" linkindex="0" href="http://www.wfu.edu/"><span style="font-family: Arial;"><span style="font-size: medium;">http://www.wfu.edu/</span></span></a> </font></p></html>
''Estimated cost for each session, 2014 summer'' 
*Tuition: per 3 hours: $2700
*Program Fee  $1898
*Only for Chamber of Commerce Internships: $500 extra cost
|Credits|Regular internships|Chamber of Commerce internships|
|1 internship:  Total 3h:|'' $ 4598''|''$ 5098''|
|1 internship+1 course: Total 6h:|'' $ 7298''|''$ 7798''|

---------------------------------------
''Included:''
* Tuition and Academic Fees
* Full Room and Board (5 weeks, 3 daily meals, weekly laundry)
* Student Health Insurance
* Typical spanish welcome dinner
* Printer & Internet Access at the Wake Forest Center and at the University of Salamanca buildings.
* 2 group trips organized by the University of Salamanca: 1. Escorial - Ávila / 2. Segovia - La Granja
* All Books
''Not included:''
* Transportation to and from Salamanca, US passport and visa fees, optional trips offered in the program, and personal expenses and travel.   
<html><p><img alt="" src="http://corintio.usal.es/mostrarfoto.aspx?IdImagen=3" /></p><p><img align="left" src="http://corintio.usal.es/mostrarfoto.aspx?IdImagen=38" alt="" /></p><p>&nbsp;</p><p>&nbsp;</p><p>The University of Salamanca is the perfect place to learn Spanish and to get a first-hand look at present-day Spanish culture. Students and teachers from all over the world have been coming here to study with since 1929. Cursos Internacionales is in charge of welcoming foreign students who want to improve their language skills at the University Salamanca. At this internship you will be working closely with the director of studies who supervises the organization of all the academic aspects. This internship is highly recommended for education majors. Business and psychology majors are also welcome.<br /><br /><img align="right" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/academic_program_clip_image001.jpg" style="width: 398px; height: 298px;" alt="" />First Summer Session</p><ul><li>Helping with the preparation of the placement test</li><li>Distributing materials for the placement test.</li><li>Helping with the distribution of teaching materials to programs</li><li>Helping with the academic coordination during periods in between classes (during the first week of the course)</li><li>Helping with the distribution of class lists and trasncripts</li><li>Helping with the supervision of teaching materials that were lent out.</li><li>Helping with the distribution of evaluative questionnaires during the last week of the course.</li></ul><p><br />Second Summer Session</p><ul><li>Helping with the preparation of the placement test.</li><li>Distributing materials for the placement test</li><li>Helping with the distribution of teaching materials to programs</li><li>Helping with the academic coordination during periods in between classes (during the first week of the course)</li><li>Helping with the distribution of class lists and transcripts</li><li>Helping with the supervision of teaching materials that were lent out.</li><li>Helping with the distribution of evaluative questionnaires during the last week of the course.</li><li>Helping with the supervision of class attendance in the Outdoors Conversation Class</li><li>Helping with the presentation of teaching materials by pressesHelping with the distribution by classrooms of different materials for students and professors.</li></ul></html>
<html><p><span>       </span></p><p><span lang="EN-GB" style=""><o:p></o:p></span></p><p><span>       </span></p><p><!--[if !vml]--><span>         </span><!--[endif]--><span>         </span><strong><span lang="EN-GB" style=""><span lang="EN-GB" style=""><img width="155" vspace="6" hspace="6" height="207" align="right" v:shapes="_x0000_s1047" alt="EstivalTour" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/sida.jpg" /></span></span></strong><span lang="EN-GB" style=""><span>In C&aacute;ritas Salamanca you will work closely with people affected by AIDS. This internship is only thought for students with a great sense of charity. At C&aacute;ritas you will help giving information and accompanying patients and their families, in the process of illness and death. You will also help them in their social and labour insertion. At the hospital you will take turns with the families helping them to take the necessary rest. You will also help the families improve their poor relationships with the patient. Your presence will be much appreciated at the &ldquo;House home&rdquo;, a shelter for those who have no alternative housing and / or need permanent care.</span></span></p></html>
"Mis pollitos" is one of the biggest company's in Salamanca dedicated to the day daycare of small children in the City.
This internship is specially indicated for education majors. You will be working closely with 0-4 years children. Your English will be very welcome for teaching them them their fist words in a foreign language. By the way you will have a continuous Spanish contact with the carers of the center.
<html><img hspace="12" align="right" width="400" src="http://2.bp.blogspot.com/-IoRV5nJscJE/T_r7AWvBqVI/AAAAAAAAAE8/z49TS_yudPs/s1600/959764484_02969045_11112011_171105.jpg" alt="" /><img hspace="12" align="right" width="400" src="http://www.grupomispollitos.es/373/activos/imagen/wpoll_fotos_centro_1041full-d8Y8xzzru2fqUDVD.jpg"  alt="" /></html>
[[Overview]]
<html><img hspace="12" align="left" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/dentista.jpg" alt="" /><p>Victoria, the owner of this small and very familiar dental clinic is Professor of odontology at the University of Salamanca. Her daughter is dentist too and both will be glad to have a student like you helping them during their regular work at the clinic. If you are a pre-med major and you would like to be a dentist too, then this is the best insternship that you can find in Salamanca.<span><!--[if !vml]--><span> </span></span></p><p>&nbsp;</p></html>
Summer 1 and Summer 2. Students may apply for either one session or for both. The Summer 1 session will run from the ending of may to the ending of June, and the Summer 2 session will run from approximately the first week in July through the first of August. More specific dates will be posted soon, check this [[Calendar]]
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<!--}}}-->
Our travels will take us to the unforgettable, awe-inspriring 16th Century monastery of the Escorial. Raised in 1563 as a monument to his father Charles V, the Escorial stands as an icon of the Spanish Empire and its audacios grandiosity. Not far from Madrid near an obscure town
this overwhelming construction encompasses a palace, royal pantheon and mausoleum, basilica and library. Its enormous installations include 15 cloisters, 16 patios, 300 cells, 9 organs, 1600 paintings, 88 fountains and 2673 windows and 1200 doors. This is the paramount symbol of the Empire at its height and the massive power and wealth it wielded. Today, visiting it is an almost surreal glimpse at a time when Spain believed it was Divinely destined to and capable of ruling the world.
Take your camera, but no photo can capture the scope of this stunning creation.
[img[http://www.wfu.edu/romancelanguages/study_abroad/Salamanca/images/escorial.JPG]]
Students applying for the Wake Forest/Salamanca Internships Summer Program must complete an application form which will be available early in the spring semester from the Department of Romance Languages. The deadline for receipt of applications is April 10.

Students from other universities who wish to apply should contact their respective schools about credit transfers and other academic issues. Language recommendation form.
/%
|Name|EmbedTiddlers|
|Source|http://www.TiddlyTools.com/#EmbedTiddlers|
|Version|1.2.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|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|transclude a list of tiddlers in a specific order|

usage:
   <<tiddler EmbedTiddlers with: "TiddlerName [[TiddlerName with spaces]] TiddlerName ...">>
or
   <<tiddler EmbedTiddlers with: @TiddlerName>>
or
   <<tiddler EmbedTiddlers with: =tagValue sortby>>

where
	@TiddlerName
		specifies a //separate// tiddler containing the space-separated,
		bracketed list of tiddlers to transclude (e.g., DefaultTiddlers)
	=tagValue
		embeds all tiddlers tagged with the indicated value
	sortby (optional)
		specifies a tiddler field for sorting the results (default="title")
		"+" or "-" prefix indicates the sort direction (ascending/descending),
		e.g., "-modified" sorts by tiddler modification date, most recent first

Note: if MatchTagsPlugin is installed, you can use FULL BOOLEAN LOGIC EXPRESSIONS
in place of the "tagValue" (following the leading "=").  However, because the boolean
expression will contain spaces, it MUST be enclosed in [[...]], like this:

<<tiddler EmbedTiddlers with: [[=settings AND NOT systemConfig]]>>

%/<script>
	var list='$1';
	var sortby='title'; if ('$2'!='$'+'2') sortby='$2';
	var tids=[];
	if (list.substr(0,1)=='=') {
		var fn=store.getMatchingTiddlers||store.getTaggedTiddlers;
		var tagged=store.sortTiddlers(fn.apply(store,[list.substr(1)]),sortby);
		for (var t=0; t<tagged.length; t++) tids.push(tagged[t].title);
	} else {
		if (list.substr(0,1)=='@') list=store.getTiddlerText(list.substr(1),'');
		var tids=list.readBracketedList();
	}
	var out='';
	for (var i=0; i<tids.length; i++) out+='<<tiddler [['+tids[i]+']]>>';
	return out;
</script>
<html><span>       </span><p><!--[if !vml]--><span>         </span><img width="305" vspace="6" hspace="6" height="38" align="left" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/estivaltour.jpg" alt="EstivalTour" v:shapes="_x0000_s1032" /><span>         </span><!--[endif]--><span>         </span><span lang="EN-GB" style=""><span>Viajes ESTIVALTOUR is one of the leading travel agencies in </span><st1:country-region w:st="on"><st1:place w:st="on"><span>Spain</span></st1:place></st1:country-region><span>. The group has over 200 offices across the </span><st1:place w:st="on"><span>Peninsula</span></st1:place><span>. Their large experience, almost a decade advising and recommending customers, is their best background. During the internship you will be part of a very familiar and small team of travel agents. Your duties will involve all daily activities in a travel agency such as answering calls, advising national and international customers, accounting, updating web pages, etc.</span></span></p></html>
/***
|''Name:''|FCKeditorPlugin|
|''Description:''|Wysiwyg editor for TiddlyWiki using FCKeditor.|
|''Version:''|1.1.1|
|''Date:''|Dec 21,2007|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.2.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
!Demo:
On the plugin [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], see and edit [[WysiwygDemo]].
!Installation:
#download and unzip [[FCKeditor|http://www.fckeditor.net/download]] (by default, in a wiki subfolder, such that the relative path "fckeditor/fckeditor.js" is right).
#import [[FCKeditorPlugin]] (systemConfig tagged)
#add the following text to MarkupPreHead : {{{<script type="text/javascript" src="fckeditor/fckeditor.js"></script>}}}
#customize FCKeditorPath if needed (in MarkupPreHead and in options below)
#save and reload
#use the <<toolbar editHtml>> button in the tiddler's toolbar (in default ViewTemplate) or add {{{editHtml}}} command in your own toolbar.
! Useful Addons
*[[HTMLFormattingPlugin|http://www.tiddlytools.com/#HTMLFormattingPlugin]] to embed wiki syntax in html tiddlers.<<br>>//__Tips__ : When this plugin is installed, you can use anchor syntax to link tiddlers in wysiwyg mode (example : #example). Anchors are converted back and from wiki syntax when editing.//
*[[TaggedTemplateTweak|http://www.TiddlyTools.com/#TaggedTemplateTweak]] to use alternative ViewTemplate/EditTemplate for tiddler's tagged with specific tag values.
!Configuration options :
|FCKeditor folder (absolute or relative)|<<option txtFCKeditorPath>> |
|FCKeditor custom configuration script path (relative or absolute)<<br>>[[Example|fckeditor/editor/custom_config.js]] : {{{ fckeditor/editor/custom_config.js}}}|<<option txtFCKCustomConfigScript>>|
|Toolbar name ("Default", "Basic" or custom)<<br>>See [[FCKeditor documentation|http://wiki.fckeditor.net/Developer%27s_Guide/Configuration/Toolbar]] for more information on custom toolbars|<<option txtFCKToolbar>>|
|FCKeditor default height (if blank = 500px)|<<option txtFCKheight>>|
|Template called by the {{{wysiwyg}}} button|EditHtmlTemplate|
!Code
***/
//{{{
config.options.txtFCKeditorPath = config.options.txtFCKeditorPath ? config.options.txtFCKeditorPath : "fckeditor/";
config.options.txtFCKCustomConfigScript = config.options.txtFCKCustomConfigScript ? config.options.txtFCKCustomConfigScript : "";
config.options.txtFCKToolbar = config.options.txtFCKToolbar ? config.options.txtFCKToolbar : "";
config.options.txtFCKheight = config.options.txtFCKheight ? config.options.txtFCKheight : "500px";

config.macros.editHtml = {
	handler : function(place,macroName,params,wikifier,paramString,tiddler) {
		var field = params[0];
		var height = params[1] ? params[1] : config.options.txtFCKheight;
		if (typeof FCKeditor=="undefined"){
			displayMessage(config.macros.editHtml.FCKeditorUnavailable);
			config.macros.edit.handler(place,macroName,params,wikifier,paramString,tiddler);

		}
		else if (field) {
			var e = createTiddlyElement(null,"div");
			var fckName = "FCKeditor"+ Math.random();
			if(tiddler.isReadOnly())
				e.setAttribute("readOnly","readOnly");
			e.setAttribute("editHtml",field);
			if (height) e.setAttribute("height",height);
			e.setAttribute("fckName",fckName);
			place.appendChild(e);
			var fck = new FCKeditor(fckName);
			fck.BasePath = config.options.txtFCKeditorPath;
			if (config.options.txtFCKCustomConfigScript) fck.Config["CustomConfigurationsPath"] = config.options.txtFCKCustomConfigScript ;
			if (config.options.txtFCKToolbar) fck.ToolbarSet = config.options.txtFCKToolbar;
			fck.Height=height;
			var re = /^<html>(.*)<\/html>$/m;
			var fieldValue=store.getValue(tiddler,field);
			var htmlValue = re.exec(fieldValue);
			var value = (htmlValue && (htmlValue.length>0)) ? htmlValue[1] : fieldValue;
			value=value.replace(/\[\[([^|\]]*)\|([^\]]*)]]/g,'<a href="#$2">$1</a>');
			config.macros.editHtml.FCKvalues[fckName]=value;
			e.innerHTML = fck.CreateHtml();
		}
	},
        gather : function(e) {
            var name = e.getAttribute("fckName");
            var oEditor = window.FCKeditorAPI ? FCKeditorAPI.GetInstance(name) : null;
            if (oEditor) {
                        var html = oEditor.GetHTML();
			if (html!=null) 
                                    return "<html>"+html.replace(/<a href="#([^>]*)">([^<]*)<\/a>/gi,"[[$2|$1]]")+"</html>"; 
            }	
        },
	FCKvalues : {},
	FCKeditorUnavailable : "FCKeditor was unavailable. Check plugin configuration and reload."
}


window.FCKeditor_OnComplete= function( editorInstance ) {
        var name=editorInstance.Name;
	var value = config.macros.editHtml.FCKvalues[name];
	delete config.macros.editHtml.FCKvalues[name];
	oEditor = FCKeditorAPI.GetInstance(name);
	if (value) oEditor.SetHTML(value);
}

Story.prototype.previousGatherSaveEditHtml = Story.prototype.previousGatherSaveEditHtml ? Story.prototype.previousGatherSaveEditHtml : Story.prototype.gatherSaveFields; // to avoid looping if this line is called several times
Story.prototype.gatherSaveFields = function(e,fields){
	if(e && e.getAttribute) {
		var f = e.getAttribute("editHtml");
		if(f){
			var newVal = config.macros.editHtml.gather(e);
			if (newVal) fields[f] = newVal;
		}
		this.previousGatherSaveEditHtml(e, fields);
	}
};

config.shadowTiddlers.EditHtmlTemplate = config.shadowTiddlers.EditTemplate.replace(/macro='edit text'/,"macro='editHtml text'");

config.commands.editHtml={
	text: "wysiwyg",
	tooltip: "Edit this tiddler with a rich text editor",
	readOnlyText: "",
	handler : function(event,src,title) {
		clearMessage();
		var tiddlerElem = document.getElementById(story.idPrefix + title);
		var fields = tiddlerElem.getAttribute("tiddlyFields");
		story.displayTiddler(null,title,"EditHtmlTemplate",false,null,fields);
		return false;
	}
}

config.shadowTiddlers.ViewTemplate = config.shadowTiddlers.ViewTemplate.replace(/\+editTiddler/,"+editTiddler editHtml");

//}}}
/***
|''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|FramedLinksPlugin|
|Source|http://www.TiddlyTools.com/#FramedLinksPlugin|
|Version|1.0.5|
|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|createExternalLink|
|Options|##Configuration|
|Description|clicking an external link opens an IFRAME following the link instead of opening a new tab/window|
This plugin causes clicks on external links to be rendered into inline frames (~IFRAMEs) instead of opening them in new browser tabs/windows.
!!!!!Usage
<<<
Just place an external link into your tiddler content using standard TiddlyWiki syntax.  When this plugin is enabled (see Configuration), an IFRAME will be created dynamically whenever you click the external link.  Clicking on the link again removes the IFRAME.  You can hold down a modifier key (shift, control, or alt) while clicking a specific link to ''temporarily'' bypass the plugin-enhanced IFRAME handling and use the standard link handling behavior for that link.
<<<
!!!!!Configuration
<<<
<<option chkFramedLinks>> display external links using inline frames
{{{usage: <<option chkFramedLinks>>}}}

IFRAME size  (use CSS units: %, em, px, cm, in):
>width: <<option txtFrameWidth>> height: <<option txtFrameHeight>>
>{{{usage: <<option txtFrameWidth>> <<option txtFrameHeight>>}}}
<<<
!!!!!Examples
<<<
Enable the plugin (see Configuration)... then try these links:
*http://www.TiddlyWiki.com
*http://www.TiddlyTools.com
*http://groups.google.com/group/TiddlyWiki/topics
<<<
!!!!!Revisions
<<<
2007.11.29 [1.0.5] added slider animation and improved CSS handling for IFRAME height/width to maximize display area
2007.11.29 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.FramedLinks= {major: 1, minor: 0, revision: 5, date: new Date(2007,11,29)};

if (config.options.chkFramedLinks==undefined) config.options.chkFramedLinks=true;
if (config.options.txtFrameWidth==undefined) config.options.txtFrameWidth="100%";
if (config.options.txtFrameHeight==undefined) config.options.txtFrameHeight="80%";

window.framedLinks_createExternalLink=createExternalLink;
window.createExternalLink=function(place,url)
{
	var link=this.framedLinks_createExternalLink.apply(this,arguments);
	link.onclick=function(ev) { var e=ev?ev:window.event;
		if (!config.options.chkFramedLinks || e.ctrlKey || e.shiftKey || e.altKey) return; // BYPASS
		var p=this.parentNode; 
		var f=this.nextSibling?this.nextSibling.firstChild:null; // get the IFRAME... maybe...
		var w=config.options.txtFrameWidth; if (!w || !w.length) w="100%";
		var h=config.options.txtFrameHeight; if (!h || !h.length) h="80%";
		if (h.indexOf("%")) h=(findWindowHeight()*h.replace(/%/,"")/100)+"px"; // calc height as % of window
		var showing=f && f.nodeName.toUpperCase()=="IFRAME"; // does IFRAME really exist?
		var stretchCell=p.nodeName.toUpperCase()=="TD" && w.indexOf("%")!=-1 && w.replace(/%/,"")>=100;
		if (!showing) { // create an iframe
			link.style.display="block"; // force IFRAME onto line following link
			if (stretchCell) { p.setAttribute("savedWidth",p.style.width); p.style.width="100%"; } // adjust TD so IFRAME stretches
			var wrapper=createTiddlyElement(null,"span"); // wrapper for slider animation
			wrapper.setAttribute("url",this.href); // for async loading of frame after animation completes
			var f=createTiddlyElement(wrapper,"iframe"); // create IFRAME
			f.style.backgroundColor="#fff"; f.style.width=w; f.style.height=h;
			p.insertBefore(wrapper,this.nextSibling);
			function loadURL(wrapper) { var f=wrapper.firstChild; var url=wrapper.getAttribute("url");
				var d=f.contentDocument?f.contentDocument:(f.contentWindow?f.contentWindow.document:f.document);
				d.open(); d.writeln("<html>connecting to "+url+"</html>"); d.close();
				try { f.src=url; } // if the iframe can't handle the href
				catch(e) { alert(e.description?e.description:e.toString()); } // ... then report the error
				window.scrollTo(0,ensureVisible(wrapper));
			}
			if (!config.options.chkAnimate) loadURL(wrapper);
			else {
				var morph=new Slider(wrapper,true);
				morph.callback=loadURL;
				morph.properties.push({style: 'width', start: 0, end: 100, template: '%0%'});
				anim.startAnimating(morph);
			}
		} else { // remove iframe
			link.style.display="inline"; // restore link style
			if (stretchCell) p.style.width=p.getAttribute("savedWidth"); // restore previous width of TD
			if (!config.options.chkAnimate) p.removeChild(f.parentNode);
			else {
				var morph=new Slider(f.parentNode,false,false,"all");
				morph.properties.push({style: 'width', start: 100, end: 0, template: '%0%'});
				anim.startAnimating(morph);
			}
		}
		e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); return false;
	}
	return link;
}
//}}}
<html><object style="width:1024px;height:768px" ><param name="movie" value="http://static.issuu.com/webembed/viewers/style1/v1/IssuuViewer.swf?mode=embed&amp;layout=http%3A%2F%2Fskin.issuu.com%2Fv%2Flight%2Flayout.xml&amp;documentId=090307103230-727a9c92ec0f4486878a9d92b8b699d3&amp;docName=salamanca_handbook_internship&amp;username=wakeforest&amp;loadingInfoText=Internship%20program%20handbook" /><param name="allowfullscreen" value="true"/><param name="menu" value="false"/><embed src="http://static.issuu.com/webembed/viewers/style1/v1/IssuuViewer.swf" type="application/x-shockwave-flash" allowfullscreen="true" menu="false" style="width:1024px;height:768px" flashvars="mode=embed&amp;layout=http%3A%2F%2Fskin.issuu.com%2Fv%2Flight%2Flayout.xml&amp;documentId=090307103230-727a9c92ec0f4486878a9d92b8b699d3&amp;docName=salamanca_handbook_internship&amp;username=wakeforest&amp;loadingInfoText=Internship%20program%20handbook" /></object></html>
DEPARTMENT OF ROMANCE LANGUAGES STUDY ABROAD: 
INFORMATION AND POLICIES 

The Programs 

The Department of Romance Languages sponsors semester and year long abroad programs, in the fall in Dijon (France), in the fall and spring in Salamanca (Spain), and intensive summer language institutes (ISLI) in Querétaro (Mexico) and in Venice, Italy. As Wake Forest programs, these study abroad opportunities are evaluated in accordance with Wake Forest guidelines, fall under the Wake Forest Honor Code, and are administered as a regular Wake Forest study program. As part of these academic programs, and included in their respective costs, a number of group excursions and trips to places of cultural interest are offered. 

The Director 

The Director of the study abroad program is a faculty member in the Department of Romance Languages who is authorized to supervise all aspects of the program. The Director remains with the group throughout the length of the program, accompanies students on group excursions, and is available to aid, advise, and attend to students and their concerns during the stay abroad. In Dijon, Salamanca, and Venice the Director teaches one course. In Querétaro, the Director may on occasion teach Spanish 213. 

The Faculty 

Except for the course taught by the Director, all courses are taught by professors from universities located in the respective study abroad sites. The Department of Romance Languages considers this collaboration with native professors an asset to its programs. Their European or Latin American background and perspectives provide students with a more international and global approach, an essential goal of the study abroad experience. Students should expect their professors to offer a different approach to the discipline, not only in perspective, but also in terms of course plan and evaluative tools. Students should not expect the teaching style of their Spanish, Italian, French, or Mexican professors to replicate the style of the professors on the Wake Forest campus. 

Courses 

Courses taken as part of the Romance Languages study abroad programs are Wake Forest courses and are evaluated as such. All courses are taught in the target language by the director and/or the faculty from the local university. Course content is presented either in a syllabus or in a general description of the course. 

Grades 

As part of the Wake Forest curriculum, courses taken as part of any of the Romance Languages study abroad programs are evaluated in accordance with the grading system on campus. Native professors are provided with a translation into the respective language of the description of grades published in the Wake Forest undergraduate bulletin. When the grading system used is that of the country of the study abroad site, grades are translated into the American system before they are reported to the Office of the Registrar. 

Cultural Activities 

Participants in the Romance Languages study abroad programs are encouraged to explore the culture of the country where they study. Program monies underwrite many cultural activities, including group trips and excursions. During such trips, students must remain with the group and follow its itinerary. A student may not separate from the group to visit other cities. The program will pay for cultural activities under the following circumstances: when the group is together; when, in the judgment of the Director, the activity is related to the Program or to a course; and when the Director organizes the activity. In the event that a student declines to participate in a cultural activity sponsored by the program, s/he will not be reimbursed for the cost of that activity. 

Books 

The program will pay for books and other materials (e.g. newspapers) that students need for their coursework while studying abroad. The Director will inform the group of where texts may be picked up or purchased. Students may receive some of their textbooks at Wake Forest before leaving the U.S. while other texts may be purchased after they arrive at the study abroad site. 

Meals 

For students participating in the Salamanca program, all meals are provided by their respective host families. Querétaro students receive breakfast and dinner from their host families and purchase lunch for themselves. Host families participating in the Dijon program offer students a daily breakfast and two evening meals per week; they receive a daily allowance from the Director to pay for the cost of other meals, available in cafes or restaurants in town or at student cafeterias at the university. Breakfast and dinner are included during all excursions and trips that are a part of the academic program in Salamanca and Dijon; during these, students also receive a daily allowance for lunch. Students will receive no reimbursement for meals they miss either with the host family or during group excursions and trips. 

Transportation 

The Dijon and Salamanca programs pay for students’ roundtrip transportation costs to and from the foreign study site (up to $1,200). While the program will pay transportation costs for group excursions and trips, when students travel on their own during weekends and other breaks, they must pay their own way. Because Dijon and Salamanca pose different local transportation needs, policies pertaining to local transportation are different at the two sites. Participants in the Dijon program will be provided funds to purchase the bus passes they will need to get to their university classes. In Salamanca, no travel allowance will be provided for transportation unless a student is housed outside a normal radius from the town center. Students in Querétaro and Venice provide their own transportation to and from Mexico/Italy and within Querétaro and Venice. 


E-mail 

Students participating in the Romance Languages study abroad programs should not expect to find the same technological infrastructure and on-demand access to e-mail and the Internet that they have on the Reynolda Campus. Arrangements will be made, however, for them to have access to e-mail accounts while they are in Dijon and Salamanca, although, this may be on a more limited basis than what they are accustomed to. All Wake Forest students participating in a study abroad program are required to complete forms on which they state their intent to leave, store, or take their computer with them. They must also sign computer liability and insurance forms. 

Medical Insurance 
Students enrolled in the Salamanca program receive insurance, paid by the Program, through the Office of International Studies at the University of Salamanca. Students must be prepared, however, to pay for any medical expenses not covered by the insurance and then to present receipts for those expenses to their insurance company in the United States. Students enrolled in the Dijon and Salamanca programs must confirm with their insurance company that their policy will cover their medical expenses while they are abroad. They will then be expected to pay their own medical expense and present receipts to their insurance company once they return to the United States. Students in Querétaro and Venice must have medical insurance in the United States. 

Visits from Family 
Students are encouraged to invite their families to visit them while they are abroad. Such visits should take place after students have settled into life with their host families; it is recommended that families from the United States not visit during the first three weeks of the program. Visiting family members and friends should not expect to stay in the home of the host family. It will not be possible for anyone not enrolled in the Program to participate in group trips and excursions. 

Important: Salamanca Policies 
A Free airfare is extended to all students whose flight falls under a $1200.00 limit. The program will do everything to negotiate the cheapest airfares possible for its students, but can not guarantee that all flights will fall under this limit. Students whose ticket passes this limit in cost may be asked to pay a penalty to cover the difference. As of the drafting of this memorandum (September 19, 2003) all students will receive tickets exclusively negotiated by the Director and may not arrange their own travel expecting compensation from WFU in any amount towards their travel. However, if the director determines that students will generally receive more favorable fares through individual rather than group purchase, WFU in Salamanca may extend compensation of 
up to $1200.00 to students purchasing their own tickets. The director will announce any change to the standing ticket policy in due time. 

B WFU in Salamanca does not take responsibility for arranging student visas, which are required for participation in the program. All students and parents should read carefully the section below regarding visas. 

C All students participating in the program must reside with the families approved and assigned to each student by the program. Students may not make their own arrangements for residence, as the home-stay is considered an essential part of the program. 

D Students have internet access in Salamanca at the WFU Center. Students may receive a cash stipend to defray the costs of printing required class work at another facility. 

E Students will receive a cash stipend from their director for meals on all group trips. This stipend is calculated to defray the costs of dining at reasonably-priced establishments, but is not guaranteed to cover all dining expenses that students may incur. 

F Group travel is a mandatory component of the program. Students may not abbreviate their participation in or skip these trips for personal reasons. Only program participants may travel on group transportation and lodge in group facilities on all official trips. Any friends or family seeing students during group trips must work around the group schedule in order to visit with students. 

G. All students are automatically covered by medical insurance under Sanitas for the entire duration of the program. No solicitation of coverage is necessary. Important Note Regarding Visas 

Students participating in the WFU in Salamanca program are required to obtain a student visa from the Spanish embassy covering their state of residence prior to departure from Spain. The WFU in Salamanca program does not take responsibility for the successful solicitation of student visas or oversee the visa application process. The following information is intended to assist students, but does not represent a commitment on the University’s part to secure student visas for our program participants. Foreign visitors to Spain are entitled to stay in the country for 3 months on a tourist visa, which is issued during air travel and requires no previous solicitation. Go to www.spainemb.org and see the student visa information on this WFU website. Some additional tips will be helpful: 

1. Be sure to find the Spanish consulate with jurisdiction over your home state – the state where you maintain permanent residence. This is where you must request your application. 

2. Contact your local Spanish consulate by telephone and by letter to request a student visa application. Using both mediums will reduce the chance for oversight of your request by the Consulate. You must request a form personally. The University cannot do it for you, and you cannot make copies of others’ forms. 

3. When you call the Consulate, ask them if you can send in your application materials by mail, with your visa to be delivered to you by mail. Some consulates will allow the process by mail, and some will require you to come in person. 

4. Request an application and gather up your materials as soon as possible, but DO NOT apply as soon as possible. Your application should be sent during a specific time window. (As of 2002 the Washington Consulate recommended that applicants send their application no more than 90 days and no less than 60 days before travel. Check with your local consulate as to filing time recommendations.) 

5. See the web page for the materials required for the visa. Under the section with various options from which you must submit one document, you should choose the “letter from the study abroad program assuming financial responsibility” for you. This information will be provided in letters from WFU. As these WFU letters must be addressed individually to each Consulate General, please contact the Program Director with a short request for this letter (by e-mail is fine) and the location of your Consulate. We will have them signed and have you pick them up. 

6. When you get to Spain you can request the “Student Residency Card” from the police station, so don’t worry about that right now. 

<<list filter [tag[internship]]>>
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Version|1.6.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Insert Javascript executable code directly into your tiddler content.|

''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Usage
<<<
When installed, this plugin adds new wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be treated as embedded javascript and executed each time the tiddler is rendered.

''Deferred execution from an 'onClick' link''
By including a {{{label="..."}}} parameter in the initial {{{<script>}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered.  You may also include a {{{title="..."}}} parameter to specify the 'tooltip' text that will appear whenever the mouse is moved over the onClick link text

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

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

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

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

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

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

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

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

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

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

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

	handler: function(w) {
		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
		lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			if (lookaheadMatch[1]) { // load a script library
				// make script tag, set src, add to body to execute, then remove for cleanup
				var script = document.createElement("script"); script.src = lookaheadMatch[1];
				document.body.appendChild(script); document.body.removeChild(script);
			}
			if (lookaheadMatch[5]) { // there is script code
				if (lookaheadMatch[4]) // show inline script code in tiddler output
					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
				if (lookaheadMatch[2]) { // create a link to an 'onclick' script
					// add a link, define click handler, save code in link (pass 'place'), set link attributes
					var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",lookaheadMatch[2]);
					link.onclick=function(){try{return(eval(this.code))}catch(e){alert(e.description?e.description:e.toString())}}
					link.code="function _out(place){"+lookaheadMatch[5]+"\n};_out(this);"
					link.setAttribute("title",lookaheadMatch[3]?lookaheadMatch[3]:"");
					link.setAttribute("href","javascript:;");
					link.style.cursor="pointer";
				}
				else { // run inline script code
					var code="function _out(place){"+lookaheadMatch[5]+"\n};_out(w.output);"
					code=code.replace(/document.write\(/gi,'place.innerHTML+=(');
					try { var out = eval(code); } catch(e) { out = e.description?e.description:e.toString(); }
					if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
				}
			}
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
	}
} )
//}}}
/***
|''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);};})();}
// %/
''Internships in Salamanca''<br>Students are required to participate consistently and complete a series of written assignments relating to their experience and their internship field. Students should consult their program director for guidance with these assignments, and submit all work to him or her for evaluation. Since the professors are hired for all this courses related on student numbers, ''It is not allowed to drop any of the courses once in Salamanca''.  <br>
| !INTERNSHIP (Required) | !+ |>|>| !1 or 2 OPTIONS |
| ''10.00AM-2.00PM'' | ''+'' | ''OPTION 1 (5.00pm-6.30pm)''  | ''AND / OR'' | ''OPTION 2 (6.30pm-8.00pm)'' |
|''A) SPA 199. Internship in Spanish Language (3h)''<br>''B) SPA 391. Internship in Spanish for Business and the Professions. (3h)<br>Internship Sites:''<br><<list filter [tag[internship]]>>''*Sign up for one of the internships (SPN 199) and receive 3h toward graduation.<br>*Sign up for SPN 389I and count it towards the Certificate in Spanish for Business and the Professions''|~|''SPA 303i. Language Study in the Context of an Internship (3h) <br><br> Sign up for one of the internships (SPN 199) PLUS SPN 303S and receive up to 3 hours towards the Spanish major or minor''<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> |~|''A)  SPA 315. Literary and Cultural Studies of Spain. (3h) Required for  the Spanish major or minor''<br><br>''B)  SPA 319. Literary and Cultural Studies of Spanish America. (3h) Required for  the Spanish major or minor''<br><br>''C) SPA 369 Special Topics in Spanish and/or Spanish - American Literature and Culture (3h)''<br><br>''Course avalability depending on registration''<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>  |
<html><img hspace="10" height="308" width="411" align="right" alt="" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/academic_program_clip_image001.jpg" /></html>
''To participate in this program, it is required to sign up for a 3h Internship because it affords full immersion and a hands-on experience that regular academic courses not always provide. 
Also, it is strongly recommended to sign up for one of the two available course options.''


''SPA 199. Internship in Spanish Language.'' (3h) Under faculty direction, a student undertakes a language project in conjunction with an off-campus service commitment or internship. Includes, but is not limited to, vocabulary building, keeping a journal, and reading professional material. Pass/Fail only. P—SPA 309 or 309L; or SPN 319or 319L; or POI.

''SPA 303i. Language Study in the Context of an Internship.'' (1.5h, 3h) Development of oral proficiency and writing skills. Readings, discussions, and writing assignments based on texts relevant to internships being undertaken by students. Must be taken in conjunction with SPN 199. The combination of this course and SPN 199 may count as a maximum of 3 hours toward the major or minor. P—a 200-level course.

''SPA 391. Internship in Spanish for Business and the Professions.'' (1.5h-3h) Under faculty supervision, a student completes an internship in a bilingual or Spanish-speaking business or professional setting as part of an abroad experience. Does not count toward major or minor in Spanish. P—SPA 309 or 309L, or SPN 319 or 319L. Pass/Fail/only.

''SPA 315. The Making of Spain: Interdisciplinary Approaches to the Cultures of Spain''. (3h) Examination of Spain’s cultural pluralism through visual arts, architecture, film, music, and literature from the medieval period to the present. P—SPA 280 or 290; or SPN 216. (formerly SPN 317)

''SPA 319. Literary and Cultural Studies of Spanish America.'' (3h) Study of selected major works of Spanish - American literature within their historical and cultural contexts. Emphasis on Iinguistic and political structures, intellectual currents, art, music, and film to promote understanding of Spanish America’s historical development. P—SPA 280 or 290; or SPN 216. (formerly SPN 318)

''SPA 369 Special Topics in Spanish and/or Spanish - American Literature and Culture''. (1.5h or 3h) Topics vary. May be repeated for credit when topic changes. P—any course in SPA 310-319 sequence, or SPN 317 or 318; or POI. 
Prof. Gª Garrido, Javier
On-Site Director
Coordinación de Grupos
Wake Forest University en Salamanca
C/ Toro, 84-90, Oficina 6
37001 Salamanca
Telf: (+34) 923 21 24 66
Móvil/cell: (+34) 655 61 23 98
garrido@wfu.edu
javier.g.garrido@gmail.com
/***
|Name|JumpToTopMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#JumpToTopMacro|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Provides a toolbar command and a macro, that create a button for quickly jumping to the top of your TW.
Handy to place in the tiddler toolbar (edit the ViewTemplate)

Note: You can add an extra toolbar to the bottom of tiddlers as well with buttons of your choice, to allow easy access to the buttons/commands in it.

!Demo:
{{{<<top>>}}}<<top>>

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

!History:
*23-07-06: ver 1.0

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

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

config.commands.top.handler = function(event,src,title)
{
               window.scrollTo(0,0);
}
//}}}
<html><img hspace="12" align="right" src="http://www.construccionsalamanca.com/images/lafisconta.gif" alt="" />LAFISCONTA is a very prestigious Law Firm and Accountancy Office that offers all kinds of advisory services. You will be working closely with lawyers Alfonso and Roberto and the other team members supervising some cases and helping them with the daily office work. You will also be required to do some advising in English when it comes to work with foreign customers. This Internship is recommended for prospective law and business students .
<br>
<br>
<img hspace="12" align="right" width="400" src="http://www.lafisconta.com/5.jpg" alt="" /><img hspace="12" align="right" width="400" src="http://www.lafisconta.com/imagenes/5.jpg"  alt="" /></html>
<html><img hspace="12" align="right" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/bufetemix.jpg" alt="" /><p>Médez Abogados is a very prestigious Law Firm in Salamanca. You will be working closely with lawyer Carlos supervising some cases and helping him with the daily office work. You will also accompany him to the Court. This Internship is recommended for prospective law students.&nbsp;</p></html>
Known for its non-stop night life and congenial, open atmosphere, Madrid is one of Europe's most exciting cities. Made capital by Philip II in 1561 during the country's Golden Age, Madrid is the nation's melting pot where the peoples and cultures of the entire nation converge to create a unique metropolis. Take in the works at one of the world's greatest art museums at the Prado; review centuries of Spanish rule at the awesome Royal Palace; stroll through the pleasant gardens of the sprawling Retiro park in the middle of the city; see traditional and contemporary Spanish dance, cinema and drama in the country's leading theaters; enjoy drinks and typical fare in the breathtaking Plaza Mayor, just a few steps away from the official center of the country in the Puerta del Sol from which all distances are measured; learn why madrileños favorite phrase is "de Madrid al cielo" or "from Madrid to heaven" Madrid is Spain's New York and Washington rolled into one: a political epicenter chosen for its central location, a megalopolis where people from every corner of the country create a cultural collage of all things Spanish.
[img[http://www.wfu.edu/romancelanguages/study_abroad/Salamanca/images/madrid_palacio_real.jpg]]
| [[Overview]] | [[City|The City]] | [[Internships and Courses]] | [[Calendar]] | [[Trips|Trips and cultural activities]] | <html><a href="http://studyabroad.wfu.edu/index.cfm?FuseAction=Programs.ViewProgram&Program_ID=0002764871060407050477051A7005017C14057A740A1C727505010E747C73717472737D700702&Type=O&sType=O"><span style="color: white"><strong>Aplication Form</strong></span></a></html> | [[Student's Guide]] | [[Students Comments]] | [[Contact]] |bgcolor(#E7DCBA): <html><iframe src="http://www.google.com/talk/service/badge/Show?tk=z01q6amlqbo1nnta85r6nsa6rrs2up5q04bossc96u905e8e9g2scjcobgidt38qgqpaq807reqpbip26p2vkhk7t8ugk1u6duesgjf5m0i34361ebfn8f2uln82174q4p6g1jfeods8og7pdn4b99os119qgjvq6tv8nucolbv31n3aldvnnqr5vbpqdu4vne5fi6lor9gv7bbku3rgi219s9d6g&amp;w=250&amp;h=18" frameborder="1" allowtransparency="true" width="250" height="18"></iframe></html> |bgcolor(#E7DCBA):<<tiddler ToggleRightSidebar>> | <html><a href="http://www.facebook.com/home.php?#!/group.php?gid=87007975465"><img alt="facebook" src="http://www.wfu.edu/romancelanguages/study_abroad/Salamanca/images/facebook.gif"></a><a href="http://twitter.com/#!/WFUSALAMANCA"><img alt="twitter" src="http://www.wfu.edu/romancelanguages/study_abroad/Salamanca/images/twitter.gif"></a></html> |



<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<script type="text/javascript" src="fckeditor/fckeditor.js"></script>
<!--}}}-->

<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b><html><img align="absmiddle" alt="" src="http://www.wfu.edu/romancelanguages/study_abroad/Salamanca/images/wfu_univ_h_gold-temp.gif" /><span style="color: rgb(221, 187, 68);"> </span><span style="color: rgb(0, 0, 0);">Internship Summer Program in Salamanca, Spain</span></html></b><br> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Best Viewed on Firefox<hr>Requires Javascript.</span></div>
/***
|Name|MatchTagsPlugin|
|Source|http://www.TiddlyTools.com/#MatchTagsPlugin|
|Documentation|http://www.TiddlyTools.com/#MatchTagsPluginInfo|
|Version|2.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|'tag matching' with full boolean expressions (AND, OR, NOT, and nested parentheses)|
!!!!!Documentation
> see [[MatchTagsPluginInfo]]
!!!!!Revisions
<<<
2008.09.04 [2.0.0] added "report" and "panel" options to generate formatted results and store in a tiddler.  Also, added config.macros.matchTags.formatList(place,fmt,sep) API to return formatted output for use with other plugins/scripts
| please see [[MatchTagsPluginInfo]] for additional revision details |
2008.02.28 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.MatchTagsPlugin= {major: 2, minor: 0, revision: 0, date: new Date(2008,9,4)};

// store.getMatchingTiddlers() processes boolean expressions for tag matching
//    sortfield (optional) sets sort order for tiddlers - default=title
//    tiddlers (optional) use alternative set of tiddlers (instead of current store)
TiddlyWiki.prototype.getMatchingTiddlers = function(tagexpr,sortfield,tiddlers) {

	var debug=config.options.chkDebug; // abbreviation
	var cmm=config.macros.matchTags; // abbreviation
	var r=[]; // results are an array of tiddlers
	var tids=tiddlers||store.getTiddlers(sortfield||"title");
	if (tiddlers && sortfield) store.sortTiddlers(tids,sortfield);
	if (debug) displayMessage(cmm.msg1.format([tids.length]));

	// try simple lookup to quickly find single tags or tags that
	// contain boolean operators as literals, e.g. "foo and bar"
	for (var t=0; t<tids.length; t++)
		if (tids[t].isTagged(tagexpr)) r.pushUnique(tids[t]);
	if (r.length) {
		if (debug) displayMessage(cmm.msg4.format([r.length,tagexpr]));
		return r;
	}
	
	// convert expression into javascript code with regexp tests,
	// so that "tag1 AND ( tag2 OR NOT tag3 )" becomes
	// "/\~tag1\~/.test(...) && ( /\~tag2\~/.test(...) || ! /\~tag3\~/.test(...) )"

	// normalize whitespace, tokenize operators, delimit with "~"
	var c=tagexpr.trim(); // remove leading/trailing spaces
	c = c.replace(/\s+/ig," "); // reduce multiple spaces to single spaces
	c = c.replace(/\(\s?/ig,"~(~"); // open parens
	c = c.replace(/\s?\)/ig,"~)~"); // close parens
	c = c.replace(/(\s|~)?&&(\s|~)?/ig,"~&&~"); // &&
	c = c.replace(/(\s|~)AND(\s|~)/ig,"~&&~"); // AND
	c = c.replace(/(\s|~)?\|\|(\s|~)?/ig,"~||~"); // ||
	c = c.replace(/(\s|~)OR(\s|~)/ig,"~||~"); // OR
	c = c.replace(/(\s|~)?!(\s|~)?/ig,"~!~"); // !
	c = c.replace(/(^|~|\s)NOT(\s|~)/ig,"~!~"); // NOT
	c = c.replace(/(^|~|\s)NOT~\(/ig,"~!~("); // NOT(
	// change tag terms to regexp tests
	var terms=c.split("~"); for (var i=0; i<terms.length; i++) { var t=terms[i];
		if (/(&&)|(\|\|)|[!\(\)]/.test(t) || t=="") continue; // skip operators/parens/spaces
		if (t==config.macros.matchTags.untaggedKeyword)
			terms[i]="tiddlertags=='~~'"; // 'untagged' tiddlers
		else
			terms[i]="/\\~"+t+"\\~/.test(tiddlertags)";
	}
	c=terms.join(" ");
	if (debug) { displayMessage(cmm.msg2.format([tagexpr])); displayMessage(cmm.msg3.format([c])); }

	// scan tiddlers for matches
	for (var t=0; t<tids.length; t++) {
	 	// assemble tags from tiddler into string "~tag1~tag2~tag3~"
		var tiddlertags = "~"+tids[t].tags.join("~")+"~";
		try { if(eval(c)) r.push(tids[t]); } // test tags
		catch(e) { // error in test
			displayMessage(cmm.msg2.format([tagexpr]));
			displayMessage(cmm.msg3.format([c]));
			displayMessage(e.toString());
			break; // skip remaining tiddlers
		}
	}
	if (debug) displayMessage(cmm.msg4.format([r.length,tagexpr]));
	return r;
}
//}}}
//{{{
config.macros.matchTags = {
	msg1: "scanning %0 input tiddlers",
	msg2: "looking for '%0'",
	msg3: "using expression: '%0'",
	msg4: "found %0 tiddlers matching '%1'",
	noMatch: "no matching tiddlers",
	untaggedKeyword: "-",


	untaggedLabel: "no tags",
	untaggedPrompt: "show tiddlers with no tags",
	defTiddler: "MatchingTiddlers",
	defFormat: "%0",
	defSeparator: "\n",
	reportHeading: "Found %0 tiddlers tagged with: '{{{%1}}}'\n----\n",
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var mode=params[0]?params[0].toLowerCase():'';
		if (mode=="inline")
			params.shift();
		if (mode=="report" || mode=="panel") {
			params.shift();
			var target=params.shift()||this.defTiddler;
		}
		if (mode=="popup") {
			params.shift();
			if (params[0]&&params[0].substr(0,6)=="label:") var label=params.shift().substr(6);
			if (params[0]&&params[0].substr(0,7)=="prompt:") var prompt=params.shift().substr(7);
		} else {
			var fmt=(params.shift()||this.defFormat).unescapeLineBreaks();
			var sep=(params.shift()||this.defSeparator).unescapeLineBreaks();
		}
		var sortBy="+title";
		if (params[0]&&params[0].substr(0,5)=="sort:") sortBy=params.shift().substr(5);
		var expr = params.join(" ");
		if (mode!="panel" && (!expr||!expr.trim().length)) return;
		if (expr==this.untaggedKeyword)
			{ var label=this.untaggedLabel; var prompt=this.untaggedPrompt };
		switch (mode) {
			case "popup": this.createPopup(place,label,expr,prompt,sortBy); break;
			case "panel": this.createPanel(place,expr,fmt,sep,sortBy,target); break;
			case "report": this.createReport(target,expr,fmt,sep,sortBy); break;
			case "inline": default: this.createInline(place,expr,fmt,sep,sortBy); break;
		}
	},
	formatList: function(tids,fmt,sep) {
		var out=[];
		for (var t=0; t<tids.length; t++) {
			var title="[["+tids[t].title+"]]";
			var who=tids[t].modifier;
			var when=tids[t].modified.toLocaleString();
			var text=tids[t].text;
			var first=tids[t].text.split("\n")[0];
			var desc=store.getTiddlerSlice(tids[t].title,"description");
			desc=desc||store.getTiddlerSlice(tids[t].title,"Description");
			desc=desc||store.getTiddlerText(tids[t].title+"##description");
			desc=desc||store.getTiddlerText(tids[t].title+"##Description");
			out.push(fmt.format([title,who,when,text,first,desc]));
		}
		return out.join(sep);
	},
	createInline: function(place,expr,fmt,sep,sortBy) {
		wikify(this.formatList(store.sortTiddlers(store.getMatchingTiddlers(expr),sortBy),fmt,sep),place);
	},
	createPopup: function(place,label,expr,prompt,sortBy) {
		var btn=createTiddlyButton(place,
			(label||expr).format([expr]),
			(prompt||config.views.wikified.tag.tooltip).format([expr]),
			function(ev){ return config.macros.matchTags.showPopup(this,ev||window.event); });
		btn.setAttribute("sortBy",sortBy);
		btn.setAttribute("expr",expr);
	},
	showPopup: function(here,ev) {
		var p=Popup.create(here); if (!p) return false;
		var tids=store.getMatchingTiddlers(here.getAttribute("expr"));
		store.sortTiddlers(tids,here.getAttribute("sortBy"));
		var list=[]; for (var t=0; t<tids.length; t++) list.push(tids[t].title);
		if (!list.length) createTiddlyText(p,this.noMatch);
		else {
			var b=createTiddlyButton(createTiddlyElement(p,"li"),
				config.views.wikified.tag.openAllText,
				config.views.wikified.tag.openAllTooltip,
				function() {
					var list=this.getAttribute("list").readBracketedList();
					story.displayTiddlers(null,tids);
				});
			b.setAttribute("list","[["+list.join("]] [[")+"]]");
			createTiddlyElement(p,"hr");
		}
		var out=this.formatList(tids," &nbsp;%0&nbsp; ","\n"); wikify(out,p);
		Popup.show(p,false);
		ev.cancelBubble=true;
		if(ev.stopPropagation) ev.stopPropagation();
		return false;
	},
	createReport: function(target,expr,fmt,sep,sortBy) {
		var tids=store.sortTiddlers(store.getMatchingTiddlers(expr),sortBy);
		if (!tids.length) { displayMessage('no matches for: '+expr); return false; }
		var msg=config.messages.overwriteWarning.format([target]);
		if (store.tiddlerExists(target) && !confirm(msg)) return false;
		var out=this.reportHeading.format([tids.length,expr])
		out+=this.formatList(tids,fmt,sep);
		store.saveTiddler(target,target,out,config.options.txtUserName,new Date(),[],{});
		story.closeTiddler(target); story.displayTiddler(null,target);
	},
	createPanel: function(place,expr,fmt,sep,sortBy,tid) {
		var html="<form style='display:inline'><!-- \
			--><input type='text'    name='expr' style='width:55%' title='tag expression'><!-- \
			--><input type='text'    name='fmt'  style='width:10%' title='list item format'><!-- \
			--><input type='text'    name='sep'  style='width:5%'  title='list item separator'><!-- \
			--><input type='text'    name='tid'  style='width:20%' title='target tiddler title'><!-- \
			--><input type='button'  name='go'   style='width:8%'  value='go' onclick=\" \
				var expr=this.form.expr.value; \
				if (!expr.length) { alert('Enter a boolean tag expression'); return false; } \
				var fmt=this.form.fmt.value; \
				if (!fmt.length) { alert('Enter the list item output format'); return false; } \
				var sep=this.form.sep.value.unescapeLineBreaks(); \
				var tid=this.form.tid.value; \
				if (!tid.length) { alert('Enter a target tiddler title'); return false; } \
				config.macros.matchTags.createReport(tid,expr,fmt,sep,'title'); \
				return false;\"> \
			</form>";
		var s=createTiddlyElement(place,"span"); s.innerHTML=html;
		var f=s.getElementsByTagName("form")[0];
		f.expr.value=expr; f.fmt.value=fmt; f.sep.value=sep.escapeLineBreaks(); f.tid.value=tid;
	}
};
//}}}
//{{{
// SHADOW TIDDLER for displaying default panel input form
config.shadowTiddlers.MatchTags="{{smallform{<<matchTags panel>>}}}";
//}}}
//{{{
// TWEAK core filterTiddlers() for enhanced boolean matching in [tag[...]] syntax:
// use getMatchingTiddlers instead getTaggedTiddlers
var fn=TiddlyWiki.prototype.filterTiddlers;
fn=fn.toString().replace(/getTaggedTiddlers/g,"getMatchingTiddlers");
eval("TiddlyWiki.prototype.filterTiddlers="+fn);
//}}}
//{{{
// REDEFINE core handler for enhanced boolean matching in tag:"..." paramifier
// use filterTiddlers() instead of getTaggedTiddlers() to get list of tiddlers.
config.paramifiers.tag = {
	onstart: function(v) {
		var tagged = store.filterTiddlers("[tag["+v+"]]");
		story.displayTiddlers(null,tagged,null,false,null);
	}
};
//}}}
<html><img hspace="12" align="right" width="400" src="http://1.bp.blogspot.com/-zwrhgSkF5pc/ULx3MR0V8mI/AAAAAAAAAIw/rpqFVtJXQfQ/s300/logo2.JPG" alt="" /><p></html>"Mis pollitos" is one of the biggest company's in Salamanca dedicated to the daycare of small children in the City.
This internship is specially indicated for business majors. You will be working closely with the manager of the company in the administration and paperwork that has to be done. This company manages 10 different daycare centers spread around the city and its suburbs. "Mis Pollitos" is a great company to intern for. http://www.grupomispollitos.es/

<html><p><!--[if !vml]--><span> </span><span lang="EN-GB" style=""><span><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///F:%5CUsers%5CJavier%5CAppData%5CLocal%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" /><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="City"></o:smarttagtype><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="place"></o:smarttagtype><!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:View>Normal</w:View>
  <w:Zoom>0</w:Zoom>
  <w:HyphenationZone>21</w:HyphenationZone>
  <w:PunctuationKerning/>
  <w:ValidateAgainstSchemas/>
  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
  <w:Compatibility>
   <w:BreakWrappedTables/>
   <w:SnapToGridInCell/>
   <w:WrapTextWithPunct/>
   <w:UseAsianBreakRules/>
   <w:DontGrowAutofit/>
  </w:Compatibility>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
 </w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:LatentStyles DefLockedState="false" LatentStyleCount="156">
 </w:LatentStyles>
</xml><![endif]--><!--[if !mso]><object
 classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object>
<style>
st1\:*{behavior:url(#ieooui) }
</style>
<![endif]--><style type="text/css">
<!--
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman";
	mso-fareast-font-family:"Times New Roman";}
@page Section1
	{size:612.0pt 792.0pt;
	margin:70.85pt 3.0cm 70.85pt 3.0cm;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Tabla normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman";
	mso-ansi-language:#0400;
	mso-fareast-language:#0400;
	mso-bidi-language:#0400;}
</style>
<![endif]--></meta></meta></meta></meta></span></span>This is an internship opportunity where Interns will be at the Museum of the Commerce in Salamanca. There are always several exhibitions which need your asistance, translating information for English visitors, organizing and classifying artifacts, press conferences, etc.</p><p><img hspace="12" border="12" align="right" v:shapes="_x0000_s1029" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/museodentro.jpg" alt="" /></p><p><img hspace="12" border="12" align="right" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/museofuera.jpg" alt="" /></p><p>&nbsp;</p></html>
<html><img hspace="12" align="right" src="http://rel-int.usal.es/images/LOGOS_cabecera/RrIi.png" alt="" /><p></html>The University of Salamanca is nowadays an international connection that promotes the exchange of students, information and training resources. Its privileged status has allowed the university to sign a large number of international agreements, participate in European university programs and from other continents, create special chairs, continuously collaborate with international organizations and centers and join networks and groups from universities around the world . The International Relations Office (http://rel-int.usal.es/index.php?lang=en), under the supervision of the Vice President for International Affairs is the central authority in the management of the international activity of the University of Salamanca. Its function focuses on activities and information dissemination, management of international projects, proposals grant applications and requests under various programs. 
The International Office is also responsible for the management and support activities related to:  

*Universities participation in international inter-university networks. 
*The monitoring of activities undertaken within the framework of international conventions: exchange, acceptance of students, etc. 

Your main responsabilities will include:
*international student's and professor's file processing 
*use of a computer application data management *customer service to the international students and professors  

This internship is indicated for student's majoring, business, law, communication, education, political science and sociology. Also any students interested in International relations.
!!!| @@bgcolor(#ffffff):[[Duration]]@@ | @@bgcolor(#ffffff):[[Application Deadlines]]@@ | @@bgcolor(#ffffff):[[Eligibility]]@@ | @@bgcolor(#ffffff):[[Internships and Courses]]@@ | @@bgcolor(#ffffff):[[Scholarships]]@@ | @@bgcolor(#ffffff):[[Transportation]]@@ | @@bgcolor(#ffffff):[[Accommodations]]@@ | @@bgcolor(#ffffff):[[Trips and cultural activities]]@@ | @@bgcolor(#ffffff):[[Personal Travel]]@@ | @@bgcolor(#ffffff):[[Cost]]@@ |
----
<html><object hspace="10" width="480" height="430" align="right"><param name="movie" value="http://www.youtube.com/v/uJ_UlT7wtk0&hl=es_ES&fs=1&rel=0&color1=0xe1600f&color2=0xfebd01"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/uJ_UlT7wtk0&hl=es_ES&fs=1&rel=0&color1=0xe1600f&color2=0xfebd01&start=32&autoplay=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="430"></embed></object>
</iframe> <p><b>
Wake Forest's Department of Romance Languages offers a summer program of internships in Salamanca, Spain, the site of the <b><a href="http://www.wfu.edu/romancelanguages/study_abroad/Salamanca/Salamanca.htm">semester/year-long Wake Forest study abroad program</a></b>. This is an ideal program for students wishing to apply their knowledge of Spanish to a variety of professional fields, such as medical and healthcare professions, teaching, and translation. The immersion setting provides the best environment for improving language skills, furthering cultural knowledge, and learning about the functioning of agencies in different professional settings. 
Students may choose to live with Spanish families selected by Cursos Internacionales of the University of Salamanca or in Colegios Mayores (Student Residence Halls).
The curriculum includes two levels of internship courses (SPN 199 and 391) and four courses: on Language Study in the Context of an Internship (SPN 303S), The Making of Spain: Interdisciplinary Approaches to the Cultures of Spain. (SPN 315), Literary and Cultural Studies of Spanish America (SPN 319) and Special Topics in Spanish and/or Spanish - American Literature and Culture (SPN 369).
As Wake Forest courses, they all earn Wake Forest credit. Applications from students at other institutions are welcome.</html>
----
<div class='header' macro='gradient vert #E7DCBA #ffcc66'><div class='gradient'> 
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<div id='topMenu' refresh='content' tiddler='MainMenu'>
</div>
</div>
<div id='bodywrapper'>
<div id='sidebar'>
 <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
 <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
 <div id='messageArea'></div>
<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div><hr>
<div id='tiddlerDisplay'></div>
</div>
<div id='displayFooter'></div>
</div>
<span style='display:none' macro='tiddler SiteStartup'></span>
Students have ample time during the program's weekends to travel to many destinations around Salamanca. However, time does not allow for participants to make longer trips in Spain or Europe. More extensive trips should be scheduled prior to or following the program, when friends and family will be able to join students as well.
/***
|''Name:''|PlasticCalendarPlugin|
|''Description:''|This plugin creates a custom Gregorian calendar|
|''Version:''|1.3.1|
|''Date:''|Mar 13, 2007|
|''Source:''|http://www.math.ist.utl.pt/~psoares/addons.html|
|''Author:''|Paulo Soares (psoares (at) math (dot) ist (dot) utl (dot) pt)|
|''License:''|[[BSD open source license]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
!Description
This plugin creates a custom Gregorian calendar. A single month calendar has navigation buttons at the top line in order to change month and year. With multiple months the calendar is static. Different categories of holidays can be defined in a configuration tiddler and those categories can be styled by the user. There's also a simple scheduling mechanism.
This plugin is based on previous work by [[TiagoDionízio|http://mega.ist.utl.pt/~tngd/twiki/twiki.cgi/]]'s.
!Usage
Copy this tiddler to your TW, tag it with 'systemConfig', save your TW, refresh your browser and drop {{{<<calendar>>}}} in a tiddler to get a calendar for the current month. You can also use any of the following options {{{<<calendar year:2007 month:6 numberMonths:6 numberColumns:2 tag:'work'>>}}}.

You can also label the schedules with multiple tags separating them with {{{#}}} such as {{{tag:'work#excludeLists'}}}. However only the first tag is used to display scheduled days in the calendar.
!Revision history
1.3.1 - 19/03/2006
*fixed missing schedules at the first day of any month (bug reported and fixed by Michael Lin)
1.3.0 - 18/09/2006
*small changes to work with TW2.1
1.2.1 - 04/06/2006
*restored the use of multiple tags
1.2.0 - 18/05/2006
*plugin name changed to PlasticCalendarPlugin (because there are other ~CalendarPlugin's out there...)
*now using named parameters
*added categories of holidays (suggested by Paco Rivière)
1.1.0 - 02/10/2005
*initial release
!Code
***/
{{{
// --------------------------------------------------------------------
// Calendar
// --------------------------------------------------------------------

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

store.addNotification(null, refreshCalendars);

setStylesheet("/***\n!Calendar Styles\n***/\n/*{{{*/\n .viewer .calendarHolder {\n margin-left: auto;\n margin-right: auto;\n border: none;\n}\n\n .viewer .calendarHolder table {\n border: none;\n margin: 0;\n}\n\n .viewer .calendarHolder tr {\n border: none;\n vertical-align: top;\n}\n\n .viewer .calendarHolder td {\n border: none;\n vertical-align: top;\n}\n\n .viewer #calendarWrapper {\n width: 21em;\n border: 2px solid #4682b4;\n cursor: pointer;\n}\n\n #calendarWrapper #calendarLine td {\n height: 2.5em;\n}\n\n #calendarWrapper tr {\n border:none;\n}\n\n #calendarWrapper td {\n text-align: center;\n vertical-align: middle;\n width: 14.28%;\n border:none;\n}\n\n #calendarWrapper #calendarHeader td{\n color: #ffffff;\n background-color: #4682b4;\n height: 2em;\n}\n\n #calendarWrapper #weekNames td {\n color: #ffffff;\n background-color: #87cefa;\n height: 2em;\n}\n\n #calendarWrapper .weekDay {\n background-color: #ccff99;\n}\n\n #calendarWrapper .holiDay {\n background-color: #9acd32;\n}\n\n #calendarWrapper .currentDay {\n border: solid #ff0000 2px;\n font-weight: bold;\n}\n\n #calendarWrapper .currentscheduledDay {\n border: solid #ff0000 2px;\n font-weight: bold;\n}\n\n #calendarWrapper .workingDay {\n background-color: #ffffff;\n}\n\n #calendarWrapper .scheduledDay {\n border: solid orange 2px;\n}\n\n #calendarWrapper .otherMonthDay {\n background-color: #999;\n}\n\n/*}}}*/","CalendarStyles");
}}}
<html><p><img hspace="10" align="right" src="http://www.psoe.es/img/logopsoe.gif" alt="" /></p><p><img hspace="5" align="right" alt="rosa" src="http://www.psoe.es/img/logorosa.gif" /></p><p>In this Internship you are going to work at the impressive City Hall of Salamanca. Internships at the Political Party PSOE are recommended for students with a good command of the language and special interest in a variety of fields:</p><p>Communication:</p><ul><li>Researching Documents for press conferences, interviews and/or assistance with interventions of any member of the municipal council.</li><li>Preparing press packages.</li><li>Maintaining web pages.<input type="image" align="right" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/index_clip_image001.jpg" alt="City Hall (Plaza Mayor)" /></li></ul><p>Political Science and Sociology:</p><ul><li>Designing, planning and analysing quantitative and qualitative sociological studies.</li><li>Preparing analysis of the electoral vote.</li><li>Planning political strategy for the municipal group.</li></ul><p>Law:</p><ul><li>Supporting and advising in the daily work of the council, mainly in the area of administrative law</li></ul><p>Economics, Business and Accountancy :</p><ul><li>Studying, analyzing and preparing budgets.</li></ul><p>Documentary:</p><ul><li>Developing a database containing information relevant to the daily work of the group.</li></ul><p>Computer Science:</p><ul><li>Developing a database.</li><li>Maintaining web pages.</li></ul><p>&nbsp;</p><p>&nbsp;</p></html>
<html><img hspace="12" align="right" src="http://www.wfu.edu/romancelanguages/study_abroad/Salamanca/images/fachada.jpg" alt="" /><p>You will work closely with the Provost of international affairs at the University of Salamanca. Your duties will mainly be assisting foreign visitors, reviewing translations to english, working in the office, and brainstorming new ideas to improve international university relations</p></html>
<html><img hspace="10" align="right" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/academic_program_clip_image002.jpg" style="width: 327px; height: 219px;" alt="" /></html>Internships at the Spanish Red Cross are recommended for students with a good command of the language and special interest in medical and health professions.  The following are some of the areas in Red Cross where internships may take place: 
*Social Emergency Center: For homeless person in need of a temporary place to stay and care. This Center offers shelter, counseling, information, social and/or psychological attention.
* Transportation for people with disabilities: This service provides vehicles equipped to transport people with special needs to their places of work, relaxation, or group meetings.
* Daycare for the elderly: this service is offered for the elderly with a certain level of dependency.
* Youth Day Center. It provides an educational and social environment to prevent young people from engaging in undesirable behavior and to advise them regarding future employment.
* Learning in my Hometown: School children between the ages of 10 and 14 visit the Red Cross to learn about its facilities and installations. Interns would work with the children in areas such as solidarity, respect, tolerance and coexistence.
* Youth Red Cross:  Participants between the ages of 8 and up to 30 engage in activities related to health and to the prevention of violent behavior. It organizes educational meetings at schools about sexual behavior, drugs, and educational activities related to international development and cooperation.
<html><!--[if !vml]--><p><span>         </span><!--[endif]--><span>         </span><span lang="EN-GB" style=""><span>&quot;Salamanca Acoge&quot; is a  		</span></span><span>nation wide </span><span>spanish association that helps immigrants set up their lives in a new city </span><o:p><span> and a new country. Immigrants have a lot of different needs such as cultural immersion, help with Spanish, day care for their children, occupational training, job-hunting tips, legal advising, and</span></o:p><span lang="EN-GB" style=""><span> raising </span></span><span>awareness about their problems, etc. All these fields will require your help and you will be welcome to take part in their team of co-workers. This internship is specifically for Sociology students. </span><img width="400" vspace="6" hspace="6" height="300" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/inmigrantes.JPG" alt="EstivalTour" v:shapes="_x0000_s1048" /></p><p><span lang="EN-GB" style=""><o:p></o:p></span></p></html>
<html><img hspace="12" align="right" src="http://www.espanolensalamanca.com/comun/galerias/img/logo_home.gif" alt="" /><p>Wake Forest University signed an agreement with "Salamanca Ciudad del Español", an enterprise that helps Spanish learning students to get around and feel comfortable in Salamanca. This enterprise was created by the City Hall of Salamanca who strongly supports this initiatives with foreign students.
The main duties that you will have in this internship will be attending new arrived Spanish students to get their city ID, maps and basic information on gyms, library's, stores etc. Also, you will help organizing other activities for those students, such as a soccer championship, scavenger hunt, city legends tour, etc.
 This a great opportunity to get in touch with students form all over the world.
</html>
<html><img hspace="12" align="right" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/radio.jpg" alt="" /><p>This internship is designed specifically for communication majors and minors. You will be working at the official Radio station of the region of Castilla y León in Salamanca and will be a part of the team who interviews and reports about the international summer students at the University of Salamanca on a weekly Radio show.&nbsp;</p></html>
<html><img hspace="12" align="right" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/rtvcyl.jpg" alt="" /><p>This internship is  designed specifically for communication majors and minors. You will be working at the official TV station of the region Castilla y León in Salamanca and will be a part of the team who interviews and reports about the international summer students at the University of Salamanca on a weekly TV show.&nbsp;</p></html>
For scholarship information, please visit the Center for International Studies in the basement of Carswell Hall. That office oversees several different kinds of scholarships that Wake students may use to study abroad. Please contact Ms. Nancy Metcalf, at ext. 5938 for details about the application process, deadlines, etc.
Our excursions will include a trip to the charming city of Segovia. Walk under the city's incredible aqueduct, which has traversed Segovia for 2000 years, one of the most stunning masterpieces of Roman engineering and one of the greatest architectural marvels in the world. Tour one of Europe's most painteresque medieval castles at the Alcázar. Climb a centuries-old staircase to enjoy unforgettable views of the Spanish landscape and the rivers Eresma and Clamores below. See the last Gothic cathedral in Spain, a beautiful 16th century church bare of sculptures and celebrated for its austere beauty. Segovia has all the history of a major capital with the feel of a small town.
[img[http://www.wfu.edu/romancelanguages/study_abroad/Salamanca/images/segovia1.jpg]]
<<showClock>><<search>><<closeAll>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<calendar thismonth>><<permaview>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
This tiddler is included in the PageTemplate as a ''hidden SPAN''.  You can use it include macros or inline scripts that are automatically invoked whenever the document is loaded.
!!!!![[SetTiddlerColumns]]
<<<
sets the number of tiddler columns to display using the -moz-column-count, -moz-column-width, and -moz-column-gap CSS attributes (currently supported by Firefox only).
{{{<<tiddler SetTiddlerColumns>>}}}
<<tiddler SetTiddlerColumns>>
<<<
!!!!![[SetSidebarTabsHeight]]
<<<
sets a fixed or percentage height for the sidebar tabs, or 'auto' (default) to allow as much room it needs.
{{{<<tiddler SetSidebarTabsHeight>>}}}
<<tiddler SetSidebarTabsHeight>>
<<<
!!!!![[SetPopupsHeight]]
<<<
sets a fixed or percentage height for popup displays (e.g., tab popups), or 'auto' (default) to allow as much room needed.
{{{<<tiddler SetPopupsHeight>>}}}
<<tiddler SetPopupsHeight>>
<<<
!!!!![[SetStoryHeight]]
<<<
sets a fixed or percentage height for the story column, or 'auto' (default) to allow as much room as needed.
{{{<<tiddler SetStoryHeight>>}}}
<<tiddler SetStoryHeight>>
<<<
!!!!![[SetTiddlerHeight]]
<<<
sets a fixed or percentage height for each tiddler, or 'auto' (default) to allow each tiddler to use as much room as it needs.
{{{<<tiddler SetTiddlerHeight>>}}}
<<tiddler SetTiddlerHeight>>
<<<
!!!!![[ToggleSiteTitles]]
<<<
sets the visibility (//display:none// or //display:block//) of the SiteTitle/SiteSubtitle display area ('page titles', DOM ID=//header//)
{{{<<tiddler ToggleSiteTitles>>}}}
<<tiddler ToggleSiteTitles>>
<<<
!!!!![[ToggleSiteMenu]]
<<<
sets the visibility (//display:none// or //display:block//) of the SiteMenu display area ('menubar', DOM ID=//siteMenu//).
<script show>
// hide site menu by default
if (config.options.chkHideSiteMenu==undefined)
	config.options.chkHideSiteMenu="true";
</script>{{{<<tiddler ToggleSiteMenu>>}}}
<<tiddler ToggleSiteMenu>>
<<<
!!!!![[VisitCounter]]
<<<
tracks and displays a quick reminder of how many times you have viewed this document as well as the date and time of your last visit.  This information is stored privately in your browser using cookies (txtVisitCount and txtLastVisit), and are //never// accessible to any other parties.
{{{<<tiddler VisitCounter with: TiddlyTools>>}}}
<<tiddler VisitCounter with: TiddlyTools>>
<<<
!!!!![[ToggleLeftSidebar]], [[ToggleRightSidebar]] 
<<<
set the visibility (//display:none// or //display:block//) of the MainMenu ('left sidebar', DOM ID=//mainMenu//) and SideBarOptions ('right sidebar', DOM ID=//sidebar//) displays.
<script show>
	// default sidebar visibility
	if (config.options.chkShowLeftSidebar==undefined)
		config.options.chkShowLeftSidebar=true;
	if (config.options.chkShowRightSidebar==undefined)
		config.options.chkShowRightSidebar=false;
</script>
|{{{<<tiddler ToggleLeftSidebar>>}}} |<<tiddler ToggleLeftSidebar>> |
|{{{<<tiddler ToggleRightSidebar>>}}} |<<tiddler ToggleRightSidebar>> |
<<<
!!!!![[ToggleScrollingSidebars]]
<<<
sets 'position:fixed' for the sidebars, so that they remain fixed in place (aka, "hover") when the rest of the page content is scrolled.
{{{<<tiddler ToggleScrollingSidebars>>}}}
<<tiddler ToggleScrollingSidebars>>
<<<
<html><table width="100%" cellspacing="0" cellpadding="0" border="0" id="table1"><tbody><tr><td><img align="absmiddle" src="http://www.wfu.edu/romancelanguages/study_abroad/Salamanca/images/wfu_univ_h_gold-temp.gif" alt="" /></td><td><font color="white">Internship Summer Program in Salamanca, Spain </font></td><td><img alt="" src="http://www.wfu.edu/romancelanguages/study_abroad/Salamanca/images/victor.jpg" style="width: 82px; height: 104px;" /></td></tr></tbody></table></html>
/***

''Inspired by [[TiddlyPom|http://www.warwick.ac.uk/~tuspam/tiddlypom.html]]''

|Name|SplashScreenPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#SplashScreenPlugin|
|Version|0.21 |
|Requires|~TW2.08+|
!Description:
Provides a simple splash screen that is visible while the TW is loading.

!Installation
Copy the source text of this tiddler to your TW in a new tiddler, tag it with systemConfig and save and reload. The SplashScreen will now be installed and will be visible the next time you reload your TW.

!Customizing
Once the SplashScreen has been installed and you have reloaded your TW, the splash screen html will be present in the MarkupPreHead tiddler. You can edit it and customize to your needs.

!History
* 20-07-06 : version 0.21, modified to hide contentWrapper while SplashScreen is displayed.
* 26-06-06 : version 0.2, first release

!Code
***/
//{{{
window.old_lewcid_splash_restart=window.restart;

window.restart = function()
{   if (document.getElementById("SplashScreen"))
        document.getElementById("SplashScreen").style.display = "none";
      if (document.getElementById("contentWrapper"))
        document.getElementById("contentWrapper").style.display = "block";
    
    window.old_lewcid_splash_restart();
   
    if (splashScreenInstall)
       {if(config.options.chkAutoSave)
			{saveChanges();}
        displayMessage("TW SplashScreen has been installed, please save and refresh your TW.");
        }
}


var oldText = store.getTiddlerText("MarkupPreHead");
if (oldText.indexOf("SplashScreen")==-1)
   {var siteTitle = store.getTiddlerText("SiteTitle");
   var splasher='\n\n<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>'+siteTitle +'</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>';
   if (! store.tiddlerExists("MarkupPreHead"))
       {var myTiddler = store.createTiddler("MarkupPreHead");}
   else
      {var myTiddler = store.getTiddler("MarkupPreHead");}
      myTiddler.set(myTiddler.title,oldText+splasher,config.options.txtUserName,null,null);
      store.setDirty(true);
      var splashScreenInstall = true;
}
//}}}
To download the full handbook right click ''[[this link|http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/handbook.PDF]]'' and save it to your computer.

<html><div><object style="width:1024px;height:768px" ><param name="movie" value="http://static.issuu.com/webembed/viewers/style1/v1/IssuuViewer.swf?mode=embed&amp;layout=http%3A%2F%2Fskin.issuu.com%2Fv%2Fcolor%2Flayout.xml&amp;backgroundColor=FFFFFF&amp;documentId=090318172605-6545ddc5e1df40b88130df12bd819a65&amp;docName=salamanca_handbook_internships&amp;username=wakeforest&amp;loadingInfoText=Internships%20in%20Salamanca&amp;et=1237402329718&amp;er=8" /><param name="allowfullscreen" value="true"/><param name="menu" value="false"/><embed src="http://static.issuu.com/webembed/viewers/style1/v1/IssuuViewer.swf" type="application/x-shockwave-flash" allowfullscreen="true" menu="false" style="width:1024px;height:768px" flashvars="mode=embed&amp;layout=http%3A%2F%2Fskin.issuu.com%2Fv%2Fcolor%2Flayout.xml&amp;backgroundColor=FFFFFF&amp;documentId=090318172605-6545ddc5e1df40b88130df12bd819a65&amp;docName=salamanca_handbook_internships&amp;username=wakeforest&amp;loadingInfoText=Internships%20in%20Salamanca&amp;et=1237402329718&amp;er=8" /></object>
</html>
*''Megan Petit'' (Summer 2 2008]
//"echaré de menos a todos los empleados y pacientes de la clínica del Dr. Cuadrado cuando vuelva a los Estados Unidos y nunca voy a olvidarme de la experiencia que he tenido.  Nunca he hecho nada igual y estoy agradecida de haber tenido esta oportunidad."//
*''Kennon Jones'' (Summer 2 2008)
//"Este mes en el Ayuntamiento me ha servido mucho para obtener una comprensión diferente del mundo y como debe funcionar según otros ideologías políticas.  Esta comprensión nueva sin duda será una experiencia irremplazable en el futuro ambos en mis estudios continuados en mi carrera y en mi empleo futuro"//
*''Elisabeth Ayres'' (Summer 1 2008)
//"Estoy muy agradecida de tener esta oportunidad de trabajar en Adecco, tanto por la experiencia que me dio para poder ayudarme en el futuro, como en lo que mejoré y aprendí sobre mi misma."//
*''Jillian Bjerke'' (Summer 2 2007)
//"He ganado un conocimiento sobre mi trabajo, mis sentimientos sobre España y mi propia persona. Podía combinar dos cosas de tanta importancia para mí y ver como es posible mezclar dos sueños en uno."//
/***
!General
***/
/*{{{*/
body {
 background: #A88C4D;
}

 #contentWrapper{
 background: #fff;
 border:1px solid #000;
 margin: 0 1em;
 padding:0;

height:1%;
}
/*}}}*/


/***
!Links
***/
/*{{{*/
a,
a.tiddlyLink,
a.button,
a.externalLink,
#sidebarOptions .sliderPanel a{
 color: #375669;
 text-decoration: none;
 background: transparent;
 border: 0;
}

a:hover,
a.tiddlyLink:hover,
a.button:hover,
a.externalLink:hover,
#sidebarOptions .sliderPanel a:hover
{
 border: 0;
 color: #1D65BC;
 text-decoration: underline;
background:transparent;
}
/*}}}*/

/***
!Header
***/
/*{{{*/
.gradient {margin-top:1em; background:#A88C4D;}

.titleLine{padding: 30px 40px 15px 30px;}

.titleLine a:hover{color:#fff; border-bottom:1px dotted #eee; text-decoration:none;}

.titleLine a{color:#fff; border-bottom:1px dotted #ccc;}

.siteTitle {
 font-size: 2.2em;
 font-weight: bold;
 color:#fff;
}

.siteSubtitle {
 font-size: 1.0em;
 display: block;
 margin: .3em auto 1em;
color:#fff;
}
/*}}}*/

/***
!TopMenu
***/
/*{{{*/
#topMenu br {display:none; }
#topMenu { background: #A88C4D; font-size:1em; }
#topMenu { padding:5px 32px; }
#topMenu .button, #topMenu .tiddlyLink {
 margin-left:0.1em; margin-right:0.1em;
 padding:0.5em;
 color:black; font-weight:bold;
}
#topMenu a.button:hover, #topMenu a.tiddlyLink:hover { background:#fff; color:#333; text-decoration:none;}

 
/*}}}*/

/***
!Display
***/
/***
!!!Display General
***/
/*{{{*/


#displayArea { margin: 0em 15.7em 0em 0em; }

#displayFooter {
 clear: both;
}
/*}}}*/
/***
!!!Tiddler
***/
/*{{{*/
.tiddler {margin-bottom:1em; padding-bottom:1em;}

.tiddler {padding-left:1.5em;}

.title {color:#333; font-size:1.8em; border-bottom:1px solid #333; padding-bottom:0.3px;}

.subtitle { font-size:90%; color:#511536; padding-left:0.25em; margin-top:0.1em; }

.shadow .title {
 color: #000000;
}

h1,h2,h3,h4,h5 { color: #333; background: transparent; padding-bottom:2px; border-bottom: 1px dotted #666; }

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



.viewer hr {
 border: 0;
 border-top: solid 1px #333;
 margin: 0 8em;
 color: #333;
}

.viewer a.button {color:#000; border:1px solid #511536; font-weight:bold;}

.viewer a.button:hover{color:#fff; background:#511536; text-decoration:none;}

.tagClear {clear:none;}
/*}}}*/
/***
!!!Editor
***/
/*{{{*/

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







/***
!Sidebar
***/
/*{{{*/
#sidebar{
position:relative;
float:right;
margin-bottom:1em;
display:inline;
width: 16em;
}
/*}}}*/


.toolbar .button {color:#511536; border:none;}
.toolbar .button:hover, .toolbar .highlight, .toolbar .marked, .toolbar a.button:active {background:transparent; color:#111; border:none; text-decoration:underline;}


.tiddler {border-bottom:3px solid #EEF1F3; padding-bottom:2em; padding-top:0em;}
.title {border-bottom:none; margin-right:8em;}

h1,h2,h3,h4,h5 { color: #333; background: transparent; padding-bottom:2px; border-bottom: none; }

#sidebar {background: #E7DCBA; right:0;}



#displayFooter {
 clear: both;
}

#tiddlerDisplay{padding-top:1em;}



#sidebar .tabSelected, #sidebar .tabSected:hover {
 color: #000;
 background: #dbdee3;
 border-top: solid 1px #B2B6BE;
 border-left: solid 1px #B2B6BE;
 border-right: solid 1px #B2B6BE;
 border-bottom:solid 1px #dbdee3 !important;
padding-bottom:1px;
text-decoration:none;
}

#sidebarOptions, #sidebarTabs {border-left: 1px solid #B2B6BE;}
#sidebarTabs {border-bottom: 1px solid #B2B6BE;}



#sidebar .tabUnselected, #sidebar .tabUnselected:hover {
color: #F0F3F5;
background: #B2B6BE ;
border: solid 1px #B2B6BE ;
padding-bottom:1px;
}

#sidebarTabs .tabContents {border:none; background:#DBDEE3; }

#sidebarTabs .tabContents {border-top:1px solid #B2B6BE;}

#sidebarTabs .tabContents .tabContents {border-left:1px solid #b2b6be;}









.viewer pre, .viewer code {
border: 1px solid #B2B6BE;
background: #EBEEF1;} 

#sidebarOptions .sliderPanel {
 background: #EBEEF1; border:none;
}

#sidebarOptions input {
 border: 1px solid #1d65bc;
}

#sidebarOptions input:hover, #sidebarOptions input:active, #sidebarOptions input:focus {
 border: 1px inset #3371a3;
}

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

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

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

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

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

.tagged .highlight, .tagged .marked, .tagged a.button:active {text-decoration:underline; background:transparent; color:#014;}

.tagging .button, .tagged .button {
 color:#511536;
}

.selected .tagging .button, .selected .tagged .button {
 color:#375669;
}

.viewer blockquote {
 border-left:7px solid #ebeef1;
}

.viewer table {
 border: 1px solid #3371a3;
}

.viewer th, thead td {
 background: #3371a3;
 border: 1px solid #3371a3;
 color: #fff;
}

.viewer td, .viewer tr {
 border: 1px solid #3371a3;
}

.editor input, .editor textarea {
 border: 1px solid #1d65bc; background:#ebeef1;
}

.editor {padding-top:0.3em;}

.editor textarea:focus, .editor input:focus {
 border: 1px inset #3371a3; background:#fff;
}










.popup {
 background: #3371a3;
 border: 1px solid #333;
}

.popup hr {
 color: #333;
 background: #333;
 border-bottom: 1px;
}

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

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

.popup li a:hover {
 background: #3371a3;
 color: #fff;
 border: none;
 text-decoration:underline;
}

.viewer .button:active, .viewer .marked, .viewer .highlight {
color: #fff !important;
background: #3371a3;
border: 0;
}

.button:active {background:#1d65bc; border:0;}

#sidebar .button:active, #sidebar .marked, #sidebar .highlight {color:#375669; background:transparent;text-decoration:none}

#messageArea {
 border: 2px dashed #3371a3;
 background: #dbdee3;
 color: #fff;
 font-size:90%;
}

#messageArea .button {
 color: #1d65bc;
 background: #ebeef1;
 text-decoration:none;
 font-weight:bold;
 border:none; 
}

#messageArea a.button {color:#1d65bc;}

#messageArea .button:hover {text-decoration:underline;}

.viewer .tabSelected, .viewer .tabSelected:hover{
 color: #375669;
 background: #eee;
 border-left: 1px solid #B2B6BE;
 border-top: 1px solid #B2B6BE;
 border-right: 1px solid #B2B6BE;
}

.viewer .tabUnselected, .viewer .tabUnselected:hover {
 color: #fff;
 background: #B2B6BE;
}

. viewer .tabContents {
 color: #375669;
 background: #ebeef1;
 border: 1px solid #B2B6BE;
}

.searchBar {float:right; font-size:0.9em;}
.searchBar .button {display:block; border:none; color:#ccc;}
.searchBar .button:hover{border:none; color:#eee;}

.searchBar input{
 border: 1px inset #1d65bc; background:#dbdee3;
}

.searchBar input:focus {
 border: 1px inset #3371a3; background:#fff;
}

.blog h2, .blog h3, .blog h4{
  margin:0;
  padding:0;
border-bottom:none;
}
.blog {margin-left:1.5em;}  


.blog .excerpt {
  margin:0;
margin-top:0.3em;
  padding: 0;
  margin-left:1em;
  padding-left:1em;
  font-size:90%;
  border-left:1px solid #ddd;
}

#tiddlerWhatsNew h1, #tiddlerWhatsNew h2 {border-bottom:none;}
div[tags~="RecentUpdates"], div[tags~="lewcidExtension"] {margin-bottom: 2em;}


#topMenu .fontResizer {float:right;}

#topMenu .fontResizer .button{border:1px solid #3371A3;}
#topMenu .fontResizer .button:hover {border:1px solid #fff; color:#3371A3;}
#sidebarTabs .txtMainTab .tiddlyLinkExisting {
 font-weight: normal;
 font-style: normal;
}

#sidebarTabs .txtMoreTab .tiddlyLinkExisting {
 font-weight: bold;
 font-style: normal;
}
/*{{{*/
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)';}
/*}}}*/
''May 30 (arrival in Salamanca) - July 3 (departure from Spain)'' 
<<forEachTiddler
 where 'tiddler.tags.contains("SUM1")'
 sortBy '("YYYY-0MM-0DD")'
 script 'function getFirstLine(s) {
           var m = s.match(/\s*(.*)/);
           return m != null && m.length >= 1 ? m[1] : "";}'
 write '"*[["+tiddler.title+"]] &rarr; "+getFirstLine(tiddler.text)
+"\n"' >> 

PLACE YOUR MOSE OVER THE HIGHLIGHTED DATES TO GET MORE INFORMATION
<<calendar year:2010 month:4 numberMonths:3 numberColumns:3>>
|bgcolor(#A32929):color(#ffffff):Spanish hollidays|bgcolor(#29527A):color(#ffffff):Program dates|
<html><table border="0" width="93%" id="table1"><tr><td valign="top" width="250"><iframe src="https://www.google.com/calendar/b/0/embed?mode=AGENDA&amp;hl=en&amp;showNav=0&amp;showTabs=0&amp;wkst=2&amp;bgcolor=%23FFFFFF&amp;src=8th7vfc6f3ucl8qlft0e1pi07g%40group.calendar.google.com&amp;color=%2329527A&amp;src=5lmtk3g3tj48ah12j7efhivdgk%40group.calendar.google.com&amp;color=%23A32929&amp;ctz=Europe%2FMadrid&dates=20150515%2F20150730" style=" border-width:0 " width="250" height="800" frameborder="0" scrolling="no"></iframe></td>
		<td>
<iframe src="https://www.google.com/calendar/b/0/embed?showTitle=0&amp;showNav=0&amp;showPrint=1&amp;hl=en&amp;showTabs=0&amp;showCalendars=0&amp;wkst=2&amp;bgcolor=%23EAD9AE&amp;src=8th7vfc6f3ucl8qlft0e1pi07g%40group.calendar.google.com&amp;color=%2329527A&amp;src=5lmtk3g3tj48ah12j7efhivdgk%40group.calendar.google.com&amp;color=%23A32929&amp&ctz=Europe%2FMadrid&dates=20150501%2F20150531" style="border: 0" width="100%" height="400" frameborder="0" scrolling="yes"></iframe>
<iframe src="https://www.google.com/calendar/b/0/embed?showTitle=0&amp;showNav=0&amp;showPrint=1&amp;hl=en&amp;showTabs=0&amp;showCalendars=0&amp;wkst=2&amp;bgcolor=%23EAD9AE&amp;src=8th7vfc6f3ucl8qlft0e1pi07g%40group.calendar.google.com&amp;color=%2329527A&amp;src=5lmtk3g3tj48ah12j7efhivdgk%40group.calendar.google.com&amp;color=%23A32929&amp&ctz=Europe%2FMadrid&dates=20150601%2F20150630" style="border: 0" width="100%" height="400" frameborder="0" scrolling="yes"></iframe>
<iframe src="https://www.google.com/calendar/b/0/embed?showTitle=0&amp;showNav=0&amp;showPrint=1&amp;hl=en&amp;showTabs=0&amp;showCalendars=0&amp;wkst=2&amp;bgcolor=%23EAD9AE&amp;src=8th7vfc6f3ucl8qlft0e1pi07g%40group.calendar.google.com&amp;color=%2329527A&amp;src=5lmtk3g3tj48ah12j7efhivdgk%40group.calendar.google.com&amp;color=%23A32929&amp&ctz=Europe%2FMadrid&dates=20150701%2F20150730" style="border: 0" width="100%" height="400" frameborder="0" scrolling="yes"></iframe>
</td>
	</tr>
</table></html>
''July 4 (arrival in Salamanca) - August 7 (departure from Spain)''
<<forEachTiddler
 where 'tiddler.tags.contains("SUM2")'
 sortBy '("YYYY-0MM-0DD")'
 script 'function getFirstLine(s) {
           var m = s.match(/\s*(.*)/);
           return m != null && m.length >= 1 ? m[1] : "";}'
 write '"*[["+tiddler.title+"]] &rarr; "+getFirstLine(tiddler.text)
+"\n"' >> 

PLACE YOUR MOSE OVER THE HIGHLIGHTED DATES TO GET MORE INFORMATION
<<calendar year:2010 month:6 numberMonths:2 numberColumns:3>>
|bgcolor(#A32929):color(#ffffff):Spanish hollidays|bgcolor(#29527A):color(#ffffff):Program dates|
<html><table border="0" width="93%" id="table1"><tr><td valign="top" width="250"><iframe src="https://www.google.com/calendar/b/0/embed?mode=AGENDA&amp;hl=en&amp;showNav=0&amp;showTabs=0&amp;wkst=2&amp;bgcolor=%23FFFFFF&amp;src=8son3r965ta0rofk1k4cg3nijo%40group.calendar.google.com&amp;color=%2329527A&amp;src=5lmtk3g3tj48ah12j7efhivdgk%40group.calendar.google.com&amp;color=%23A32929&amp;ctz=Europe%2FMadrid&dates=20150701%2F20150830" style=" border-width:0 " width="250" height="800" frameborder="0" scrolling="no"></iframe></td>
		<td>
<iframe src="https://www.google.com/calendar/b/0/embed?showTitle=0&amp;showNav=0&amp;showPrint=1&amp;hl=en&amp;showTabs=0&amp;showCalendars=0&amp;wkst=2&amp;bgcolor=%23EAD9AE&amp;src=8son3r965ta0rofk1k4cg3nijo%40group.calendar.google.com&amp;color=%2329527A&amp;src=5lmtk3g3tj48ah12j7efhivdgk%40group.calendar.google.com&amp;color=%23A32929&amp&ctz=Europe%2FMadrid&dates=20150701%2F20150730" style="border: 0" width="100%" height="400" frameborder="0" scrolling="yes"></iframe>
<iframe src="https://www.google.com/calendar/b/0/embed?showTitle=0&amp;showNav=0&amp;showPrint=1&amp;hl=en&amp;showTabs=0&amp;showCalendars=0&amp;wkst=2&amp;bgcolor=%23EAD9AE&amp;src=8son3r965ta0rofk1k4cg3nijo%40group.calendar.google.com&amp;color=%2329527A&amp;src=5lmtk3g3tj48ah12j7efhivdgk%40group.calendar.google.com&amp;color=%23A32929&amp&ctz=Europe%2FMadrid&dates=20150801%2F20150830" style="border: 0" width="100%" height="400" frameborder="0" scrolling="yes"></iframe>
</td>
	</tr>
</table></html>
<html><iframe align="right" width="425" height="344" src="http://www.youtube.com/embed/ycEkXXj6Ds8" frameborder="0" allowfullscreen></iframe></html>Salamanca is a beautiful, thriving university town, approximately two hours from Madrid. Students are drawn to this city not only for its beautiful architecture, but also for its lively social atmosphere. Designated as a Cultural Capital of Europe in 2002, Salamanca provides a wonderful ambience for students from all over the world. From the Plaza Mayor to the Catedral Nueva to the Casa de las Conchas, Salamanca will not fail to impress. The rest of Spain is easily accessible from Salamanca. Santiago de Compostela, Sevilla, Madrid, and Barcelona are a few of the cities that students enjoy visiting.
The Wake Forest program is based at the University of Salamanca, one of the oldest and most prestigious universities in Europe. Some of the university buildings date from 1254, and the library is famous for having over 2,800 ancient manuscripts. The quality of the courses and the reputation of the faculty at the University of Salamanca are outstanding.
Click on the links below for more information: 

*''[[Salamanca Ciudad del Español (Useful information for your stay):|http://www.espanolensalamanca.com/en/]]''
*''[[Important places in Salamanca (google Map):|http://maps.google.es/maps/ms?ie=UTF8&hl=es&t=h&msa=0&msid=108184080323167150547.00046059819b47b86933f&z=14]]''
*''[[Online Flickr Picture Tour of Salamanca:|http://www.flickr.com/groups/salamanca/pool/show/]]''
*''[[Salamanca 24 horas (Online newspaper):|http://www.salamanca24horas.com]]'' 
*''[[Tribuna de Salamanca (newspaper):|http://www.tribuna.net]]'' 
*''[[La Gaceta de Salamanca (newspaper):|http://www.lagacetadesalamanca.com/]]'' 
*''[[University of Salamanca:|http://www.usal.es]]''
/***
|''Name:''|TiddlersBarPlugin|
|''Description:''|A bar to switch between tiddlers through tabs (like browser tabs bar).|
|''Version:''|1.2.5|
|''Date:''|Jan 18,2008|
|''Source:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Author:''|Pascal Collin|
|''License:''|[[BSD open source license|License]]|
|''~CoreVersion:''|2.1.0|
|''Browser:''|Firefox 2.0; InternetExplorer 6.0, others|
!Demos
On [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], open several tiddlers to use the tabs bar.
!Installation
#import this tiddler from [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] (tagged as systemConfig)
#save and reload
#''if you're using a custom [[PageTemplate]]'', add {{{<div id='tiddlersBar' refresh='none' ondblclick='config.macros.tiddlersBar.onTiddlersBarAction(event)'></div>}}} before {{{<div id='tiddlerDisplay'></div>}}}
#optionally, adjust StyleSheetTiddlersBar
!Tips
*Doubleclick on the tiddlers bar (where there is no tab) create a new tiddler.
*Tabs include a button to close {{{x}}} or save {{{!}}} their tiddler.
*By default, click on the current tab close all others tiddlers.
!Configuration options 
<<option chkDisableTabsBar>> Disable the tabs bar (to print, by example).
<<option chkHideTabsBarWhenSingleTab >> Automatically hide the tabs bar when only one tiddler is displayed. 
<<option txtSelectedTiddlerTabButton>> ''selected'' tab command button.
<<option txtPreviousTabKey>> previous tab access key.
<<option txtNextTabKey>> next tab access key.
!Code
***/
//{{{
config.options.chkDisableTabsBar = config.options.chkDisableTabsBar ? config.options.chkDisableTabsBar : false;
config.options.chkHideTabsBarWhenSingleTab  = config.options.chkHideTabsBarWhenSingleTab  ? config.options.chkHideTabsBarWhenSingleTab  : false;
config.options.txtSelectedTiddlerTabButton = config.options.txtSelectedTiddlerTabButton ? config.options.txtSelectedTiddlerTabButton : "closeOthers";
config.options.txtPreviousTabKey = config.options.txtPreviousTabKey ? config.options.txtPreviousTabKey : "";
config.options.txtNextTabKey = config.options.txtNextTabKey ? config.options.txtNextTabKey : "";
config.macros.tiddlersBar = {
	tooltip : "see ",
	tooltipClose : "click here to close this tab",
	tooltipSave : "click here to save this tab",
	promptRename : "Enter tiddler new name",
	currentTiddler : "",
	previousState : false,
	previousKey : config.options.txtPreviousTabKey,
	nextKey : config.options.txtNextTabKey,	
	tabsAnimationSource : null, //use document.getElementById("tiddlerDisplay") if you need animation on tab switching.
	handler: function(place,macroName,params) {
		var previous = null;
		if (config.macros.tiddlersBar.isShown())
			story.forEachTiddler(function(title,e){
				if (title==config.macros.tiddlersBar.currentTiddler){
					var d = createTiddlyElement(null,"span",null,"tab tabSelected");
					config.macros.tiddlersBar.createActiveTabButton(d,title);
					if (previous && config.macros.tiddlersBar.previousKey) previous.setAttribute("accessKey",config.macros.tiddlersBar.nextKey);
					previous = "active";
				}
				else {
					var d = createTiddlyElement(place,"span",null,"tab tabUnselected");
					var btn = createTiddlyButton(d,title,config.macros.tiddlersBar.tooltip + title,config.macros.tiddlersBar.onSelectTab);
					btn.setAttribute("tiddler", title);
					if (previous=="active" && config.macros.tiddlersBar.nextKey) btn.setAttribute("accessKey",config.macros.tiddlersBar.previousKey);
					previous=btn;
				}
				var isDirty =story.isDirty(title);
				var c = createTiddlyButton(d,isDirty ?"!":"x",isDirty?config.macros.tiddlersBar.tooltipSave:config.macros.tiddlersBar.tooltipClose, isDirty ? config.macros.tiddlersBar.onTabSave : config.macros.tiddlersBar.onTabClose,"tabButton");
				c.setAttribute("tiddler", title);
				if (place.childNodes) {
					place.insertBefore(document.createTextNode(" "),place.firstChild); // to allow break line here when many tiddlers are open
					place.insertBefore(d,place.firstChild); 
				}
				else place.appendChild(d);
			})
	}, 
	refresh: function(place,params){
		removeChildren(place);
		config.macros.tiddlersBar.handler(place,"tiddlersBar",params);
		if (config.macros.tiddlersBar.previousState!=config.macros.tiddlersBar.isShown()) {
			story.refreshAllTiddlers();
			if (config.macros.tiddlersBar.previousState) story.forEachTiddler(function(t,e){e.style.display="";});
			config.macros.tiddlersBar.previousState = !config.macros.tiddlersBar.previousState;
		}
	},
	isShown : function(){
		if (config.options.chkDisableTabsBar) return false;
		if (!config.options.chkHideTabsBarWhenSingleTab) return true;
		var cpt=0;
		story.forEachTiddler(function(){cpt++});
		return (cpt>1);
	},
	selectNextTab : function(){  //used when the current tab is closed (to select another tab)
		var previous="";
		story.forEachTiddler(function(title){
			if (!config.macros.tiddlersBar.currentTiddler) {
				story.displayTiddler(null,title);
				return;
			}
			if (title==config.macros.tiddlersBar.currentTiddler) {
				if (previous) {
					story.displayTiddler(null,previous);
					return;
				}
				else config.macros.tiddlersBar.currentTiddler=""; 	// so next tab will be selected
			}
			else previous=title;
			});		
	},
	onSelectTab : function(e){
		var t = this.getAttribute("tiddler");
		if (t) story.displayTiddler(null,t);
		return false;
	},
	onTabClose : function(e){
		var t = this.getAttribute("tiddler");
		if (t) {
			if(story.hasChanges(t) && !readOnly) {
				if(!confirm(config.commands.cancelTiddler.warning.format([t])))
				return false;
			}
			story.closeTiddler(t);
		}
		return false;
	},
	onTabSave : function(e) {
		var t = this.getAttribute("tiddler");
		if (!e) e=window.event;
		if (t) config.commands.saveTiddler.handler(e,null,t);
		return false;
	},
	onSelectedTabButtonClick : function(event,src,title) {
		var t = this.getAttribute("tiddler");
		if (!event) event=window.event;
		if (t && config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton])
			config.commands[config.options.txtSelectedTiddlerTabButton].handler(event, src, t);
		return false;
	},
	onTiddlersBarAction: function(event) {
		var source = event.target ? event.target.id : event.srcElement.id; // FF uses target and IE uses srcElement;
		if (source=="tiddlersBar") story.displayTiddler(null,'New Tiddler',DEFAULT_EDIT_TEMPLATE,false,null,null);
	},
	createActiveTabButton : function(place,title) {
		if (config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton]) {
			var btn = createTiddlyButton(place, title, config.commands[config.options.txtSelectedTiddlerTabButton].tooltip ,config.macros.tiddlersBar.onSelectedTabButtonClick);
			btn.setAttribute("tiddler", title);
		}
		else
			createTiddlyText(place,title);
	}
}

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

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

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

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

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

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

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

//}}}
/%
|Name|ToggleRightSidebar|
|Source|http://www.TiddlyTools.com/#ToggleRightSidebar|
|Version|2.0.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|show/hide right sidebar (MainMenu)|

Usage: <<tiddler ToggleRightSidebar with: "label">>

Config settings:
	config.options.chkShowRightSidebar (true)
	config.options.txtToggleRightSideBarLabelShow (►)
	config.options.txtToggleRightSideBarLabelHide (◄)

%/<script label="$1" title="show/hide right sidebar content">
	var co=config.options;
	if (co.chkShowRightSidebar=='undefined') co.chkShowRightSidebar=true;
	co.chkShowRightSidebar=!co.chkShowRightSidebar;
	var sb=document.getElementById('sidebar'); if (!sb) return;
	sb.style.display=co.chkShowRightSidebar?'block':'none';
	document.getElementById('displayArea').style.marginRight=co.chkShowRightSidebar?'':'1em';
	saveOptionCookie('chkShowRightSidebar');
	var labelShow=co.txtToggleRightSideBarLabelShow||(config.browser.isSafari?'&#x25c0;':'&#x25c4;');
	var labelHide=co.txtToggleRightSideBarLabelHide||'&#x25ba;';
	if (typeof(place)!='undefined' && '$1'=='$'+'1') {
		place.innerHTML=co.chkShowRightSidebar?labelHide:labelShow;
		place.title=(co.chkShowRightSidebar?'hide':'show')+' right sidebar';
	}
	var sm=document.getElementById('storyMenu'); if (sm) config.refreshers.content(sm);
</script><script>
	var co=config.options;
	if (co.chkShowRightSidebar=='undefined') co.chkShowRightSidebar=true;
	var sb=document.getElementById('sidebar'); if (!sb) return;
	sb.style.display=co.chkShowRightSidebar?'block':'none';
	document.getElementById('displayArea').style.marginRight=co.chkShowRightSidebar?'':'1em';
	if ('$1'=='$'+'1') {
		var labelShow=co.txtToggleRightSideBarLabelShow||(config.browser.isSafari?'&#x25c0;':'&#x25c4;');
		var labelHide=co.txtToggleRightSideBarLabelHide||'&#x25ba;';
		place.lastChild.innerHTML=co.chkShowRightSidebar?labelHide:labelShow;
		place.lastChild.title=(co.chkShowRightSidebar?'hide':'show')+' right sidebar';
	}
</script>
We will head south of Madrid to Spain's former capital at Toledo. This city is a historical gem, a collage of 20 centuries of Roman, Arab, Christian and Jewish culture and history. Dating back to Roman rule in the 2nd century B.C., historians are even now unearthing the ruins of a Roman circus near the city. See classical, medieval Christian , Jewish and Arab architecture as you wind through a labyrinthine of 2000 years of history. Shop for historical curiosities in a wonderful variety of styles. Take in the view of the ancient city, sitting on a hill above a sharp bend in the Tagus River below, which inspired the great Spanish painter El Greco's famous landscape. Toledo is a city with an almost surreal historical richness where time seems to stand still while you walk back into past ages. 
[img[http://www.wfu.edu/romancelanguages/study_abroad/Salamanca/images/Toledo_cath_puerto_principal.jpg]]
|~ViewToolbar|closeTiddler closeOthers +editHtml editTiddler > fields syncing permalink references jump|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler|
<html><p><strong><span>Translation School at the University of Salamanca / Facultad de Traducci&oacute;n y Servicio Central de Idiomas de la Universidad de Salamanca</span></strong></p><span>       </span><p><!--[if !vml]--><span>         </span><img width="288" vspace="6" hspace="6" height="216" align="left" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/academic_program_clip_image009.gif" alt="Salamanca building" v:shapes="_x0000_s1031" /><span>         </span><!--[endif]--><span>         </span><span lang="EN-GB" style=""><span>Among its various functions, the SCI (Servicio Central de Idiomas/Central Service for Foreign Languages) translates all types of documents for the university community, such as scientific papers, academic dossiers, legal documentation, press releases, etc. Internships are supervised and evaluated by the English Translation Coordinator at the SCI. A complement to this internship involves the participation in various translation projects in direct coordination with the <a href="javascript:;" title="The tiddler 'Vice-Dean' doesn't yet exist" class="tiddlyLink tiddlyLinkNonExisting" refresh="link" tiddlylink="Vice-Dean">Vice-Dean</a> of the </span><st1:place w:st="on"><st1:placename w:st="on"><span>Translation</span></st1:placename><span> </span><st1:placetype w:st="on"><span>School</span></st1:placetype></st1:place><span>. The SCI offers a maximum of two internships per each summer session.</span></span></p></html>
Transportation
Students will arrange their own transportation to and from Spain. If they are participating in the orientation trip, they will be picked up at the airport by Professor García Garrido, the on-site program Director. Otherwise, students will receive detailed information about transportation from Madrid to Salamanca where they will be met by their host family.
The Program includes 2 group trips organized by the University of Salamanca: 

''Segovia''
<<tiddler Segovia>>
----

''El Escorial''
<<tiddler "El Escorial">>
----

''Ávila''
<<tiddler Ávila>>
----
<html><img hspace="12" align="right" src="http://www.cvlavega.com/images/general/guti.jpg" alt="" /><p> This internship is specially suitable for biology majors who are aware about animals welfare. You will get first hand experience at a very busy, vivid and young veterinary clinic. Your main responsibilities will be helping in surgeries, dog grooming. shadowing animal treatments and helping with the the management of the clinic.
&nbsp;</p></html>
<html><img hspace="12" align="right" src="http://www.wfu.edu/romancelanguages/study_abroad/SummerInternship/perfumerias.jpg" alt="" /><p>Salamanca has a very important Women's Basketball Team with several US players. This is one of the leading teams of the Spanish NBA. Your duty in this internship will be to help in press conferences, helping in translation with players managers, organizing team trips, helping the physiotherapists, etc. This internship is indicated for communication, pre-med and management students.&nbsp;</p></html>
renamed FCKeditorPlugin
|>|!YourSearch Options|
|>|<<option chkUseYourSearch>> Use 'Your Search'|
|!|<<option chkPreviewText>> Show Text Preview|
|!|<<option chkSearchAsYouType>> 'Search As You Type' Mode (No RETURN required to start search)|
|!|Default Search Filter: <<option chkSearchInTitle>>Title ('!')     <<option chkSearchInText>>Text ('%')     <<option chkSearchInTags>>Tags ('#')    <<option chkSearchExtendedFields>>Extended Fields<html><br><font size="-2">The fields of a tiddlers that are searched when you don't explicitly specify a filter in the search text <br>(Explictly specify fields using one or more '!', '%', '#' or 'fieldname:' prefix before the word/text to find).</font></html>|
|!|Number of items on search result page: <<option txtItemsPerPage>>|
|!|Number of items on search result page with preview text: <<option txtItemsPerPageWithPreview>>|
/***
|''Name:''|YourSearchPlugin|
|''Version:''|2.1.4 (2009-09-04)|
|''Source:''|http://tiddlywiki.abego-software.de/#YourSearchPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]|
|''Copyright:''|&copy; 2005-2009 [[abego Software|http://www.abego-software.de]]|
|''~CoreVersion:''|2.1.0|
|''Community:''|[[del.icio.us|http://del.icio.us/post?url=http://tiddlywiki.abego-software.de/index.html%23YourSearchPlugin]]|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; ~InternetExplorer 6.0|
!About YourSearch
YourSearch gives you a bunch of new features to simplify and speed up your daily searches in TiddlyWiki. It seamlessly integrates into the standard TiddlyWiki search: just start typing into the 'search' field and explore!

For more information see [[Help|YourSearch Help]].
!Compatibility
This plugin requires TiddlyWiki 2.1. 
Check the [[archive|http://tiddlywiki.abego-software.de/archive]] for ~YourSearchPlugins supporting older versions of TiddlyWiki.
!Source Code
***/
/***
This plugin's source code is compressed (and hidden). Use this [[link|http://tiddlywiki.abego-software.de/archive/YourSearchPlugin/Plugin-YourSearch-src.2.1.4.js]] to get the readable source code.
***/
///%
if(!version.extensions.YourSearchPlugin){version.extensions.YourSearchPlugin={major:2,minor:1,revision:4,source:"http://tiddlywiki.abego-software.de/#YourSearchPlugin",licence:"[[BSD open source license (abego Software)|http://www.abego-software.de/legal/apl-v10.html]]",copyright:"Copyright (c) abego Software GmbH, 2005-2009 (www.abego-software.de)"};if(!window.abego){window.abego={};}if(!Array.forEach){Array.forEach=function(_1,_2,_3){for(var i=0,_4=_1.length;i<_4;i++){_2.call(_3,_1[i],i,_1);}};Array.prototype.forEach=function(_5,_6){for(var i=0,_7=this.length;i<_7;i++){_5.call(_6,this[i],i,this);}};}abego.toInt=function(s,_8){if(!s){return _8;}var n=parseInt(s);return (n==NaN)?_8:n;};abego.createEllipsis=function(_9){var e=createTiddlyElement(_9,"span");e.innerHTML="&hellip;";};abego.shallowCopy=function(_a){if(!_a){return _a;}var _b={};for(var n in _a){_b[n]=_a[n];}return _b;};abego.copyOptions=function(_c){return !_c?{}:abego.shallowCopy(_c);};abego.countStrings=function(_d,s){if(!s){return 0;}var _e=s.length;var n=0;var _f=0;while(1){var i=_d.indexOf(s,_f);if(i<0){return n;}n++;_f=i+_e;}return n;};abego.getBracedText=function(_10,_11,_12){if(!_11){_11=0;}var re=/\{([^\}]*)\}/gm;re.lastIndex=_11;var m=re.exec(_10);if(m){var s=m[1];var _13=abego.countStrings(s,"{");if(!_13){if(_12){_12.lastIndex=re.lastIndex;}return s;}var len=_10.length;for(var i=re.lastIndex;i<len&&_13;i++){var c=_10.charAt(i);if(c=="{"){_13++;}else{if(c=="}"){_13--;}}}if(!_13){if(_12){_12.lastIndex=i-1;}return _10.substring(m.index+1,i-1);}}};abego.select=function(_14,_15,_16,_17){if(!_17){_17=[];}_14.forEach(function(t){if(_15.call(_16,t)){_17.push(t);}});return _17;};abego.consumeEvent=function(e){if(e.stopPropagation){e.stopPropagation();}if(e.preventDefault){e.preventDefault();}e.cancelBubble=true;e.returnValue=true;};abego.TiddlerFilterTerm=function(_18,_19){if(!_19){_19={};}var _1a=_18;if(!_19.textIsRegExp){_1a=_18.escapeRegExp();if(_19.fullWordMatch){_1a="\\b"+_1a+"\\b";}}var _1b=new RegExp(_1a,"m"+(_19.caseSensitive?"":"i"));this.tester=new abego.MultiFieldRegExpTester(_1b,_19.fields,_19.withExtendedFields);};abego.TiddlerFilterTerm.prototype.test=function(_1c){return this.tester.test(_1c);};abego.parseNewTiddlerCommandLine=function(s){var m=/(.*?)\.(?:\s+|$)([^#]*)(#.*)?/.exec(s);if(!m){m=/([^#]*)()(#.*)?/.exec(s);}if(m){var r;if(m[3]){var s2=m[3].replace(/#/g,"");r=s2.parseParams("tag");}else{r=[[]];}var _1d=m[2]?m[2].trim():"";r.push({name:"text",value:_1d});r[0].text=[_1d];return {title:m[1].trim(),params:r};}else{return {title:s.trim(),params:[[]]};}};abego.parseTiddlerFilterTerm=function(_1e,_1f,_20){var re=/\s*(?:(?:\{([^\}]*)\})|(?:(=)|([#%!])|(?:(\w+)\s*\:(?!\/\/))|(?:(?:("(?:(?:\\")|[^"])+")|(?:\/((?:(?:\\\/)|[^\/])+)\/)|(\w+\:\/\/[^\s]+)|([^\s\)\-\"]+)))))/mg;var _21={"!":"title","%":"text","#":"tags"};var _22={};var _23;re.lastIndex=_1f;while(1){var i=re.lastIndex;var m=re.exec(_1e);if(!m||m.index!=i){throw "Word or String literal expected";}if(m[1]){var _24={};var _25=abego.getBracedText(_1e,0,_24);if(!_25){throw "Invalid {...} syntax";}var f=Function("tiddler","return ("+_25+");");return {func:f,lastIndex:_24.lastIndex,markRE:null};}if(m[2]){_23=true;}else{if(m[3]){_22[_21[m[3]]]=1;}else{if(m[4]){_22[m[4]]=1;}else{var _26=m[6];var _27=m[5]?window.eval(m[5]):m[6]?m[6]:m[7]?m[7]:m[8];var _20=abego.copyOptions(_20);_20.fullWordMatch=_23;_20.textIsRegExp=_26;var _28=[];for(var n in _22){_28.push(n);}if(_28.length==0){_20.fields=_20.defaultFields;}else{_20.fields=_28;_20.withExtendedFields=false;}var _29=new abego.TiddlerFilterTerm(_27,_20);var _2a=_26?_27:_27.escapeRegExp();if(_2a&&_23){_2a="\\b"+_2a+"\\b";}return {func:function(_2b){return _29.test(_2b);},lastIndex:re.lastIndex,markRE:_2a?"(?:"+_2a+")":null};}}}}};abego.BoolExp=function(s,_2c,_2d){this.s=s;var _2e=_2d&&_2d.defaultOperationIs_OR;var _2f=/\s*(?:(\-|not)|(\())/gi;var _30=/\s*\)/g;var _31=/\s*(?:(and|\&\&)|(or|\|\|))/gi;var _32=/\s*[^\)\s]/g;var _33=/\s*(\-|not)?(\s*\()?/gi;var _34;var _35=function(_36){_33.lastIndex=_36;var m=_33.exec(s);var _37;var _38;if(m&&m.index==_36){_36+=m[0].length;_37=m[1];if(m[2]){var e=_34(_36);_30.lastIndex=e.lastIndex;if(!_30.exec(s)){throw "Missing ')'";}_38={func:e.func,lastIndex:_30.lastIndex,markRE:e.markRE};}}if(!_38){_38=_2c(s,_36,_2d);}if(_37){_38.func=(function(f){return function(_39){return !f(_39);};})(_38.func);_38.markRE=null;}return _38;};_34=function(_3a){var _3b=_35(_3a);while(1){var l=_3b.lastIndex;_31.lastIndex=l;var m=_31.exec(s);var _3c;var _3d;if(m&&m.index==l){_3c=!m[1];_3d=_35(_31.lastIndex);}else{try{_3d=_35(l);}catch(e){return _3b;}_3c=_2e;}_3b.func=(function(_3e,_3f,_40){return _40?function(_41){return _3e(_41)||_3f(_41);}:function(_42){return _3e(_42)&&_3f(_42);};})(_3b.func,_3d.func,_3c);_3b.lastIndex=_3d.lastIndex;if(!_3b.markRE){_3b.markRE=_3d.markRE;}else{if(_3d.markRE){_3b.markRE=_3b.markRE+"|"+_3d.markRE;}}}};var _43=_34(0);this.evalFunc=_43.func;if(_43.markRE){this.markRegExp=new RegExp(_43.markRE,_2d.caseSensitive?"mg":"img");}};abego.BoolExp.prototype.exec=function(){return this.evalFunc.apply(this,arguments);};abego.BoolExp.prototype.getMarkRegExp=function(){return this.markRegExp;};abego.BoolExp.prototype.toString=function(){return this.s;};abego.MultiFieldRegExpTester=function(re,_44,_45){this.re=re;this.fields=_44?_44:["title","text","tags"];this.withExtendedFields=_45;};abego.MultiFieldRegExpTester.prototype.test=function(_46){var re=this.re;for(var i=0;i<this.fields.length;i++){var s=store.getValue(_46,this.fields[i]);if(typeof s=="string"&&re.test(s)){return this.fields[i];}}if(this.withExtendedFields){return store.forEachField(_46,function(_47,_48,_49){return typeof _49=="string"&&re.test(_49)?_48:null;},true);}return null;};abego.TiddlerQuery=function(_4a,_4b,_4c,_4d,_4e){if(_4c){this.regExp=new RegExp(_4a,_4b?"mg":"img");this.tester=new abego.MultiFieldRegExpTester(this.regExp,_4d,_4e);}else{this.expr=new abego.BoolExp(_4a,abego.parseTiddlerFilterTerm,{defaultFields:_4d,caseSensitive:_4b,withExtendedFields:_4e});}this.getQueryText=function(){return _4a;};this.getUseRegExp=function(){return _4c;};this.getCaseSensitive=function(){return _4b;};this.getDefaultFields=function(){return _4d;};this.getWithExtendedFields=function(){return _4e;};};abego.TiddlerQuery.prototype.test=function(_4f){if(!_4f){return false;}if(this.regExp){return this.tester.test(_4f);}return this.expr.exec(_4f);};abego.TiddlerQuery.prototype.filter=function(_50){return abego.select(_50,this.test,this);};abego.TiddlerQuery.prototype.getMarkRegExp=function(){if(this.regExp){return "".search(this.regExp)>=0?null:this.regExp;}return this.expr.getMarkRegExp();};abego.TiddlerQuery.prototype.toString=function(){return (this.regExp?this.regExp:this.expr).toString();};abego.PageWiseRenderer=function(){this.firstIndexOnPage=0;};merge(abego.PageWiseRenderer.prototype,{setItems:function(_51){this.items=_51;this.setFirstIndexOnPage(0);},getMaxPagesInNavigation:function(){return 10;},getItemsCount:function(_52){return this.items?this.items.length:0;},getCurrentPageIndex:function(){return Math.floor(this.firstIndexOnPage/this.getItemsPerPage());},getLastPageIndex:function(){return Math.floor((this.getItemsCount()-1)/this.getItemsPerPage());},setFirstIndexOnPage:function(_53){this.firstIndexOnPage=Math.min(Math.max(0,_53),this.getItemsCount()-1);},getFirstIndexOnPage:function(){this.firstIndexOnPage=Math.floor(this.firstIndexOnPage/this.getItemsPerPage())*this.getItemsPerPage();return this.firstIndexOnPage;},getLastIndexOnPage:function(){return Math.min(this.getFirstIndexOnPage()+this.getItemsPerPage()-1,this.getItemsCount()-1);},onPageChanged:function(_54,_55){},renderPage:function(_56){if(_56.beginRendering){_56.beginRendering(this);}try{if(this.getItemsCount()){var _57=this.getLastIndexOnPage();var _58=-1;for(var i=this.getFirstIndexOnPage();i<=_57;i++){_58++;_56.render(this,this.items[i],i,_58);}}}finally{if(_56.endRendering){_56.endRendering(this);}}},addPageNavigation:function(_59){if(!this.getItemsCount()){return;}var _5a=this;var _5b=function(e){if(!e){var e=window.event;}abego.consumeEvent(e);var _5c=abego.toInt(this.getAttribute("page"),0);var _5d=_5a.getCurrentPageIndex();if(_5c==_5d){return;}var _5e=_5c*_5a.getItemsPerPage();_5a.setFirstIndexOnPage(_5e);_5a.onPageChanged(_5c,_5d);};var _5f;var _60=this.getCurrentPageIndex();var _61=this.getLastPageIndex();if(_60>0){_5f=createTiddlyButton(_59,"Previous","Go to previous page (Shortcut: Alt-'<')",_5b,"prev");_5f.setAttribute("page",(_60-1).toString());_5f.setAttribute("accessKey","<");}for(var i=-this.getMaxPagesInNavigation();i<this.getMaxPagesInNavigation();i++){var _62=_60+i;if(_62<0){continue;}if(_62>_61){break;}var _63=(i+_60+1).toString();var _64=_62==_60?"currentPage":"otherPage";_5f=createTiddlyButton(_59,_63,"Go to page %0".format([_63]),_5b,_64);_5f.setAttribute("page",(_62).toString());}if(_60<_61){_5f=createTiddlyButton(_59,"Next","Go to next page (Shortcut: Alt-'>')",_5b,"next");_5f.setAttribute("page",(_60+1).toString());_5f.setAttribute("accessKey",">");}}});abego.LimitedTextRenderer=function(){var _65=40;var _66=4;var _67=function(_68,_69,_6a){var n=_68.length;if(n==0){_68.push({start:_69,end:_6a});return;}var i=0;for(;i<n;i++){var _6b=_68[i];if(_6b.start<=_6a&&_69<=_6b.end){var r;var _6c=i+1;for(;_6c<n;_6c++){r=_68[_6c];if(r.start>_6a||_69>_6b.end){break;}}var _6d=_69;var _6e=_6a;for(var j=i;j<_6c;j++){r=_68[j];_6d=Math.min(_6d,r.start);_6e=Math.max(_6e,r.end);}_68.splice(i,_6c-i,{start:_6d,end:_6e});return;}if(_6b.start>_6a){break;}}_68.splice(i,0,{start:_69,end:_6a});};var _6f=function(_70){var _71=0;for(var i=0;i<_70.length;i++){var _72=_70[i];_71+=_72.end-_72.start;}return _71;};var _73=function(c){return (c>="a"&&c<="z")||(c>="A"&&c<="Z")||c=="_";};var _74=function(s,_75){if(!_73(s[_75])){return null;}for(var i=_75-1;i>=0&&_73(s[i]);i--){}var _76=i+1;var n=s.length;for(i=_75+1;i<n&&_73(s[i]);i++){}return {start:_76,end:i};};var _77=function(s,_78,_79){var _7a;if(_79){_7a=_74(s,_78);}else{if(_78<=0){return _78;}_7a=_74(s,_78-1);}if(!_7a){return _78;}if(_79){if(_7a.start>=_78-_66){return _7a.start;}if(_7a.end<=_78+_66){return _7a.end;}}else{if(_7a.end<=_78+_66){return _7a.end;}if(_7a.start>=_78-_66){return _7a.start;}}return _78;};var _7b=function(s,_7c){var _7d=[];if(_7c){var _7e=0;var n=s.length;var _7f=0;do{_7c.lastIndex=_7e;var _80=_7c.exec(s);if(_80){if(_7e<_80.index){var t=s.substring(_7e,_80.index);_7d.push({text:t});}_7d.push({text:_80[0],isMatch:true});_7e=_80.index+_80[0].length;}else{_7d.push({text:s.substr(_7e)});break;}}while(true);}else{_7d.push({text:s});}return _7d;};var _81=function(_82){var _83=0;for(var i=0;i<_82.length;i++){if(_82[i].isMatch){_83++;}}return _83;};var _84=function(s,_85,_86,_87,_88){var _89=Math.max(Math.floor(_88/(_87+1)),_65);var _8a=Math.max(_89-(_86-_85),0);var _8b=Math.min(Math.floor(_86+_8a/3),s.length);var _8c=Math.max(_8b-_89,0);_8c=_77(s,_8c,true);_8b=_77(s,_8b,false);return {start:_8c,end:_8b};};var _8d=function(_8e,s,_8f){var _90=[];var _91=_81(_8e);var pos=0;for(var i=0;i<_8e.length;i++){var t=_8e[i];var _92=t.text;if(t.isMatch){var _93=_84(s,pos,pos+_92.length,_91,_8f);_67(_90,_93.start,_93.end);}pos+=_92.length;}return _90;};var _94=function(s,_95,_96){var _97=_96-_6f(_95);while(_97>0){if(_95.length==0){_67(_95,0,_77(s,_96,false));return;}else{var _98=_95[0];var _99;var _9a;if(_98.start==0){_99=_98.end;if(_95.length>1){_9a=_95[1].start;}else{_67(_95,_99,_77(s,_99+_97,false));return;}}else{_99=0;_9a=_98.start;}var _9b=Math.min(_9a,_99+_97);_67(_95,_99,_9b);_97-=(_9b-_99);}}};var _9c=function(_9d,s,_9e,_9f,_a0){if(_9f.length==0){return;}var _a1=function(_a2,s,_a3,_a4,_a5){var t;var _a6;var pos=0;var i=0;var _a7=0;for(;i<_a3.length;i++){t=_a3[i];_a6=t.text;if(_a4<pos+_a6.length){_a7=_a4-pos;break;}pos+=_a6.length;}var _a8=_a5-_a4;for(;i<_a3.length&&_a8>0;i++){t=_a3[i];_a6=t.text.substr(_a7);_a7=0;if(_a6.length>_a8){_a6=_a6.substr(0,_a8);}if(t.isMatch){createTiddlyElement(_a2,"span",null,"marked",_a6);}else{createTiddlyText(_a2,_a6);}_a8-=_a6.length;}if(_a5<s.length){abego.createEllipsis(_a2);}};if(_9f[0].start>0){abego.createEllipsis(_9d);}var _a9=_a0;for(var i=0;i<_9f.length&&_a9>0;i++){var _aa=_9f[i];var len=Math.min(_aa.end-_aa.start,_a9);_a1(_9d,s,_9e,_aa.start,_aa.start+len);_a9-=len;}};this.render=function(_ab,s,_ac,_ad){if(s.length<_ac){_ac=s.length;}var _ae=_7b(s,_ad);var _af=_8d(_ae,s,_ac);_94(s,_af,_ac);_9c(_ab,s,_ae,_af,_ac);};};(function(){function _b0(msg){alert(msg);throw msg;};if(version.major<2||(version.major==2&&version.minor<1)){_b0("YourSearchPlugin requires TiddlyWiki 2.1 or newer.\n\nCheck the archive for YourSearch plugins\nsupporting older versions of TiddlyWiki.\n\nArchive: http://tiddlywiki.abego-software.de/archive");}abego.YourSearch={};var _b1;var _b2;var _b3=function(_b4){_b1=_b4;};var _b5=function(){return _b1?_b1:[];};var _b6=function(){return _b1?_b1.length:0;};var _b7=4;var _b8=10;var _b9=2;var _ba=function(s,re){var m=s.match(re);return m?m.length:0;};var _bb=function(_bc,_bd){var _be=_bd.getMarkRegExp();if(!_be){return 1;}var _bf=_bc.title.match(_be);var _c0=_bf?_bf.length:0;var _c1=_ba(_bc.getTags(),_be);var _c2=_bf?_bf.join("").length:0;var _c3=_bc.title.length>0?_c2/_bc.title.length:0;var _c4=_c0*_b7+_c1*_b9+_c3*_b8+1;return _c4;};var _c5=function(_c6,_c7,_c8,_c9,_ca,_cb){_b2=null;var _cc=_c6.reverseLookup("tags",_cb,false);try{var _cd=[];if(config.options.chkSearchInTitle){_cd.push("title");}if(config.options.chkSearchInText){_cd.push("text");}if(config.options.chkSearchInTags){_cd.push("tags");}_b2=new abego.TiddlerQuery(_c7,_c8,_c9,_cd,config.options.chkSearchExtendedFields);}catch(e){return [];}var _ce=_b2.filter(_cc);var _cf=abego.YourSearch.getRankFunction();for(var i=0;i<_ce.length;i++){var _d0=_ce[i];var _d1=_cf(_d0,_b2);_d0.searchRank=_d1;}if(!_ca){_ca="title";}var _d2=function(a,b){var _d3=a.searchRank-b.searchRank;if(_d3==0){if(a[_ca]==b[_ca]){return (0);}else{return (a[_ca]<b[_ca])?-1:+1;}}else{return (_d3>0)?-1:+1;}};_ce.sort(_d2);return _ce;};var _d4=80;var _d5=50;var _d6=250;var _d7=50;var _d8=25;var _d9=10;var _da="yourSearchResult";var _db="yourSearchResultItems";var _dc;var _dd;var _de;var _df;var _e0;var _e1=function(){if(version.extensions.YourSearchPlugin.styleSheetInited){return;}version.extensions.YourSearchPlugin.styleSheetInited=true;setStylesheet(store.getTiddlerText("YourSearchStyleSheet"),"yourSearch");};var _e2=function(){return _dd!=null&&_dd.parentNode==document.body;};var _e3=function(){if(_e2()){document.body.removeChild(_dd);}};var _e4=function(e){_e3();var _e5=this.getAttribute("tiddlyLink");if(_e5){var _e6=this.getAttribute("withHilite");var _e7=highlightHack;if(_e6&&_e6=="true"&&_b2){highlightHack=_b2.getMarkRegExp();}story.displayTiddler(this,_e5);highlightHack=_e7;}return (false);};var _e8=function(){if(!_de){return;}var _e9=_de;var _ea=findPosX(_e9);var _eb=findPosY(_e9);var _ec=_e9.offsetHeight;var _ed=_ea;var _ee=_eb+_ec;var _ef=findWindowWidth();if(_ef<_dd.offsetWidth){_dd.style.width=(_ef-100)+"px";_ef=findWindowWidth();}var _f0=_dd.offsetWidth;if(_ed+_f0>_ef){_ed=_ef-_f0-30;}if(_ed<0){_ed=0;}_dd.style.left=_ed+"px";_dd.style.top=_ee+"px";_dd.style.display="block";};var _f1=function(){if(_dd){window.scrollTo(0,ensureVisible(_dd));}if(_de){window.scrollTo(0,ensureVisible(_de));}};var _f2=function(){_e8();_f1();};var _f3;var _f4;var _f5=new abego.PageWiseRenderer();var _f6=function(_f7){this.itemHtml=store.getTiddlerText("YourSearchItemTemplate");if(!this.itemHtml){_b0("YourSearchItemTemplate not found");}this.place=document.getElementById(_db);if(!this.place){this.place=createTiddlyElement(_f7,"div",_db);}};merge(_f6.prototype,{render:function(_f8,_f9,_fa,_fb){_f3=_fb;_f4=_f9;var _fc=createTiddlyElement(this.place,"div",null,"yourSearchItem");_fc.innerHTML=this.itemHtml;applyHtmlMacros(_fc,null);refreshElements(_fc,null);},endRendering:function(_fd){_f4=null;}});var _fe=function(){if(!_dd||!_de){return;}var _ff=store.getTiddlerText("YourSearchResultTemplate");if(!_ff){_ff="<b>Tiddler YourSearchResultTemplate not found</b>";}_dd.innerHTML=_ff;applyHtmlMacros(_dd,null);refreshElements(_dd,null);var _100=new _f6(_dd);_f5.renderPage(_100);_f2();};_f5.getItemsPerPage=function(){var n=(config.options.chkPreviewText)?abego.toInt(config.options.txtItemsPerPageWithPreview,_d9):abego.toInt(config.options.txtItemsPerPage,_d8);return (n>0)?n:1;};_f5.onPageChanged=function(){_fe();};var _101=function(){if(_de==null||!config.options.chkUseYourSearch){return;}if((_de.value==_dc)&&_dc&&!_e2()){if(_dd&&(_dd.parentNode!=document.body)){document.body.appendChild(_dd);_f2();}else{abego.YourSearch.onShowResult(true);}}};var _102=function(){_e3();_dd=null;_dc=null;};var _103=function(self,e){while(e!=null){if(self==e){return true;}e=e.parentNode;}return false;};var _104=function(e){if(e.target==_de){return;}if(e.target==_df){return;}if(_dd&&_103(_dd,e.target)){return;}_e3();};var _105=function(e){if(e.keyCode==27){_e3();}};addEvent(document,"click",_104);addEvent(document,"keyup",_105);var _106=function(text,_107,_108){_dc=text;_b3(_c5(store,text,_107,_108,"title","excludeSearch"));abego.YourSearch.onShowResult();};var _109=function(_10a,_10b,_10c,_10d,_10e,_10f){_e1();_dc="";var _110=null;var _111=function(txt){if(config.options.chkUseYourSearch){_106(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}else{story.search(txt.value,config.options.chkCaseSensitiveSearch,config.options.chkRegExpSearch);}_dc=txt.value;};var _112=function(e){_111(_de);return false;};var _113=function(e){if(!e){var e=window.event;}_de=this;switch(e.keyCode){case 13:if(e.ctrlKey&&_e0&&_e2()){_e0.onclick.apply(_e0,[e]);}else{_111(this);}break;case 27:if(_e2()){_e3();}else{this.value="";clearMessage();}break;}if(String.fromCharCode(e.keyCode)==this.accessKey||e.altKey){_101();}if(this.value.length<3&&_110){clearTimeout(_110);}if(this.value.length>2){if(this.value!=_dc){if(!config.options.chkUseYourSearch||config.options.chkSearchAsYouType){if(_110){clearTimeout(_110);}var txt=this;_110=setTimeout(function(){_111(txt);},500);}}else{if(_110){clearTimeout(_110);}}}if(this.value.length==0){_e3();}};var _114=function(e){this.select();clearMessage();_101();};var args=_10e.parseParams("list",null,true);var _115=getFlag(args,"buttonAtRight");var _116=getParam(args,"sizeTextbox",this.sizeTextbox);var btn;if(!_115){btn=createTiddlyButton(_10a,this.label,this.prompt,_112);}var txt=createTiddlyElement(null,"input",null,null,null);if(_10c[0]){txt.value=_10c[0];}txt.onkeyup=_113;txt.onfocus=_114;txt.setAttribute("size",_116);txt.setAttribute("accessKey",this.accessKey);txt.setAttribute("autocomplete","off");if(config.browser.isSafari){txt.setAttribute("type","search");txt.setAttribute("results","5");}else{txt.setAttribute("type","text");}if(_10a){_10a.appendChild(txt);}if(_115){btn=createTiddlyButton(_10a,this.label,this.prompt,_112);}_de=txt;_df=btn;};var _117=function(){_e3();var _118=_b5();var n=_118.length;if(n){var _119=[];for(var i=0;i<n;i++){_119.push(_118[i].title);}story.displayTiddlers(null,_119);}};var _11a=function(_11b,_11c,_11d,_11e){invokeMacro(_11b,"option",_11c,_11d,_11e);var elem=_11b.lastChild;var _11f=elem.onclick;elem.onclick=function(e){var _120=_11f.apply(this,arguments);_fe();return _120;};return elem;};var _121=function(s){var _122=["''","{{{","}}}","//","<<<","/***","***/"];var _123="";for(var i=0;i<_122.length;i++){if(i!=0){_123+="|";}_123+="("+_122[i].escapeRegExp()+")";}return s.replace(new RegExp(_123,"mg"),"").trim();};var _124=function(){var i=_f3;return (i>=0&&i<=9)?(i<9?(i+1):0):-1;};var _125=new abego.LimitedTextRenderer();var _126=function(_127,s,_128){_125.render(_127,s,_128,_b2.getMarkRegExp());};var _129=TiddlyWiki.prototype.saveTiddler;TiddlyWiki.prototype.saveTiddler=function(_12a,_12b,_12c,_12d,_12e,tags,_12f){_129.apply(this,arguments);_102();};var _130=TiddlyWiki.prototype.removeTiddler;TiddlyWiki.prototype.removeTiddler=function(_131){_130.apply(this,arguments);_102();};config.macros.yourSearch={label:"yourSearch",prompt:"Gives access to the current/last YourSearch result",handler:function(_132,_133,_134,_135,_136,_137){if(_134.length==0){return;}var name=_134[0];var func=config.macros.yourSearch.funcs[name];if(func){func(_132,_133,_134,_135,_136,_137);}},tests:{"true":function(){return true;},"false":function(){return false;},"found":function(){return _b6()>0;},"previewText":function(){return config.options.chkPreviewText;}},funcs:{itemRange:function(_138){if(_b6()){var _139=_f5.getLastIndexOnPage();var s="%0 - %1".format([_f5.getFirstIndexOnPage()+1,_139+1]);createTiddlyText(_138,s);}},count:function(_13a){createTiddlyText(_13a,_b6().toString());},query:function(_13b){if(_b2){createTiddlyText(_13b,_b2.toString());}},version:function(_13c){var t="YourSearch %0.%1.%2".format([version.extensions.YourSearchPlugin.major,version.extensions.YourSearchPlugin.minor,version.extensions.YourSearchPlugin.revision]);var e=createTiddlyElement(_13c,"a");e.setAttribute("href","http://tiddlywiki.abego-software.de/#YourSearchPlugin");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">"+t+"<font>";},copyright:function(_13d){var e=createTiddlyElement(_13d,"a");e.setAttribute("href","http://www.abego-software.de");e.innerHTML="<font color=\"black\" face=\"Arial, Helvetica, sans-serif\">&copy; 2005-2008 <b><font color=\"red\">abego</font></b> Software<font>";},newTiddlerButton:function(_13e){if(_b2){var r=abego.parseNewTiddlerCommandLine(_b2.getQueryText());var btn=config.macros.newTiddler.createNewTiddlerButton(_13e,r.title,r.params,"new tiddler","Create a new tiddler based on search text. (Shortcut: Ctrl-Enter; Separators: '.', '#')",null,"text");var _13f=btn.onclick;btn.onclick=function(){_e3();_13f.apply(this,arguments);};_e0=btn;}},linkButton:function(_140,_141,_142,_143,_144,_145){if(_142<2){return;}var _146=_142[1];var text=_142<3?_146:_142[2];var _147=_142<4?text:_142[3];var _148=_142<5?null:_142[4];var btn=createTiddlyButton(_140,text,_147,_e4,null,null,_148);btn.setAttribute("tiddlyLink",_146);},closeButton:function(_149,_14a,_14b,_14c,_14d,_14e){var _14f=createTiddlyButton(_149,"close","Close the Search Results (Shortcut: ESC)",_e3);},openAllButton:function(_150,_151,_152,_153,_154,_155){var n=_b6();if(n==0){return;}var _156=n==1?"open tiddler":"open all %0 tiddlers".format([n]);var _157=createTiddlyButton(_150,_156,"Open all found tiddlers (Shortcut: Alt-O)",_117);_157.setAttribute("accessKey","O");},naviBar:function(_158,_159,_15a,_15b,_15c,_15d){_f5.addPageNavigation(_158);},"if":function(_15e,_15f,_160,_161,_162,_163){if(_160.length<2){return;}var _164=_160[1];var _165=(_164=="not");if(_165){if(_160.length<3){return;}_164=_160[2];}var test=config.macros.yourSearch.tests[_164];var _166=false;try{if(test){_166=test(_15e,_15f,_160,_161,_162,_163)!=_165;}else{_166=(!eval(_164))==_165;}}catch(ex){}if(!_166){_15e.style.display="none";}},chkPreviewText:function(_167,_168,_169,_16a,_16b,_16c){var _16d=_169.slice(1).join(" ");var elem=_11a(_167,"chkPreviewText",_16a,_16c);elem.setAttribute("accessKey","P");elem.title="Show text preview of found tiddlers (Shortcut: Alt-P)";return elem;}}};config.macros.foundTiddler={label:"foundTiddler",prompt:"Provides information on the tiddler currently processed on the YourSearch result page",handler:function(_16e,_16f,_170,_171,_172,_173){var name=_170[0];var func=config.macros.foundTiddler.funcs[name];if(func){func(_16e,_16f,_170,_171,_172,_173);}},funcs:{title:function(_174,_175,_176,_177,_178,_179){if(!_f4){return;}var _17a=_124();var _17b=_17a>=0?"Open tiddler (Shortcut: Alt-%0)".format([_17a.toString()]):"Open tiddler";var btn=createTiddlyButton(_174,null,_17b,_e4,null);btn.setAttribute("tiddlyLink",_f4.title);btn.setAttribute("withHilite","true");_126(btn,_f4.title,_d4);if(_17a>=0){btn.setAttribute("accessKey",_17a.toString());}},tags:function(_17c,_17d,_17e,_17f,_180,_181){if(!_f4){return;}_126(_17c,_f4.getTags(),_d5);},text:function(_182,_183,_184,_185,_186,_187){if(!_f4){return;}_126(_182,_121(_f4.text),_d6);},field:function(_188,_189,_18a,_18b,_18c,_18d){if(!_f4){return;}var name=_18a[1];var len=_18a.length>2?abego.toInt(_18a[2],_d7):_d7;var v=store.getValue(_f4,name);if(v){_126(_188,_121(v),len);}},number:function(_18e,_18f,_190,_191,_192,_193){var _194=_124();if(_194>=0){var text="%0)".format([_194.toString()]);createTiddlyElement(_18e,"span",null,"shortcutNumber",text);}}}};var opts={chkUseYourSearch:true,chkPreviewText:true,chkSearchAsYouType:true,chkSearchInTitle:true,chkSearchInText:true,chkSearchInTags:true,chkSearchExtendedFields:true,txtItemsPerPage:_d8,txtItemsPerPageWithPreview:_d9};for(var n in opts){if(config.options[n]==undefined){config.options[n]=opts[n];}}config.shadowTiddlers.AdvancedOptions+="\n<<option chkUseYourSearch>> Use 'Your Search' //([[more options|YourSearch Options]]) ([[help|YourSearch Help]])// ";config.shadowTiddlers["YourSearch Help"]="!Field Search\nWith the Field Search you can restrict your search to certain fields of a tiddler, e.g"+" only search the tags or only the titles. The general form is //fieldname//'':''//textToSearch// (e."+"g. {{{title:intro}}}). In addition one-character shortcuts are also supported for the standard field"+"s {{{title}}}, {{{text}}} and {{{tags}}}:\n|!What you want|!What you type|!Example|\n|Search ''titles "+"only''|start word with ''!''|{{{!jonny}}} (shortcut for {{{title:jonny}}})|\n|Search ''contents/text "+"only''|start word with ''%''|{{{%football}}} (shortcut for {{{text:football}}})|\n|Search ''tags only"+"''|start word with ''#''|{{{#Plugin}}} (shortcut for {{{tags:Plugin}}})|\n\nUsing this feature you may"+" also search the extended fields (\"Metadata\") introduced with TiddlyWiki 2.1, e.g. use {{{priority:1"+"}}} to find all tiddlers with the priority field set to \"1\".\n\nYou may search a word in more than one"+" field. E.g. {{{!#Plugin}}} (or {{{title:tags:Plugin}}} in the \"long form\") finds tiddlers containin"+"g \"Plugin\" either in the title or in the tags (but does not look for \"Plugin\" in the text). \n\n!Boole"+"an Search\nThe Boolean Search is useful when searching for multiple words.\n|!What you want|!What you "+"type|!Example|\n|''All words'' must exist|List of words|{{{jonny jeremy}}} (or {{{jonny and jeremy}}}"+")|\n|''At least one word'' must exist|Separate words by ''or''|{{{jonny or jeremy}}}|\n|A word ''must "+"not exist''|Start word with ''-''|{{{-jonny}}} (or {{{not jonny}}})|\n\n''Note:'' When you specify two"+" words, separated with a space, YourSearch finds all tiddlers that contain both words, but not neces"+"sarily next to each other. If you want to find a sequence of word, e.g. '{{{John Brown}}}', you need"+" to put the words into quotes. I.e. you type: {{{\"john brown\"}}}.\n\nUsing parenthesis you may change "+"the default \"left to right\" evaluation of the boolean search. E.g. {{{not (jonny or jeremy)}}} finds"+" all tiddlers that contain neither \"jonny\" nor \"jeremy. In contrast to this {{{not jonny or jeremy}}"+"} (i.e. without parenthesis) finds all tiddlers that either don't contain \"jonny\" or that contain \"j"+"eremy\".\n\n!'Exact Word' Search\nBy default a search result all matches that 'contain' the searched tex"+"t. E.g. if you search for {{{Task}}} you will get all tiddlers containing 'Task', but also '~Complet"+"edTask', '~TaskForce' etc.\n\nIf you only want to get the tiddlers that contain 'exactly the word' you"+" need to prefix it with a '='. E.g. typing '=Task' will find the tiddlers that contain the word 'Tas"+"k', ignoring words that just contain 'Task' as a substring.\n\n!~CaseSensitiveSearch and ~RegExpSearch"+"\nThe standard search options ~CaseSensitiveSearch and ~RegExpSearch are fully supported by YourSearc"+"h. However when ''~RegExpSearch'' is on Filtered and Boolean Search are disabled.\n\nIn addition you m"+"ay do a \"regular expression\" search even with the ''~RegExpSearch'' set to false by directly enterin"+"g the regular expression into the search field, framed with {{{/.../}}}. \n\nExample: {{{/m[ae][iy]er/"+"}}} will find all tiddlers that contain either \"maier\", \"mayer\", \"meier\" or \"meyer\".\n\n!~JavaScript E"+"xpression Filtering\nIf you are familiar with JavaScript programming and know some TiddlyWiki interna"+"ls you may also use JavaScript expression for the search. Just enter a JavaScript boolean expression"+" into the search field, framed with {{{ { ... } }}}. In the code refer to the variable tiddler and e"+"valuate to {{{true}}} when the given tiddler should be included in the result. \n\nExample: {{{ { tidd"+"ler.modified > new Date(\"Jul 4, 2005\")} }}} returns all tiddler modified after July 4th, 2005.\n\n!Com"+"bined Search\nYou are free to combine the various search options. \n\n''Examples''\n|!What you type|!Res"+"ult|\n|{{{!jonny !jeremy -%football}}}|all tiddlers with both {{{jonny}}} and {{{jeremy}}} in its tit"+"les, but no {{{football}}} in content.|\n|{{{#=Task}}}|All tiddlers tagged with 'Task' (the exact wor"+"d). Tags named '~CompletedTask', '~TaskForce' etc. are not considered.|\n\n!Access Keys\nYou are encour"+"aged to use the access keys (also called \"shortcut\" keys) for the most frequently used operations. F"+"or quick reference these shortcuts are also mentioned in the tooltip for the various buttons etc.\n\n|"+"!Key|!Operation|\n|{{{Alt-F}}}|''The most important keystroke'': It moves the cursor to the search in"+"put field so you can directly start typing your query. Pressing {{{Alt-F}}} will also display the pr"+"evious search result. This way you can quickly display multiple tiddlers using \"Press {{{Alt-F}}}. S"+"elect tiddler.\" sequences.|\n|{{{ESC}}}|Closes the [[YourSearch Result]]. When the [[YourSearch Resul"+"t]] is already closed and the cursor is in the search input field the field's content is cleared so "+"you start a new query.|\n|{{{Alt-1}}}, {{{Alt-2}}},... |Pressing these keys opens the first, second e"+"tc. tiddler from the result list.|\n|{{{Alt-O}}}|Opens all found tiddlers.|\n|{{{Alt-P}}}|Toggles the "+"'Preview Text' mode.|\n|{{{Alt-'<'}}}, {{{Alt-'>'}}}|Displays the previous or next page in the [[Your"+"Search Result]].|\n|{{{Return}}}|When you have turned off the 'as you type' search mode pressing the "+"{{{Return}}} key actually starts the search (as does pressing the 'search' button).|\n\n//If some of t"+"hese shortcuts don't work for you check your browser if you have other extensions installed that alr"+"eady \"use\" these shortcuts.//";config.shadowTiddlers["YourSearch Options"]="|>|!YourSearch Options|\n|>|<<option chkUseYourSearch>> Use 'Your Search'|\n|!|<<option chkPreviewText"+">> Show Text Preview|\n|!|<<option chkSearchAsYouType>> 'Search As You Type' Mode (No RETURN required"+" to start search)|\n|!|Default Search Filter:<<option chkSearchInTitle>>Title ('!')     <<option chk"+"SearchInText>>Text ('%')     <<option chkSearchInTags>>Tags ('#')    <<option chkSearchExtendedFiel"+"ds>>Extended Fields<html><br><font size=\"-2\">The fields of a tiddlers that are searched when you don"+"'t explicitly specify a filter in the search text <br>(Explictly specify fields using one or more '!"+"', '%', '#' or 'fieldname:' prefix before the word/text to find).</font></html>|\n|!|Number of items "+"on search result page: <<option txtItemsPerPage>>|\n|!|Number of items on search result page with pre"+"view text: <<option txtItemsPerPageWithPreview>>|\n";config.shadowTiddlers["YourSearchStyleSheet"]="/***\n!~YourSearchResult Stylesheet\n***/\n/*{{{*/\n.yourSearchResult {\n\tposition: absolute;\n\twidth: 800"+"px;\n\n\tpadding: 0.2em;\n\tlist-style: none;\n\tmargin: 0;\n\n\tbackground: #ffd;\n\tborder: 1px solid DarkGra"+"y;\n}\n\n/*}}}*/\n/***\n!!Summary Section\n***/\n/*{{{*/\n.yourSearchResult .summary {\n\tborder-bottom-width:"+" thin;\n\tborder-bottom-style: solid;\n\tborder-bottom-color: #999999;\n\tpadding-bottom: 4px;\n}\n\n.yourSea"+"rchRange, .yourSearchCount, .yourSearchQuery   {\n\tfont-weight: bold;\n}\n\n.yourSearchResult .summary ."+"button {\n\tfont-size: 10px;\n\n\tpadding-left: 0.3em;\n\tpadding-right: 0.3em;\n}\n\n.yourSearchResult .summa"+"ry .chkBoxLabel {\n\tfont-size: 10px;\n\n\tpadding-right: 0.3em;\n}\n\n/*}}}*/\n/***\n!!Items Area\n***/\n/*{{{*"+"/\n.yourSearchResult .marked {\n\tbackground: none;\n\tfont-weight: bold;\n}\n\n.yourSearchItem {\n\tmargin-to"+"p: 2px;\n}\n\n.yourSearchNumber {\n\tcolor: #808080;\n}\n\n\n.yourSearchTags {\n\tcolor: #008000;\n}\n\n.yourSearc"+"hText {\n\tcolor: #808080;\n\tmargin-bottom: 6px;\n}\n\n/*}}}*/\n/***\n!!Footer\n***/\n/*{{{*/\n.yourSearchFoote"+"r {\n\tmargin-top: 8px;\n\tborder-top-width: thin;\n\tborder-top-style: solid;\n\tborder-top-color: #999999;"+"\n}\n\n.yourSearchFooter a:hover{\n\tbackground: none;\n\tcolor: none;\n}\n/*}}}*/\n/***\n!!Navigation Bar\n***/"+"\n/*{{{*/\n.yourSearchNaviBar a {\n\tfont-size: 16px;\n\tmargin-left: 4px;\n\tmargin-right: 4px;\n\tcolor: bla"+"ck;\n\ttext-decoration: underline;\n}\n\n.yourSearchNaviBar a:hover {\n\tbackground-color: none;\n}\n\n.yourSe"+"archNaviBar .prev {\n\tfont-weight: bold;\n\tcolor: blue;\n}\n\n.yourSearchNaviBar .currentPage {\n\tcolor: #"+"FF0000;\n\tfont-weight: bold;\n\ttext-decoration: none;\n}\n\n.yourSearchNaviBar .next {\n\tfont-weight: bold"+";\n\tcolor: blue;\n}\n/*}}}*/\n";config.shadowTiddlers["YourSearchResultTemplate"]="<!--\n{{{\n-->\n<span macro=\"yourSearch if found\">\n<!-- The Summary Header ============================"+"================ -->\n<table class=\"summary\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">"+"<tbody>\n  <tr>\n\t<td align=\"left\">\n\t\tYourSearch Result <span class=\"yourSearchRange\" macro=\"yourSearc"+"h itemRange\"></span>\n\t\t&nbsp;of&nbsp;<span class=\"yourSearchCount\" macro=\"yourSearch count\"></span>\n"+"\t\tfor&nbsp;<span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>\n\t</td>\n\t<td class=\"yourSea"+"rchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch chkPreviewText\"></span><span class=\"chkBoxLabel"+"\">preview text</span>\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch openAllButton\"></span>\n\t\t<span macro=\"yourSearch lin"+"kButton 'YourSearch Options' options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkB"+"utton 'YourSearch Help' help 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch clo"+"seButton\"></span>\n\t</td>\n  </tr>\n</tbody></table>\n\n<!-- The List of Found Tiddlers ================="+"=========================== -->\n<div id=\"yourSearchResultItems\" itemsPerPage=\"25\" itemsPerPageWithPr"+"eview=\"10\"></div>\n\n<!-- The Footer (with the Navigation) ==========================================="+"= -->\n<table class=\"yourSearchFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody"+">\n  <tr>\n\t<td align=\"left\">\n\t\tResult page: <span class=\"yourSearchNaviBar\" macro=\"yourSearch naviBar"+"\"></span>\n\t</td>\n\t<td align=\"right\"><span macro=\"yourSearch version\"></span>, <span macro=\"yourSearc"+"h copyright\"></span>\n\t</td>\n  </tr>\n</tbody></table>\n<!-- end of the 'tiddlers found' case ========="+"================================== -->\n</span>\n\n\n<!-- The \"No tiddlers found\" case ================="+"========================== -->\n<span macro=\"yourSearch if not found\">\n<table class=\"summary\" border="+"\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n  <tr>\n\t<td align=\"left\">\n\t\tYourSearch Resu"+"lt: No tiddlers found for <span class=\"yourSearchQuery\" macro=\"yourSearch query\"></span>.\n\t</td>\n\t<t"+"d class=\"yourSearchButtons\" align=\"right\">\n\t\t<span macro=\"yourSearch newTiddlerButton\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Options'"+" options 'Configure YourSearch'\"></span>\n\t\t<span macro=\"yourSearch linkButton 'YourSearch Help' help"+" 'Get help how to use YourSearch'\"></span>\n\t\t<span macro=\"yourSearch closeButton\"></span>\n\t</td>\n  <"+"/tr>\n</tbody></table>\n</span>\n\n\n<!--\n}}}\n-->\n";config.shadowTiddlers["YourSearchItemTemplate"]="<!--\n{{{\n-->\n<span class='yourSearchNumber' macro='foundTiddler number'></span>\n<span class='yourSea"+"rchTitle' macro='foundTiddler title'/></span>&nbsp;-&nbsp;\n<span class='yourSearchTags' macro='found"+"Tiddler field tags 50'/></span>\n<span macro=\"yourSearch if previewText\"><div class='yourSearchText' macro='fo"+"undTiddler field text 250'/></div></span>\n<!--\n}}}\n-->";config.shadowTiddlers["YourSearch"]="<<tiddler [[YourSearch Help]]>>";config.shadowTiddlers["YourSearch Result"]="The popup-like window displaying the result of a YourSearch query.";config.macros.search.handler=_109;var _195=function(){if(config.macros.search.handler!=_109){alert("Message from YourSearchPlugin:\n\n\nAnother plugin has disabled the 'Your Search' features.\n\n\nYou may "+"disable the other plugin or change the load order of \nthe plugins (by changing the names of the tidd"+"lers)\nto enable the 'Your Search' features.");}};setTimeout(_195,5000);abego.YourSearch.getStandardRankFunction=function(){return _bb;};abego.YourSearch.getRankFunction=function(){return abego.YourSearch.getStandardRankFunction();};abego.YourSearch.getCurrentTiddler=function(){return _f4;};abego.YourSearch.closeResult=function(){_e3();};abego.YourSearch.getFoundTiddlers=function(){return _b1;};abego.YourSearch.getQuery=function(){return _b2;};abego.YourSearch.onShowResult=function(_196){highlightHack=_b2?_b2.getMarkRegExp():null;if(!_196){_f5.setItems(_b5());}if(!_dd){_dd=createTiddlyElement(document.body,"div",_da,"yourSearchResult");}else{if(_dd.parentNode!=document.body){document.body.appendChild(_dd);}}_fe();highlightHack=null;};})();}
//%/
/***
|''Name:''|YourSearchPlugin|
|''Version:''|2.0.2 (2006-02-13)|
|''Source:''|http://tiddlywiki.abego-software.de/#YourSearchPlugin|
|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
|''Licence:''|[[BSD open source license]]|
|''TiddlyWiki:''|2.0|
|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|
<<tiddler [[YourSearch Introduction]]>>
For more information see [[Help|YourSearch Help]].

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

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

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

version.extensions.YourSearchPlugin = {
 major: 2, minor: 0, revision: 2,
 date: new Date(2006, 2, 13), 
 type: 'plugin',
 source: "http://tiddlywiki.abego-software.de/#YourSearchPlugin"
};

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

if (!window.abego) window.abego = {};
if (abego.YourSearch) alertAndThrow("abego.YourSearch already defined");
abego.YourSearch = {};

if (version.major < 2) alertAndThrow("YourSearchPlugin requires TiddlyWiki 2.0 or newer.\n\nGet YourSearch 1.0.1 to use YourSearch with older versions of TiddlyWiki.\n\nhttp://tiddlywiki.abego-software.de/#YourSearchPlugin-1.0.1");

//----------------------------------------------------------------------------
// The STQ (SimpleTiddlerQuery) Class
//----------------------------------------------------------------------------

// Internal.
// 
var STQ = function(queryText, caseSensitive, matchTitleOnly, useRegExp) {
 this.queryText = queryText;
 this.caseSensitive = caseSensitive;

 if (useRegExp) {
 this.regExp = new RegExp(queryText, caseSensitive ? "mg" : "img");
 return;
 }
 
 this.terms = [];

 // The regular expression that matches a single search term of the form
 // (whitespace handling and grouping omitted for clarity):
 //
 // -?[#!%]*(<doubleQuoteStringLiteral>|<wordWithoutSpace>) (AND|OR)?
 //
 // group 1: '-' (negate, optional)
 // group 2: [!%#]* (may be empty)
 // group 3: String literal "..."
 // group 4: word
 // group 5: AND / OR (optional) 
 //
 // (group 3 xor group 4 is defined)
 //
 var re = /\s*(\-)?([#%!=]*)(?:(?:("(?:(?:\\")|[^"])*")|(\S+)))(?:\s+((?:[aA][nN][dD])|(?:[oO][rR]))(?!\S))?/mg;

 var matches = re.exec(queryText);

 while (matches != null && matches.length == 6) {
 var negate = '-' == matches[1];
 var flags = matches[2];
 var inTitle = flags.indexOf('!') >= 0;
 var inText = flags.indexOf('%') >= 0;
 var inTag = flags.indexOf('#') >= 0;
 var wordMatch = flags.indexOf('=') >= 0;
 if (!inTitle && !inText && !inTag) {
 inTitle = config.options.chkSearchInTitle;
 inText = config.options.chkSearchInText;
 inTag = config.options.chkSearchInTags;
 
 // If all settings are off (i.e. all results would be empty, 
 // i.e user error or checkboxes are gone) set all settings
 if (!inTitle && !inText && !inTag) {
 inTitle = inText = inTag = true;
 }
 }
 if (matchTitleOnly) {
 inText = false;
 inTag = false;
 }
 
 var text;
 if (matches[3]) {
 //Quoted String
 try {
 text = eval(matches[3]);
 } catch (ex) {
 // ignore error. Will be handled right after this.
 }
 } else {
 text = matches[4];
 }
 if (!text) {
 throw "Invalid search expression: %0".format([queryText]);
 }
 var orFollows = matches[5] && matches[5].charAt(0).toLowerCase() == 'o';
 this.terms.push(new STQ.Term(text, inTitle, inText, inTag, negate, orFollows, caseSensitive, wordMatch));
 
 matches = re.exec(queryText);
 }
};

var me = STQ.prototype;

// Internal.
// 
// Returns an array with those tiddlers from the tiddlersMap that 
// match the query.
//
me.getMatchingTiddlers = function(tiddlersMap) {
 var result = [];
 for (var i in tiddlersMap) {
 var t = tiddlersMap[i];
 if ((t instanceof Tiddler) && this.matchesTiddler(t)) {
 result.push(t);
 }
 }
 return result;
};


// Internal.
// 
// Returns true if the query has a match in the given tiddler.
//
// @param tiddler [may be null]
//
me.matchesTiddler = function(tiddler) {
 if (this.regExp) {
 return this.regExp.test(tiddler.title) || this.regExp.test(tiddler.text);
 }
 
 var n = this.terms.length;
 if (n == 0) {
 return false;
 }
 
 var hasMatch = this.terms[0].matchesTiddler(tiddler);
 for (var i = 1; i < this.terms.length; i++) {
 if (this.terms[i-1].orFollows) {
 // the OR case.
 
 // shortcut: when the first operand of an OR is true 
 // we don't need to evaluate the second operand since 
 // the result of the OR will always be true.
 
 // In the other case we actually to the "OR"
 if (!hasMatch) {
 hasMatch |= this.terms[i].matchesTiddler(tiddler);
 }
 } else {
 // the AND case.
 
 // shortcut: when the first operand of an AND is false 
 // we don't need to evaluate the second operand since
 // the result of the AND will always be false.
 
 // Otherwise we actually to the "AND"
 if (hasMatch) {
 hasMatch &= this.terms[i].matchesTiddler(tiddler);
 }
 }
 }
 return hasMatch;
};

// Internal.
// 
me.getOnlyMatchTitleQuery = function() {
 if (!this.onlyMatchTitleQuery) {
 this.onlyMatchTitleQuery = new STQ(this.queryText, this.caseSensitive, true, this.useRegExp);
 }
 return this.onlyMatchTitleQuery;
};


// Returns a regular expression that can be used to marking/hiliting
// matches in the text.
//
// @return [may be null] null when the query does not provide marking information.
//
me.getMarkRegExp = function() {
 if (this.regExp) {
 // Only use the regExp for marking when it does not match the empty string.
 return "".search(this.regExp) >= 0 ? null : this.regExp;
 }
 
 var stringSet = {};
 var n = this.terms.length;
 for (var i = 0; i < this.terms.length; i++) {
 var term = this.terms[i];
 if (!term.negate) stringSet[term.text] = true;
 }

 var pattern = [];
 for (var t in stringSet) pattern.push("(" + t.escapeRegExp() + ")");
 
 if (pattern.length == 0) return null;

 var joinedPattern = pattern.join("|");
 return new RegExp(joinedPattern, this.caseSensitive ? "mg" : "img");
};

// Internal.
// 
me.toString = function() {
 if (this.regExp) {
 return this.regExp.toString();
 }
 
 var result = "";
 for (var i = 0; i < this.terms.length; i++) {
 result += this.terms[i].toString();
 }
 return result;
};

//----------------------------------------------------------------------------
// The STQ.Term Class
//----------------------------------------------------------------------------

// Internal.
//
STQ.Term = function(text, inTitle, inText, inTag, negate, orFollows, caseSensitive, wordMatch) {
 this.text = text;
 this.inTitle = inTitle;
 this.inText = inText;
 this.inTag = inTag;
 this.negate = negate;
 this.orFollows = orFollows;
 this.caseSensitive = caseSensitive;
 this.wordMatch = wordMatch;
 
 var reText = text.escapeRegExp();
 if (this.wordMatch) reText = "\\b"+reText+"\\b";
 this.regExp = new RegExp(reText, "m"+(caseSensitive ? "" : "i"));
};

// Internal.
//
STQ.Term.prototype.toString = function() {
 return (this.negate ? "-" : "")+(this.inTitle ? "!" : "")+(this.inText? "%" : "")+(this.inTag? "#" : "")+(this.wordMatch ? "=" : "")+'"'+this.text+'"'+ (this.orFollows ? " OR " : " AND ");
};

// Internal.
//
// Returns true if the term has a match in the given tiddler.
//
// @param tiddler [may be null]
//
STQ.Term.prototype.matchesTiddler = function(tiddler) {
 if (!tiddler) {
 return false;
 }
 
 if (this.inTitle && this.regExp.test(tiddler.title)) {
 return !this.negate;
 }
 if (this.inText && this.regExp.test(tiddler.text)) {
 return !this.negate;
 }
 if (this.inTag) {
 var tags = tiddler.tags;
 if (tags) {
 for (var i = 0; i < tags.length; i++) {
 if (this.regExp.test(tags[i])) {
 return !this.negate;
 }
 }
 }
 }
 
 return this.negate;
};

//----------------------------------------------------------------------------
// Utils
//----------------------------------------------------------------------------

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

var getIntAttribute = function(elem, name, defaultValue) {
 return stringToInt(elem.getAttribute(name));
};

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

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

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

var isWordChar = function(c) {
 return (c >= "a" && c <= "z") || (c >= "A" && c <= "Z") || c == "_";
};

// Returns the bounds of the word in s around offset as a {start: , end:} object.
//
// Returns null when the char at offset is not a word char.
//
var getWordBounds = function(s, offset) {
 // Handle the "offset is not in word" case
 if (!isWordChar(s[offset])) return null;

 for (var i = offset-1; i >= 0 && isWordChar(s[i]); i--) 
 {/*empty*/}
 
 var startIndex = i+1;
 var n = s.length;
 for (i = offset+1; i < n && isWordChar(s[i]); i++) 
 {/*empty*/}
 
 return {start: startIndex, end: i};
};


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

var logText = "";
var lastLogTime = null;
var logMessage = function(kind, s) {
 var now = new Date();
 var delta = lastLogTime ? (now-lastLogTime).toString() : "";
 logText += "<tr><td>"+now.convertToYYYYMMDDHHMMSSMMM()+"</td><td align='right'>"+delta+"</td><td>"+kind+"</td><td>"+s.htmlEncode()+"</td></tr>\n";
 lastLogTime = now;
};

function writeLog() {
 var t = " <<JsDoIt 'WriteLog' 'WriteLog' 'javascript:writeLog();story.closeTiddler(\"Log\");story.displayTiddler(null,\"Log\");'>>"+
 "<html><table><tbody><tr><th>Time</th><th>Delta (ms)</th><th>Kind</th><th>Message</th></tr>\n" + logText + "</tbody></table></html>";
 store.saveTiddler("Log", "Log",t,config.options.txtUserName,new Date(),["System", "Log"]);
 logText = "";
 lastLogTime = null;
}

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

// Constants

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

// Visual appearance of the result page
var maxCharsInTitle = 80;
var maxCharsInTags = 50;
var maxCharsInText = 250;
var maxPagesInNaviBar = 10; // Maximum number of pages listed in the navigation bar (before or after the current page)

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

// Context Calculation
var minMatchWithContextSize = 40; 
var maxMovementForWordCorrection = 4; // When a "match" context starts or end on a word the context borders may be changed to at most this amound to include or exclude the word.

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

// Variables
var resultElement; // The (popup) DOM element containing the search result [may be null]
var lastResults; // Array of tiddlers that matched the last search
var lastQuery; // The last Search query (STQ)
var lastSearchText; // The last search text, as used to create the lastQuery
var searchInputField; // The "search" input field
var searchButton; // The "search" button
var firstIndexOnPage = 0; // The index of the first item of the lastResults list displayed on the search result page

var currentTiddler; // While creating the search result page the tiddler that is currently rendered.
var indexInPage; // The index (in the current page) of the tiddler currently rendered.
var indexInResult; // The index (in the result array) of the tiddler currently rendered.


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

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

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

 return rank;
};

// @return Tiddler[]
//
var findMatches = function(store, searchText,caseSensitive,useRegExp,sortField,excludeTag) {
 lastSearchText = searchText;

 var candidates = store.reverseLookup("tags",excludeTag,false);
 var query = new STQ(searchText,caseSensitive, false, useRegExp); 
 lastQuery = query;

 var results = query.getMatchingTiddlers(candidates);

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


//----------------------------------------------------------------------------
// Handling "limited marked text" in the preview
//
// The found/matched texts should be displayed to the user in the preview. To make 
// it more useful the matched texts should be shown in their contexts, i.e. with
// some text around them. Since we only have limited space for the preview 
// (around two lines for the text preview, less for the tags and title) and 
// also don't want to both the user with "too much context" we use some 
// heuristics to find the "best context (size)". 
//
// On the other hand we want to use as much as possible of the preview area, 
// so if there is room left we also display as much text from the beginning
// of the text as possible. This gives the user some kind of "overall context"
// especiallay if the start of the text is introductorily.
//
// Text Ranges
//
// To represent the ranges that should be displayed "Range" object are used.
// This are objects with a "start" and "end" property. In a corresponding
// "Ranges array" these objects are sorted by their start and no range object 
// intersects/touches any other of the array.
//
//----------------------------------------------------------------------------

var moveToWordBorder = function(s, offset, isStartOffset) {
 var wordBounds;
 if (isStartOffset) {
 wordBounds = getWordBounds(s, offset);
 } else {
 if (offset <= 0) return offset;
 wordBounds = getWordBounds(s, offset-1);
 }
 if (!wordBounds) return offset;
 
 if (isStartOffset) {
 if (wordBounds.start >= offset-maxMovementForWordCorrection) return wordBounds.start;
 if (wordBounds.end <= offset+maxMovementForWordCorrection) return wordBounds.end;
 } else {
 if (wordBounds.end <= offset+maxMovementForWordCorrection) return wordBounds.end;
 if (wordBounds.start >= offset-maxMovementForWordCorrection) return wordBounds.start;
 }
 return offset;
};

var getContextRangeAround = function(s, startIndex, endIndex, matchCount, maxLen) {
 // Partition the available space into equal sized areas for each match and one 
 // for the text start.
 // But the size should not go below a certain limit
 var size = Math.max(Math.floor(maxLen/(matchCount+1)), minMatchWithContextSize);
 
 // Substract the size of the range to get the size of the context.
 var contextSize = Math.max(size-(endIndex-startIndex), 0);
 // Two thirds of the context should be before the match, one third after.
 var contextEnd = Math.min(Math.floor(endIndex+contextSize/3), s.length);
 var contextStart = Math.max(contextEnd - size, 0);

 // If the contextStart/End is inside a word and the end of the word is
 // close move the pointers accordingly to make the text more readable.
 contextStart = moveToWordBorder(s, contextStart, true);
 contextEnd = moveToWordBorder(s, contextEnd, false);
 
 return {start: contextStart, end: contextEnd};
};

// Splits s into a sequence of "matched" and "unmatched" substrings, using the 
// matchRegExp to do the matching.
// 
// Returns an array of objects with a "text" property containing the substring text. 
// Substrings that are "matches" also contain a boolean "isMatch" property set to true.
// 
// @param matchRegExp [may be null] when null no matching is performed and the returned 
// array just contains one item with s as its text
// 
var getTextAndMatchArray = function(s, matchRegExp) {
 var result = [];
 if (matchRegExp) {
 var startIndex = 0;
 var n = s.length;
 var currentLen = 0;
 do {
 matchRegExp.lastIndex = startIndex;
 var match = matchRegExp.exec(s);
 if (match) {
 if (startIndex < match.index) {
 var t = s.substring(startIndex, match.index);
 result.push({text:t});
 }
 result.push({text:match[0], isMatch:true});
 startIndex = match.index + match[0].length;
 } else {
 result.push({text: s.substr(startIndex)});
 break;
 }
 } while (true);
 } else {
 result.push({text: s});
 }
 return result;
};


var simpleCreateLimitedTextWithMarks = function(place, s, maxLen) {
 if (!lastQuery) return;
 
 var textAndMatches = getTextAndMatchArray(s, lastQuery.getMarkRegExp());
 var currentLen = 0;
 for (var i=0; i < textAndMatches.length && currentLen < maxLen; i++) {
 var t = textAndMatches[i];
 var text = t.text;
 if (t.isMatch) {
 createTiddlyElement(place,"span",null,"marked",text); 
 } else {
 var remainingLen = maxLen-currentLen;
 if (remainingLen < text.length) {
 text = text.substring(0, remainingLen)+"...";
 }
 createTiddlyText(place, text);
 }
 currentLen += text.length;
 }
};



var addRange = function(ranges, startIndex, endIndex) {
 var n = ranges.length;
 
 // When there are no ranges in ranges, just add it.
 if (n == 0) {
 ranges.push({start: startIndex, end: endIndex});
 return;
 }
 
 var i = 0;
 for (; i < n; i++) {
 var range = ranges[i];
 
 // find the first range that intersects or "touches" [startIndex, endIndex[
 if (range.start <= endIndex && startIndex <= range.end) {
 // Found.
 
 var r;
 // find the first range behind the new range that does not interfere
 var rIndex = i+1;
 for (; rIndex < n; rIndex++) {
 r = ranges[rIndex];
 if (r.start > endIndex || startIndex > range.end) {
 break;
 }
 }
 
 // Replace the ranges i to rIndex-1 with the union of the new range with these ranges.
 var unionStart = startIndex;
 var unionEnd = endIndex;
 for (var j = i; j < rIndex; j++) {
 r = ranges[j];
 unionStart = Math.min(unionStart, r.start);
 unionEnd = Math.max(unionEnd, r.end);
 }
 ranges.splice(i, rIndex-i, {start: unionStart, end: unionEnd});
 return; 
 }
 
 // if we found a range R that is right of the new range there is no
 // intersection and we can insert the new range before R.
 if (range.start > endIndex) {
 break;
 }
 }

 // When we are here the new range does not interfere with any range in ranges and
 // i is the index of the first range right to it (or ranges.length, when the new range
 // becomes the right most range). 

 ranges.splice(i, 0, {start: startIndex, end: endIndex});
};

var getTotalRangesSize = function(ranges) {
 var totalRangeSize = 0;
 for (var i=0; i < ranges.length; i++) {
 var range = ranges[i];
 totalRangeSize += range.end-range.start;
 }
 return totalRangeSize;
};

// Processes the text between startIndex and endIndex of the textAndMatches
// "writes" them (as DOM elements) at the given place, possibly as "marked" text.
//
// When endIndex is not the end of the full text an ellisis is appended. 
//
var writeTextAndMatchRange = function(place, s, textAndMatches, startIndex, endIndex) {
 var t;
 var text;
 
 // find the first text item to write
 var pos = 0;
 var i = 0;
 var offset = 0;
 for (;i < textAndMatches.length; i++) {
 t = textAndMatches[i];
 text = t.text;
 if (startIndex < pos+text.length) {
 offset = startIndex - pos;
 break;
 }
 pos += text.length;
 }
 
 var remainingLen = endIndex - startIndex;
 for (; i < textAndMatches.length && remainingLen > 0; i++) {
 t = textAndMatches[i];
 text = t.text.substr(offset);
 offset = 0;
 if (text.length > remainingLen) text = text.substr(0,remainingLen);
 
 if (t.isMatch) {
 createTiddlyElement(place,"span",null,"marked",text);
 } else {
 createTiddlyText(place, text);
 }
 remainingLen -= text.length;
 }
 
 if (endIndex < s.length) {
 createEllipsis(place);
 }
};

var getMatchedTextCount = function(textAndMatches) {
 var result = 0;
 for (var i=0; i < textAndMatches.length; i++) {
 if (textAndMatches[i].isMatch) {
 result++;
 }
 }
 return result; 
};

// Get all ranges around matched substrings with their contexts
//
var getMatchedTextWithContextRanges = function(textAndMatches, s, maxLen) {
 var ranges = [];
 var matchCount = getMatchedTextCount(textAndMatches);
 var pos = 0;
 for (var i=0; i < textAndMatches.length; i++) {
 var t = textAndMatches[i];
 var text = t.text;
 if (t.isMatch) {
 var range = getContextRangeAround(s, pos, pos+text.length, matchCount, maxLen);
 addRange(ranges, range.start, range.end);
 }
 pos += text.length;
 }
 return ranges;
};

var fillUpRanges = function(s, ranges, maxLen) {
 var remainingLen = maxLen - getTotalRangesSize(ranges);
 while (remainingLen > 0) {
 if (ranges.length == 0) {
 // No matches added yet. Make one large range.
 addRange(ranges, 0, moveToWordBorder(s, maxLen, false));
 return;
 } else {
 var range = ranges[0];
 var startIndex;
 var maxEndIndex;
 if (range.start == 0) {
 // The first range already starts at the beginning of the string.

 // When there is a second range fill to the next range start or to the maxLen.
 startIndex = range.end;
 if (ranges.length > 1) {
 maxEndIndex = ranges[1].start;
 } else {
 // Only one range. Add a range after that with the complete remaining len 
 // (corrected to "beautify" the output)
 addRange(ranges, startIndex, moveToWordBorder(s, startIndex+remainingLen, false));
 return;
 }
 } else {
 // There is unused space between the start of the text and the first range.
 startIndex = 0;
 maxEndIndex = range.start;
 }
 var endIndex = Math.min(maxEndIndex, startIndex+remainingLen);
 addRange(ranges, startIndex, endIndex);
 remainingLen -= (endIndex-startIndex);
 }
 }
};

// Write the given ranges of s, using textAndMatches for marking portions of the text.
//
var writeRanges = function(place, s, textAndMatches, ranges, maxLen) {
 if (ranges.length == 0) return;
 
 // When the first range is not at the start of the text write an ellipsis("...")
 // (Ellipses between ranges are written in the writeTextAndMatchRange method)
 if (ranges[0].start > 0) createEllipsis(place);

 var remainingLen = maxLen;
 for (var i = 0; i < ranges.length && remainingLen > 0; i++) {
 var range = ranges[i];
 var len = Math.min(range.end - range.start, remainingLen);
 writeTextAndMatchRange(place, s, textAndMatches, range.start, range.start+len);
 remainingLen -= len;
 }
};

var createLimitedTextWithMarksAndContext = function(place, s, maxLen) {
 if (!lastQuery) return;
 
 if (s.length < maxLen) maxLen = s.length;
 
 var textAndMatches = getTextAndMatchArray(s, lastQuery.getMarkRegExp());
 
 var ranges = getMatchedTextWithContextRanges(textAndMatches, s, maxLen);
 
 // When the maxLen is not yet reached add more ranges 
 // starting from the beginning until either maxLen or 
 // the end of the string is reached.
 fillUpRanges(s, ranges, maxLen);

 writeRanges(place, s, textAndMatches, ranges, maxLen);
};

var createLimitedTextWithMarks = function(place, s, maxLen) {
// return simpleCreateLimitedTextWithMarks(place, s, maxLen);
 return createLimitedTextWithMarksAndContext(place, s, maxLen);
};


//----------------------------------------------------------------------------
// The Search Result
//----------------------------------------------------------------------------

var myStorySearch = function(text,useCaseSensitive,useRegExp)
{
 highlightHack = new RegExp(useRegExp ? text:text.escapeRegExp(),useCaseSensitive ? "mg" : "img");
 var matches = findMatches(store, text,useCaseSensitive,useRegExp,"title","excludeSearch");

 firstIndexOnPage = 0;
 showResult();
 
 highlightHack = null;
};


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

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


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

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

 searchInputField = txt;
 searchButton = btn;
};

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

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


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

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

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

 // Ensure that the firstIndexOnPage is really a page start. 
 // This may have become violated when the ItemsPerPage are changed,
 // e.g. when switching between previewText and simple mode.
 firstIndexOnPage = Math.floor(firstIndexOnPage / getItemsPerPage()) * getItemsPerPage();
 
 // Expand the template macros etc.
 applyHtmlMacros(resultElement,null);
 refreshElements(resultElement,null);
 
 // When there are items found add them to the result page (pagewise)
 if (lastResults && lastResults.length > 0) {
 // Load the template how to display the items that represent a found tiddler
 var itemHtml = store.getTiddlerText("YourSearchItemTemplate");
 if (!itemHtml) alertAndThrow("YourSearchItemTemplate not found");
 
 // Locate the node that shall contain the list of found tiddlers
 var items = document.getElementById(yourSearchResultItemsID);
 if(!items)
 items = createTiddlyElement(resultElement,"div",yourSearchResultItemsID);

 // Add the items of the current page
 var endIndex = Math.min(firstIndexOnPage+getItemsPerPage(), lastResults.length);
 indexInPage = -1;
 for (var i=firstIndexOnPage; i < endIndex; i++) {
 currentTiddler = lastResults[i];
 indexInPage++;
 indexInResult = i;

 var item = createTiddlyElement(items,"div",null, "yourSearchItem");
 item.innerHTML = itemHtml;
 applyHtmlMacros(item,null);
 refreshElements(item,null);
 }
 }
 
 // The currentTiddler must only be defined while rendering the found tiddlers
 currentTiddler = null;

 ensureResultIsDisplayedNicely();
};

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

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

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

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

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

var showResult = function() {
 if (!resultElement) {
 resultElement = createTiddlyElement(document.body,"div",yourSearchResultID,"yourSearchResult");
 } else if (resultElement.parentNode != document.body) {
 document.body.appendChild(resultElement);
 }

 refreshResult();
};

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

var setFirstIndexOnPage = function(index) {
 if (!lastResults || lastResults.length == 0) return;

 firstIndexOnPage = Math.min(Math.max(0, index), lastResults.length-1);
 refreshResult(); 
};


var onDocumentClick = function(e) {
 // Close the search result page when the user clicks on the document
 // (and not into the searchInputField, on the search button or in the result)
 if (e.target == searchInputField) return; 
 if (e.target == searchButton) return; 
 if (resultElement && isDescendantOrSelf(resultElement, e.target)) return; 
 
 closeResult();
};

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


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

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

config.macros.yourSearch = {
 // Standard Properties
 label: "yourSearch",
 prompt: "Gives access to the current/last YourSearch result",

 funcs: {},
 
 tests: {
 "true" : function() {return true;},
 "false" : function() {return false;},
 "found" : function() {return lastResults && lastResults.length > 0;},
 "previewText" : function() {return config.options.chkPreviewText;}
 }
};

config.macros.yourSearch.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
 if (params.length == 0) return;

 var name = params[0];
 var func = config.macros.yourSearch.funcs[name];
 if (func) func(place,macroName,params,wikifier,paramString,tiddler);
};

config.macros.yourSearch.funcs.itemRange = function(place) {
 if (lastResults) {
 var endIndex = Math.min(firstIndexOnPage+getItemsPerPage(), lastResults.length);
 var s = "%0 - %1".format([firstIndexOnPage+1,endIndex]);
 createTiddlyText(place, s);
 }
};

config.macros.yourSearch.funcs.count = function(place) {
 if (lastSearchText) {
 createTiddlyText(place, lastResults.length.toString());
 }
};

config.macros.yourSearch.funcs.query = function(place) {
 if (lastResults) {
 createTiddlyText(place, lastSearchText);
 }
};

config.macros.yourSearch.funcs.version = function(place) {
 var t = "YourSearch %0.%1.%2".format(
 [version.extensions.YourSearchPlugin.major, 
 version.extensions.YourSearchPlugin.minor, 
 version.extensions.YourSearchPlugin.revision]);
 var e = createTiddlyElement(place, "a");
 e.setAttribute("href", "http://tiddlywiki.abego-software.de/#YourSearchPlugin");
 e.innerHTML = '<font color="black" face="Arial, Helvetica, sans-serif">'+t+'<font>';
};

config.macros.yourSearch.funcs.copyright = function(place) {
 var e = createTiddlyElement(place, "a");
 e.setAttribute("href", "http://tiddlywiki.abego-software.de");
 e.innerHTML = '<font color="black" face="Arial, Helvetica, sans-serif">&copy; 2005-2006 <b><font color="red">abego</font></b> Software<font>';
};


config.macros.yourSearch.funcs.linkButton = function(place,macroName,params,wikifier,paramString,tiddler) {
 if (params < 2) return;
 
 var tiddlyLink = params[1];
 var text = params < 3 ? tiddlyLink : params[2];
 var tooltip = params < 4 ? text : params[3];
 var accessKey = params < 5 ? null : params[4];
 
 var btn = createTiddlyButton(place,text,tooltip,closeResultAndDisplayTiddler,null,null, accessKey);
 btn.setAttribute("tiddlyLink",tiddlyLink);
};

config.macros.yourSearch.funcs.closeButton = function(place,macroName,params,wikifier,paramString,tiddler) {
 var button = createTiddlyButton(place, "close", "Close the Search Results (Shortcut: ESC)", closeResult);
};

config.macros.yourSearch.funcs.openAllButton = function(place,macroName,params,wikifier,paramString,tiddler) {
 if (!lastResults) return;
 var n = lastResults.length;
 if (n == 0) return;

 var title = n == 1 ? "open tiddler" : "open all %0 tiddlers".format([n]);
 var button = createTiddlyButton(place, title, "Open all found tiddlers (Shortcut: Alt-O)", openAllFoundTiddlers);
 button.setAttribute("accessKey","O");
};

var onNaviButtonClick = function(e) {
 if (!e) var e = window.event;
 var pageIndex = getIntAttribute(this, "page");
 setFirstIndexOnPage(pageIndex * getItemsPerPage(), 0);
};

config.macros.yourSearch.funcs.naviBar = function(place,macroName,params,wikifier,paramString,tiddler) {
 if (!lastResults || lastResults.length == 0) return;

 var button;
 var currentPageIndex = Math.floor(firstIndexOnPage / getItemsPerPage());
 var lastPageIndex = Math.floor((lastResults.length-1) / getItemsPerPage());
 if (currentPageIndex > 0) {
 button = createTiddlyButton(place, "Previous", "Go to previous page (Shortcut: Alt-'<')", onNaviButtonClick, "prev");
 button.setAttribute("page",(currentPageIndex-1).toString());
 button.setAttribute("accessKey","<");
 }

 for (var i = -maxPagesInNaviBar; i < maxPagesInNaviBar; i++) {
 var pageIndex = currentPageIndex+i;
 if (pageIndex < 0) continue;
 if (pageIndex > lastPageIndex) break;

 var pageNo = (i+currentPageIndex+1).toString();
 var buttonClass = pageIndex == currentPageIndex ? "currentPage" : "otherPage";
 button = createTiddlyButton(place, pageNo, "Go to page %0".format([pageNo]), onNaviButtonClick, buttonClass);
 button.setAttribute("page",(pageIndex).toString());
 }
 
 if (currentPageIndex < lastPageIndex) {
 button = createTiddlyButton(place, "Next", "Go to next page (Shortcut: Alt-'>')", onNaviButtonClick, "next");
 button.setAttribute("page",(currentPageIndex+1).toString());
 button.setAttribute("accessKey",">");
 }
};


config.macros.yourSearch.funcs["if"] = function(place,macroName,params,wikifier,paramString,tiddler) {
 if (params.length < 2) return;
 
 var testName = params[1];
 var negate = (testName == "not");
 if (negate) {
 if (params.length < 3) return;
 testName = params[2];
 }
 
 var test = config.macros.yourSearch.tests[testName];
 var showIt = false;
 try {
 if (test) {
 showIt = test(place,macroName,params,wikifier,paramString,tiddler) != negate;
 } else {
 // When no predefined test is specified try to evaluate it as a JavaScript expression.
 showIt = (!eval(testName)) == negate;
 }
 } catch (ex) {
 }
 
 if (!showIt) {
 place.style.display="none";
 }
};

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

config.macros.yourSearch.funcs.chkPreviewText = function(place,macroName,params,wikifier,paramString,tiddler) {
 var optionParams = params.slice(1).join(" ");
 
 var elem = createOptionWithRefresh(place, "chkPreviewText", wikifier,tiddler);
 elem.setAttribute("accessKey", "P");
 elem.title = "Show text preview of found tiddlers (Shortcut: Alt-P)"; 
 return elem;
};

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

config.macros.foundTiddler = {
 // Standard Properties
 label: "foundTiddler",
 prompt: "Provides information on the tiddler currently processed on the YourSearch result page",
 
 funcs: {}
};


config.macros.foundTiddler.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
 if (!currentTiddler) return;
 var name = params[0];
 var func = config.macros.foundTiddler.funcs[name];
 if (func) func(place,macroName,params,wikifier,paramString,tiddler);
};

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

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

config.macros.foundTiddler.funcs.title = function(place,macroName,params,wikifier,paramString,tiddler) {
 if (!currentTiddler) return;
 
 var shortcutNumber = getShortCutNumber();
 var tooltip = shortcutNumber >= 0 
 ? "Open tiddler (Shortcut: Alt-%0)".format([shortcutNumber.toString()])
 : "Open tiddler";

 var btn = createTiddlyButton(place,null,tooltip,closeResultAndDisplayTiddler,null);
 btn.setAttribute("tiddlyLink",currentTiddler.title);
 btn.setAttribute("withHilite","true");
 
 createLimitedTextWithMarks(btn, currentTiddler.title, maxCharsInTitle);

 if (shortcutNumber >= 0) {
 btn.setAttribute("accessKey",shortcutNumber.toString());
 }
};

config.macros.foundTiddler.funcs.tags = function(place,macroName,params,wikifier,paramString,tiddler) {
 if (!currentTiddler) return;

 createLimitedTextWithMarks(place, currentTiddler.getTags(), maxCharsInTags);
};

config.macros.foundTiddler.funcs.text = function(place,macroName,params,wikifier,paramString,tiddler) {
 if (!currentTiddler) return;

 createLimitedTextWithMarks(place, removeTextDecoration(currentTiddler.text), maxCharsInText);
};


// Renders the "shortcut number" of the current tiddler, to indicate to the user
// what number to "Alt-press" to open the tiddler.
//
config.macros.foundTiddler.funcs.number = function(place,macroName,params,wikifier,paramString,tiddler) {
 var numberToDisplay = getShortCutNumber();
 if (numberToDisplay >= 0) {
 var text = "%0)".format([numberToDisplay.toString()]);
 createTiddlyElement(place,"span",null,"shortcutNumber",text);
 }
};

function scrollToAnchor(name) {
 return false;
}
//----------------------------------------------------------------------------
// Configuration Stuff
//----------------------------------------------------------------------------

if (config.options.chkUseYourSearch == undefined) config.options.chkUseYourSearch = true;
if (config.options.chkPreviewText == undefined) config.options.chkPreviewText = true;
if (config.options.chkSearchAsYouType == undefined) config.options.chkSearchAsYouType=true;
if (config.options.chkSearchInTitle == undefined) config.options.chkSearchInTitle=true;
if (config.options.chkSearchInText == undefined) config.options.chkSearchInText=true;
if (config.options.chkSearchInTags == undefined) config.options.chkSearchInTags=true;
if (config.options.txtItemsPerPage == undefined) config.options.txtItemsPerPage =itemsPerPageDefault;
if (config.options.txtItemsPerPageWithPreview == undefined) config.options.txtItemsPerPageWithPreview=itemsPerPageWithPreviewDefault;

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

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

config.shadowTiddlers["YourSearch Introduction"] = 
 "!About YourSearch\n"+
 "\n"+
 "YourSearch gives you a bunch of new features to simplify and speed up your daily searches in TiddlyWiki. It seamlessly integrates into the standard TiddlyWiki search: just start typing into the 'search' field and explore!\n"+
 "\n"+
 "''May the '~Alt-F' be with you.''\n"+
 "\n"+
 "\n"+
 "!Features\n"+
 "* YourSearch searches for tiddlers that match your query ''as you type'' into the 'search' field. It presents a list of the ''\"Top Ten\"'' tiddlers in a ''popup-like window'': the ''[[YourSearch Result]]''. The tiddlers currently displayed in your TiddlyWiki are not affected.\n"+
 "* Using ''~TiddlerRank technology'' the [[YourSearch Result]] lists the ''most interesting tiddlers first''.\n"+
 "* Through ''Filtered Search'' and ''Boolean Search'' you can easily refining your search, like excluding words or searching for multiple words. This way less tiddlers are displayed in the [[YourSearch Result]] and you can faster scan the result for the tiddler you are looking for.\n"+
 "* The [[YourSearch Result]] lists the found tiddlers ''page-wise'', e.g. 10 per page. Use the ''Result Page Navigation Bar'' to navigate between pages if the result does not fit on one page.\n"+
 "* The [[YourSearch Result]] states the ''total number of found tiddlers''. This way you can quickly decide if you want to browse the result list or if you want to refine your search first to shorten the result list.\n"+
 "* Beside the ''title of the found tiddlers'' the [[YourSearch Result]] also ''displays tags'' and ''tiddler text previews''. The ''tiddler text preview'' is an extract of the tiddler's content, showing the most interesting parts related to your query (e.g. the texts around the words you are looking for).\n"+
 "* The words you are looking for are hilited in the titles, tags and text previews of the [[YourSearch Result]].\n"+
 "* If you are not interested in the tiddler text previews but prefer to get longer lists of tiddlers on one result page you may ''switch of the text preview''.\n"+
 "* If the [[YourSearch Result]] contains the tiddler you are looking for you can just ''click its title to display'' it in your TiddlyWiki. Alternatively you may also ''open all found tiddlers'' at once. \n"+
 "* Use [[YourSearch Options]] to customize YourSearch to your needs. E.g. depending on the size of your screen you may change the number of tiddlers displayed in the [[YourSearch Result]]. In the [[YourSearch Options]] and the AdvancedOptions you may also switch off YourSearch in case you temporarily want to use the standard search.\n"+
 "* For the most frequently actions ''access keys'' are defined so you can perform your search without using the mouse.\n"+
 "\n"
 ;

config.shadowTiddlers["YourSearch Help"] = 
// "<html><a name='Top'/>"+
// "<a href='javascript:scrollToAnchor(\"Filtered\");'>[Filtered Search] </a>"+
// "<a href='#Boolean'>[Boolean Search] </a>"+
// "<a href='#Exact'>['Exact Word' Search] </a>"+
// "<a href='#Combined'>[Combined Search] </a>"+
// "<a href='#Case'>[CaseSensitiveSearch and RegExpSearch] </a>"+
// "<a href='#Access'>[Access Keys] </a>"+
// "</html>"+
 "<<tiddler [[YourSearch Introduction]]>>"+
// "<html><sub><a href='#Top'>[Top]</a></sub></html>\n"+
 "\n"+
 "!Filtered Search<html><a name='Filtered'/></html>\n"+
 "Using the Filtered Search you can restrict your search to certain parts of a tiddler, e.g only search the tags or only the titles.\n"+
 "|!What you want|!What you type|!Example|\n"+
 "|Search ''titles only''|start word with ''!''|{{{!jonny}}}|\n"+
 "|Search ''contents only''|start word with ''%''|{{{%football}}}|\n"+
 "|Search ''tags only''|start word with ''#''|{{{#Plugin}}}|\n"+
 "\n"+
 "You may use more than one filter for a word. E.g. {{{!#Plugin}}} finds tiddlers containing \"Plugin\" either in the title or in the tags (but does not look for \"Plugin\" in the content).\n"+
// "<html><sub><a href='#Top'>[Top]</a></sub></html>\n"+
 "\n"+
 "!Boolean Search<html><a name='Boolean'/></html>\n"+
 "The Boolean Search is useful when searching for multiple words.\n"+
 "|!What you want|!What you type|!Example|\n"+
 "|''All words'' must exist|List of words|{{{jonny jeremy}}}|\n"+
 "|''At least one word'' must exist|Separate words by ''or''|{{{jonny or jeremy}}}|\n"+
 "|A word ''must not exist''|Start word with ''-''|{{{-jonny}}}|\n"+
 "\n"+
 "''Note:'' When you specify two words, separated with a space, YourSearch finds all tiddlers that contain both words, but not necessarily next to each other. If you want to find a sequence of word, e.g. '{{{John Brown}}}', you need to put the words into quotes. I.e. you type: {{{\"john brown\"}}}.\n"+
// "<html><sub><a href='#Top'>[Top]</a></sub></html>\n"+
 "\n"+
 "!'Exact Word' Search<html><a name='Exact'/></html>\n"+
 "By default a search result all matches that 'contain' the searched text. \n"+
 " E.g. if you search for 'Task' you will get all tiddlers containing 'Task', but also 'CompletedTask', 'TaskForce' etc.\n"+
 "\n"+
 "If you only want to get the tiddlers that contain 'exactly the word' you need to prefix it with a '='. E.g. typing '=Task' will the tiddlers that contain the word 'Task', ignoring words that just contain 'Task' as a substring.\n"+
// "<html><sub><a href='#Top'>[Top]</a></sub></html>\n"+
 "\n"+
 "!Combined Search<html><a name='Combined'/></html>\n"+
 "You are free to combine the various search options. \n"+
 "\n"+
 "''Examples''\n"+
 "|!What you type|!Result|\n"+
 "|{{{!jonny !jeremy -%football}}}| all tiddlers with both {{{jonny}}} and {{{jeremy}}} in its titles, but no {{{football}}} in content.|\n"+
 "|{{{#=Task}}}|All tiddlers tagged with 'Task' (the exact word). Tags named 'CompletedTask', 'TaskForce' etc. are not considered.|\n"+
// "<html><sub><a href='#Top'>[Top]</a></sub></html>\n"+
 "\n"+
 "!~CaseSensitiveSearch and ~RegExpSearch<html><a name='Case'/></html>\n"+
 "The standard search options ~CaseSensitiveSearch and ~RegExpSearch are fully supported by YourSearch. However when ''~RegExpSearch'' is on Filtered and Boolean Search are disabled.\n"+
// "<html><sub><a href='#Top'>[Top]</a></sub></html>\n"+
 "\n"+
 "!Access Keys<html><a name='Access'/></html>\n"+
 "You are encouraged to use the access keys (also called \"shortcut\" keys) for the most frequently used operations. For quick reference these shortcuts are also mentioned in the tooltip for the various buttons etc.\n"+
 "\n"+
 "|!Key|!Operation|\n"+
 "|{{{Alt-F}}}|''The most important keystroke'': It moves the cursor to the search input field so you can directly start typing your query. Pressing {{{Alt-F}}} will also display the previous search result. This way you can quickly display multiple tiddlers using \"Press {{{Alt-F}}}. Select tiddler.\" sequences.|\n"+
 "|{{{ESC}}}|Closes the [[YourSearch Result]]. When the [[YourSearch Result]] is already closed and the cursor is in the search input field the field's content is cleared so you start a new query.|\n"+
 "|{{{Alt-1}}}, {{{Alt-2}}},... |Pressing these keys opens the first, second etc. tiddler from the result list.|\n"+
 "|{{{Alt-O}}}|Opens all found tiddlers.|\n"+
 "|{{{Alt-P}}}|Toggles the 'Preview Text' mode.|\n"+
 "|{{{Alt-'<'}}}, {{{Alt-'>'}}}|Displays the previous or next page in the [[YourSearch Result]].|\n"+
 "|{{{Return}}}|When you have turned off the 'as you type' search mode pressing the {{{Return}}} key actually starts the search (as does pressing the 'search' button).|\n"+
// "<html><sub><a href='#Top'>[Top]</a></sub></html>\n"+
 "\n"
 ;

config.shadowTiddlers["YourSearch Options"] = 
 "|>|!YourSearch Options|\n"+
 "|>|<<option chkUseYourSearch>> Use 'Your Search'|\n"+
 "|!|<<option chkPreviewText>> Show Text Preview|\n"+
 "|!|<<option chkSearchAsYouType>> 'Search As You Type' Mode (No RETURN required to start search)|\n"+
 "|!|Default Search Filter:<<option chkSearchInTitle>>Titles ('!') <<option chkSearchInText>>Texts ('%') <<option chkSearchInTags>>Tags ('#') <html><br><font size=\"-2\">The parts of a tiddlers that are searched when you don't explicitly specify a filter in the search text (using a '!', '%' or '#' prefix).</font></html>|\n"+
 "|!|Number of items on search result page: <<option txtItemsPerPage>>|\n"+
 "|!|Number of items on search result page with preview text: <<option txtItemsPerPageWithPreview>>|\n"
 ;
 
config.shadowTiddlers["YourSearchStyleSheet"] = 
 "/***\n"+
 "!~YourSearchResult Stylesheet\n"+
 "***/\n"+
 "/*{{{*/\n"+
 ".yourSearchResult {\n"+
 "\tposition: absolute;\n"+
 "\twidth: 800px;\n"+
 "\n"+
 "\tpadding: 0.2em;\n"+
 "\tlist-style: none;\n"+
 "\tmargin: 0;\n"+
 "\n"+
 "\tbackground: White;\n"+
 "\tborder: 1px solid DarkGray;\n"+
 "}\n"+
 "\n"+
 "/*}}}*/\n"+
 "/***\n"+
 "!!Summary Section\n"+
 "***/\n"+
 "/*{{{*/\n"+
 ".yourSearchResult .summary {\n"+
 "\tborder-bottom-width: thin;\n"+
 "\tborder-bottom-style: solid;\n"+
 "\tborder-bottom-color: #999999;\n"+
 "\tpadding-bottom: 4px;\n"+
 "}\n"+
 "\n"+
 ".yourSearchRange, .yourSearchCount, .yourSearchQuery {\n"+
 "\tfont-weight: bold;\n"+
 "}\n"+
 "\n"+
 ".yourSearchResult .summary .button {\n"+
 "\tfont-size: 10px;\n"+
 "\n"+
 "\tpadding-left: 0.3em;\n"+
 "\tpadding-right: 0.3em;\n"+
 "}\n"+
 "\n"+
 ".yourSearchResult .summary .chkBoxLabel {\n"+
 "\tfont-size: 10px;\n"+
 "\n"+
 "\tpadding-right: 0.3em;\n"+
 "}\n"+
 "\n"+
 "/*}}}*/\n"+
 "/***\n"+
 "!!Items Area\n"+
 "***/\n"+
 "/*{{{*/\n"+
 ".yourSearchResult .marked {\n"+
 "\tbackground: none;\n"+
 "\tfont-weight: bold;\n"+
 "}\n"+
 "\n"+
 ".yourSearchItem {\n"+
 "\tmargin-top: 2px;\n"+
 "}\n"+
 "\n"+
 ".yourSearchNumber {\n"+
 "\tcolor: #808080;\n"+
 "}\n"+
 "\n"+
 "\n"+
 ".yourSearchTags {\n"+
 "\tcolor: #008000;\n"+
 "}\n"+
 "\n"+
 ".yourSearchText {\n"+
 "\tcolor: #808080;\n"+
 "\tmargin-bottom: 6px;\n"+
 "}\n"+
 "\n"+
 "/*}}}*/\n"+
 "/***\n"+
 "!!Footer\n"+
 "***/\n"+
 "/*{{{*/\n"+
 ".yourSearchFooter {\n"+
 "\tmargin-top: 8px;\n"+
 "\tborder-top-width: thin;\n"+
 "\tborder-top-style: solid;\n"+
 "\tborder-top-color: #999999;\n"+
 "}\n"+
 "\n"+
 ".yourSearchFooter a:hover{\n"+
 "\tbackground: none;\n"+
 "\tcolor: none;\n"+
 "}\n"+
 "/*}}}*/\n"+
 "/***\n"+
 "!!Navigation Bar\n"+
 "***/\n"+
 "/*{{{*/\n"+
 ".yourSearchNaviBar a {\n"+
 "\tfont-size: 16px;\n"+
 "\tmargin-left: 4px;\n"+
 "\tmargin-right: 4px;\n"+
 "\tcolor: black;\n"+
 "\ttext-decoration: underline;\n"+
 "}\n"+
 "\n"+
 ".yourSearchNaviBar a:hover {\n"+
 "\tbackground-color: none;\n"+
 "}\n"+
 "\n"+
 ".yourSearchNaviBar .prev {\n"+
 "\tfont-weight: bold;\n"+
 "\tcolor: blue;\n"+
 "}\n"+
 "\n"+
 ".yourSearchNaviBar .currentPage {\n"+
 "\tcolor: #FF0000;\n"+
 "\tfont-weight: bold;\n"+
 "\ttext-decoration: none;\n"+
 "}\n"+
 "\n"+
 ".yourSearchNaviBar .next {\n"+
 "\tfont-weight: bold;\n"+
 "\tcolor: blue;\n"+
 "}\n"+
 "/*}}}*/\n"
 ;

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

config.shadowTiddlers["YourSearchItemTemplate"] = 
 "<!--\n"+
 "{{{\n"+
 "-->\n"+
 "<span class='yourSearchNumber' macro='foundTiddler number'></span>\n"+
 "<span class='yourSearchTitle' macro='foundTiddler title'/></span>&nbsp;-&nbsp;\n"+
 "<span class='yourSearchTags' macro='foundTiddler tags'/></span>\n"+
 "<span macro=\"yourSearch if previewText\"><div class='yourSearchText' macro='foundTiddler text'/></div></span>\n"+
 "<!--\n"+
 "}}}\n"+
 "-->"
 ;
config.shadowTiddlers["YourSearch"] = "<<tiddler [[YourSearch Help]]>>";

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


setStylesheet(
 store.getTiddlerText("YourSearchStyleSheet"),
 "yourSearch");

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

// Overwrite the TiddlyWiki search handler and verify after a while 
// that nobody else has overwritten it.

var origMacros_search_handler = config.macros.search.handler;
config.macros.search.handler = myMacroSearchHandler;


var ownsOverwrittenFunctions = function() {
 var result = (config.macros.search.handler == myMacroSearchHandler);
 return result;
};

var checkForOtherHijacker = function() {
 if (!ownsOverwrittenFunctions()) {
 alert("Message from YourSearchPlugin:\n\n\n"+
 "Another plugin has disabled the 'Your Search' features.\n\n\n"+
 "You may disable the other plugin or change the load order of \n"+
 "the plugins (by changing the names of the tiddlers)\n"+ 
 "to enable the 'Your Search' features.");
 }
};

setTimeout(checkForOtherHijacker, 5000);


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

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

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

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

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

// ... JavaScript Core
/*global alert,clearTimeout,confirm */
// ... TiddlyWiki Core
/*global Tiddler, applyHtmlMacros, clearMessage, createTiddlyElement, createTiddlyButton, createTiddlyText, ensureVisible ,findPosX, highlightHack, findPosY,findWindowWidth, invokeMacro, saveChanges, refreshElements, story */

/***
%/
!Licence and Copyright
Copyright (c) abego Software ~GmbH, 2005-2006 ([[www.abego-software.de|http://www.abego-software.de]])

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

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

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

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

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

/***
!Example Usage
<<eg
| Local|<<showClock\>\>|
| Queensland|<<showClock +10\>\>|
| England (DST)|<<showClock +1\>\>|
| California (DST)|<<showClock -7\>\>|
>>
***/
//{{{
version.extensions.ShowClockMacro = { major: 0, minor: 0, revision: 1, date: new Date(2006,7,12),
 source: "http://tiddlyspot.com/mptw/#ShowClockMacro"
};

config.macros.showClock = {

 defaultClass: 'clock',
 tickDelay: 1000, 
 format: "0hh:0mm:0ss",

 styles: 
 ".clock {\n"+
 " padding:0 0.5em;\n"+
 "}\n" +
 ".clock .dow { color:#800000; }\n" +
 ".clock .time { color:#800000; }\n" +
 ".clock .offset { color:#800000; }\n" +
 "",

 count: 0,

 handler: function (place,macroName,params,wikifier,paramString,tiddler) {
 var offset = params[0] || '';
 var useClass = params[1] || this.defaultClass;
 var c = this.count++;
 var clockElement = createTiddlyElement(place, "span", "clock" + c, useClass);
 clockElement.setAttribute("offset",offset);
 this.refreshDisplay(c);
 this.waitForTick(c);
 },

 waitForTick: function(c) {
 setTimeout("config.macros.showClock.tick(" + c + ")", this.tickDelay);
 },

 tick: function(c) {
 if (this.stillHere(c)) {
 this.refreshDisplay(c)
 this.waitForTick(c);
 }
 },

 getClock: function(c) {
 return document.getElementById("clock" + c);
 },

 stillHere: function(c) {
 return this.getClock(c) != null;
 },

 refreshDisplay: function(c) {
 var clock = this.getClock(c);
 var offset = clock.getAttribute("offset")
 var now = new Date();
 //var label = "local";
 var label = "";
 if (offset && offset != '') {
 var offsetInt = parseInt(offset);
 now.setHours(now.getHours() + (now.getTimezoneOffset() / 60) + offsetInt);
 label = "GMT " + (offsetInt == 0 ? "" : offsetInt > 0 ? "+"+offsetInt : offsetInt);
 }
 clock.innerHTML =
 '<span class="dow">' + now.formatString("DDD").substr(0,3) + ' </span>' +
 '<span class="time">' + now.formatString(this.format) + '</span>' + 
 '<span class="offset"> ' + label + '</span>'
 }

};

setStylesheet(config.macros.showClock.styles,"showClockStyles");

//}}}
This small town is encircled by a loop of awesome, massive medieval walls built in the 12th century. As you approach the city you will already feel yourself entering another era and another worldview. Enter at one of the few portals in its remarkable bulwarks and walk into a museum of Castilian and medieval history. Take in the beauty of the city's 13th century cathedral. A series of beautiful convents and monasteries will carry you back to the medieval Christian world of Avila's Santa Teresa, the Spanish mystic and one of the world's greatest religious poets. 
[img[http://www.wfu.edu/romancelanguages/study_abroad/Salamanca/images/Avila9.jpg]]