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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

----
Also see AdvancedOptions
<<importTiddlers>>
/***
|Name:|CloseOnCancelPlugin|
|Description:|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|
|Version:|3.0.1 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#CloseOnCancelPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.commands.cancelTiddler,{

	handler_mptw_orig_closeUnsaved: config.commands.cancelTiddler.handler,

	handler: function(event,src,title) {
		this.handler_mptw_orig_closeUnsaved(event,src,title);
		if (!store.tiddlerExists(title) && !store.isShadowTiddler(title))
			story.closeTiddler(title,true);
	 	return false;
	}

});

//}}}
Name: MptwTeal
Background: #fff
Foreground: #000
PrimaryPale: #B5D1DF
PrimaryLight: #618FA9
PrimaryMid: #1a3844
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #f8f8f8
TertiaryLight: #bbb
TertiaryMid: #999
TertiaryDark: #888
Error: #f88
/***
|''Name:''|CryptoFunctionsPlugin|
|''Description:''|Support for cryptographic functions|
***/
//{{{
if(!version.extensions.CryptoFunctionsPlugin) {
version.extensions.CryptoFunctionsPlugin = {installed:true};

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

}
//}}}
/***
|Name:|ExtentTagButtonPlugin|
|Description:|Adds a New tiddler button in the tag drop down|
|Version:|3.2 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#ExtendTagButtonPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{

window.onClickTag_mptw_orig = window.onClickTag;
window.onClickTag = function(e) {
	window.onClickTag_mptw_orig.apply(this,arguments);
	var tag = this.getAttribute("tag");
	var title = this.getAttribute("tiddler");
	// Thanks Saq, you're a genius :)
	var popup = Popup.stack[Popup.stack.length-1].popup;
	createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
	wikify("<<newTiddler label:'New tiddler' tag:'"+tag+"'>>",createTiddlyElement(popup,"li"));
	return false;
}

//}}}
God's Law and God's Love

"If you love Me, keep My commandments." (John 14:15)

`This is the love of-God, that we keep His commandments.
And His commandments are not burdensome." (1 John 5:3)

I have been reading a little bit of this on the internet and I dont like how some of the people have blended this together on their own websites so I am going to give this a shot.  The idea of being Gospel centric is the idea that we are both sinful and loved. The Gospel then is a third way between both of these extremes. 

For some reason as we mature in Christ we leave the Gospel behind us and start tending toward a legallistic outlook on life as we judge other Christians, other denominations. We believe we understand works-righteousness but still fall into its trap. I dont think its a coincident that Jesus spent so much time critiquing the pharisees and so little time critiquing prostitutes.  Martin Luther once used the quote "love God and do as you please". He did not say this to thinking he was giving us the freedom to go out and sin and to find some relativistic understanding of God. He said this for two reason: (1) He realized that if we love God we would seek his will, and (2) He said this to question our thinkology -- because a set of rules for just being a set of rules is basically a trap for Christians. We understand the rules but instead of using it to please God we use it to condemn others and to ultimately serve ourselves. We use God-given rules to sin somehow. The whole time doing this we believe we are attempting to serve God but in a greater way than someone else serving God. We use it as power over others as opposed to power under others.

I realize that some people have what I would consider a sinful desire to call a spade a spade (or sin sin) (especially in public settings), but if we persist in outside in theology we are also in sin. All we need to do is present the Gospel of Jesus Christ that we are ALL absolutely sinful and we are all absolutely  loved and through the Cross we can have a deep intimate relationship with God. Then let God do the work through his son.  Outside in theology ultimately drives people away from the Church or creates ineffective Christians.  As I say this I also realize I have been guilty of Grace legallism -- that is having an unloving heart toward unloving pharisees.  However, at the same time this is an important message for me to leave with my children and friends. Mostly because this focus on the Gospel has mysteriously healed my marriage in ways I did not believe possible. The Gospel at its core is emotional and spiritual intimacy because we can be both vulnerably open about our sin and loved.


God is love (1 John). The Gospel and Love are two all encompassing ideas the need to transcend everything a Christian does.  The only perfect judge is God and even then we have a Savior working on our behalf in our sin-state.

Some people might critique me as being a bit "Antinomian" in my thinkology. That would not be accurate. I do believe that every Christian needs to give a LOT of thought to the proper distinction between Gods Law and Gods Grace because the Gospel message is a third way between  religion and irreligion. A third way between legallism and love.  Only in the Gospel are we both absolutely condemnend and absolutely loved simultaneously. Only in the Gospel can we share our deep emotions and sins and shortcomings openly and not be condemned.  A Gospel-centric world view has the ability to create spiritual and emotional intimacy with God and between spouses and other people because we can boldly share our real emotions without twisting or spinning the truth about ourselves.


Anyhow for further reading I recommend Philip Yancey's What's so Amazing about Grace"  Recommended to me by my pastor at my Church in Rochester.




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

window.hideWhenLastTest = false;

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


merge(config.macros,{

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

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

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

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

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

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

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

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

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

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

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

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

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

});

//}}}
I HAVE A DREAM…

I dream of a Gospel-driven church…

The Gospel is...
We are more sinful and weak than we ever dared to admit and…
We are more loved and accepted than we ever dared to hope.

I dream of a church where the Gospel goes deep into the hearts of people as they see it in action through relationship, and through the surprising way that the people love each other and those who have never darkened the door of the church. I dream of the Gospel making its way deeply into relationships…liberating people from hypocrisy, phoniness, and “putting on their Sunday best” while living lives of silent, isolated desperation. I dream of a church that rejects “church-ianity” and replaces it with authentic Christ-ianity. I dream of a safe place where people can express openly and specifically their personal struggles with sin, and find a community that will not reject them or merely “put up with them,” but come alongside them for their healing. I dream that the depth of our prayers go beyond surface requests to earnest, thirsty pleas for our own, personal rescue from anger, self-righteousness, perfectionism, gracelessness, lust, a critical spirit, and anything else that prevents us from enjoying and living out of the freedom of the Gospel as a community. I dream of a church where no cliques or “closed sub-communities” can be found anywhere, where nobody feels they have been ignored, overlooked, or marginalized—ever. I dream of authentic unity amidst diversity rather than mere tolerance—black friends eating at white friends’ tables, white friends appreciating black friends’ music and babysitting black friends’ children, younger people seeking to learn from older people, older people respecting the ideas and dreams of younger people. I dream of a church climate where the Pharisee and the sinner in all of us can be openly challenged, in a sinner-safe environment saturated with love and grace. I dream of religious legalism and the more subtle forms of “grace-legalism” (having an unloving Pharisee’s attitude toward unloving Pharisees) being completely absent. I dream of people hanging in there with each other when they disagree. I dream of the complete absence of rejection from one person to another—of people who treat their relationship with the church like they do their families—sticking together in sickness and health, in riches and in poverty, for better and for worse, ‘til death do them part. I dream of spiritual beggars telling each other, and re-reminding each other, where the bread is. I dream of a church whose gatherings are more compelling, life-giving and necessary to people than any other gathering—where people want to return from vacation on Saturday because they can’t bear the thought of having to miss out on the Gospel’s activity in the corporate gathering.

I dream of a church on a Mission…

Our Mission is…
To help Christians and spiritual seekers become Gospel-driven followers of Jesus.

I dream of a church filled with people who are on a forward-moving spiritual journey. I dream of fifty or more new Christians every year. I dream of complacent, unmotivated Christians forsaking religion, coming alive to the love of God, and staying alive to it—and becoming lavishly generous, Gospel-Driven servants and leaders in the church and in the world. I dream of a church that emphasizes people over programs—that stops “plugging people into empty gaps” and instead places people with ministry teams where their passions can be fulfilled as they do God’s work, in the way God has uniquely designed them to do it. I dream of overtaking the high school and university campuses within our reach with an irresistible love and acceptance for which every young person longs. I dream of a church that comes alongside parents in loving and raising their children to adulthood and maturity in Christ. I dream of a church that gives seminary students something meaningful to do, a larger story than their own in which to live, learn, and develop into the Gospel-driven servants God is preparing them to be. I dream of an internship program that provides them with enough resources to live without worry, and enough real training to prepare them for life outside the Christian bubble. I dream of several of these students becoming grace- and Gospel-driven men and women who serve lifelong at our church, or who become catalysts in the planting and developing of other Gospel-driven churches in our city and cities throughout the nation and world. I dream of a movement that gives Jesus and the Gospel a great name in the city and communities that surround it—where the only offense that exists is the offense of the Gospel, not offensive people. I dream of spiritual beggars who love the bread so much that they cannot be satisfied until Gospel-starved people from the city in which we live have a taste too. I dream that skeptics and irreligious people feel the love of God from us, whether they ever become Christians or not. I dream of a church where it is impossible for any Christian not to feel at home, and where it is impossible for any earnest spiritual seeker not to find what he or she is looking for.

The bottom line…

The bottom line is that I dream of a church that takes people to Jesus, and where the Gospel captures the hearts of people…all types of people, Christian and not yet Christian…in such a way that the Gospel actually works to change lives…creating more humble, gracious, loving, peace-filled and always-repenting people. I want the Gospel to become a huge influence on our city and its various communities, and on the world beyond us…rather than just some nice, safe, sentimental story to help us get over the bumps of life. I want my life, and the church I serve, to count…I want to look back at the end of my life and see the fingerprints of God all over what I was part of. I want to die knowing that I attempted God-sized dreams that were doomed for failure unless God was in them. I want to die knowing that many of those God-sized dreams were fulfilled on my watch. I want to die knowing that I did it all together with others who shared the same dream.
/***
|Name:|InstantTimestampPlugin|
|Description:|A handy way to insert timestamps in your tiddler content|
|Version:|1.0.9 ($Rev: 3646 $)|
|Date:|$Date: 2008-02-27 02:34:38 +1000 (Wed, 27 Feb 2008) $|
|Source:|http://mptw.tiddlyspot.com/#InstantTimestampPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Usage
If you enter {ts} in your tiddler content (without the spaces) it will be replaced with a timestamp when you save the tiddler. Full list of formats:
* {ts} or {t} -> timestamp
* {ds} or {d} -> datestamp
* !ts or !t at start of line -> !!timestamp
* !ds or !d at start of line -> !!datestamp
(I added the extra ! since that's how I like it. Remove it from translations below if required)
!!Notes
* Change the timeFormat and dateFormat below to suit your preference.
* See also http://mptw2.tiddlyspot.com/#AutoCorrectPlugin
* You could invent other translations and add them to the translations array below.
***/
//{{{

config.InstantTimestamp = {

	// adjust to suit
	timeFormat: 'DD/0MM/YY 0hh:0mm',
	dateFormat: 'DD/0MM/YY',

	translations: [
		[/^!ts?$/img,  "'!!{{ts{'+now.formatString(config.InstantTimestamp.timeFormat)+'}}}'"],
		[/^!ds?$/img,  "'!!{{ds{'+now.formatString(config.InstantTimestamp.dateFormat)+'}}}'"],

		// thanks Adapted Cat
		[/\{ts?\}(?!\}\})/ig,"'{{ts{'+now.formatString(config.InstantTimestamp.timeFormat)+'}}}'"],
		[/\{ds?\}(?!\}\})/ig,"'{{ds{'+now.formatString(config.InstantTimestamp.dateFormat)+'}}}'"]
		
	],

	excludeTags: [
		"noAutoCorrect",
		"noTimestamp",
		"html",
		"CSS",
		"css",
		"systemConfig",
		"systemConfigDisabled",
		"zsystemConfig",
		"Plugins",
		"Plugin",
		"plugins",
		"plugin",
		"javascript",
		"code",
		"systemTheme",
		"systemPalette"
	],

	excludeTiddlers: [
		"StyleSheet",
		"StyleSheetLayout",
		"StyleSheetColors",
		"StyleSheetPrint"
		// more?
	]

}; 

TiddlyWiki.prototype.saveTiddler_mptw_instanttimestamp = TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags,fields) {

	tags = (typeof(tags) == "string") ? tags.readBracketedList() : tags;
	var conf = config.InstantTimestamp;

	if ( !tags.containsAny(conf.excludeTags) && !conf.excludeTiddlers.contains(newTitle) ) {

		var now = new Date();
		var trans = config.InstantTimestamp.translations;
		for (var i=0;i<trans.length;i++) {
			newBody = newBody.replace(trans[i][0], eval(trans[i][1]));
		}
	}

	return this.saveTiddler_mptw_instanttimestamp(title,newTitle,newBody,modifier,modified,tags,fields);
}

// you can override these in StyleSheet 
setStylesheet(".ts,.ds { background-color:#ddd; font-style:italic; }","instantTimestampStyles");

//}}}
This is meant to be a public web notebook available for mostly my family and friends. It is a place to share my thoughts and ideas of life and to have communication and transparency with my family, friends, and God. I dont consider this BLOG as open as the one I share only with my wife but this is what can be the public information on my journey into "going deeper" into relationships with God, Sue, Family, and friends. I also am very BIG on making my private and public life the same and removing the compartmentalization of my life so that nothing is hidden. Its my of way of always trying to have nothing to hide. Someone once told me that being a man and secrets dont mix — I agree absolutely!!!!!  Having said this I have a more intimate tiddlyspot that is password protected that I share with my wife.

I plan on allowing public aceess for some of this since I believe this journey will prove beneficial to those that have not walked this same path yet and that might stumble across it. Embedded in my other more private web notebook is my faith story. Its not an easy faith story to share publically but I think its one important for people to hear and be a part of.  I I dont plan on ever sharing my complete faith story in public settings of Christians like some do, but I do want people to see the fringes of it and hopefully see how God has worked in my life. 


This website will be only some "approved" cut and pastes from my other more intimate BLOG that I share with my wife (Sue).

I also have a BLOG where you can make comments or stay in touch at spadinofamily.wordpress.com. Check it out and say hi.

If you stumble across this web notebook of mine send an e-mail to jspadino@gmail.com. 
So one common interjection and negative that people say is that Grace and this type of righteousness creates loophole for people to sin again and again and keep coming back.

Lets tackle this idea.

First of all for people that make this comment need to realize that this a LARGE oversimplification of the idea of Christocentric grace. Normally this idea is thrown out by people that have not felt bruised and broken and don't understand the depth of our sin and how complete and totally depraved we are as people. Sometimes its been thrown out by people that have been victims of other peoples sin. Its pretty easy to look down on people when you are the victim. Its much tougher to stand up and feel Christ's love when your sins make you the victimizer.

Christ also came as both a penalty and a Victory for us. Both of these ideas exist. However, He draws us to Him in a way only the Gospel can do. Scripture calls the Jesus and the Gospel a mystery in how it draws and changes people. . Romans 12:1 it says we should offer our bodies as living sacrifices IN VIEW OF GODS MERCY. When we do it in view of Gods Mercy and the cross we avoid slipping into any other righteousness other than what Comes through Christ.

Is there a loophole to sin. The answer is yes because Christ paid the penalty for all past and future sins. However, true faith will struggle with sin and wrestle with it realizing Christ is on our side and the war has been won for us even as we continue to fight the battle.

I have a friend who once told me that Assurance is a gift that some people have and other's don't. The reason he said this is he had a person in his life that did not always feel assured of their salvation because of their sin. Assurance is the idea that we can be assured we are going to heaven. I really disagree with his assessment that Assurance is a gift. I believe the reason this person did not feel assured of their salvation was due to lack of seeing themselves as completely depraved and seeing the all sufficiency of Christ to make to make them righteous.

One of the reasons I highlighted the word assured above is I believe assurance of our salvation is for all Christians who rest in the all sufficiency of Christ. It is not just a gift for just some people.

Lets rest in the all sufficiency of Christ to save us from our sins and not in our own power to overcome our sins in a feeble attempt to discipline sin out of our lives. In Christ we are absolutely assured of our salvation.

If we focus on the externals (external behavior, an active works-based righteousness) then we will have a neurotic psychosis centered around assurance. Faith in the all sufficiency of Christ will lead us to an active, restless faith that changes us from the inside out.

