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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[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>>
Q.  Why "Mellow Wolf" as a name for my online publications?
A.  The wolf that will lie down with the lamb will be a mellow wolf.  And this is also an allegory for Benjamin who Israel, his father, compared to a wolf devouring his prey in the morning.  In the present time of preparing the way for Mashiach Benjamin must be to the adversaries of the world-saving Self revelation of the One True God.
maxcarlkirk@gmail.com
[[Open to Email|mailto:maxcarlkirk@gmail.com]]
The lawless nations are, of course, not entirely lawless in that they have laws based on their own traditions.  However, they are lawless in that their laws are subject to changing minds.  Therefore, also, the principle of absolute obedience is not possible for the citizens of the nations.  For absolute obedience is made possible only where a law is given as a direct commandment by one who is a Lawgiver whose law alone the commandment is and who will not change his mind.

Without such a law given for life, every person must, in the end, do what is right in their own eyes.  Even if they agree communally to laws and to obey such laws together, if the laws seem to fail to meet their needs they must question them, even challenge them.  The foundation of the life of the nations, then, is the ability of all individuals to know their own needs.  This seems a very good and equitable foundation to many people, and people have labored with great sincerity to build great societies upon this foundation.  However, it is common experience and common sense that individuals are not always able to accurately know their own needs.  Indeed, it is through misevaluating their needs that people may even destroy the whole world.

In Israel it is brought that there is a Creator of all people who knows the needs of all people flawlessly, both the immediate needs and the eternal needs.  Before all other needs, it is brought that human beings need their Creator’s direct commandments to be given to them for life that they should be able to obey him and through obedience have life.  Even where they fail to listen to or obey the Creator’s good laws of instruction for them, their needs remain the same and all that changes is their added need for correction and for accepting that correction.  The Creator has provided a means both for human beings to know his commandments and for them to receive correction and restoration to his way for them.  The Creator is not willing to condemn the world but desires to save the world.  He is ever patient and gentle, so that even the harsh consequences of lawlessness that eventually come upon those that try to practice it are softened by the Creator as much as possible.  Although, he will allow a measure of such consequence to occur when it helps people to learn to turn away from their habitual error. For the first step of conversion to true hope is conversion from lawlessness.  It is impossible to see and not lose sight of the hope of salvation that the Creator brings to the world without a heart wanting to obey his commandment.
copyright of all material on this webpage ©2010 Max Carl Kirk

copyright of all Mellow Wolf Online publications ©2010 Max Carl Kirk
[[Recommended Entrance Points]]

[[Mellow Wolf Online Publications]]
If by the virtue and power of the promise of God to Abraham, Isaac and Jacob a judge of Israel is able to settle Creation's estate forever, why then is it necessary that the promise actually ever be kept?  Does this question not somehow seem absurd to ask?  On the certainty that the promise will be kept rests the certainty that by virtue of the promise a judge of Israel is able to settle Creation's estate forever!  But still, why is it so?  Why does the power and authority of the Torah not await the actual keeping of the promise to Abraham?  Why does it come already when the promise is still a promise?

Why is it?  It is not as if without the keeping of the promise - which is something that is impossible for it is not possible for God not to keep his promise - that the judgments of the judges of Israel would be retroactively annulled - like a marriage that was never consummated might be.  This idea should not be raised but is raised by a misunderstanding of the relationship of promise and keeping of the promise.  Another way of approaching this to get away from the misunderstanding is to say that God's promise is of the same force as if it were already kept.
[[Open Search Window | http://www.google.com/]]
Read Rebbe Nachman's story, The Master of Prayer and Likutey Moharan II Lesson 1.
˚
[[Conversion From Lawlessness]]
[[God's Promise]]
[[HaMashiach]]
[[On Hanna’s Prayer]]
[[On The Source Spring Of Faith]] 
[[On The Source Spring Of Faith #2]]
[[Recommended Entrance Points]]
[[Sanhedrin 107a-b - Rabbi A. Steinsaltz w/comments]]
[[The Covenant of The Holy One of Israel]]
[[The Journey]]
[[The Lost Little Sister]]
[[The Mind of Sin]]
/***
|''Name:''|LoadRemoteFileThroughProxy (previous LoadRemoteFileHijack)|
|''Description:''|When the TiddlyWiki file is located on the web (view over http) the content of [[SiteProxy]] tiddler is added in front of the file url. If [[SiteProxy]] does not exist "/proxy/" is added. |
|''Version:''|1.1.0|
|''Date:''|mar 17, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#LoadRemoteFileHijack|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
***/
//{{{
version.extensions.LoadRemoteFileThroughProxy = {
 major: 1, minor: 1, revision: 0, 
 date: new Date("mar 17, 2007"), 
 source: "http://tiddlywiki.bidix.info/#LoadRemoteFileThroughProxy"};

if (!window.bidix) window.bidix = {}; // bidix namespace
if (!bidix.core) bidix.core = {};

bidix.core.loadRemoteFile = loadRemoteFile;
loadRemoteFile = function(url,callback,params)
{
 if ((document.location.toString().substr(0,4) == "http") && (url.substr(0,4) == "http")){ 
 url = store.getTiddlerText("SiteProxy", "/proxy/") + url;
 }
 return bidix.core.loadRemoteFile(url,callback,params);
}
//}}}
[[Primary Links]]
[[Contact]]
[[Index]]
[[Google Search]]
Contact: maxcarlkirk@gmail.com
>> The online publishing of Max Carl Kirk

> CopyrightedMaterial

> [[Contact |mailto: maxcarlkirk@gmail.com]] maxcarlkirk@gmail.com
From 1 Samuel Chapter 2


We will begin with a quote from the Talmud. This will lead us into 1 Samuel chapter 2, where we find Hanna’s prayer. We will look at Rashi’s commentary on this prayer as recorded by Judaica Press Then we will return to the passage quoted from the Talmud and consider what it tells us about Hanna’s prayer and the blessed poor.

From BT KESUBOS 104a1 with nt. 12 ArtScroll Schottenstein ed. Talmud Bavli

The Rabbis said to Bar Kappara: Go investigate. He went - discovered that {Rebbi} had died. He tore his garment and shifted its tear to his back, he opened by stating, “The angels and the righteous ones took hold of the Holy Ark - The angels have vanquished the righteous ones, and the Holy Ark is captured.”

The term, מצוקים righteous ones, is found in Scripture in I Samuel 2:8 (Rashi). It translates literally as the foundations of the earth (Radak, as loc. and in Shoroshim ע’ צוק).

Shmuel I - Chapter 2
ח מקים מעפר דל מאשפת
ירים אביון להושיב עם
נדיבים וכסא כבוד ינחלם
כי ליהוה מצקי ארץ
וישת עליהם תבל
8 He raiseth up the poor out of the dust, He lifteth up the needy from the dung-hill, to make them sit with princes, and inherit the throne of glory; for the pillars of the earth are the LORD'S, and He hath set the world upon them. JPS

1 Samuel 2 with Rashi - Chadad.org link

Judaica Press Complete Tanach Shmuel I - Chapter 2

And Hannah prayed and said: "My heart has rejoiced through the Lord; My horn has been raised by the Lord. My mouth is opened wide against my enemies, For I have rejoiced in Your salvation.
My mouth is opened wide against my enemies against Peninnah.
There is none as holy as the Lord, For there is none besides You; And there is no rock like our God.
And there is no rock like our God. There is no artist like our God, Who makes a form within a form (Ber. 10a).
Do not increasingly speak haughtily; Let not arrogance come out of your mouth, For the Lord is a God of thoughts, And to Him are deeds counted.
Do not increasingly speak haughtily All those who are haughty when good fortune shines upon them. And according to the peshat, she is speaking for the benefit of Peninnah, who behaved haughtily toward her. According to the derash, however, we follow J’s translation.
arrogance (Lit.) strong speech. Others explain it as an expression of falsehood, something which is removed from the truth, like ויעתק“and he moved from there to the mountain” (Gen. 12: 8). We, therefore, render: Let not falsehood come out of your mouth.
For the Lord is a God of thoughts He knows what is in your heart.
And to Him are deeds counted All men’s deeds are counted before Him. Heb. ‘nithk’nu,’ an expression of number, like: and the number (tochen) of bricks shall you give (Ex. 5:18).
The bows of the mighty are broken; And those who stumbled, are girded with strength.
The bows of the mighty are broken, etc. So is the custom of the Most Holy, blessed be He. He weakens the mighty, and strengthens the weak. He sates the hungry and starves those who are satiated.
Those who were satiated have hired themselves out for bread, While the hungry have ceased. While the barren woman has born seven, She that had many children, has been bereaved.
Those who were satiated and do not need to hire themselves out for any work, He starves them, and they must hire themselves out for their daily bread, while the hungry who would toil and weary themselves for food…
… have ceased from their toil. While the barren woman has born seven, she that had many children has been bereaved and buries her children. Hannah bore seven, as it is stated: For the Lord remembered Hannah, and she conceived and bore three sons and two daughters (2:21). When Hannah bore four, Peninnah buried eight, and when she conceived and bore a fifth child, Peninnah prostrated herself at her feet, and begged for mercy. Consequently, they lived, and were therefore called on her name. This is Rabbi Nehemiah’s opinion. Rabbi Judah says: Grandchildren are considered like children, (and she saw Samuel’s two sons). Some say: the numerical value of שבעה (seven) is equivalent to that of שמואל, (thus: ש =300, ב =2, ע =70, ה =5, totaling 377. Likewise, ש =300, מ =40, ו =6, א =1, ל =30, totaling 377).
The Lord kills and makes alive; He brings down to the grave and raises up.
The Lord impoverishes and makes rich. He humbles; He also exalts.
He lifts the poor from the dust; From the dunghill, He raises the pauper, To seat them with princes, And a seat of honor He causes them to inherit, For the pillars of the earth are the Lord's, And He placed the world upon them.
The feet of His pious ones He will guard, And the wicked shall be cut off in darkness, For not by strength will man prevail.
His pious ones It is spelled חסידו, His pious one. It is read חסידיו, His pious ones, i.e., either a single one or many. Likewise, “Those who strive with the Lord will be broken.” This reading is מריביו, those who strive with Him. The spelling is מריבו, he who strives with Him, i.e., either one or many.
Those who strive with the Lord will be broken; Upon him will He thunder in Heaven; The Lord will judge the ends of the earth. And He will grant strength to His King, And raise the horn of His anointed one.
Upon him will he thunder in Heaven The spelling is עלו, they have ascended, even if they have ascended to the heavens, He thunders upon and casts them down.
will judge the ends of the earth will judge them; in old French, jostizier.
And Elkanah went to Ramah, to his house, and the child was serving the Lord before Eli the priest.
was serving the Lord before Eli the priest: (The Talmud asks, “Did Samuel actually serve the Lord?” Didn’t he serve before Eli? [He was too young to serve the Lord!] We therefore deduce) from here that whoever serves before a Torah scholar, is considered as though he had served before the Divine Presence.

When we look at what the Talmud says about the life of Rebbi we learn that he had a testimony that he whole-heartedly desired holiness, to do perfectly the will and commandments of God. Such a desire does not come from the sin-corrupted nature but from the spirit which is generated in the heart by the word of God. Now Rebbi in his generation was the leader of All-Israel. He was such a great leader of Israel that when he died it was said of him, “the Ark of God is taken.” From this we can be reminded that if the princes are brought low it is for the same purpose that the beggars are raised from the dunghill, that all might stand without distinction before God, who is without comparison.

The individual human being is first what they are and only then who they are.  So also with human conscience, it is first conscience of what is right and what is wrong with regard to what we are and only then does it develop into conscience with regard to individual differences.

Read More:

Contact me by email if you would like to read the complete 2 page article.  It is not posted for the open public at this time.
How does one come to the source, the spring of faith and drink and come then again and again and drink, even in the thirst of the greatest trial and tribulation?

The Jewish nation, in so much as it has learned the error of idolatry, has come to this source by becoming reconciled to the Torah.

The Christian movement has been kept pointed in the right direction over its centuries by this Torah monotheism of the Jewish nation that spiritually walked beside it and behind it and in front of it.

But has the Jewish nation itself entirely learned the error of idolatry? Is it possible for the promise of Israel to be a new creation of Adam, that is, for the promise alone to entirely free the Jewish nation from the idolatry of natural human understandings and ideas of G-d?

In the end, it is not by pointing in the right direction that the Jewish nation can assist the Christian movement to completely overcome idolatry within it. The only basis of final victory over idolatry in the end is obediently being silent in listening to G-d. Such absolute listening in silence in mind and heart is death to one's self and then coming back to life through the Divine Commandment of the Holy One of Israel and living as he says.

See: On The Source Spring of Faith #2ff.

Those who have truly received the tradition of the original message of the Christian movement know this. Yet they cannot fully accomplish this without All Israel, and All Israel cannot fully enter into the fullness of the eternal relationship that G-d has promised to them until G-d himself fulfills what he has promised by revealing to Israel and to all the world the one whom he promised to Abraham. And this he will not do until all is prepared, both in the soul of Israel and among the nations. For without such preparation of the lost there can be no salvation or redemption of the lost.

The person and work and concealment of Mashiach, the Redeemer of Israel, is the means that is used by G-d to accomplish these things, both the work of providing the fulfillment and the preparation in Israel and in the world for the delivery of the fulfillment of G-d’s full relationship with Israel. Until then, let us go on in preparation, growing in faith and in the knowledge of Adonai Yehoshua HaMashiach.
On The Source Spring Of Faith 

> Comments on the original Source Spring of Faith entry (created 6 November 2009)

I wrote in the original entry the following:

”How does one come to the source, the spring of faith and drink and come then again and again and drink, even in the thirst of the greatest trial and tribulation?

The Jewish nation, in so much as it has learned the error of idolatry, has come to this source by becoming reconciled to the Torah.

The Christian movement has been kept pointed in the right direction over its centuries by this Torah monotheism of the Jewish nation that spiritually walked beside it and behind it and in front of it.

But has the Jewish nation itself entirely learned the error of idolatry? Is it possible for the promise of Israel to be a new creation of Adam, that is, for the promise alone to entirely free the Jewish nation from the idolatry of natural human understandings and ideas of G-d?

In the end, it is not by pointing in the right direction that the Jewish nation can assist the Christian movement to completely overcome idolatry within it. The only basis of final victory over idolatry in the end is obediently being silent in listening to G-d. Such absolute listening in silence in mind and heart is death to one's self and then coming back to life through the Divine Commandment of the Holy One of Israel and living as he says.”

That entry goes on to talk about those who are in the core of the original Christian movement attaining to this silence before God.  However, what the observation made in these notes actually speak about is the Jewish nation attaining to this silence.  The original entry concealed this relationship between the original Christian movement as it is manifested in the world today and the Jewish nation.  In a series of notes beginning with this not, G-d willing, I will begin to reveal that relationship.

Only by submission to Joseph in Egypt while understanding him as a gentile could Judah attain to the silence of the fear of the God of Abraham, Isaac and Jacob.  When it becomes manifest to the Jewish nation today that there is a power concealed behind the outer face of the Christian movement which holds the key to the survival of Israel and to the fulfillment of G-d's promise to the fathers, then this stage will be once again fully set.


Darwinism is not so much an essential for the epistemology of contemporary global technological culture as it is a tool for approaching the exploration of knowledge.  Because Biblical monotheism was traditionally presented as a given answer in a form that tended to close the mind to questioning and to the exploration of knowledge, and because that presentation of Biblical monotheism eventually formed a cultural epistemology in the Western civilization, a theory like the Darwinian Theory of Evolution became effective in changing the orientation of the Western mind.  An openness was created toward a new cultural epistemology.  Awareness of this dynamic has much to offer in the field of the work of contemporary conflict resolution.
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date("Apr 19, 2007"),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Beta 5)'
};

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

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

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

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

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

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

merge(config.optionsDesc,{
		pasPassword: "Test password"
	});
*/
//}}}
[[Primary Links for Mellow Wolf Online Publications]]
˚
[[Mellow Wolf Conflict Resolution Files| http://mellow-wolf-conres-files.tiddlyspot.com/index.html]]
[[Mellow Wolf AltLrn Files| http://mellow-wolf-altlrn-files.tiddlyspot.com/index.html/]]

[[Mellow Wolf Online Publications| http://www.box.net/shared/plpiegkytz]] >> Full index list with links

[[The Blessed Poor Hubsite| http://www3.telus.net/blessed_poor/]]  >> The Initial Hubsite
  
[[Poems about Jerusalem and Her hope | http://issuu.com/cstn]] >> Magazine format
 
˚
[[On The Source Spring Of Faith]]

[[On Hanna’s Prayer]]
Sanhedrin 107a-b - Teacher-student relationships should always include encouragement < [[see source|http://www.steinsaltz.org/learning.php?pg=Daf_Yomi&articleId=1966]]
May 30, 2010

"The Mishnah (daf, or page, 90a) taught that one of the people who has no portion in the World to Come is Gehazi, the student of the prophet Elisha. In II Melakhim, or Kings (chapter 5) we learn that Gehazi was condemned to suffer from leprosy because he accepted a reward from Na'aman, a foreign general whose leprosy was cured by Elisha. The Gemara concludes from this story that a person should always encourage a relationship, even when rebuking a student -- le-olam tehe semol dohah ve-yemin mekarevet -- a person should push aside with his weaker hand while bringing closer with his stronger hand. Elisha is presented as having failed as a teacher and mentor, having pushed Gehazi away with both hands." 

Comment (MCK): Or is this a prophetic mystery of Elisha's role?  OF WHAT PROPHECY WOULD THAT BE?
 
"Another example of this kind of fault is the story of Yehoshua ben Perahyah, who is presented as having pushed aside Yeshu ha-Notzri -- Jesus -- with both hands. The story that is told is that Yehoshua ben Perahyah was returning to Jerusalem following his flight to Alexandria in Egypt, together with his student, Yeshu ha-Notzri. When they stopped in an inn and were treated well, Yehoshua ben Perahyah mentioned to Yeshu that the service was good. Yeshu responded that the innkeeper was unattractive. This response led Yehoshua ben Perahyah to ban Yeshu, and Yehoshua ben Perahyah was unable to change his mind until it was too late and Yeshu had turned away from traditional Judaism."  

Comment (MCK): This is clearly a parable made to represent some aspect of the reality involved in a coded way.  Who is Yehoshua ben Perahyah? A sage in the line of the reception of the Oral Torah who lived a century and a half before Jesus, (Avot 3:18).  Indeed, this story is the target of the previously related story of Elisha and Gehazi.  It is not just two unrelated examples.  If Elisha is criticized then it is as if the sages were criticized.  And here it is as if "Yehoshua ben Perahyah" were in the office of the sages who might have kept Yeshu in adherence to "traditional Judaism".  What would have happened if Elisha/Yehoshua/the sages would have shown encouragement to Yeshu?  Would he have simply become another great rabbi in Israel?  Or would his martyrdom at the hands of the Romans prevented the martyrdom of the ten martyrs?  What is the meaning of Yehoshua's flight into Egypt in this parable and his return with Yeshu?  What is the meaning of "the innkeeper" on the return trip and of Yeshu's finding the innkeeper unattractive?  This is the galut of Israel coming from the time of Joseph and Moses and Joshua - Yehoshua - and the return is the return of Judah from Babylon which would only be complete in the future time of the restoration of the ten tribes, so that Israel was subject to Rome as an "Innkeeper" on the way.  It was this innkeeper who Yeshu found unattractive and said so.  It was because of this that the sages pushed him away with both hands.  Now all of these considerations remain completely and acceptably concealed and so also irrelevant due to the following considerations:
 
"In standard printings of the Talmud, this story appears without the name Yeshu ha-Notzri, which was removed by censors for reasons of sensitivity to the Christian society in which they lived. It should be noted, however, that the story of Yehoshua ben Perahyah who was driven from Jerusalem by King Yannai, could not have taken place any later than 76 BCE. Thus the reference to Yeshu ha-Notzri cannot be connected with the individual who established the Christian faith. Many commentaries suggest that all of the Talmudic references to Yeshu refer to another person, or else that there is more than one person with that name who lived during the times of the Mishnah."

This (quoted) essay is based upon the insights and chidushim of Rabbi Steinsaltz, as published in the Hebrew version of theSteinsaltz Edition of the Talmud. 
by Max Carl Kirk - The Study of The Covenant of The Holy One of Israel
The Mellow Wolf Covenant Files
We need to ask, 

[[What is a covenant?]] and 

[[Why did the Eternal One make a covenant with Abraham and with Israel?]]
The call to Abraham, "Go out to yourself", is the call to accept the death of the Adam of sin and embrace the Adam of the resurrection from the dead.
A Poem In Dialogue With Achot Ktana - being a piyut by   R. Avraham Hazan Girundi
Sfarad  13th Century > Find this here:  http://www.piyut.org.il/textual/english/21.html

Read this also at: http://sites.google.com/site/poemsofmaxcarlkirk/

The Lost Little Sister

The Little Sister sent her prayer
The Arranger responded to her praises
God, please! Heal please, her mortal illness!
May this year and its troubles soon be over

With pleasant melodious words
You called her to follow You
in a song descending down spiral steps
She was drawn by Your handsomeness
down to the place where You were concealed
Open now the eyes and see
strangers consuming her estate
May this year and its troubles soon be over

When Your flock became rebellious
mountain lions scattered them
You poured out Your pain in front of them
speaking about their evil inclination
You readied Your right hand
to break in upon them and harvest them
and to leave nothing behind
not one of her sucklings
May this year and its troubles soon be over

It is the time of raising up the humiliated one
unto the place of the head of the kingdoms
because into the pit of exile and alienation
her soul was poured and there was moulded
She was an olive grove that the storm left bare
Her heart was like waste, like refuge
Places of abject poverty were her tabernacles
May this year and its troubles soon be over

She goes up out of death
Your daughter is being raised from the pit
From the prison house
she will go up and she will break free
A wonder of wonders it will be
when you escape as a mighty one!
She attains her simplicity and becomes a bride
a dear bride and daughter-in-law
May this year and its troubles soon be over

A cup of chastisement will fortify the nations
every drop of it
The goodness of it will cure and satisfy them
The spoil of all their profits shall go to one man
They tore and ravaged her heart
Yet she never wavered from her lowly posture
because of remorse for her calves
May this year and its troubles soon be over

The Sabbath trimmings
greatly increase her desire
to be intimate and close with her dear one
that he should escort her home
From her heart comes only anguish
Her soul has left her and searches about
She is craving for her love
the loved one of her betrothal
May this year and its troubles soon be over

Be calm and rest comfortably
You are finally at home
She was for so long abandoned
lost in the pain of desire for her dear one
Now she will bloom and flourish
as the eternal rose
She was not yet developed
when she was bereaved
May this year and its troubles soon be over

Her strength has come with her maturation
She has overcome the demonic kingdom
Through her Rock testing her she triumphed
He is keeping His covenanted promise to you
to raise you up to the Land of Love
Go unto Zion and say
Build up the way!  Raise high her freeway!
This is the commencement of the year of blessing! 
Only sin does not believe there is a God. Sin only believes that there is not a God. It is sin that fears death and bows down to death as the great mystery, the great unknown. Faith knows that death is no true mystery but is created by God as an interruption to life in order that the whole world might stand before him in judgement, for in his judgement alone is the hope of life. God is not the God of the dead but of the living, said his son to Israel. He is not the God of sin but he is the God of the forgiveness of sin. Who is there who would not be deceived by sin if it were not for the Torah of God?
/***
Description: Contains the stuff you need to use Tiddlyspot
Note, you also need UploadPlugin, PasswordOptionPlugin and LoadRemoteFileThroughProxy
from http://tiddlywiki.bidix.info for a complete working Tiddlyspot site.
***/
//{{{

// edit this if you are migrating sites or retrofitting an existing TW
config.tiddlyspotSiteId = 'mellowwolf';

// make it so you can by default see edit controls via http
config.options.chkHttpReadOnly = false;
window.readOnly = false; // make sure of it (for tw 2.2)
window.showBackstage = true; // show backstage too

// disable autosave in d3
if (window.location.protocol != "file:")
	config.options.chkGTDLazyAutoSave = false;

// tweak shadow tiddlers to add upload button, password entry box etc
with (config.shadowTiddlers) {
	SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';
	SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");
	OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");
	DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[WelcomeToTiddlyspot]] ");
	MainMenu = MainMenu.replace(/^/,"[[WelcomeToTiddlyspot]] ");
}

// create some shadow tiddler content
merge(config.shadowTiddlers,{

'WelcomeToTiddlyspot':[
 "This document is a ~TiddlyWiki from tiddlyspot.com.  A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below.  Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",
 "<<tiddler TspotControls>>",
 "See also GettingStarted.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the \"save to web\" button in the column on the right.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick.  You can make changes and save them locally without being connected to the Internet.  When you're ready to sync up again, just click \"upload\" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]].  Also visit [[TiddlyWiki.org|http://tiddlywiki.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help.  If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site.  Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."
].join("\n"),

'TspotControls':[
 "| tiddlyspot password:|<<option pasUploadPassword>>|",
 "| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<br>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",
 "| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[blog|http://tiddlyspot.blogspot.com/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"
].join("\n"),

'TspotSidebar':[
 "<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"
].join("\n"),

'TspotOptions':[
 "tiddlyspot password:",
 "<<option pasUploadPassword>>",
 ""
].join("\n")

});
//}}}
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 30/05/2010 18:11:01 | Max Carl Kirk | [[index.html|http://mellowwolf.tiddlyspot.com/index.html]] | [[store.cgi|http://mellowwolf.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mellowwolf.tiddlyspot.com/index.html]] | . | ok |
| 30/05/2010 18:13:31 | Max Carl Kirk | [[index.html|http://mellowwolf.tiddlyspot.com/index.html]] | [[store.cgi|http://mellowwolf.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mellowwolf.tiddlyspot.com/index.html]] | . |
| 07/08/2010 01:28:46 | Max Carl Kirk | [[index.html|http://mellowwolf.tiddlyspot.com/index.html]] | [[store.cgi|http://mellowwolf.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mellowwolf.tiddlyspot.com/index.html]] | . |
| 11/09/2010 20:17:11 | Max Carl Kirk | [[index.html|http://mellowwolf.tiddlyspot.com/index.html]] | [[store.cgi|http://mellowwolf.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mellowwolf.tiddlyspot.com/index.html]] | . | ok |
| 12/09/2010 16:54:50 | Max Carl Kirk | [[index.html|http://mellowwolf.tiddlyspot.com/index.html]] | [[store.cgi|http://mellowwolf.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mellowwolf.tiddlyspot.com/index.html]] | . | ok |
| 12/09/2010 17:01:05 | Max Carl Kirk | [[index.html|http://mellowwolf.tiddlyspot.com/index.html]] | [[store.cgi|http://mellowwolf.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mellowwolf.tiddlyspot.com/index.html]] | . | ok |
| 14/09/2010 14:38:18 | Max Carl Kirk | [[index.html|http://mellowwolf.tiddlyspot.com/index.html]] | [[store.cgi|http://mellowwolf.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mellowwolf.tiddlyspot.com/index.html]] | . | ok |
| 14/09/2010 14:50:03 | Max Carl Kirk | [[index.html|http://mellowwolf.tiddlyspot.com/index.html]] | [[store.cgi|http://mellowwolf.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mellowwolf.tiddlyspot.com/index.html]] | . | ok |
| 14/09/2010 15:31:52 | Max Carl Kirk | [[index.html|http://mellowwolf.tiddlyspot.com/index.html]] | [[store.cgi|http://mellowwolf.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mellowwolf.tiddlyspot.com/index.html]] | . |
| 27/09/2010 16:08:29 | Max Carl Kirk | [[index.html|http://mellowwolf.tiddlyspot.com/index.html]] | [[store.cgi|http://mellowwolf.tiddlyspot.com/store.cgi]] | . | [[index.html | http://mellowwolf.tiddlyspot.com/index.html]] | . |
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.3|
|''Date:''|Feb 24, 2008|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 3,
	date: new Date("Feb 24, 2008"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0'
};

//
// Environment
//

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

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

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

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

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

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

//
// uploadOptions Macro
//

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

//
// upload functions
//

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

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

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

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

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

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

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

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

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

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

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

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

//
// Utilities
// 

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

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

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

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

//
// Initializations
//

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

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

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

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


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


//}}}