We will never hunger for Christs Beauty fully until we have seen the filth of our own vain efforts to make ourselves beautiful -- Scott Sauls
/***
|Name:|LessBackupsPlugin|
|Description:|Intelligently limit the number of backup files you create|
|Version:|3.0 ($Rev: 2320 $)|
|Date:|$Date: 2007-06-18 22:37:46 +1000 (Mon, 18 Jun 2007) $|
|Source:|http://mptw.tiddlyspot.com/#LessBackupsPlugin|
|Author:|Simon Baird|
|Email:|simon.baird@gmail.com|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Description
You end up with just backup one per year, per month, per weekday, per hour, minute, and second.  So total number won't exceed about 200 or so. Can be reduced by commenting out the seconds/minutes/hours line from modes array
!!Notes
Works in IE and Firefox only.  Algorithm by Daniel Baird. IE specific code by by Saq Imtiaz.
***/
//{{{
window.getSpecialBackupPath = function(backupPath) {

	var MINS  = 60 * 1000;
	var HOURS = 60 * MINS;
	var DAYS  = 24 * HOURS;

	// comment out the ones you don't want
	var modes = [
		["YYYY",  365*DAYS], // one per year for ever
		["MMM",   31*DAYS],  // one per month
		["ddd",   7*DAYS],   // one per weekday
		//["d0DD",  1*DAYS],   // one per day of month
		["h0hh",  24*HOURS], // one per hour
		["m0mm",  1*HOURS],  // one per minute
		["s0ss",  1*MINS],   // one per second
		["latest",0]         // always keep last version. (leave this).
	];

	var now = new Date();

	for (var i=0;i<modes.length;i++) {

		// the filename we will try
		var specialBackupPath = backupPath.replace(/(\.)([0-9]+\.[0-9]+)(\.html)$/,
				'$1'+now.formatString(modes[i][0]).toLowerCase()+'$3')

		// open the file
		try {
			if (config.browser.isIE) {
				var fsobject = new ActiveXObject("Scripting.FileSystemObject")
				var fileExists  = fsobject.FileExists(specialBackupPath);
				if (fileExists) {
					var fileObject = fsobject.GetFile(specialBackupPath);
					var modDate = new Date(fileObject.DateLastModified).valueOf();
				}
			}
			else {
				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
				var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
				file.initWithPath(specialBackupPath);
				var fileExists = file.exists();
				if (fileExists) {
					var modDate = file.lastModifiedTime;
				}
			}
		}
		catch(e) {
			// give up
			return backupPath;
		}

		// expiry is used to tell if it's an 'old' one. Eg, if the month is June and there is a
		// June file on disk that's more than an month old then it must be stale so overwrite
		// note that "latest" should be always written because the expiration period is zero (see above)
		var expiry = new Date(modDate + modes[i][1]);
		if (!fileExists || now > expiry)
			return specialBackupPath;
	}
}

// hijack the core function
window.getBackupPath_mptw_orig = window.getBackupPath;
window.getBackupPath = function(localPath) {
	return getSpecialBackupPath(getBackupPath_mptw_orig(localPath));
}

//}}}
/***
|''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);
}
//}}}
MPTW is a distribution or edition of TiddlyWiki that includes a standard TiddlyWiki core packaged with some plugins designed to improve usability and provide a better way to organise your information. For more information see http://mptw.tiddlyspot.com/.
[[Table of Contents]] [[Vision]] [[The Centrality of the Gospel]] [[MainMenu]] [[GettingStarted]]
The person who was behind the Reformation (Martin Luther) once said the following statement:

The principal point of the law is to make men not better but worse, But by the knowledge of their sin they may be humbled, terrified, bruised, and broken ... and by this means they may be driven by Grace so to come to Christ. — Martin Luther.  Scott Sauls said in a sermon once "That we will never hunger for Christs beauty until we have seen the filth of our own vain efforts to make ourselves beautifu" .  BOth of these are great summary sentences of a lot of reflecting on scripture and valid attempts to understand scripture through the eyes of Christ.

I will admit it. Outside of the Jesus Christ and Paul, Martin Luther is one of my favorite people in history that involves Christianity. I dont really consider myself Lutheran, but I do consider myself somewhat Lutheresque. The main reason I do is simple: Martin Luther was Christocentric and Gospel oriented just like me. Not that all his views were perfect, but I think his theology was a valiantly good effort to see scripture through the eyes of Jesus Christ as opposed to a "system of theology" or a scholastic theology that many people seem to be part of today.

I want to elaborate more fully on Martin Luther's quote now.

The reason God gives us the law is to make us desperate for Jesus Christ. Martin Luther did an exhaustive preface to the Book of Galatians:

The one doctrine which I have supremely in my heart is that of faith in Christ, from whom, through whom and unto whom all my theological thinking flows back and forth, day and night. This rock, which we call the doctrine of justification through faith, was shaken by Satan in paradise when he persuaded our first parents that they might by their own wisdom and power become like God [Yes, this goes back to Adam and Eve and our original sin]. Ever since then the whole world has invented innumerable religions and ways through which, without the aid of Christ, use their works to redeem themselves from evil and sins.

When Paul discusses the biblical doctrine of justification by faith he explains that there are several kinds of “righteousness.” First, there is political or civil righteousness—the nation's public laws—which magistrates and lawyers may defend and teach. Second, there is cultural righteousness—the standards of our family and social grouping or class—which parents and schools may teach. Third, there is ethical righteousness—the Ten Commandments and law of God—which the church may teach but only in light of Christian righteousness. So all these may be received without danger, as long as we attribute to them no power to satisfy for sin, to please God, or to deserve grace…These kinds of righteousness are gifts of God, like all good things we enjoy…

Yet there is another righteousness, far above the others, which Paul calls “the righteousness of faith”—Christian righteousness. God imputes it to us apart from our works—in other words, it is passive righteousness, as the others are active. For we do nothing for it, and we give nothing for it. We only receive it.

This “passive” righteousness is a mystery that the world cannot understand. Indeed, Christians never completely understand it themselves, and thus do not take advantage of it when they are troubled and tempted. So we have to constantly teach it, repeat it, and work it out in practice. Anyone who does not understand this righteousness or cherish it in the heart and conscience will continually be buffeted by fears and depression. Nothing gives peace like this passive righteousness.

For human beings by nature, when they get near either danger or death itself, will of necessity examine their own worthiness. We defend ourselves before all threats by recounting our good deeds and moral efforts. But then the remembrance of sins and flaws inevitably comes to mind, and this tears us apart, and we think, “How many errors and sins and wrongs I have done! Please God, let me live so I can fix and amend them.” We become obsessed with our active righteousness and are terrified by its imperfections. But the real evil is that we trust our own power to be righteous and will not lift up our eyes to see what Christ has done for us…So the troubled conscience has no cure for its desperation and feeling of unworthiness unless it takes hold of the forgiveness of sins by grace, offered free of charge in Jesus Christ, which is this passive or Christian righteousness…If I tried to fulfill the law myself, I could not trust in what I had accomplished, neither could it stand up to the judgment of God. So...I rest only upon the righteousness of Christ…which I do not produce but receive, God the Father freely giving it to us through Jesus Christ.

It is an absolute and unique teaching in all the world, to teach people, through Christ, to live as if there were no law or wrath or punishment. In a sense, they do not exist any longer for the Christian, but only total grace and mercy for Christ’s sake. Once you are in Christ, the law is the greatest guide for your life, but until you have Christian righteousness, all the law can do is to show you how sinful and condemned you are. In fact, to those outside of Christian righteousness, the law needs to be expounded in all its force. Why? So that people who think they have power to be righteous before God will be humbled by the law and understand they are sinners.

Therefore we must be careful to use the law appropriately. If we used the law in order to be accepted by God through obedience, then Christian righteousness becomes mixed up with earned/moral righteousness in our minds. If we try to earn our righteousness by doing many good deeds, we actually do nothing. We neither please God through our works-righteousness nor do we honor the purpose for which the law was given. But if we first receive Christian righteousness, then we can use the law, not for our salvation, but for his honor and glory, and to lovingly show our gratitude.

So then, have we nothing to do to obtain this righteousness? No, nothing at all! For this righteousness comes by doing nothing, hearing nothing, knowing nothing, but rather in knowing and believing this only—that Christ has gone to the right hand of the Father, not to become our judge, but to become for us our wisdom, our righteousness, our holiness, our salvation! Now God sees no sin in us, for in this heavenly righteousness sin has no place. So now we may certainly think, “Although I still sin, I don’t despair, because Christ lives, who is both my righteousness and my eternal life.” In that righteousness I have no sin, no fear, no guilty conscience, no fear of death. I am indeed a sinner in this life of mine and in my own righteousness, but I have another life, another righteousness above this life, which is in Christ, the Son of God, who knows no sin or death, but is eternal righteousness and eternal life.

While we live here on earth, we will be accused, exercised with temptations, oppressed with heaviness and sorrow, and bruised by the law with its demands of active righteousness. Because of this, Paul sets out in this letter of Galatians to teach us, to comfort us, and to keep us constantly aware of this Christian righteousness. For if the truth of being justified by Christ alone (not by our works) is lost, then all Christian truths are lost. For there is no middle ground between Christian righteousness and works-righteousness. There is no other alternative to Christian righteousness but works-righteousness; if you do not build your confidence on the work of Christ, you must build your confidence on your own work. On this truth and only on this truth the church is built and has its being.

This distinction is easy to utter in words, but in use and experience it is very hard. So I challenge you to exercise yourselves continually in these matters through study, reading, meditation on the Word and prayer, so that in the time of trial you will be able to both inform and comfort both your consciences and others, to bring them from law to grace, from active/works-righteousness to passive/Christ’s righteousness. In times of struggle, the devil will seek to terrify us by using against us our past record and the wrath and law of God. So if we cannot see the differences between the two kinds of righteousness, and if we do not take hold of Christ by faith, sitting at the right hand of God (Heb 7:25) and pleading our case as sinners to the Father, then we are under the law, not under grace. Christ is no savior, but a lawgiver, and no longer our salvation, but an eternal despair.

When we are assured of this righteousness, we not only cheerfully work well in our vocations, but we submit to all manner of burdens and dangers in this present life, because we know that this is the will of God, and that this obedience pleases him. This then is the argument of this Epistle, which Paul expounds against the false teachers who had darkened the Galatians’ understanding of this righteousness by faith.
Name: MptwBlack
Background: #000
Foreground: #fff
PrimaryPale: #333
PrimaryLight: #555
PrimaryMid: #888
PrimaryDark: #aaa
SecondaryPale: #111
SecondaryLight: #222
SecondaryMid: #555
SecondaryDark: #888
TertiaryPale: #222
TertiaryLight: #666
TertiaryMid: #888
TertiaryDark: #aaa
Error: #300

This is in progress. Help appreciated.
Name: MptwBlue
Background: #fff
Foreground: #000
PrimaryPale: #cdf
PrimaryLight: #57c
PrimaryMid: #114
PrimaryDark: #012
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/***
|Name:|MptwConfigPlugin|
|Description:|Miscellaneous tweaks used by MPTW|
|Version:|1.0 ($Rev: 3646 $)|
|Date:|$Date: 2008-02-27 02:34:38 +1000 (Wed, 27 Feb 2008) $|
|Source:|http://mptw.tiddlyspot.com/#MptwConfigPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#MptwConfigPlugin|
!!Note: instead of editing this you should put overrides in MptwUserConfigPlugin
***/
//{{{
var originalReadOnly = readOnly;
config.options.chkHttpReadOnly = false; // means web visitors can experiment with your site by clicking edit
readOnly = false;						// needed because the above doesn't work any more post 2.1 (??)
config.options.chkInsertTabs = true;    // tab inserts a tab when editing a tiddler
config.views.wikified.defaultText = ""; // don't need message when a tiddler doesn't exist
config.views.editor.defaultText = "";   // don't need message when creating a new tiddler 

config.mptwVersion = "2.3.2a";

config.macros.mptwVersion={handler:function(place){wikify(config.mptwVersion,place);}};

if (config.options.txtTheme == '')
	config.options.txtTheme = 'MptwTheme';

// add to default GettingStarted
config.shadowTiddlers.GettingStarted += "\n\nSee also [[MPTW]].";

// add select theme and palette controls in default OptionsPanel
config.shadowTiddlers.OptionsPanel = config.shadowTiddlers.OptionsPanel.replace(/(\n\-\-\-\-\nAlso see AdvancedOptions)/, "{{select{<<selectTheme>>\n<<selectPalette>>}}}$1");

// these are used by ViewTemplate
config.mptwDateFormat = 'DD/MM/YY';
config.mptwJournalFormat = 'Journal DD/MM/YY';

//}}}
Name: MptwGreen
Background: #fff
Foreground: #000
PrimaryPale: #9b9
PrimaryLight: #385
PrimaryMid: #031
PrimaryDark: #020
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
Name: MptwRed
Background: #fff
Foreground: #000
PrimaryPale: #eaa
PrimaryLight: #c55
PrimaryMid: #711
PrimaryDark: #500
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
|Name|MptwRounded|
|Description|Mptw Theme with the default TiddlyWiki PageLayout|
|ViewTemplate|MptwTheme##ViewTemplate|
|EditTemplate|MptwTheme##EditTemplate|
|PageTemplate|MptwTheme##PageTemplate|
|StyleSheet|MptwRoundTheme##StyleSheet|

!StyleSheet
/*{{{*/

[[MptwTheme##StyleSheet]]

.tiddler,
.sliderPanel,
.button,
.tiddlyLink,
.tabContents
{ -moz-border-radius: 1em; }

.tab {
	-moz-border-radius-topleft: 0.5em;
	-moz-border-radius-topright: 0.5em;
}
#topMenu {
	-moz-border-radius-bottomleft: 2em;
	-moz-border-radius-bottomright: 2em;
}

/*}}}*/
Name: MptwSmoke
Background: #fff
Foreground: #000
PrimaryPale: #aaa
PrimaryLight: #777
PrimaryMid: #111
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
|Name|MptwStandard|
|Description|Mptw Theme with the default TiddlyWiki PageLayout|
|ViewTemplate|MptwTheme##ViewTemplate|
|EditTemplate|MptwTheme##EditTemplate|
Name: MptwTeal
Background: #fff
Foreground: #000
PrimaryPale: #B5D1DF
PrimaryLight: #618FA9
PrimaryMid: #1a3844
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #f8f8f8
TertiaryLight: #bbb
TertiaryMid: #999
TertiaryDark: #888
Error: #f88
|Name|MptwTheme|
|Description|Mptw Theme including custom PageLayout|
|PageTemplate|MptwTheme##PageTemplate|
|ViewTemplate|MptwTheme##ViewTemplate|
|EditTemplate|MptwTheme##EditTemplate|
|StyleSheet|MptwTheme##StyleSheet|

http://mptw.tiddlyspot.com/#MptwTheme ($Rev: 1829 $)

!PageTemplate
<!--{{{-->
<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>
<!-- horizontal MainMenu -->
<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
<!-- original MainMenu menu -->
<!-- <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>
<!--}}}-->

!ViewTemplate
<!--{{{-->
[[MptwTheme##ViewTemplateToolbar]]

<div class="tagglyTagged" macro="tags"></div>

<div class='titleContainer'>
	<span class='title' macro='view title'></span>
	<span macro="miniTag"></span>
</div>

<div class='subtitle'>
	(updated <span macro='view modified date {{config.mptwDateFormat?config.mptwDateFormat:"MM/0DD/YY"}}'></span>
	by <span macro='view modifier link'></span>)
	<!--
	(<span macro='message views.wikified.createdPrompt'></span>
	<span macro='view created date {{config.mptwDateFormat?config.mptwDateFormat:"MM/0DD/YY"}}'></span>)
	-->
</div>

<div macro="showWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')">
	<div class='viewer'><pre macro='view text'></pre></div>
</div>
<div macro="else">
	<div class='viewer' macro='view text wikified'></div>
</div>

<div class="tagglyTagging" macro="tagglyTagging"></div>

<!--}}}-->

!ViewTemplateToolbar
<!--{{{-->
<div class='toolbar'>
	<span macro="showWhenTagged systemConfig">
		<span macro="toggleTag systemConfigDisable . '[[disable|systemConfigDisable]]'"></span>
	</span>
	<span macro="showWhenTagged systemTheme"><span macro="applyTheme"></span></span>
	<span macro="showWhenTagged systemPalette"><span macro="applyPalette"></span></span>
	<span macro="showWhen tiddler.tags.contains('css') || tiddler.title == 'StyleSheet'"><span macro="refreshAll"></span></span>
	<span style="padding:1em;"></span>
	<span macro='toolbar closeTiddler closeOthers +editTiddler deleteTiddler > fields syncing permalink references jump'></span> <span macro='newHere label:"new here"'></span>
	<span macro='newJournalHere {{config.mptwJournalFormat?config.mptwJournalFormat:"MM/0DD/YY"}}'></span>
</div>
<!--}}}-->

!EditTemplate
<!--{{{-->
<div class="toolbar" macro="toolbar +saveTiddler saveCloseTiddler closeOthers -cancelTiddler cancelCloseTiddler deleteTiddler"></div>
<div class="title" macro="view title"></div>
<div class="editLabel">Title</div><div class="editor" macro="edit title"></div>
<div macro='annotations'></div>
<div macro="showWhenExists EditPanelTemplate">[[EditPanelTemplate]]</div>
<div class="editLabel">Content</div><div class="editor" macro="edit text"></div>
<div class="editLabel">Tags</div><div class="editor" macro="edit tags"></div>
<div class="editorFooter"><span macro="message views.editor.tagPrompt"></span><span macro="tagChooser"></span></div>
<!--}}}-->

!StyleSheet
/*{{{*/

/* a contrasting background so I can see where one tiddler ends and the other begins */
body {
	background: [[ColorPalette::TertiaryLight]];
}

/* sexy colours and font for the header */
.headerForeground {
	color: [[ColorPalette::PrimaryPale]];
}
.headerShadow, .headerShadow a {
	color: [[ColorPalette::PrimaryMid]];
}

/* separate the top menu parts */
.headerForeground, .headerShadow {
	padding: 1em 1em 0;
}

.headerForeground, .headerShadow {
	font-family: 'Trebuchet MS' sans-serif;
	font-weight:bold;
}
.headerForeground .siteSubtitle {
	color: [[ColorPalette::PrimaryLight]];
}
.headerShadow .siteSubtitle {
	color: [[ColorPalette::PrimaryMid]];
}

/* make shadow go and down right instead of up and left */
.headerShadow {
	left: 1px;
	top: 1px;
}

/* prefer monospace for editing */
.editor textarea, .editor input {
	font-family: 'Consolas' monospace;
	background-color:[[ColorPalette::TertiaryPale]];
}


/* sexy tiddler titles */
.title {
	font-size: 250%;
	color: [[ColorPalette::PrimaryLight]];
	font-family: 'Trebuchet MS' sans-serif;
}

/* more subtle tiddler subtitle */
.subtitle {
	padding:0px;
	margin:0px;
	padding-left:1em;
	font-size: 90%;
	color: [[ColorPalette::TertiaryMid]];
}
.subtitle .tiddlyLink {
	color: [[ColorPalette::TertiaryMid]];
}

/* a little bit of extra whitespace */
.viewer {
	padding-bottom:3px;
}

/* don't want any background color for headings */
h1,h2,h3,h4,h5,h6 {
	background: [[ColorPalette::Background]];
	color: [[ColorPalette::Foreground]];
}

/* give tiddlers 3d style border and explicit background */
.tiddler {
	background: [[ColorPalette::Background]];
	border-right: 2px [[ColorPalette::TertiaryMid]] solid;
	border-bottom: 2px [[ColorPalette::TertiaryMid]] solid;
	margin-bottom: 1em;
	padding:1em 2em 2em 1.5em;
}

/* make options slider look nicer */
#sidebarOptions .sliderPanel {
	border:solid 1px [[ColorPalette::PrimaryLight]];
}

/* the borders look wrong with the body background */
#sidebar .button {
	border-style: none;
}

/* this means you can put line breaks in SidebarOptions for readability */
#sidebarOptions br {
	display:none;
}
/* undo the above in OptionsPanel */
#sidebarOptions .sliderPanel br {
	display:inline;
}

/* horizontal main menu stuff */
#displayArea {
	margin: 1em 15.7em 0em 1em; /* use the freed up space */
}
#topMenu br {
	display: none;
}
#topMenu {
	background: [[ColorPalette::PrimaryMid]];
	color:[[ColorPalette::PrimaryPale]];
}
#topMenu {
	padding:2px;
}
#topMenu .button, #topMenu .tiddlyLink, #topMenu a {
	margin-left: 0.5em;
	margin-right: 0.5em;
	padding-left: 3px;
	padding-right: 3px;
	color: [[ColorPalette::PrimaryPale]];
	font-size: 115%;
}
#topMenu .button:hover, #topMenu .tiddlyLink:hover {
	background: [[ColorPalette::PrimaryDark]];
}

/* make 2.2 act like 2.1 with the invisible buttons */
.toolbar {
	visibility:hidden;
}
.selected .toolbar {
	visibility:visible;
}

/* experimental. this is a little borked in IE7 with the button 
 * borders but worth it I think for the extra screen realestate */
.toolbar { float:right; }

/* fix for TaggerPlugin. from sb56637. improved by FND */
.popup li .tagger a {
   display:inline;
}

/* makes theme selector look a little better */
#sidebarOptions .sliderPanel .select .button {
  padding:0.5em;
  display:block;
}
#sidebarOptions .sliderPanel .select br {
	display:none;
}

/* make it print a little cleaner */
@media print {
	#topMenu {
		display: none ! important;
	}
	/* not sure if we need all the importants */
	.tiddler {
		border-style: none ! important;
		margin:0px ! important;
		padding:0px ! important;
		padding-bottom:2em ! important;
	}
	.tagglyTagging .button, .tagglyTagging .hidebutton {
		display: none ! important;
	}
	.headerShadow {
		visibility: hidden ! important;
	}
	.tagglyTagged .quickopentag, .tagged .quickopentag {
		border-style: none ! important;
	}
	.quickopentag a.button, .miniTag {
		display: none ! important;
	}
}

/* get user styles specified in StyleSheet */
[[StyleSheet]]

/*}}}*/
For upgrading. See [[ImportTiddlers]].
URL: http://mptw.tiddlyspot.com/upgrade.html
/***
|Description:|A place to put your config tweaks so they aren't overwritten when you upgrade MPTW|
***/
//{{{

config.mptwDateFormat = 'DD/MM/YY';
config.mptwJournalFormat = 'Journal DD/MM/YY';
//config.mptwDateFormat = 'MM/0DD/YY';
//config.mptwJournalFormat = 'Journal MM/0DD/YY';

//}}}
/***
|Name:|NewHerePlugin|
|Description:|Creates the new here and new journal macros|
|Version:|3.0 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#NewHerePlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.macros, {
	newHere: {
		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			wikify("<<newTiddler "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
		}
	},
	newJournalHere: {
		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			wikify("<<newJournal "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
		}
	}
});

//}}}
/***
|Name:|NewMeansNewPlugin|
|Description:|If 'New Tiddler' already exists then create 'New Tiddler (1)' and so on|
|Version:|1.0 ($Rev: 2263 $)|
|Date:|$Date: 2007-06-13 04:22:32 +1000 (Wed, 13 Jun 2007) $|
|Source:|http://mptw.tiddlyspot.com/empty.html#NewMeansNewPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Note: I think this should be in the core
***/
//{{{

String.prototype.getNextFreeName = function() {
       var numberRegExp = / \(([0-9]+)\)$/;
       var match = numberRegExp.exec(this);
       if (match) {
               var num = parseInt(match[1]) + 1;
               return this.replace(numberRegExp," ("+num+")");
       }
       else {
               return this + " (1)";
       }
}

config.macros.newTiddler.getName = function(newName) {
       while (store.getTiddler(newName))
               newName = newName.getNextFreeName();
       return newName;
}


config.macros.newTiddler.onClickNewTiddler = function()
{
	var title = this.getAttribute("newTitle");
	if(this.getAttribute("isJournal") == "true") {
		var now = new Date();
		title = now.formatString(title.trim());
	}

	title = config.macros.newTiddler.getName(title); // <--- only changed bit

	var params = this.getAttribute("params");
	var tags = params ? params.split("|") : [];
	var focus = this.getAttribute("newFocus");
	var template = this.getAttribute("newTemplate");
	var customFields = this.getAttribute("customFields");
	story.displayTiddler(null,title,template,false,null,null);
	var tiddlerElem = document.getElementById(story.idPrefix + title);
	if(customFields)
		story.addCustomFields(tiddlerElem,customFields);
	var text = this.getAttribute("newText");
	if(typeof text == "string")
		story.getTiddlerField(title,"text").value = text.format([title]);
	for(var t=0;t<tags.length;t++)
		story.setTiddlerTag(title,tags[t],+1);
	story.focusTiddler(title,focus);
	return false;
};

//}}}
[ Israel's Only Savior ] But now, this is what the LORD says— he who created you, O Jacob, he who formed you, O Israel: "Fear not, for I have redeemed you; I have summoned you by name; you are mine.
/***
|Name:|PrettyDatesPlugin|
|Description:|Provides a new date format ('pppp') that displays times such as '2 days ago'|
|Version:|1.0 ($Rev: 3646 $)|
|Date:|$Date: 2008-02-27 02:34:38 +1000 (Wed, 27 Feb 2008) $|
|Source:|http://mptw.tiddlyspot.com/#PrettyDatesPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Notes
* If you want to you can rename this plugin. :) Some suggestions: LastUpdatedPlugin, RelativeDatesPlugin, SmartDatesPlugin, SexyDatesPlugin.
* Inspired by http://ejohn.org/files/pretty.js
***/
//{{{
Date.prototype.prettyDate = function() {
	var diff = (((new Date()).getTime() - this.getTime()) / 1000);
	var day_diff = Math.floor(diff / 86400);

	if (isNaN(day_diff))      return "";
	else if (diff < 0)        return "in the future";
	else if (diff < 60)       return "just now";
	else if (diff < 120)      return "1 minute ago";
	else if (diff < 3600)     return Math.floor(diff/60) + " minutes ago";
	else if (diff < 7200)     return "1 hour ago";
	else if (diff < 86400)    return Math.floor(diff/3600) + " hours ago";
	else if (day_diff == 1)   return "Yesterday";
	else if (day_diff < 7)    return day_diff + " days ago";
	else if (day_diff < 14)   return  "a week ago";
	else if (day_diff < 31)   return Math.ceil(day_diff/7) + " weeks ago";
	else if (day_diff < 62)   return "a month ago";
	else if (day_diff < 365)  return "about " + Math.ceil(day_diff/31) + " months ago";
	else if (day_diff < 730)  return "a year ago";
	else                      return Math.ceil(day_diff/365) + " years ago";
}

Date.prototype.formatString_orig_mptw = Date.prototype.formatString;

Date.prototype.formatString = function(template) {
	return this.formatString_orig_mptw(template).replace(/pppp/,this.prettyDate());
}

// for MPTW. otherwise edit your ViewTemplate as required.
// config.mptwDateFormat = 'pppp (DD/MM/YY)'; 
config.mptwDateFormat = 'pppp'; 

//}}}
/***
|Name:|QuickOpenTagPlugin|
|Description:|Changes tag links to make it easier to open tags as tiddlers|
|Version:|3.0.1 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#QuickOpenTagPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
config.quickOpenTag = {

	dropdownChar: (document.all ? "\u25bc" : "\u25be"), // the little one doesn't work in IE?

	createTagButton: function(place,tag,excludeTiddler) {
		// little hack so we can do this: <<tag PrettyTagName|RealTagName>>
		var splitTag = tag.split("|");
		var pretty = tag;
		if (splitTag.length == 2) {
			tag = splitTag[1];
			pretty = splitTag[0];
		}
		
		var sp = createTiddlyElement(place,"span",null,"quickopentag");
		createTiddlyText(createTiddlyLink(sp,tag,false),pretty);
		
		var theTag = createTiddlyButton(sp,config.quickOpenTag.dropdownChar,
                        config.views.wikified.tag.tooltip.format([tag]),onClickTag);
		theTag.setAttribute("tag",tag);
		if (excludeTiddler)
			theTag.setAttribute("tiddler",excludeTiddler);
    		return(theTag);
	},

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

	allTagsHandler: function(place,macroName,params) {
		var tags = store.getTags(params[0]);
		var filter = params[1]; // new feature
		var ul = createTiddlyElement(place,"ul");
		if(tags.length == 0)
			createTiddlyElement(ul,"li",null,"listTitle",this.noTags);
		for(var t=0; t<tags.length; t++) {
			var title = tags[t][0];
			if (!filter || (title.match(new RegExp('^'+filter)))) {
				var info = getTiddlyLinkInfo(title);
				var theListItem =createTiddlyElement(ul,"li");
				var theLink = createTiddlyLink(theListItem,tags[t][0],true);
				var theCount = " (" + tags[t][1] + ")";
				theLink.appendChild(document.createTextNode(theCount));
				var theDropDownBtn = createTiddlyButton(theListItem," " +
					config.quickOpenTag.dropdownChar,this.tooltip.format([tags[t][0]]),onClickTag);
				theDropDownBtn.setAttribute("tag",tags[t][0]);
			}
		}
	},

	// todo fix these up a bit
	styles: [
"/*{{{*/",
"/* created by QuickOpenTagPlugin */",
".tagglyTagged .quickopentag, .tagged .quickopentag ",
"	{ margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }",
".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }",
".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}",
"/* extra specificity to make it work right */",
"#displayArea .viewer .quickopentag a.button, ",
"#displayArea .viewer .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink ",
"	{ border:0px solid black; }",
"#displayArea .viewer .quickopentag a.button, ",
"#mainMenu .quickopentag a.button ",
"	{ margin-left:0px; padding-left:2px; }",
"#displayArea .viewer .quickopentag a.tiddlyLink, ",
"#mainMenu .quickopentag a.tiddlyLink ",
"	{ margin-right:0px; padding-right:0px; padding-left:0px; margin-left:0px; }",
"a.miniTag {font-size:150%;} ",
"#mainMenu .quickopentag a.button ",
"	/* looks better in right justified main menus */",
"	{ margin-left:0px; padding-left:2px; margin-right:0px; padding-right:0px; }", 
"#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }",
"#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }",
"#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }",
"/*}}}*/",
		""].join("\n"),

	init: function() {
		// we fully replace these builtins. can't hijack them easily
		window.createTagButton = this.createTagButton;
		config.macros.allTags.handler = this.allTagsHandler;
		config.macros.miniTag = { handler: this.miniTagHandler };
		config.shadowTiddlers["QuickOpenTagStyles"] = this.styles;
		store.addNotification("QuickOpenTagStyles",refreshStyles);
	}
}

config.quickOpenTag.init();

//}}}
Below is a comparison of attitudes that a person with Religions (legallistic attitudes) vs Gospel/Grace attitudes might have. Anyone that knows me will realize this a big part of me that has solidified even more in recent years. In summary as Christians we must find our identity deeply on Christ and what happened on the Cross.  If we don't we run the risk of becoming ineffective Christians.

Here is a link to a better formatted document of the same information below: http://spadinofamily.files.wordpress.com/2008/04/religionandgospel.doc


Religion/Legalism (Tim Keller)
·	“I obey-therefore I’m accepted.” 
·	Motivation is based on fear and insecurity. 
·	I obey God in order to get things from God 
·	When circumstances in my life go wrong, I am angry at God or my self, since I believe, like Job’s friends that anyone who is good 		deserves a comfortable life. 
·	When I am criticized I am furious or devastated because it is critical that I think of myself as a ‘good person’. Threats to that 		self-image must be destroyed at all costs. 
·	My prayer life consists largely of petition and it only heats up when I am in a time of need. My main purpose in prayer is control of 		the environment. 
·	My self-view swings between two poles. If and when I am living up to my standards, I feel confident, but then I am prone to be proud 		and unsympathetic to failing people. If and when I am not living up to standards, I feel humble, but not confident-I feel like a 		failure. 
·	My identity and self-worth are based mainly on how hard I work. Or how moral I am, and so I must look down on those I perceive as lazy 	or immoral. I disdain and feel superior to ‘the other.’ 
·	Since I look to my own pedigree or performance for my spiritual acceptability, my heart manufactures idols. It may be my talents, my 		moral record, my personal discipline, my social status, etc. I absolutely have to have them so they serve as my main hope, meaning, 		happiness, security, and significance, whatever I may say I believe about God. 
·	Outside-in Christianity (focusing on externals, Focuses on the problem)

Religion/Legalism   (Neil Anderson)
·	Tells you what to do
·	Forces you to conform to accepted practices
·	Emphasis on rules, regulations·	Directs you to do what you should be doing
·	Points you to a cause, a group, or an organization (church)
·	Majors on theology and doctrine
·	Seeks to control you·	Results in alienation
·	Stresses what you are doing wrong
·	Comes across as superior, judgemental, and discouraging
·	Eventually results in a distrust and separation due to mans complete depravity·	Forces sin into the closet. Forces submerged feelings	

Gospel/Grace (Tim Keller)
·	“I’m accepted-therefore I obey.” 
·	Motivation is based on grateful joy. 
·	I obey God to get to God-to delight and resemble Him. 
·	When circumstances in my life go wrong, I struggle but I know all my punishment fell on Jesus and that while he may allow this for my 		training, he will exercise his Fatherly love within my trial. 
·	When I am criticized I struggle, but it is not critical for me to think of myself as a ‘good person.’ My identity is not built on my 		record or my performance but on God’s love for me in Christ. I can take criticism. That’s how I became a Christian. 
·	My prayer life consists of generous stretches of praise and adoration. My main purpose is fellowship with Him. 
·	My self-view is not based on a view of my self as a moral achiever. In Christ I am simul iustus et peccator—simultaneously sinful and 		lost yet accepted in Christ. I am so bad he had to die for me and I am so loved he was glad to die for me. This leads me to deeper and 	deeper humility and confidence at the same time. Neither swaggering nor sniveling. 
·	My identity and self-worth are centered on the one who died for His enemies, who was excluded from the city for me. I am saved by 		sheer grace. So I can’t look down on those who believe or practice something different from me. Only by grace I am what I am. I’ve no 		inner need to win arguments. 
·	I have many good things in my life—family, work, spiritual disciplines, etc. But none of these good things are ultimate things to me. 		None of them are things I absolutely have to have, so there is a limit to how much anxiety, bitterness, and despondency they can 		inflict on me when they are threatened and lost. ·	Inside-Out Christianity (focusing on internals, focuses on the heart)

Gospel/Grace    (Neil Anderson)
·	Exhorts you to believe God & His Word
·	Focuses on the person and the work of Christ and furthering your identity in Christ
·	Allows diversity in practices
·	Emphasizes relationships and requirements with God and people
·	Centers on the person of Christ
·	Directs you to what God has done and His resources
·	Points you to Christ
·	Majors on people and ministering to their needs
·	Seeks to release you to enjoy God
·	Stresses who you are in Christ
·	Comes across as accepting and encouraging
·	Eventually results in love, intimacy, and trust. Living in understanding of mans sin but simultaneously wanting to overcome it. Walking on this path together.
·	Can discuss bad behavior without repressing it or spinning it in our favor.  Allows intimate discussion of  feelings 
/***
|Name:|RenameTagsPlugin|
|Description:|Allows you to easily rename or delete tags across multiple tiddlers|
|Version:|3.0 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
Rename a tag and you will be prompted to rename it in all its tagged tiddlers.
***/
//{{{
config.renameTags = {

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

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

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

	storeMethods: {

		saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,

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

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

		removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,

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

	},

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

config.renameTags.init();

//}}}
/***
|Name:|SaveCloseTiddlerPlugin|
|Description:|Provides two extra toolbar commands, saveCloseTiddler and cancelCloseTiddler|
|Version:|3.0 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#SaveCloseTiddlerPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
To use these you must add them to the tool bar in your EditTemplate
***/
//{{{
merge(config.commands,{

	saveCloseTiddler: {
		text: 'done/close',
		tooltip: 'Save changes to this tiddler and close it',
		handler: function(e,src,title) {
			config.commands.saveTiddler.handler(e,src,title);
			config.commands.closeTiddler.handler(e,src,title);
			return false;
		}
	},

	cancelCloseTiddler: {
		text: 'cancel/close',
		tooltip: 'Undo changes to this tiddler and close it',
		handler: function(e,src,title) {
			config.commands.cancelTiddler.handler(e,src,title);
			config.commands.closeTiddler.handler(e,src,title);
			return false;
		}
	}

});

//}}}
/***
|Name:|SelectThemePlugin|
|Description:|Lets you easily switch theme and palette|
|Version:|1.0 ($Rev: 3646 $)|
|Date:|$Date: 2008-02-27 02:34:38 +1000 (Wed, 27 Feb 2008) $|
|Source:|http://mptw.tiddlyspot.com/#SelectThemePlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!Notes
* Borrows largely from ThemeSwitcherPlugin by Martin Budden http://www.martinswiki.com/#ThemeSwitcherPlugin
* Theme is cookie based. But set a default by setting config.options.txtTheme in MptwConfigPlugin (for example)
* Palette is not cookie based. It actually overwrites your ColorPalette tiddler when you select a palette, so beware. 
!Usage
* {{{<<selectTheme>>}}} makes a dropdown selector
* {{{<<selectPalette>>}}} makes a dropdown selector
* {{{<<applyTheme>>}}} applies the current tiddler as a theme
* {{{<<applyPalette>>}}} applies the current tiddler as a palette
* {{{<<applyTheme TiddlerName>>}}} applies TiddlerName as a theme
* {{{<<applyPalette TiddlerName>>}}} applies TiddlerName as a palette
***/
//{{{

config.macros.selectTheme = {
	label: {
      		selectTheme:"select theme",
      		selectPalette:"select palette"
	},
	prompt: {
		selectTheme:"Select the current theme",
		selectPalette:"Select the current palette"
	},
	tags: {
		selectTheme:'systemTheme',
		selectPalette:'systemPalette'
	}
};

config.macros.selectTheme.handler = function(place,macroName)
{
	var btn = createTiddlyButton(place,this.label[macroName],this.prompt[macroName],this.onClick);
	// want to handle palettes and themes with same code. use mode attribute to distinguish
	btn.setAttribute('mode',macroName);
};

config.macros.selectTheme.onClick = function(ev)
{
	var e = ev ? ev : window.event;
	var popup = Popup.create(this);
	var mode = this.getAttribute('mode');
	var tiddlers = store.getTaggedTiddlers(config.macros.selectTheme.tags[mode]);
	// for default
	if (mode == "selectPalette") {
		var btn = createTiddlyButton(createTiddlyElement(popup,'li'),"(default)","default color palette",config.macros.selectTheme.onClickTheme);
		btn.setAttribute('theme',"(default)");
		btn.setAttribute('mode',mode);
	}
	for(var i=0; i<tiddlers.length; i++) {
		var t = tiddlers[i].title;
		var name = store.getTiddlerSlice(t,'Name');
		var desc = store.getTiddlerSlice(t,'Description');
		var btn = createTiddlyButton(createTiddlyElement(popup,'li'),name ? name : title,desc ? desc : config.macros.selectTheme.label['mode'],config.macros.selectTheme.onClickTheme);
		btn.setAttribute('theme',t);
		btn.setAttribute('mode',mode);
	}
	Popup.show();
	return stopEvent(e);
};

config.macros.selectTheme.onClickTheme = function(ev)
{
	var mode = this.getAttribute('mode');
	var theme = this.getAttribute('theme');
	if (mode == 'selectTheme')
		story.switchTheme(theme);
	else // selectPalette
		config.macros.selectTheme.updatePalette(theme);
	return false;
};

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

config.macros.applyTheme = {
	label: "apply",
	prompt: "apply this theme or palette" // i'm lazy
};

config.macros.applyTheme.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
	var useTiddler = params[0] ? params[0] : tiddler.title;
	var btn = createTiddlyButton(place,this.label,this.prompt,config.macros.selectTheme.onClickTheme);
	btn.setAttribute('theme',useTiddler);
	btn.setAttribute('mode',macroName=="applyTheme"?"selectTheme":"selectPalette"); // a bit untidy here
}

config.macros.selectPalette = config.macros.selectTheme;
config.macros.applyPalette = config.macros.applyTheme;

config.macros.refreshAll = { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
	createTiddlyButton(place,"refresh","refresh layout and styles",function() { refreshAll(); });
}};

//}}}
a place to share my ideas and thoughts of a Gospel World
Jon Spadino's Public Web Notebook
/***
|''Name:''|SparklinePlugin|
|''Description:''|Sparklines macro|
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};

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

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


}
//}}}
<<allTags excludeLists>>
<<tabs txtMoreTab "Tags" "All Tags" TabAllTags "Miss" "Missing tiddlers" TabMoreMissing "Orph" "Orphaned tiddlers" TabMoreOrphans "Shad" "Shadowed tiddlers" TabMoreShadowed>>
<<allTags excludeLists [a-z]>>
Click on the links below to go to topics and groups that I find particularly interesting.

I HAVE A DREAM -- http://jonspadino.tiddlyspot.com/#%5B%5BI%20have%20a%20dream%5D%5D
The Centrality of the Gospel( Tim Keller ) -- http://jonspadino.tiddlyspot.com/#%5B%5BThe%20Centrality%20of%20the%20Gospel%5D%5D
Why is keeping the Gospel Central so important ( Jon Spadino ) -- http://jonspadino.tiddlyspot.com/#%5B%5BWhy%20is%20Keeping%20the%20Gospel%20Central%20so%20important%5D%5D
Martin Luther -- http://jonspadino.tiddlyspot.com/#Luther
Why is vision important -- http://jonspadino.tiddlyspot.com/#%5B%5BWhy%20is%20Vision%20Important%5D%5D
Gods Law and Gods Love -- http://jonspadino.tiddlyspot.com/#%5B%5BGods%20Law%20and%20Gods%20Love%5D%5D
Trust, Forgiveness, and Love -- http://jonspadino.tiddlyspot.com/#%5B%5BTrust%2C%20Forgiveness%2C%20Love%20and%20Love%20Languages%5D%5D
NO FEAR BABY -- http://jonspadino.tiddlyspot.com/#%5B%5BNo%20Fear%20Baby%5D%5D
Why nis religion part of the problem (Jon Spadino) -- http://jonspadino.tiddlyspot.com/#%5B%5BWhy%20is%20religion%20part%20of%20the%20problem%5D%5D
/***
|Name:|TagglyTaggingPlugin|
|Description:|tagglyTagging macro is a replacement for the builtin tagging macro in your ViewTemplate|
|Version:|3.1 ($Rev: 3932 $)|
|Date:|$Date: 2008-03-13 22:48:26 +1000 (Thu, 13 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#TagglyTaggingPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!Notes
See http://mptw.tiddlyspot.com/#TagglyTagging
***/
//{{{
config.taggly = {

	// for translations
	lingo: {
		labels: {
			asc:        "\u2191", // down arrow
			desc:       "\u2193", // up arrow
			title:      "title",
			modified:   "modified",
			created:    "created",
			show:       "+",
			hide:       "-",
			normal:     "normal",
			group:      "group",
			commas:     "commas",
			sitemap:    "sitemap",
			numCols:    "cols\u00b1", // plus minus sign
			label:      "Tagged as '%0':",
			excerpts:   "excerpts",
			descr:      "descr",
			slices:     "slices",
			contents:   "contents",
			sliders:    "sliders",
			noexcerpts: "title only"
		},

		tooltips: {
			title:    "Click to sort by title",
			modified: "Click to sort by modified date",
			created:  "Click to sort by created date",
			show:     "Click to show tagging list",
			hide:     "Click to hide tagging list",
			normal:   "Click to show a normal ungrouped list",
			group:    "Click to show list grouped by tag",
			sitemap:  "Click to show a sitemap style list",
			commas:   "Click to show a comma separated list",
			numCols:  "Click to change number of columns",
			excerpts: "Click to show excerpts",
			descr:    "Click to show the description slice",
			slices:    "Click to show all slices",
			contents: "Click to show entire tiddler contents",
			sliders:  "Click to show tiddler contents in sliders",
			noexcerpts: "Click to show entire title only"
		}
	},

	config: {
		showTaggingCounts: true,
		listOpts: {
			// the first one will be the default
			sortBy:     ["title","modified","created"],
			sortOrder:  ["asc","desc"],
			hideState:  ["show","hide"],
			listMode:   ["normal","group","sitemap","commas"],
			numCols:    ["1","2","3","4","5","6"],
			excerpts:   ["noexcerpts","excerpts","descr","slices","contents","sliders"]
		},
		valuePrefix: "taggly.",
		excludeTags: ["excludeLists","excludeTagging"],
		excerptSize: 50,
		excerptMarker: "/%"+"%/"
	},

	getTagglyOpt: function(title,opt) {
		var val = store.getValue(title,this.config.valuePrefix+opt);
		return val ? val : this.config.listOpts[opt][0];
	},

	setTagglyOpt: function(title,opt,value) {
		if (!store.tiddlerExists(title))
			// create it silently
			store.saveTiddler(title,title,config.views.editor.defaultText.format([title]),config.options.txtUserName,new Date(),null);
		// if value is default then remove it to save space
		return store.setValue(title,
			this.config.valuePrefix+opt,
			value == this.config.listOpts[opt][0] ? null : value);
	},

	getNextValue: function(title,opt) {
		var current = this.getTagglyOpt(title,opt);
		var pos = this.config.listOpts[opt].indexOf(current);
		// a little usability enhancement. actually it doesn't work right for grouped or sitemap
		var limit = (opt == "numCols" ? store.getTaggedTiddlers(title).length : this.config.listOpts[opt].length);
		var newPos = (pos + 1) % limit;
		return this.config.listOpts[opt][newPos];
	},

	toggleTagglyOpt: function(title,opt) {
		var newVal = this.getNextValue(title,opt);
		this.setTagglyOpt(title,opt,newVal);
	}, 

	createListControl: function(place,title,type) {
		var lingo = config.taggly.lingo;
		var label;
		var tooltip;
		var onclick;

		if ((type == "title" || type == "modified" || type == "created")) {
			// "special" controls. a little tricky. derived from sortOrder and sortBy
			label = lingo.labels[type];
			tooltip = lingo.tooltips[type];

			if (this.getTagglyOpt(title,"sortBy") == type) {
				label += lingo.labels[this.getTagglyOpt(title,"sortOrder")];
				onclick = function() {
					config.taggly.toggleTagglyOpt(title,"sortOrder");
					return false;
				}
			}
			else {
				onclick = function() {
					config.taggly.setTagglyOpt(title,"sortBy",type);
					config.taggly.setTagglyOpt(title,"sortOrder",config.taggly.config.listOpts.sortOrder[0]);
					return false;
				}
			}
		}
		else {
			// "regular" controls, nice and simple
			label = lingo.labels[type == "numCols" ? type : this.getNextValue(title,type)];
			tooltip = lingo.tooltips[type == "numCols" ? type : this.getNextValue(title,type)];
			onclick = function() {
				config.taggly.toggleTagglyOpt(title,type);
				return false;
			}
		}

		// hide button because commas don't have columns
		if (!(this.getTagglyOpt(title,"listMode") == "commas" && type == "numCols"))
			createTiddlyButton(place,label,tooltip,onclick,type == "hideState" ? "hidebutton" : "button");
	},

	makeColumns: function(orig,numCols) {
		var listSize = orig.length;
		var colSize = listSize/numCols;
		var remainder = listSize % numCols;

		var upperColsize = colSize;
		var lowerColsize = colSize;

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

		var output = [];
		var c = 0;
		for (var j=0;j<numCols;j++) {
			var singleCol = [];
			var thisSize = j < remainder ? upperColsize : lowerColsize;
			for (var i=0;i<thisSize;i++) 
				singleCol.push(orig[c++]);
			output.push(singleCol);
		}

		return output;
	},

	drawTable: function(place,columns,theClass) {
		var newTable = createTiddlyElement(place,"table",null,theClass);
		var newTbody = createTiddlyElement(newTable,"tbody");
		var newTr = createTiddlyElement(newTbody,"tr");
		for (var j=0;j<columns.length;j++) {
			var colOutput = "";
			for (var i=0;i<columns[j].length;i++) 
				colOutput += columns[j][i];
			var newTd = createTiddlyElement(newTr,"td",null,"tagglyTagging"); // todo should not need this class
			wikify(colOutput,newTd);
		}
		return newTable;
	},

	createTagglyList: function(place,title) {
		switch(this.getTagglyOpt(title,"listMode")) {
			case "group":  return this.createTagglyListGrouped(place,title); break;
			case "normal": return this.createTagglyListNormal(place,title,false); break;
			case "commas": return this.createTagglyListNormal(place,title,true); break;
			case "sitemap":return this.createTagglyListSiteMap(place,title); break;
		}
	},

	getTaggingCount: function(title) {
		// thanks to Doug Edmunds
		if (this.config.showTaggingCounts) {
			var tagCount = store.getTaggedTiddlers(title).length;
			if (tagCount > 0)
				return " ("+tagCount+")";
		}
		return "";
	},

	getExcerpt: function(inTiddlerTitle,title,indent) {
		if (!indent)
			indent = 1;

		var displayMode = this.getTagglyOpt(inTiddlerTitle,"excerpts");
		var t = store.getTiddler(title);

		if (t && displayMode == "excerpts") {
			var text = t.text.replace(/\n/," ");
			var marker = text.indexOf(this.config.excerptMarker);
			if (marker != -1) {
				return " {{excerpt{<nowiki>" + text.substr(0,marker) + "</nowiki>}}}";
			}
			else if (text.length < this.config.excerptSize) {
				return " {{excerpt{<nowiki>" + t.text + "</nowiki>}}}";
			}
			else {
				return " {{excerpt{<nowiki>" + t.text.substr(0,this.config.excerptSize) + "..." + "</nowiki>}}}";
			}
		}
		else if (t && displayMode == "contents") {
			return "\n{{contents indent"+indent+"{\n" + t.text + "\n}}}";
		}
		else if (t && displayMode == "sliders") {
			return "<slider slide>\n{{contents{\n" + t.text + "\n}}}\n</slider>";
		}
		else if (t && displayMode == "descr") {
			var descr = store.getTiddlerSlice(title,'Description');
			return descr ? " {{excerpt{" + descr  + "}}}" : "";
		}
		else if (t && displayMode == "slices") {
			var result = "";
			var slices = store.calcAllSlices(title);
			for (var s in slices)
				result += "|%0|<nowiki>%1</nowiki>|\n".format([s,slices[s]]);
			return result ? "\n{{excerpt excerptIndent{\n" + result  + "}}}" : "";
		}
		return "";
	},

	notHidden: function(t,inTiddler) {
		if (typeof t == "string") 
			t = store.getTiddler(t);
		return (!t || !t.tags.containsAny(this.config.excludeTags) ||
				(inTiddler && this.config.excludeTags.contains(inTiddler)));
	},

	// this is for normal and commas mode
	createTagglyListNormal: function(place,title,useCommas) {

		var list = store.getTaggedTiddlers(title,this.getTagglyOpt(title,"sortBy"));

		if (this.getTagglyOpt(title,"sortOrder") == "desc")
			list = list.reverse();

		var output = [];
		var first = true;
		for (var i=0;i<list.length;i++) {
			if (this.notHidden(list[i],title)) {
				var countString = this.getTaggingCount(list[i].title);
				var excerpt = this.getExcerpt(title,list[i].title);
				if (useCommas)
					output.push((first ? "" : ", ") + "[[" + list[i].title + "]]" + countString + excerpt);
				else
					output.push("*[[" + list[i].title + "]]" + countString + excerpt + "\n");

				first = false;
			}
		}

		return this.drawTable(place,
			this.makeColumns(output,useCommas ? 1 : parseInt(this.getTagglyOpt(title,"numCols"))),
			useCommas ? "commas" : "normal");
	},

	// this is for the "grouped" mode
	createTagglyListGrouped: function(place,title) {
		var sortBy = this.getTagglyOpt(title,"sortBy");
		var sortOrder = this.getTagglyOpt(title,"sortOrder");

		var list = store.getTaggedTiddlers(title,sortBy);

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

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

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

				if (list[i].tags[j] != title) { // not this tiddler

					if (this.notHidden(list[i].tags[j],title)) {

						if (!allTagsHolder[list[i].tags[j]])
							allTagsHolder[list[i].tags[j]] = "";

						if (this.notHidden(list[i],title)) {
							allTagsHolder[list[i].tags[j]] += "**[["+list[i].title+"]]"
										+ this.getTaggingCount(list[i].title) + this.getExcerpt(title,list[i].title) + "\n";

							leftOvers.setItem(list[i].title,-1); // remove from leftovers. at the end it will contain the leftovers

						}
					}
				}
			}
		}

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

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

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

		var leftOverOutput = "";
		for (var i=0;i<leftOvers.length;i++)
			if (this.notHidden(leftOvers[i],title))
				leftOverOutput += "*[["+leftOvers[i]+"]]" + this.getTaggingCount(leftOvers[i]) + this.getExcerpt(title,leftOvers[i]) + "\n";

		var output = [];

		if (sortOrder == "desc")
			allTags.reverse();
		else if (leftOverOutput != "")
			// leftovers first...
			output.push(leftOverOutput);

		for (var i=0;i<allTags.length;i++)
			if (allTagsHolder[allTags[i]] != "")
				output.push("*[["+allTags[i]+"]]" + this.getTaggingCount(allTags[i]) + this.getExcerpt(title,allTags[i]) + "\n" + allTagsHolder[allTags[i]]);

		if (sortOrder == "desc" && leftOverOutput != "")
			// leftovers last...
			output.push(leftOverOutput);

		return this.drawTable(place,
				this.makeColumns(output,parseInt(this.getTagglyOpt(title,"numCols"))),
				"grouped");

	},

	// used to build site map
	treeTraverse: function(title,depth,sortBy,sortOrder) {

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

		var indent = "";
		for (var j=0;j<depth;j++)
			indent += "*"

		var childOutput = "";
		for (var i=0;i<list.length;i++)
			if (list[i].title != title)
				if (this.notHidden(list[i].title,this.config.inTiddler))
					childOutput += this.treeTraverse(list[i].title,depth+1,sortBy,sortOrder);

		if (depth == 0)
			return childOutput;
		else
			return indent + "[["+title+"]]" + this.getTaggingCount(title) + this.getExcerpt(this.config.inTiddler,title,depth) + "\n" + childOutput;
	},

	// this if for the site map mode
	createTagglyListSiteMap: function(place,title) {
		this.config.inTiddler = title; // nasty. should pass it in to traverse probably
		var output = this.treeTraverse(title,0,this.getTagglyOpt(title,"sortBy"),this.getTagglyOpt(title,"sortOrder"));
		return this.drawTable(place,
				this.makeColumns(output.split(/(?=^\*\[)/m),parseInt(this.getTagglyOpt(title,"numCols"))), // regexp magic
				"sitemap"
				);
	},

	macros: {
		tagglyTagging: {
			handler: function (place,macroName,params,wikifier,paramString,tiddler) {
				var refreshContainer = createTiddlyElement(place,"div");
				// do some refresh magic to make it keep the list fresh - thanks Saq
				refreshContainer.setAttribute("refresh","macro");
				refreshContainer.setAttribute("macroName",macroName);
        			refreshContainer.setAttribute("title",tiddler.title);
				this.refresh(refreshContainer);
			},

			refresh: function(place) {
				var title = place.getAttribute("title");
				removeChildren(place);
				if (store.getTaggedTiddlers(title).length > 0) {
					var lingo = config.taggly.lingo;
					config.taggly.createListControl(place,title,"hideState");
					if (config.taggly.getTagglyOpt(title,"hideState") == "show") {
						createTiddlyElement(place,"span",null,"tagglyLabel",lingo.labels.label.format([title]));
						config.taggly.createListControl(place,title,"title");
						config.taggly.createListControl(place,title,"modified");
						config.taggly.createListControl(place,title,"created");
						config.taggly.createListControl(place,title,"listMode");
						config.taggly.createListControl(place,title,"excerpts");
						config.taggly.createListControl(place,title,"numCols");
						config.taggly.createTagglyList(place,title);
					}
				}
			}
		}
	},

	// todo fix these up a bit
	styles: [
"/*{{{*/",
"/* created by TagglyTaggingPlugin */",
".tagglyTagging { padding-top:0.5em; }",
".tagglyTagging li.listTitle { display:none; }",
".tagglyTagging ul {",
"	margin-top:0px; padding-top:0.5em; padding-left:2em;",
"	margin-bottom:0px; padding-bottom:0px;",
"}",
".tagglyTagging { vertical-align: top; margin:0px; padding:0px; }",
".tagglyTagging table { margin:0px; padding:0px; }",
".tagglyTagging .button { visibility:hidden; margin-left:3px; margin-right:3px; }",
".tagglyTagging .button, .tagglyTagging .hidebutton {",
"	color:[[ColorPalette::TertiaryLight]]; font-size:90%;",
"	border:0px; padding-left:0.3em;padding-right:0.3em;",
"}",
".tagglyTagging .button:hover, .hidebutton:hover, ",
".tagglyTagging .button:active, .hidebutton:active  {",
"	border:0px; background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]];",
"}",
".selected .tagglyTagging .button { visibility:visible; }",
".tagglyTagging .hidebutton { color:[[ColorPalette::Background]]; }",
".selected .tagglyTagging .hidebutton { color:[[ColorPalette::TertiaryLight]] }",
".tagglyLabel { color:[[ColorPalette::TertiaryMid]]; font-size:90%; }",
".tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }",
".tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}",
".tagglyTagging ul ul li {margin-left:0.5em; }",
".editLabel { font-size:90%; padding-top:0.5em; }",
".tagglyTagging .commas { padding-left:1.8em; }",
"/* not technically tagglytagging but will put them here anyway */",
".tagglyTagged li.listTitle { display:none; }",
".tagglyTagged li { display: inline; font-size:90%; }",
".tagglyTagged ul { margin:0px; padding:0px; }",
".excerpt { color:[[ColorPalette::TertiaryDark]]; }",
".excerptIndent { margin-left:4em; }",
"div.tagglyTagging table,",
"div.tagglyTagging table tr,",
"td.tagglyTagging",
" {border-style:none!important; }",
".tagglyTagging .contents { border-bottom:2px solid [[ColorPalette::TertiaryPale]]; padding:0 1em 1em 0.5em;",
"  margin-bottom:0.5em; }",
".tagglyTagging .indent1  { margin-left:3em;  }",
".tagglyTagging .indent2  { margin-left:4em;  }",
".tagglyTagging .indent3  { margin-left:5em;  }",
".tagglyTagging .indent4  { margin-left:6em;  }",
".tagglyTagging .indent5  { margin-left:7em;  }",
".tagglyTagging .indent6  { margin-left:8em;  }",
".tagglyTagging .indent7  { margin-left:9em;  }",
".tagglyTagging .indent8  { margin-left:10em; }",
".tagglyTagging .indent9  { margin-left:11em; }",
".tagglyTagging .indent10 { margin-left:12em; }",
"/*}}}*/",
		""].join("\n"),

	init: function() {
		merge(config.macros,this.macros);
		config.shadowTiddlers["TagglyTaggingStyles"] = this.styles;
		store.addNotification("TagglyTaggingStyles",refreshStyles);
	}
};

config.taggly.init();

//}}}

/***
InlineSlidersPlugin
By Saq Imtiaz
http://tw.lewcid.org/sandbox/#InlineSlidersPlugin

// syntax adjusted to not clash with NestedSlidersPlugin
// added + syntax to start open instead of closed

***/
//{{{
config.formatters.unshift( {
	name: "inlinesliders",
	// match: "\\+\\+\\+\\+|\\<slider",
	match: "\\<slider",
	// lookaheadRegExp: /(?:\+\+\+\+|<slider) (.*?)(?:>?)\n((?:.|\n)*?)\n(?:====|<\/slider>)/mg,
	lookaheadRegExp: /(?:<slider)(\+?) (.*?)(?:>)\n((?:.|\n)*?)\n(?:<\/slider>)/mg,
	handler: function(w) {
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart ) {
			var btn = createTiddlyButton(w.output,lookaheadMatch[2] + " "+"\u00BB",lookaheadMatch[2],this.onClickSlider,"button sliderButton");
			var panel = createTiddlyElement(w.output,"div",null,"sliderPanel");
			panel.style.display = (lookaheadMatch[1] == '+' ? "block" : "none");
			wikify(lookaheadMatch[3],panel);
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
   },
   onClickSlider : function(e) {
		if(!e) var e = window.event;
		var n = this.nextSibling;
		n.style.display = (n.style.display=="none") ? "block" : "none";
		return false;
	}
});

//}}}
Here is the complete article regarding the Centrality of the Gospel from Tim Keller. Tim Keller speaks to both my heart and
my head. This guy really understand a "Theology of the Cross" and has a deep understanding of Christ's atoning
sacrifice. The summary is at the top and the bottom of the article.

Summary

All problems, personal or social come from a failure to use the gospel in a radical way, to get "in line with the truth of
the gospel" (Gal.2:14). All pathologies in the church and all its ineffectiveness comes from a failure to use the gospel in
a radical way. We believe that if the gospel is expounded and applied in its fullness in any church, that church will look
very unique. People will find both moral conviction yet compassion and flexibility. For example, gays are used to being
"bashed" and hated or completely accepted. They never see anything else. The cultural elites of either liberal or
conservative sides are alike in their unwillingness to befriend or live with or respect or worship with the poor. They are
alike in separating themselves increasingly from the rest of society



“The Centrality of the Gospel”
By Tim Keller
Part 1—Principle, Implication, and Applications
Principle
In Galatians 2:14, Paul lays down a powerful principle. He deals with Peter’s racial pride and cowardice by declaring that
he was not living “in line with the truth of the gospel”. From this we see that the Christian life is a process of renewing
every dimension of our life- spiritual, psychological, corporate, social by thinking, hoping, and living out the “lines” or
ramifications of the gospel. The gospel is to be applied to every area of thinking, feeling, relating, working, and behaving.
The implications and applications of Galatians 2:14 are vast.
Implications

Implication #1 - The power of the gospel. First, Paul is showing us that that bringing the gospel truth to bear on every
area of life is the way to be changed by the power of God. The gospel is described in the Bible in the most astounding
terms. Angels long to look into it all the time. (I Peter 1:12). It does not simply bring us power, but it is the power of God
itself, for Paul says "I am not ashamed of the gospel, for it is the power of God for salvation" (Rom.1:16). It is also the
blessing of God with benefits, which accrue to anyone who comes near (I Cor.9:23). It is even called the very light of the
glory of God itself "they cannot see the light of the gospel of the glory of Christ...for God...has made his light shine into
our hearts to give us the light of the knowledge of the glory of God in the face of Jesus Christ." (II Cor.4:4,6)
It has the life of God. Paul said to the Corinthians, "I gave you birth through the gospel"! And then, after it has
regenerated us, it is the instrument of all continual growth and spiritual progress after we are converted. "All over the world
this gospel is bearing fruit and growing, just as it has been doing among you since the day you heard it and understood
God's grace in all its truth." (Col. 1:6). Here we learn: 1) That the gospel is a living thing (cf. Romans 1:16) which is like a
seed or a tree that brings more and more new life bearing fruit and growing. 2) That the gospel is only "planted" in us so
as to bear fruit as we understand its greatness and implications deeply—understood God's grace in all its truth. 3) That
the gospel continues to grow in us and renew us throughout our lives-as it has been doing since the day you heard it.
This text helps us avoid either an exclusively rationalistic or mystical approach to renewal. On the one hand, the gospel
has a content-it is profound doctrine. It is truth, and specifically, it is the truth about God's grace. But on the other hand,
this truth is a living power that continually expands its influence in our lives, just as a crop or a tree would grow and spread
and dominate more and more of an area with roots and fruit.

Implication #2- The sufficiency of the gospel. Second, Paul is showing that we never “get beyond the gospel” in our
Christian life to something more “advanced”. The gospel is not the first “step” in a “stairway” of truths, rather, it is more like
the “hub” in a “wheel” of truth. The gospel is not just the A-B-C’s but the A to Z of Christianity. The gospel is not just the
minimum required doctrine necessary to enter the kingdom, but the way we make all progress in the kingdom.
We are not justified by the gospel and then sanctified by obedience, but the gospel is the way we grow (Gal.3:1-
3) and are renewed (Col.1:6). It is the solution to each problem, the key to each closed door, the power through every
barrier (Rom.1:16-17). It is very common in the church to think as follows. "The gospel is for non-Christians. One needs it
to be saved. But once saved, you grow through hard work and obedience." But Col.1:6 shows that this is a mistake. Both
confession and "hard work" that is not arising from and "in line" with the gospel will not sanctify you-it will strangle you. All
our problems come from a failure to apply the gospel. Thus when Paul left the Ephesians he committed them "to the word
of his grace, which can build you up" (Acts 20:32)

The main problem, then, in the Christian life is that we have not thought out the deep implications of the gospel,
we have not “used” the gospel in and on all parts of our life. Richard Lovelace says that most people’s problems are just
a failure to be oriented to the gospel-a failure to grasp and believe it through and through. Luther says, "The truth of the
Gospel is the principle article of all Christian doctrine....Most necessary is it that we know this article well, teach it to
others, and beat it into their heads continually." (on Gal.2:14f) The gospel is not easily comprehended. Paul says that the
gospel only does its renewing work in us as we understand it in all its truth. All of us, to some degree live around the truth
of the gospel but do not "get" it. So the key to continual and deeper spiritual renewal and revival is the continual rediscovery
of the gospel. A stage of renewal is always the discovery of a new implication or application of the gospel-
seeing more of its truth. This is true for either an individual or a church.
Applications

The two “thieves” of the gospel. Since Paul uses a metaphor for being “in line” with the gospel, we can consider that
gospel renewal occurs when we keep from walking “off-line” either to the right or to the left. The key for thinking out the
implications of the gospel is to consider the gospel a “third” way between two mistaken opposites. However, before we
start we must realize that the gospel is not a halfway compromise between the two poles-it does not produce “something
in the middle”, but something different from both. The gospel
critiques both religion and irreligion (Matt.21:31; 22:10).
Tertullian said, "Just as Christ was crucified between two thieves, so this doctrine of justification is ever crucified
between two opposite errors." Tertullian meant that there were two basic false ways of thinking, each of which "steals" the
power and the distinctiveness of the gospel from us by pulling us “off the gospel line” to one side or the other. These two
errors are very powerful, because they represent the natural tendency of the human heart and mind. (The gospel is
“revealed” by God (Rom.1:17)-the unaided human mind cannot conceive it.) These “thieves” can be called moralism or
legalism on the one hand, and hedonism or relativism on the other hand. Another way to put it is: the gospel opposes both
religion and irreligion. On the one hand, "moralism/religion" stresses truth without grace, for it says that we must obey the
truth in order to be saved. On the other hand, "relativists/irreligion" stresses grace without truth, for they say that we are all
accepted by God (if there is a God) and we have to decide what is true for us. But "truth" without grace is not really truth,
and "grace" without truth is not really grace. Jesus was "full of grace and truth". Any religion or philosophy of life that deemphasizes
or lose one or the other of these truths, falls into legalism or into license and either way, the joy and power
and "release" of the gospel is stolen by one thief or the other.
"I am more sinful and flawed than I ever dared believe" (vs. antinomianism)
"I am more accepted and loved than I ever dared hope" (vs. legalism)

The moralism-religion thief. How does moralism/religion steal joy and power? Moralism is the view that you are
acceptable (to God, the world, others, yourself) through your attainments. (Moralists do not have to be religious, but often
are.) When they are, their religion if pretty conservative and filled with rules. Sometimes moralists have views of God as
very holy and just. This view will lead either to a) self-hatred (because you can't live up to the standards), or b) selfinflation
(because you think you have lived up to the standards). It is ironic to realize that inferiority and superiority
complexes have the very same root. Whether the moralist ends up smug and superior or crushed and guilty just depends
on how high the standards are and on a person's natural advantages (such as family, intelligence, looks, willpower).
Moralistic people can be deeply religious-but there is no transforming joy or power.
The relativism-irreligion thief. How does relativism steal joy and power? Relativists are usually irreligious, or else
prefer what is called "liberal" religion. On the surface, they are more happy and tolerant than moralist/religious people.
Though they may be highly idealistic in some areas (such as politics), they believe that everyone needs to determine what
is right and wrong for them. They are not convinced that God is just and must punish sinners. Their beliefs in God will tend
to see Him as loving or as an impersonal force. They may talk a great deal about God's love, but since they do not think of
themselves as sinners, God's love for us costs him nothing. If God accepts us, it is because he is so welcoming, or
because we are not so bad. The concept of God's love in the gospel is far more rich and deep and electrifying.
What do both religious and irreligious people have in common? They seem so different, but from the viewpoint of
the gospel, they are really the same.

• They are both ways to avoid Jesus as Savior and keep control of their lives. Irreligious people seek to be their
own saviors and lords through irreligion, "worldly" pride. ("No one tells me how to live or what to do, so I determine
what is right and wrong for me!") But moral and religious people seek to be their own saviors and lords through religion,
"religious" pride. ("I am more moral and spiritual than other people, so God owes me to listen to my prayers and take
me to heaven. God cannot let just anything happen to me-he owes me a happy life. I’ve earned it!") The irreligious
person rejects Jesus entirely, but the religious person only uses Jesus as an example and helper and teacher-but not
as a Savior. (Flannery O'Connor wrote that religious people think "that the way to avoid Jesus was to avoid sin...")
These are two different ways to do the same thing-control our own lives. (Note: Ironically, Moralists, despite all the
emphasis on traditional standards, are in the end self-centered and individualistic, because they have set themselves
up as their own Savior. Relativists, despite all their emphasis on freedom and acceptance, are in the end moralistic
because they still have to attain and live up to (their own) standards or become desperate. And often, they take great
pride in their own open-mindedness and judge others who are not.)

• They are both based on distorted views of the real God. The irreligious person loses sight of the law and holiness
of God and the religious person loses sight of the love and grace of God, in the end they both lose the gospel entirely.
For the gospel is that on the cross Jesus fulfilled the law of God out of love for us. Without a full understanding of the
work of Christ, the reality of God’s holiness will make his grace unreal, or the reality of his love will make his holiness
unreal. Only the gospel-that we are so sinful that we need to be saved utterly by grace—allows a person to see God
as he really is. The gospel shows us a God far more holy than the legalist can bear (he had to die because we could
not satisfy his holy demands) and yet far more merciful than a humanist can conceive (he had to die because he loved
us).

• They both deny our sin-so lose the joy and power of grace. It is obvious that relativistic, irreligious people deny the
depth of sin, and therefore the message “God loves you” has no power for them. But though religious persons may be
extremely penitent and sorry for their sins, they see sins as simply the failure to live up to standards by which they are
saving themselves. They do not see sin as the deeper self-righteousness and self-centeredness through which they
are trying to live lives independent of God. So when they go to Jesus for forgiveness, they only as a way to "cover over
the gaps" in their project of self-salvation. And when people say, "I know God is forgiving, but I cannot forgive myself",
they mean that they reject God's grace and insist that they be worthy of his favor. So even religious people with “low
self-esteem” are really in their funk because they will not see the depth of sin. They see it only as rules breaking, not as
rebellion and self-salvation.

A whole new way of seeing God. But Christians are those who have adopted a whole new system of approach to God.
They may have had both religious phases and irreligious phases in their lives. But they have come to see that their entire
reason for both their irreligion and their religion was essentially the same and essentially wrong! Christians come to see
that both their sins and their best deeds have all really been ways of avoiding Jesus as savior. They come to see that
Christianity is not fundamentally an invitation to get more religious. A Christian comes to say: "though I have often failed to
obey the moral law, the deeper problem was why I was trying to obey it! Even my efforts to obey it has been just a way of
seeking to be my own savior. In that mindset, even if I obey or ask for forgiveness, I am really resisting the gospel and
setting myself up as Savior." To "get the gospel" is turn from self-justification and rely on Jesus' record for a relationship
with God. The irreligious don't repent at all, and the religious only repent of sins. But Christians also repent of their
righteousness. That is the distinction between the three groups-Christian, moralists (religious), and pragmatists
(irreligious).

Summary. Without a knowledge of our extreme sin, the payment of the cross seems trivial and does not electrify or
transform. But without a knowledge of Christ's completely satisfying life and death, the knowledge of sin would crush us or
move us to deny and repress it. Take away either the knowledge of sin or the knowledge of grace and people's lives not
changed. They will be crushed by the moral law or run from it angrily. So the gospel is not that we go from being
irreligious to being religious, but that we realize that our reasons for both our religiosity and our irreligiosity were
essentially the same and essentially wrong. We were seeking to be our own Saviors and thereby keep control of our own
life. When we trust in Christ as our Redeemer, we turn from trusting either self-determination or self-denial for our
salvation-from either moralism or hedonism.

A Whole New Way of Seeing Life

Paul shows us, then, that we must not just simply ask in every area of life: “what is the moral way to act?” but “what is the
way that is in-line with the gospel?” The gospel must be continually “thought out” to keep us from moving into our habitual
moralistic or individualistic directions. We must bring everything into line with the gospel.
The example of racism. Since Paul used the gospel on racism, let’s use it as an example:
• The moralistic approach to race. Moralists/legalists would tend to be very proud of their culture. They would fall into
cultural imperialism. They would try to attach spiritual significance to their cultural styles, to make themselves feel
morally superior to other peoples. This happens because moralistic people are very insecure, since they look a lot at
the eternal law, and they know deep down that they cannot keep it. So they use cultural differences to buttress their
sense of righteousness.
• The relativistic/hedonist approach to race. But the opposite error from cultural imperialism would be cultural
relativism. This approach would say, “yes, traditional people were racists because they believed in absolute truth. But
truth is relative. Every culture is beautiful in itself. Every culture must be accepted on its own terms.”
• The gospel approach to race. Christians know that racism does not stem so much from a belief in truth, but from a
lack of belief in grace. The gospel leads us to be: a) on the one hand, somewhat critical of all cultures, including our
own (since there is truth), but b) on the other hand, we can feel morally superior to no one. After all, we are saved by
grace alone, and therefore a non-Christian neighbor may be more moral and wise than you. This gives the Christian a
radically different posture than either moralists or relativists. Note: Relativists (as we said above) are ultimately
moralistic. And therefore they can be respectful only of other people who believe everything is relative! But Christians
cannot feel morally superior to relativists.
The example of a physical handicap. Let’s come down from something sociological (racism) to something
psychological. Imagine that through disease or an accident, you lost your eyesight-you became blind. How would you
bring the gospel to bear on this pain and grief?
• The moralistic person will either a) despair, because the handicap takes away something which was his/her
“righteousness” or b) deny, refusing to admit the new permanent limitation.
• The hedonistic person will also either a) despair, because the handicap takes away their ability to live a pleasureoriented
life, or b) deny, because his/her philosophy cannot bear it.
• But the gospel will lead to a) resist the handicap, yet b) accept it too. Too much resistance is denial and too much
acceptance is despair. The gospel is real about both sin and grace, and thus can give the handicapped person the
same balance.)

Part 2 – The Key to Everything

We have seen that the gospel is the way that anything is renewed and transformed by Christ-whether a heart, a
relationship, a church, or a community. It is the key to all doctrine and our view of our lives in this world. Therefore, all our
problems come from a lack of orientation to the gospel. Put positively, the gospel transforms our hearts and thinking and
approaches to absolutely everything.

The Gospel and the Individual

Approach to discouragement. When a person is depressed, the moralist says, "you are breaking the rules-repent." On
the other hand, the relativist says, "you just need to love and accept yourself". But (assuming there is no physiological
base of the depression!) the gospel leads us to examine ourselves and say: "something in my life has become more
important than God, a pseudo-savior, a form of works-righteousness". The gospel leads us to repentance, but not to
merely setting our will against superficialities. It is without the gospel that superficialities will be addressed instead of the
heart. The moralist will work on behavior and the relativist will work on the emotions themselves.
Approach to the physical world. Some moralists are indifferent to the physical world-they see it as "unimportant",
while many others are downright afraid of physical pleasure. Since they are seeking to earn their salvation, they prefer to
focus on sins of the physical like sex and the other appetites. These are easier to avoid than sins of the spirit like pride.
Therefore, they prefer to see sins of the body as worse than other kinds. As a result, legalism usually leads to a distaste of
pleasure. On the other hand, the relativist is often a hedonist, someone who is controlled by pleasure, and who makes it
an idol. The gospel leads us to see that God has invented both body and soul and so will redeem both body and soul,
though under sin both body and soul are broken. Thus the gospel leads us to enjoy the physical (and to fight against
physical brokenness, such as sickness and poverty), yet to be moderate in our use of material things.
Approach to love relationships. Moralism often makes relationships into a "blame-game". This is because a moralist is
traumatized by criticism that is too severe, and maintains a self-image as a good person by blaming others. On the other
hand, moralism can use the procuring of love as the way to "earn our salvation" and convince ourselves we are worthy
persons. That often creates what is called "co-dependency"- a form of self-salvation through needing people or needing
people to need you (i.e. saving yourself by saving others). On the other hand, much relativism/liberalism reduces love to a
negotiated partnership for mutual benefit. You only relate as long as it is not costing you anything. So the choice (without
the gospel) is to selfishly use others or to selfishly let yourself be used by others. But the gospel leads us to do neither.
We do sacrifice and commit, but not out of a need to convince ourselves or others we are acceptable. So we can love the
person enough to confront, yet stay with the person when it does not benefit us.

Approach to suffering. Moralism takes the "Job's friends" approach, laying guilt on yourself. You simply assume: "I must
be bad to be suffering". Under the guilt, though, there is always anger toward God. Why? Because moralists believe that
God owes them. The whole point of moralism is to put God in one's debt. Because you have been so moral, you feel you
don't really deserve suffering. So moralism tears you up, for at one level you think, "what did I do to deserve this?" but on
another level you think, "I probably did everything to deserve this!" So, if the moralist suffers, he or she must either feel
mad at God (because I have been performing well) or mad at self (because I have not been performing well) or both. On
the other hand, relativism/pragmatism feels justified in avoiding suffering at all costs-lying, cheating, and broken promises
are OK. But when suffering does come, the pragmatist also lays the fault at God's doorstep, claiming that he must be
either unjust or impotent. But the cross shows us that God redeemed us through suffering. That he suffered not that we
might not suffer, but that in our suffering we could become like him. Since both the moralist and the pragmatist ignore the
cross in different ways, they will both be confused and devastated by suffering.

Approach to sexuality. The secularist/pragmatist sees sex as merely biological and physical appetite. The moralist
tends to see sex as dirty or at least a dangerous impulse that leads constantly to sin. But the gospel shows us that
sexuality is to reflect the self-giving of Christ. He gave himself completely without conditions. So we
are not to seek intimacy but hold back control of our lives. If we give ourselves sexually we are to give ourselves legally,
socially, personally-utterly. Sex only is to happened in a totally committed, permanent relationship of marriage.
Approach to one’s family. Moralism can make you a slave to parental expectations, while pragmatism sees no need for
family loyalty or the keeping of promises and covenants if they do not "meet my needs". The gospel frees you from
making parental approval an absolute or psychological salvation, pointing how God becomes the ultimate father. Then
you will neither be too dependent or too hostile to your parents.

Approach to self-control. Moralists tell us to control our passions out of fear of punishment. This is a volition-based
approach. Liberalism tells us to express ourselves and find out what is right for us. This is an emotion-based approach.
The gospel tells us that the free, unloseable grace of God "teaches" us to "say no" to our passions (Titus 2:13) if we listen
to it. This is a whole-person based approach, starting with the truth descending into the heart.
Approach to other races and cultures. The liberal approach is to relativize all cultures. ("We can all get along because
there is no truth".) The conservatives believe there is truth for evaluation of cultures, and so they choose some culture as
superior and then they idolize it, feeling superior to others in the impulse of self-justifying pride. The gospel leads us to be:
a) on the one hand, somewhat critical of all cultures, including our own (since there is truth), but b) on the other hand, we
are morally superior to no one. After all, we are saved by grace alone. Christians will exhibit both moral conviction yet
compassion and flexibility. For example, gays are used to being "bashed" and hated or completely accepted. They never
see anything else.

Approach to witness to non-Christians. The liberal/pragmatist approach is to deny the legitimacy of evangelism
altogether. The conservative/moralist person does believe in proselytizing, because "we are right and they are wrong".
Such proselytizing is almost always offensive. But the gospel produces a constellation of traits in us. First, we are
compelled to share the gospel out of generosity and love, not guilt. Second, we are freed from fear of being ridiculed or
hurt by others, since we already have the favor of God by grace. Third, there is a humility in our dealings with others,
because we know we are saved only by grace alone, not because of our superior insight or character. Fourth, we are
hopeful about anyone, even the "hard cases", because we were saved only because of grace, not because we were likely
people to be Christians. Fifth, we are courteous and careful with people. We don't have to push or coerce them, for it is
only God's grace that opens hearts, not our eloquence or persistence or even their openness. All these traits not only
create a winsome evangelist but an excellent neighbor in a multi-cultural society.

Approach to human authority. Moralists will tend to obey human authorities (family, tribe, government, cultural
customs) too much, since they rely so heavily on their self-image of being moral and decent. Pragmatists will either obey
human authority too much (since they have no higher authority by which they can judge their culture) or else too little
(since they may only obey when they know they won't get caught). That mean either authoritarianism or anarchy. But the
gospel gives you both a standard by which to oppose human authority (if it contradicts the gospel), but on the other hand,
gives you incentive to obey the civil authorities from the heart, even when you could get away with disobedience.
Approach to human dignity. Moralists often have a pretty low view of human nature-they mainly see human sin and
depravity. Pragmatists, on the other hand, have no good basis for treating people with dignity. Usually they have no
religious beliefs about what human beings are. (If they are just chance products of evolution, how do we know they are
more valuable than a rock?) But the gospel shows us that every human being is infinitely fallen (lost in sin) and infinitely
exalted (in the image of God). So we treat every human being as precious, yet dangerous!

Approach to guilt. When someone says, "I can't forgive myself", it means there is some standard or condition or person
that is more central to your identity than the grace of God. God is the only God who forgives-no other "god" will. If you
cannot forgive yourself, it is because you have failed your real God, your real righteousness, and it is holding you captive.
The moralist's false god is usually a God of their imagination which is holy and demanding but not gracious. The
pragmatist's false god is usually some achievement or relationship.
Approach to self-image. Without the gospel, your self-image is based upon living up to some standards-whether yours
or someone's imposed upon you. If you live up to those standards, you will be confident but not humble. If you don't live
up to them, you will be humble but not confident. Only in the gospel can you be both enormously bold and utterly sensitive
and humble. For you are both perfect and a sinner!

Approach to joy and humor. Moralism has to eat away at real joy and humor—because the system of legalism forces
you to take yourself (your image, your appearance, your reputation) very seriously. Pragmatism on the other hand will
tend toward cynicism as life goes on because of the inevitable cynicism that grows. This cynicism grows from a lack of
hope for the world. In the end, evil will triumph-there is no judgment or divine justice. But is we are saved by grace alone,
then the very fact of our being Christians is a constant source of amazed delight. There is nothing matter-of- fact about
our lives, no "of course" to our lives. It is a miracle we are Christians, and we have hope. So the gospel which creates
bold humility should give us a far deeper sense of humor. We don't have to take ourselves seriously, and we are full of
hope for
the world.

Approach to “right living.” Jonathan Edwards points out that "true virtue" is only possible for those who have
experienced the grace of the gospel. Any person who is trying to earn their salvation does "the right thing" in order to get
into heaven, or in order to better their self-esteem (etc.). In other words, the ultimate motive is self-interest. But persons
who know they are totally accepted already do "the right thing" out of sheer delight in righteousness for its own sake. Only
in the gospel do you obey God for God's sake, and not for what God will give you. Only in the gospel do you love people
for their sake (not yours), do good for its own sake (not yours), and obey God for his sake (not yours). Only the gospel
makes "doing the right thing" a joy and delight, not a burden or a means to an end.

The Gospel and the Church

Approach to ministry in the world. Legalism tends to place all the emphasis on the individual human soul. Legalistic
religion will insist on converting others to their faith and church, but will ignore social needs of the broader community. On
the other hand, "liberalism" will tend to emphasize only amelioration of social conditions and minimize the need for
repentance and conversion. The gospel leads to love which in turn moves us to give our neighbor whatever is needed-
conversion or a cup of cold water, evangelism and social concern.
Approach to worship. Moralism leads to a dour and somber worship which may be long on dignity but short on joy. A
shallow understanding of "acceptance" without a sense of God's holiness can lead to frothy or casual worship. (A sense of
neither God's love nor his holiness leads to a worship service that feels like a committee meeting.) But the gospel leads us
to see that God is both transcendent yet immanent. His immanence makes his transcendence comforting, while his
transcendence makes his immanence amazing. The gospel leads to both awe and intimacy in worship, for the Holy One is
now our Father.

Approach to the poor. The liberal/pragmatist tend to scorn the religion of the poor and see them as helpless victims
needing expertise. This is born out of a disbelief in God's common grace or special grace to all. Ironically, the secular
mindset also disbelieves in sin, and thus anyone who is poor must be oppressed, a helpless victim. The
conservative/moralists on the other hand tend to scorn the poor as failures and weaklings. They see them as somehow to
blame for their situation. But the gospel leads us to be: a) humble, without moral superiority knowing you were "spiritually
bankrupt" but saved by Christ's free generosity, and b) gracious, not worried too much about "deservingness", since you
didn't deserve Christ's grace, c) respectful of believing poor Christians as brothers and sisters from whom to learn. The
gospel alone can bring "knowledge workers" into a sense of humble respect for and solidarity with the poor.
Approach to doctrinal distinctives. The "already" of the New Testament means more boldness in proclamation. We
can most definitely be sure of the central doctrines that support the gospel. But, the "not yet" means charity and humility in
non-essentials beliefs. In other words, we must be moderate about what we teach except when it comes to the cross,
grace and sin. In our views, especially those that Christians cannot agree on, we must be less unbending and
triumphalistic ("believing we have arrived intellectually"). It also means that our discernment of God's call and his "will" for
us and other must not be propagated with overweening assurance that your insight cannot be wrong. Vs. pragmatism, we
must be willing to die for our belief in the gospel; vs. moralism, we must not fight to the death over every one of our
beliefs.

Approach to holiness. The "already" means we should not tolerate sin. The presence of the kingdom includes that we
are made "partakers of the divine nature" (II Pet. 1:3). The gospel brings us the confidence that anyone can be changed,
that any enslaving habit can be overcome. But the "not yet" our sin which remains in us and will never be eliminated until
the fullness of the kingdom comes in. So we must avoid pat answers, and we must not expect "quick fixes". Unlike the
moralists, we must be patient with slow growth or lapses and realize the complexity of change and growth in grace. Unlike
the pragmatists and cynics, we must insist that miraculous change is possible.
Approach to miracles. The "already" of the kingdom means power for miracles and healing is available. Jesus showed
the kingdom by healing the sick and raising the dead. But the "not yet" means nature (including us) is still subject to decay
(Rom.8:22-23) and thus sickness and death is still inevitable until the final consummation. We cannot expect miracles and
the elimination of suffering to be such a normal part of the Christian life that pain and suffering will be eliminated from the
lives of faithful people. Vs. moralists, we know that God can heal and do miracles. Vs. pragmatists, we do not aim to press
God into eliminating suffering.

Approach to church health. The "already" of the kingdom means that the church is the community now of kingdom
power. It therefore is capable of mightily transforming its community. Evangelism that adds "daily to the number of those
being saved" (Acts 2:47) is possible! Loving fellowship which "destroyed...the dividing wall of hostility"
between different races and classes is possible! But the "not yet" of sin means Jesus has not yet presented his bride, the
church "as a radiant church, without stain or wrinkle or any other blemish" (Eph.5:27). We must not then be harshly critical
of imperfect congregations, nor jump impatiently from church to church over perceived blemishes. Error will never be
completely eradicated from the church. The "not yet" means to avoid the overly severe use of church discipline and other
means to seek to bring about a perfect church today.

Approach to social change. We must not forget that Christ is even now ruling in a sense over history (Eph.1:22ff). The
"already" of grace means that Christians can expect to use God's power to change social conditions and communities. But
the "not yet" of sin means there will be "wars and rumors of wars". Selfishness, cruelty, terrorism, oppression will continue.
Christians harbor no illusions about politics nor expect utopian conditions. The "not yet" means that Christians will trust
any political or social agenda to bring about righteousness here on earth. So the gospel keeps us from the overpessimism
of fundamentalism (moralism) about social change, and also from the over-optimism of liberalism
(pragmatism).

Summary

All problems, personal or social come from a failure to use the gospel in a radical way, to get "in line with the truth of
the gospel" (Gal.2:14). All pathologies in the church and all its ineffectiveness comes from a failure to use the gospel in
a radical way. We believe that if the gospel is expounded and applied in its fullness in any church, that church will look
very unique. People will find both moral conviction yet compassion and flexibility. For example, gays are used to being
"bashed" and hated or completely accepted. They never see anything else. The cultural elites of either liberal or
conservative sides are alike in their unwillingness to befriend or live with or respect or worship with the poor. They are
alike in separating themselves increasingly from the rest of society
A basic insight of Martin Luther was that ‘religion’ is the basic default mode of the human heart. 1) Even professed secular and atheistic persons operate on the basis of it. That is, they set standards for themselves and build their self-value on achieving them. Though they’d never put it this way, they are working for their ‘salvation.’ And 2) even Christians who know the gospel in principle and who have been changed by it continually revert to it. The results of works-religion therefore stubbornly persist in us. Christians believe the gospel at one level but at deeper levels we continue to operate as if we are saved by our works. We continue to look to other things besides Jesus in order to feel we can stand before and face God. Though you are saved by believing the gospel—I am accepted thro Christ, therefore I obey—the deep default mode of every human heart is to go back to the principle of religion—I obey therefore I am accepted. Luther says that even after you are converted by the gospel your heart will go back to operating on the religious principle unless you deliberately, repeatedly set it to gospel-mode. This then is the basic cause of our spiritual failures, sins, uncontrolled emotions, fightings and conflict, lack of joy, and ministry ineffectiveness. Luther would say that the gospel is not just the ABC of the Christian life—but the A to Z of the Christian life. This is radical! You don’t believe the gospel to be saved and then move on to more advanced principles in order to grow. All of our personal problems and church problems come because we don’t come continually back to the gospel to work it in and live it out.

That is why M.Luther wrote, "The truth of the Gospel is the principle article of all Christian doctrine....Most necessary is it that we know this article well, teach it to others, and beat it into their heads continually." (Luther on Gal.2:14f). So you cannot change your heart just through will power, through moral reformation, through learning Biblical principles and trying to carry them out. Ultimately our hearts only truly changes as we use the gospel on them to change their basic ways of operating—to change the main things we put our heart’s greatest hopes in, the main things we find our heart’s deepest joy and glory in.
/***
|Name:|ToggleTagPlugin|
|Description:|Makes a checkbox which toggles a tag in a tiddler|
|Version:|3.0.1 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#ToggleTagPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!Usage
{{{<<toggleTag }}}//{{{TagName TiddlerName LabelText}}}//{{{>>}}}
* TagName - the tag to be toggled, default value "checked"
* TiddlerName - the tiddler to toggle the tag in, default value the current tiddler
* LabelText - the text (gets wikified) to put next to the check box, default value is '{{{[[TagName]]}}}' or '{{{[[TagName]] [[TiddlerName]]}}}'
(If a parameter is '.' then the default will be used)
!!Examples
|Code|Description|Example|h
|{{{<<toggleTag>>}}}|Toggles the default tag (checked) in this tiddler|<<toggleTag>>|
|{{{<<toggleTag TagName>>}}}|Toggles the TagName tag in this tiddler|<<toggleTag TagName>>|
|{{{<<toggleTag TagName TiddlerName>>}}}|Toggles the TagName tag in the TiddlerName tiddler|<<toggleTag TagName TiddlerName>>|
|{{{<<toggleTag TagName TiddlerName 'click me'>>}}}|Same but with custom label|<<toggleTag TagName TiddlerName 'click me'>>|
|{{{<<toggleTag . . 'click me'>>}}}|dot means use default value|<<toggleTag . . 'click me'>>|
!!Notes
* If TiddlerName doesn't exist it will be silently created
* Set label to '-' to specify no label
* See also http://mgtd-alpha.tiddlyspot.com/#ToggleTag2
!!Known issues
* Doesn't smoothly handle the case where you toggle a tag in a tiddler that is current open for editing
* Should convert to use named params
***/
//{{{

merge(config.macros,{

	toggleTag: {

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

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			var tag   = (params[0] && params[0] != '.') ? params[0] : "checked";
			var title = (params[1] && params[1] != '.') ? params[1] : tiddler.title;
			var label = (params[2] && params[2] != '.') ? params[2] : defaultLabel;
			var defaultLabel = (title == tiddler.title ? this.shortLabel : this.longLabel);
			label = (label == '-' ? '' : label);
			var theTiddler = (title == tiddler.title ? tiddler : store.getTiddler(title));
			var cb = createTiddlyCheckbox(place, label.format([tag,title]), theTiddler && theTiddler.isTagged(tag), function(e) {
				if (!store.tiddlerExists(title)) {
					if (config.macros.toggleTag.createIfRequired) {
						var content = store.getTiddlerText(title); // just in case it's a shadow
						store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);
					}
					else 
						return false;
				}
				store.setTiddlerTag(title,this.checked,tag);
				return true;
			});
		}
	}
});

//}}}
Paul in Romans 12 shows us another way to think of resentment and forgiveness. He says, "Leave room for the wrath of God, for it is written: 'vengeance is mine...says the Lord" v.19. What *we are being reminded is that all resentment and vengeance is taking on God's role as judge. It is playing God. But (1) only God is qualified to be judge (we are imperfect and deserve judgment ourselves) and (2) only God knows enough to be judge (we don't know all about the offender, what he/she has faced and deserves) and (3) Jesus took the judgment of God. So Paul is saying: "Think this! Either these persons you are angry at will repent some day and Jesus will take their judgment, or they will not and God will deal with it. But in either process, you are not involved." "Pride won't allow forgiveness; forgiveness won't allow pride".  If you cannot forgive, it is because you are sure that you are not as sinful as the person you are mad at.

Anyhow that last sentence is the one that hit me between the eyes. I was watching a movie (Maid in Manhatten)  the other night where  a person said he thought she (Jay-lo) was sitting on a pedestal judging other people being so sure they were judging her. Give it some thought!  While I have no doubt that some people have judged me or have avoided me or been cold to me in overt and/or subtle ways, I realized that I need to always forgive on a deep level. I think I have.

Document is here ----> 
http://spadinofamily.files.wordpress.com/2008/04/lovelovelanguage.pdf
/***
Contains the stuff you need to use Tiddlyspot
Note you must also have UploadPlugin installed
***/
//{{{

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

// 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 Guides|http://tiddlywikiguides.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/]], [[announcements|http://announce.tiddlyspot.com/]], [[blog|http://tiddlyspot.com/blog/]], 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 |
| 14/04/2008 11:16:57 | Jon Spadino | [[/|http://jonspadino.tiddlyspot.com/]] | [[store.cgi|http://jonspadino.tiddlyspot.com/store.cgi]] | . | [[index.html | http://jonspadino.tiddlyspot.com/index.html]] | . | ok |
| 14/04/2008 11:17:57 | Jon Spadino | [[/|http://jonspadino.tiddlyspot.com/]] | [[store.cgi|http://jonspadino.tiddlyspot.com/store.cgi]] | . | [[index.html | http://jonspadino.tiddlyspot.com/index.html]] | . |
| 17/04/2008 14:44:03 | YourName | [[/|http://jonspadino.tiddlyspot.com/]] | [[store.cgi|http://jonspadino.tiddlyspot.com/store.cgi]] | . | [[index.html | http://jonspadino.tiddlyspot.com/index.html]] | . |
| 18/04/2008 09:33:44 | Jon Spadino | [[/|http://jonspadino.tiddlyspot.com/#%5B%5BWhy%20is%20religion%20part%20of%20the%20problem%5D%5D]] | [[store.cgi|http://jonspadino.tiddlyspot.com/store.cgi]] | . | [[index.html | http://jonspadino.tiddlyspot.com/index.html]] | . | ok |
| 18/04/2008 09:34:28 | Jon Spadino | [[/|http://jonspadino.tiddlyspot.com/#%5B%5BWhy%20is%20religion%20part%20of%20the%20problem%5D%5D]] | [[store.cgi|http://jonspadino.tiddlyspot.com/store.cgi]] | . | [[index.html | http://jonspadino.tiddlyspot.com/index.html]] | . |
| 23/04/2008 09:57:52 | Jon Spadino | [[/|http://jonspadino.tiddlyspot.com/]] | [[store.cgi|http://jonspadino.tiddlyspot.com/store.cgi]] | . | [[index.html | http://jonspadino.tiddlyspot.com/index.html]] | . | failed |
| 23/04/2008 09:58:09 | Jon Spadino | [[/|http://jonspadino.tiddlyspot.com/]] | [[store.cgi|http://jonspadino.tiddlyspot.com/store.cgi]] | . | [[index.html | http://jonspadino.tiddlyspot.com/index.html]] | . |
| 23/04/2008 13:57:29 | Jon Spadino | [[/|http://jonspadino.tiddlyspot.com/#Luther]] | [[store.cgi|http://jonspadino.tiddlyspot.com/store.cgi]] | . | [[index.html | http://jonspadino.tiddlyspot.com/index.html]] | . | ok |
| 23/04/2008 13:57:55 | Jon Spadino | [[/|http://jonspadino.tiddlyspot.com/#Luther]] | [[store.cgi|http://jonspadino.tiddlyspot.com/store.cgi]] | . | [[index.html | http://jonspadino.tiddlyspot.com/index.html]] | . | ok |
| 23/04/2008 13:58:35 | Jon Spadino | [[/|http://jonspadino.tiddlyspot.com/#Luther]] | [[store.cgi|http://jonspadino.tiddlyspot.com/store.cgi]] | . | [[index.html | http://jonspadino.tiddlyspot.com/index.html]] | . |
/***
|''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"
	});
*/
//}}}

/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.0|
|''Date:''|May 5, 2007|
|''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 (#3125)|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 0,
	date: new Date("May 5, 2007"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0 (#3125)'
};

//
// 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
		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}
				
			]);
	},
	refreshOptions: function(listWrapper) {
		var uploadOpts = [
			"txtUploadUserName",
			"pasUploadPassword",
			"txtUploadStoreUrl",
			"txtUploadDir",
			"txtUploadFilename",
			"txtUploadBackupDir",
			"chkUploadLog",
			"txtUploadLogMaxLine",
			]
		var opts = [];
		for(i=0; i<uploadOpts.length; i++) {
			var opt = {};
			opts.push()
			opt.option = "";
			n = uploadOpts[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 = 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,null,null,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 = Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
		bidix.upload.httpUpload(rssUploadParams,convertUnicodeToUTF8(generateRss()),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 == httpStatus.NotFound)
			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; 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');


/* don't want this for tiddlyspot sites

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

*/


//}}}
The Vision Statement of Jon Spadino:

To have an intimate relationship with Jesus Christ and to be characterized by emotional and spiritual transparency that overflows to my relationship with Sue, my children, and all people I know. To reach out to people that may consider themselves marginalized, overlooked, or alone in life. To seek out these people and re-remind them "where the bread is" and that our only source of love, hope, and salvation can be found in Christ alone.

Life Verse: Isaiah 61:7
Instead of their shame
my people will receive a double portion,
and instead of disgrace
they will rejoice in their inheritance;
and so they will inherit a double portion in their land,
and everlasting joy will be theirs.

My Mission Statement:

In regards to spiritual matters

1. To passionately be a person that externalizes Gods love (extends it to others) and also internalizes Gods life changing Love to me through the person of Jesus Christ.
2. To passionately pursue the priorities of Jesus Christ by keeping Christ and the Gospel message central to ALL my thinking.
3. To live my life in an EXPRESSIVE, christ-centered, love-filled, spirit-led way where I take personal risks in my relationships with my wife, family, and friends.


In regards to Family and others:

1. Passionately pursue a relationship with my wife. This means spiritually, mentally, emotionally, recreationally, and sexually. To make transparency and spiritual and emotional intimacy a priority in my relationship with Sue.
2. To have the strength of my relationship with my wife overflow to the relationship with my children.
3. Work on intimately sharing my emotions with my wife and other men. Ultimately to be the same person I am internally through Christ that that I am externally. The same person privately that I am publically.
4. To manage my family with the flexibility, joy, freedom, boldness, and playfullness of a real Christ-Centered lover. Be an avid fan and encourager of my wife and daughters.


In regards to personal matters:

1. To pursue transparency and de-compartmentalizing my life so that nothing is hidden in my behavior or talk. To guard against self-pity and to take every thought captive to Christ.
2. To pursue good health in exercise and eating. To use walking, hiking, biking, and motorcycling as sources of health and recreation.
3. To be seen as a skilled, dedicated, and enthusiastic employee.
In recent years I have been working hard at understanding my core and to not deviate far from it. In essence to try to remain in the sweetspot of Gods word. The sweetspot to me is the Gospel message. If we don't keep that clearly in our sites we can eventually use scripture to damage  relationships as we claim obedience or attempted obedience in some judgemental way. 

I want to expand on some personal reasons why I believe we as Christians need to "Keep the main thing the main thing" and continually beat the gospel message about Christ into our heads. We need to re-remind each other of the Gospel message continuously. Martin Luther says, "The truth of the Gospel is the principle article of all Christian doctrine....Most necessary is it that we know this article well, teach it to others, and beat it into their heads continually." (on Gal.2:14f) The gospel is not easily comprehended.

What I have seen [and participated in] is that as sinners we can twist anything and everything, including scripture, in idolotrous ways and suck life out of it for ourselves. People can spend years in Bible Study and still not be closer to Christ and understand the Gospel message any better than they did previously. We have a tendency to use scripture fore getting over bumps in life as opposed to drawing into more intimate relationships with God and the important people around us.  

Without the Gospel true intimacy to God, Christ, and each other is impossible. We can not achieve the intimate relationships we were designed by God to have without the Gospel message. Without the gospel, we will feel the need to portray some level of worthiness or holiness around each other. We cant discuss our true limitations, our shortcomings, our sins as we put on a "mask" of obedience or attempted obedience on. True obedience requires a deep understanding or our sin and an intimacy and vulnerability that only comes from needing a Savior. Without this ground leveling concept of mans total depravity we just CANT achieve intimacy with God, our spouses, or other sinners.

Also, if we find our self-worth in external behaviors, we eventually lose the boldness and braveness to reach out to each other and to take risks emotionally with each other in loving ways as our spouse and friends eventually see through the masks of artificiality we put on each morning. We will portray our relationships, kids, etc as more perfect than they really are and build up a net of lies to each other. Real "gospel" transformation without intimacy and trust is impossible and eventually becomes focused on external results and behavior only.

The "Problem is not the problem". We all have different histories, insecurities, and emotions. We have not walked in each others shoes. We sin "yes", we are selfish yes. But we yearn for a close, intimate, trust with Christ and each other. IF we focus on the externals, "the problem", without transparently sharing our emotions, aspirations we will ultimately destroy what we once had. If we share our intimate issues and especially our feelings and emotions in a tranparent, deeper way with other men and with our spouses and if our spouse can not focus on the externals then the problem is not quite as daunting. Eventually a deeper, more intimate trust than the "external behavior" based trust is built. Hopefully this trust will last forever. All of this is built on the idea that the external behavior is not the problem. If fact, focusing on the externals gets IN THE WAY of true intimacy, it gets in the way of resolving sin since its not getting to the "HEART" of where the deeper problem lies. IF we focus on the externals then we are doomed to a pattern of judgement, hypocrisy, and pharisiism (yes the pharisee that lives in all of us). We learn to not share our feelings since we CANT really share them without being condemned by the other person. Intimacy and trust will always be ultimately destroyed in a world focussed on externals.

We tend to focus on the problem .... but a wise person once told me "THE PROBLEM IS NOT THE PROBLEM". As a matter of fact, focusing on the problem only tightens the power of the noose around our necks in dealing with the problem. As we focus on the problem, the problem becomes more entrenched in our lives. Dealing with the underlying emotions  is the problem and sharing those in a transparent way is essential to maintaining intimacy with God and others. Anyhow read my Vision Statement and you will understand me more.

True intimacy does not put on a face or our "Sunday best" and it attempts to have an intimate inner relationship as opposed to focusing on externals. It comes with heartfelt communication. Quite often people or spouses have beaten the ability of their partner or friend to confess their weaknesses to each other as we attempt to speak to them in Christian-ese. We become too impatient to allow Gods life changing relationship through Jesus Christ transform us from the inside out. Instead we try to transform each other from the outside in. In doing so intimacy and trust in our relationship is damaged and broken and it becomes almost impossible to reclaim as we persist in this superficial area for too long. We lose the capacity for intimacy quite often as we attempt to grow as a Christian when we focus on external moral behavior.  With this type of deeper intimacy comes deep trust as well. As people we tend to see trust as if you do this behavior then I trust and if you do that behavior then I distrust you. However, gospel trust, begins with an understanding that we are more sinful than we cared to ever admit. If we actually believe that then intimacy is really about sharing our emotional frailty as humans. if we can share this frailty on a deeply emotional level than we can develop a trust much deeper than the one based on performance and the right behavior. This vulnerable openness is the beginning of a "trust" relationship with God and the people around us. It is the starting  {and maybe the ending} point of our sanctification.  A much deeper intimacy with each other comes after we have fallen and after we realize how great our need is for a savior and how great our need is for transparent, deep, emotional and spiritual intimacy. 

The problem we have as Christians is we try to make obedience the main product of the Christian walk. It it not the product of the Christian walk it is a by-product of the Christian walk.  In my real life experiences (long story here) I believe Christians who lead or EASILY throw out the words "obedience" and "truth" do not fully grasp the Gospel message. We  tend to show how highly insecure and very unsure we are of our relationship with Christ and the the people around us when we use language like this all the time.  The focus we have on externals will destroy our relationships eventually  or at best ONLY maintain the relationship we have with others.  We  will never get to deep "intimacy" in Christ or with people around us.  I don't say this in a judging way, I say this in a way that I hope causes  people reading this to reflect on the purpose and core of why they desire to be a Christian.   If we can avoid focussing on externals (being a moralist) we can be patient with slow growth or lapses and realize the complexity of change and growth in grace.

“The Bible’s purpose is not so much to show you how to live a good life. The Bible’s purpose is to show you how God’s grace breaks into your life against your will and saves you from the sin and brokenness otherwise you would never be able to overcome… religion is ‘if you obey, then you will be accepted’. But the Gospel is, ‘if you are absolutely accepted, and sure you’re accepted, only then will you ever begin to obey’. Those are two utterly different things. Every page of the Bible shows the difference.” — Tim Keller Again

The Gospel path to intimacy is not the path of least resistant approach. It means we share deeply the things hurting and we try deeply to understand the hurts of others. We don't rashly and quickly jump to the ideas of external based Christianity where we quickly and easily place ourselves over and above others. We realize that how you feel is separate from what you do. To deal with the problem you do not deal with the external problem but you intimately discuss the inner workings of your emotions and how it works with you in light of your history.   This intimacy requires relational work! 

The gospel gives you  freedom to handle the wrong things that you will do. You won’t have to deny, spin, or repress the truth about yourself. Only with the support of hearing Jesus say, “You are capable of terrible things, but I am absolutely, unconditionally committed to you,” will you be able to be honest with yourself.

A continual re-discovery of the gospel in our Christian walk is absolutely necessary for intimacy and transparency with Christ and transparency and intimacy with Christ is necessary for real transformation.  A continual re-discovery of the gospel in our Christian walk is absolutely necessary for intimacy and transparency with each other and transparency and intimacy with each other is necessary for real transformed relationships.

Martin Luther once said the following: "The principal point of the law is to make men not better but worse, But by the knowledge of their sin they may be humbled, terrified, bruised, and broken ... and by this means they may be driven by Grace so to come to Christ". Scott Sauls said in a sermon once "That we will never hunger for Christs beauty until we have seen the filth of our own vain efforts to make ourselves beautiful" . Both of these are great summary sentences cause by reflecting on scripture and validly good attempts to understand scripture through the eyes of Christ.

The Gospel is not the beginning of our Christian walk it IS the entirety of the Christian walk!  Lets keep the Gospel message of Jesus Christ in focus!
I just finished a a mens study where we discussed the importance of vision.  I gave this a lot of thought and finally completed one that I though fit me that did not have too many far reaching or aloof goals.  The reason I believe vision is important to keep in our focus is that as Humans  have the insane ability to understand a lot but  to somehow get it all wrong.  We can go do a bible study and then use the new set of rules to become a new cage that we are trapped in.  We can even use those new rules against each other or to somehow make us look like we are better others -- and be judging others. Maybe even drive these people further away from Christ.  We use the word "truth" in a way that says I have more truth than you.

Somehow we always get it wrong.  By having a vision statement and keeping it squarely in front of me I hope to avoid as much of this as I can. By sharing it with my wife, I hope to avoid making some set of rules a future cage of ideas. 

My wife and I were going to do "Love and Respect" at one point. I asked to not do it yet since I dont want some set of rules to become a new cage of ideas.  I think maybe now we can go back and do "love and respect" but a focus on the fundamentals and vision I think is important at some point in everyones life.

I also believe the manner that we interpret scripture is important. The only true method should be interpret scripture through the Gospel  lessons. By doing this we are interpreting scripture through the eyes of Christ. My opinion... take it or leave it.  

Someone in our Church once sang a song called the letters in red. The idea is that we need to give a "heavy" weight to the Gospel message and the times surrounding Christ (Acts, Romans, Pauline books).  We need to interpret scripture through the eyes of Christ. The further we deviate from this the closer we come to using scripture to destroy other Christians or placing ourselves as the judge and jury of the world.  This judgement of others will eventually destroy the intimacies we desire.


Vision allows us to keep the main things the main things. I encourage you to make a vision statement for yourself.  Make Christ and the Gospel the center of this vision.
I know in many circles we often simplify scripture in mans Way and Gods way. However, a closer look at scripture shows us 3 ways.

1. The moralistic religious approach (pharisiism, legalism)
2. The irreligious approach (I'll do it my way, Antinomiansm)
3. The Gospel approach which says we are all absolute sinners and all absolutely loved by Christ.

Problems with #1.

The problem with #1 has is it has subtle slippery slope that we often don't even realize is occuring in our lives. Religion and/or religious attitudes are often part of the problem in todays world.

Let me describe this slippery slope.

First, Religious people believe they have the truth which often leads to a sense of superiority over having that truth.
Second, it leads to a separation. Since you have the truth and there are so many people out there without this same truth you dont want to hang out with these non-truth bearing people.
Third, It leads to a simplified caricaturization of all non truth bearing people. Since you dont know them they become one dimensional.
Fourth, the 3 above things lead to a passive or active repression of all non-truth bearing people and you dont give them the same regard.

If Christians really take a hard look ourselves we would all realize that the above attitudes are a big part of the problem in todays world. Its my contention that Jesus Christ did not partake in ANY of the above four attitudes thereby leading to the approach of Jesus Christ which I call the "Gospel" approach.

Problems with #2 are usually easily understood so I wont cover them here.

Why is #3 (THE GOSPEL APPROACH) so important.
Christians typically have one of two narratives running through their lives. One is the moral/works righteosness narrative. The other is the Grace narrative. Martin Luther who did everything in his power to be the best monk he could but struggled with feelings of insecurity found great solace in Romans 1:16-17 where it says that in the Gospel a righteoussness is revealed and it is righteousness that is by faith from first to last. He then realized that any righteouness is not what he gives to God but rather all righteousness is a GIFT from God through Jesus Christ. He finally was able to relax and he found a deep joy by finding his identity DEEPLY in Christ (emphasis on Deeply).

Anxiety, insecurity, inability to take Criticism, racial pride, feelings of superiority all come from a moral performance theme running in our lives. It comes from looking to something besides Jesus Christ as your actual righteousness.

In scripture it says that in our weaknesses we find strength. The Gospel approach allows us to discuss our sins in a open, vulnerable way and not shove them in the closet. By doing so we have the possiblity of escaping from those sins and find strength in Jesus Christ.

The moral approach forces Christians to take their sin underground and to use the white knuckle method of escaping sin. This white knuckle method seldom works and even tightens the stranglehold of sin in our lives.

Lets rest in Jesus Christ as our savior so we can find strength in overcoming our weaknesses.