Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>

</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>

<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>

</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>

<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->

<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>

<!--}}}-->
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser

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

<<option txtUserName>>
<<option chkSaveBackups>> SaveBackups

<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations

----
Also see AdvancedOptions
<<importTiddlers>>
/*{{{*/

// may be required for mikes comments plugi
//window.saveChanges = function(){};

setStylesheet(
	"label {width:8em; float:left; text-align:right; width:9em; font-size:1.1em; padding:3px;  height:1.5em: top:-20px; margin: 0px -2px 0 0;}"+ 
//	"div.wizardFooter {padding-left:0em}"+ 
	"div.wizardStep > input {display:fixed; padding:3px; margin-bottom:5px; margin-top:0px; margin-right:0px}",
'labelStyles');




config.backstageTasks.remove("upgrade");
config.backstageTasks.remove("save");
config.backstageTasks.remove("sync");


//  ccAutoSave config//

config.options.chkAutoSave = true;

if(!config.extensions) { config.extensions = {}; } //# obsolete from v2.4.2
config.extensions.ServerSideSavingPlugin = {
	adaptor: config.adaptors.cctiddly
};


window.ccTiddlyVersion = '1.8.2';
window.workspacePermission= {};
window.url = "http://mdlalose.com/recipes";
window.url= 'http://mdlalose.com/recipes/';
window.workspace = "";
window.fullUrl = window.url;	
window.useModRewrite = 1;
//if (config.options.txtTheme == "")
//config.options.txtTheme = 'purpleTheme';
workspacePermission.upload = 1;workspacePermission.anonC = 0 ;
workspacePermission.anonR = 1; 
workspacePermission.anonU = 0;
workspacePermission.anonD = 0;

workspacePermission.userC = 1 ;
workspacePermission.userR = 1; 
workspacePermission.userU = 1;
workspacePermission.userD = 0;
workspacePermission.canCreateWorkspace = 1;


window.workspace_delete = "A";
window.workspace_udate = "A";

var serverside={
	url:"http://mdlalose.com/recipes",		//server url, for use in local TW or TW hosted elsewhere
	workspace:"",
	queryString:"",
	debug:0,		//debug mode, display alert box for each action
	passwordTime:0,		//defines how long password variable store in cookie. 0 = indefinite
	messageDuration:5000,				//displayMessage autoclose duration (in milliseconds), 0=leave open
	loggedIn:0,
	can_create_account:"1",
	openId:"1"
};

config.defaultCustomFields = {"server.host":window.url, "server.type":"cctiddly", "server.workspace":window.workspace};
config.shadowTiddlers.OptionsPanel = "[[help|Help]] <br />[[settings|AdvancedOptions]]<br /><<ccOptions>>";

readOnly =false;
config.options.chkHttpReadOnly = false;		//make it HTTP writable by default
config.options.chkSaveBackups = false;		//disable save backup
//config.options.chkAutoSave = true;			//disable autosave
config.options.chkUsePreForStorage = false;

/*}}}*/
powerpapepowerpape
config.backstageTasks.push("about");
merge(config.tasks,{about:{text: config.macros.ccAbout.buttonBackstageText,tooltip: config.macros.ccAbout.buttonBackstageTooltip,content: '<<ccAbout>>'}});

if (isLoggedIn()){
	config.backstageTasks.push("logout");
	merge(config.tasks,{logout:{text: config.macros.ccLogin.buttonLogout,tooltip: config.macros.ccLogin.buttonLogoutToolTip,content: '<<ccLogin>>'}});

//	config.backstageTasks.push("create");
//	merge(config.tasks,{create: {text: config.macros.ccCreateWorkspace.buttonCreateText, tooltip: config.macros.ccCreateWorkspace.buttonCreateTooltip, content:'<<ccCreateWorkspace>>'}});

}else{
	config.backstageTasks.push("login");
	merge(config.tasks,{login:{text: config.macros.ccLogin.buttonlogin,tooltip: config.macros.ccLogin.buttonLoginToolTip,content: '\r\n\r\n<<tiddler Login>>'}});	
}

// ccFile //


//{{{
	
config.macros.ccFile = {};
var iFrameLoad=function(w){
	var uploadIframe = document.getElementById('uploadIframe');
	var a = createTiddlyElement(null, "div");
	a.innerHTML = uploadIframe.contentDocument.body.innerHTML;
	removeChildren(w.formElem.placeholder);
	w.formElem.placeholder.parentNode.appendChild(a);
	var statusArea = w.formElem.placeholder;
	document.getElementById("ccfile").value=""; 
};

config.macros.ccFile.handler=function(place,macroName,params,wikifier,paramString,tiddler, errorMsg){
	var w = new Wizard();
	w.createWizard(place,config.macros.ccFile.wizardTitleText);
	config.macros.ccFile.refresh(w);
};

config.macros.ccFile.refresh=function(w){
	params = {};
	params.w = w;
	params.e = this;
	var me = config.macros.ccFile;
	doHttp('GET',url+'/handle/listFiles.php?workspace='+workspace,'',null,null,null,config.macros.ccFile.listAllCallback,params);
	w.setButtons([
		{caption: me.buttonDeleteText, tooltip: me.buttonDeleteTooltip, onClick: function(w){ 
			config.macros.ccFile.delFileSubmit(null, params);
			 return false;
		}}, 
		{caption: me.buttonUploadText, tooltip: me.buttonUploadTooltip, onClick: function(e){ 
			config.macros.ccFile.addFileDisplay(null, params); return false 
			} }
	]);
};

config.macros.ccFile.delFileSubmit=function(e, params) {
	var listView = params.w.getValue("listView");
	var rowNames = ListView.getSelectedRows(listView);
	for(var e=0; e < rowNames.length; e++) 
	doHttp('POST',url+'/handle/listFiles.php','action=DELETEFILE&file='+rowNames[e]+'&workspace='+workspace,null,null,null,config.macros.ccFile.delFileCallback,params);
	return false; 
};

config.macros.ccFile.delFileCallback=function(status,params,responseText,uri,xhr){
	config.macros.ccFile.refresh(params.w);
};

config.macros.ccFile.addFileDisplay = function(e, params){
	var frm = params.w.formElem;
	if(navigator.appName=="Microsoft Internet Explorer"){
		encType = frm.getAttributeNode("enctype");
	    encType.value = "multipart/form-data";
	}
	frm.setAttribute("enctype","multipart/form-data");
	frm.setAttribute("method","POST");
	frm.action=window.url+"/handle/upload.php"; 
	frm.id="ccUpload";
	frm.target="uploadIframe";
	frm.name = "uploadForm";
	frm.parentNode.appendChild(frm);
	params.w.addStep("ss", "<input id='ccfile' class='input' type='file' name='userFile'/>"+"<input type='hidden' name='placeholder'/>");
	var workspaceName=createTiddlyElement(null,'input','workspaceName','workspaceName');				
	workspaceName .setAttribute('name','workspace');
	workspaceName.type="HIDDEN";
	workspaceName.value=workspace;
	frm.appendChild(workspaceName);
	createTiddlyElement(frm,'br');
	var saveTo=createTiddlyElement(null,"input","saveTo","saveTo");	
	var iframe=document.createElement("iframe");
	iframe.style.display="none";
	iframe.id='uploadIframe';
	iframe.name='uploadIframe';
	iframe.onload = function() {
		iFrameLoad(params.w);
	}	
	frm.appendChild(iframe);
	createTiddlyElement(frm,"div",'uploadStatus');
	params.w.setButtons([
	{caption: config.macros.ccFile.buttonCancelText, tooltip: config.macros.ccFile.buttonCancelTooltip, onClick: function(){config.macros.ccFile.refresh(params.w);}
	},
	{caption: config.macros.ccFile.buttonUploadText, tooltip: config.macros.ccFile.buttonUploadTooltip, onClick: function(){params.w.formElem.submit();}
	}]);
};

function addOption(selectbox,text,value ){
	var optn = document.createElement("OPTION");
	optn.text = text;
	optn.value = value;
	selectbox.options.add(optn);
}

config.macros.ccFileImageBox = function(image){
	var full = image.src;
	setStylesheet(
	"#errorBox .button {padding:0.5em 1em; border:1px solid #222; background-color:#ccc; color:black; margin-right:1em;}\n"+
	"html > body > #backstageCloak {height:"+window.innerHeight*2+"px;}"+
	"#errorBox {border:1px solid #ccc;background-color: #fff; color:#111;padding:1em 2em; z-index:9999;}",'errorBoxStyles');
	var box = document.getElementById('errorBox') || createTiddlyElement(document.body,'div','errorBox');
	box.innerHTML =  "<a style='float:right' href='javascript:onclick=ccTiddlyAdaptor.hideError()'>"+ccTiddlyAdaptor.errorClose+"</a><h3>"+image.src+"</h3><br />";
	box.style.position = 'absolute';
	box.style.width= "800px";
	var img = createTiddlyElement(box, "img");
	img.src = full;
	ccTiddlyAdaptor.center(box);
	ccTiddlyAdaptor.showCloak();
}

config.macros.ccFile.listAllCallback = function(status,params,responseText,uri,xhr){
	var me = config.macros.ccFile;
	var out = "";
	var adminUsers = [];
	if(xhr.status!=200){
		params.w.addStep(me.errorPermissionDeniedTitle, me.errorPermissionDeniedView);
		return true;
	}
	try{
		var a = eval(responseText);
		for(var e=0; e < a.length; e++){ 		
		out += a[e].username;	
			adminUsers.push({
				htmlName: "<html><a href='"+a[e].url+"' target='new'>"+a[e].filename+"</a></html>",
				name: a[e].filename,
				wikiText:'<html><img onclick="config.macros.ccFileImageBox(this)"; src="'+a[e].url+'" style="width: 70px; "/></html>',
				URI:a[e].url,
				lastVisit:a[e].lastVisit,
				fileSize:a[e].fileSize
			});
		}
	}catch (ex){
		params.w.setButtons([
			{caption: me.buttonUploadText, tooltip: me.buttonUploadTooltip, onClick: function(w){				
				config.macros.ccFile.addFileDisplay(e, params);
			} }]);
	}
	params.w.addStep(me.wizardStepText+workspace, "<input type='hidden' name='markList'></input>");
	var markList = params.w.getElement("markList");
	var listWrapper = document.createElement("div");
	markList.parentNode.insertBefore(listWrapper,markList);
	var listView = ListView.create(listWrapper,adminUsers,config.macros.ccFile.listAdminTemplate);
	//params.w.setValue("listAdminView",listAdminView);
	params.w.setValue("listView",listView);
};

config.macros.ccFile.addFileCallback = function(status,params,responseText,uri,xhr){	
	config.macros.ccFile.refresh(params.w);
};

//}}}
/*
// Displays the default tiddlers alongside the login box when users are not logged in.
window.restart = function(){
	story.displayDefaultTiddlers();
	invokeParamifier(params,"onstart");
	window.scrollTo(0,0); 
	});
};
*/
//{{{
	
//  ccAbout //
config.macros.ccAbout={};

config.macros.ccAbout.handler=function(place,macroName,params,wikifier,paramString,tiddler,errorMsg){
	var w = new Wizard();
	var me = config.macros.ccAbout;
	w.createWizard(place,me.stepAboutTitle);
	w.addStep(null, me.stepAboutTextStart + window.ccTiddlyVersion + "<br /><br />" + me.stepAboutTextEnd);
};
//}}}





// Allows users to change the default tiddlers for anonymous users by setting the AnonDefaultTiddlers tiddler.

// also requires overide of restart. 

Story.prototype.displayDefaultTiddlers = function(){
 	var tiddlers="";
	if(isLoggedIn()){        
		var url = window.location;        
		url = url.toString();        
		var bits = url.split('#');        
		if(bits.length == 1){            
			tiddlers = store.filterTiddlers(store.getTiddlerText("DefaultTiddlers"));            
			story.displayTiddlers(null, tiddlers);
		}
	}else{         
		tiddlers=store.filterTiddlers(store.getTiddlerText("AnonDefaultTiddlers"));        
		story.displayTiddlers(null, tiddlers);   
	}    
};
// ccLogin //

//{{{

config.macros.ccLogin={sha1:true};
	
function isLoggedIn() {
	if(window.loggedIn)
	 	return true;
	else 
		return false;
}

config.macros.saveChanges.handler=function(place,macroName,params,wikifier,paramString,tiddler){
	if(isLoggedIn()){
		createTiddlyButton(place, config.macros.ccLogin.buttonLogout, config.macros.ccLogin.buttonLogoutToolTip, function(){
				if (window.fullUrl.indexOf("?") >0)
					window.location = window.fullUrl+"&logout=1";
				else
					window.location = window.fullUrl+"?logout=1";
			return false;
		},null,null,this.accessKey);
	}else{
		createTiddlyButton(place,config.macros.ccLogin.buttonlogin, config.macros.ccLogin.buttonLoginToolTip, function() {
			story.displayTiddler(null, "Login");
		},null,null,this.accessKey);
	}
};

var loginState=null;
var registerState=null;

config.macros.ccLogin.handler=function(place,macroName,params,wikifier,paramString,tiddler){
	var params = paramString.parseParams('reload',null,true);
	config.macros.ccLogin.refresh(place, params[0].reload);
};
 
config.macros.ccLogin.refresh=function(place, reload, error){
	removeChildren(place);
	var w = new Wizard();
	if (isLoggedIn()){
		w.createWizard(place,this.stepLogoutTitle);
		w.addStep(null, this.stepLogoutText+decodeURIComponent(cookieString(document.cookie).txtUserName)+"<br /><br />");
		w.setButtons([
			{caption: this.buttonLogout, tooltip: this.buttonLogoutToolTip, onClick: function() {window.location=fullUrl+"?&logout=1"}
		}]);
		return true;
	}
	w.createWizard(place,this.WizardTitleText);
	w.setValue('reload', reload);


	var me=config.macros.ccLogin;
	var oldForm = w.formElem.innerHTML;
	var form = w.formElem;
	if (error!==undefined)
		this.stepLoginTitle=error;	
	w.addStep(this.stepLoginTitle,me.stepLoginIntroTextHtml);
	txtPassword = w.formElem.txtPassword;
	w.formElem.password.style.display="none";
	txtPassword.onkeyup = function() {
		if(me.sha1 == true){
			w.formElem.password.value = Crypto.hexSha1Str(w.formElem.txtPassword.value);
		} else { 
			w.formElem.password.value = w.formElem.txtPassword.value;
		}
	};
	txtPassword.onchange = txtPassword.onkeyup;
	w.formElem.method ="POST";
	w.formElem.onsubmit = function() {config.macros.ccLogin.doLogin(w.formElem["username"].value, w.formElem["password"].value, this, place); return false;};
	var submit = createTiddlyElement(null, "input");
	submit.type="submit";
	submit.style.display="none";
	w.formElem.appendChild(submit);
	var cookieValues=findToken(document.cookie);
	if (cookieValues.txtUserName!==undefined){
		w.formElem["username"].value=decodeURIComponent(cookieValues.txtUserName) ;
	}
	var footer = findRelated(form,"wizardFooter","className");
	createTiddlyButton(w.footer,this.buttonLogin,this.buttonLoginToolTip,function() {
		if (w.formElem["username"].value==""){
			displayMessage(me.msgNoUsername);
			return false;
		}
		if (w.formElem["password"].value==""){
			displayMessage(me.msgNoPassword);
			return false;
		}
		config.macros.ccLogin.doLogin(w.formElem["username"].value, w.formElem["password"].value, this, place);
	});
	
	
	createTiddlyButton(w.footElem,this.buttonLogin,this.buttonLoginToolTip,function() {
		config.macros.ccLogin.doLogin(w.formElem["username"].value, w.formElem["password"].value, this, place);
	},null, null, null,  {tabindex:'3'});

	if(config.macros.register!==undefined){		
		var li_register = createTiddlyElement(w.footElem, "li");
		createTiddlyButton(li_register,config.macros.register.buttonRegister,config.macros.register.buttonRegisterToolTip,function() {
				config.macros.register.displayRegister(place, w, this);
		},"nobox", null, null,  {tabindex:4});
	}
	var li_forgotten = createTiddlyElement(w.footElem, "li");
	createTiddlyButton(li_forgotten,this.buttonForgottenPassword,this.buttonForgottenPasswordToolTip,function() {
		config.macros.ccLogin.displayForgottenPassword(this, place);
	},"nobox", null, null,  {tabindex:5});

};

config.macros.ccLogin.doLogin=function(username, password, item, place){
	var w = new Wizard(item);
	var me = config.macros.ccLogin;
	var userParams = {};
	userParams.place = place;
	var adaptor = new config.adaptors[config.defaultCustomFields['server.type']];
	var context = {};
	context.reload = w.getValue("reload");
	context.host = window.url;
	context.username = username;
	context.password = password;
	adaptor.login(context,userParams,config.macros.ccLogin.loginCallback)
	var html = me.stepDoLoginIntroText; 
	w.addStep(me.stepDoLoginTitle,html);
	w.setButtons([
		{caption: this.buttonCancel, tooltip: this.buttonCancelToolTip, onClick: function() {config.macros.ccLogin.refresh(place);}
	}]);
}

config.macros.ccLogin.loginCallback=function(context,userParams){

	if(!context.status)
	{
		config.macros.ccLogin.refresh(userParams.place, config.macros.ccLogin.msgLoginFailed);
	}else{
		if(context.reload=="false"){
				window.loggedIn = true;
				var $ = jQuery;
				story.refreshTiddler(story.findContainingTiddler(userParams.place).id.replace("tiddler", ""), null, true);			
		}else{
							window.location.reload();	
		}
	}	 
};

config.macros.ccLogin.displayForgottenPassword=function(item, place){	
	var w = new Wizard(item);
	var me = config.macros.ccLogin;
	w.addStep(me.stepForgotPasswordTitle,me.stepForgotPasswordIntroText);
	w.setButtons([
		{caption: this.buttonCancel, tooltip: this.buttonCancelToolTip, onClick: function() {me.refresh(place);}}
	]);
};

//config.macros.ccLogin.sendForgottenPassword=function(item, place){	
//	var w = new Wizard(item);
//	var me = config.macros.ccLogin;
//}

config.macros.toolbar.isCommandEnabled=function(command,tiddler){	
	var title=tiddler.title;
	if (workspace_delete=="D"){
		// REMOVE OPTION TO DELETE TIDDLERS 
		if (command.text=='delete')
			return false;
	}
	if (workspace_udate=="D"){
		// REMOVE EDIT LINK FROM TIDDLERS 
		if (command.text=='edit')
			return false;
	}
	var ro=tiddler.isReadOnly();
	var shadow=store.isShadowTiddler(title) && !store.tiddlerExists(title);
	return (!ro || (ro && !command.hideReadOnly)) && !(shadow && command.hideShadow);
};

// Returns output var with output.txtUsername and output.sessionToken
function findToken(cookieStash){
	var output={};
	if (!cookieStash)
		return false;	
	//  THIS IS VERY HACKY AND SHOULD BE REFACTORED WHEN TESTS ARE IN PLACE
	var cookies=cookieStash.split('path=/');
	for(var c=0; c < cookies.length ; c++){
		var cl =cookies[c].split(";");
		for(var e=0; e < cl.length; e++){ 
			var p=cl[e].indexOf("=");
			if(p!=-1){
				var name=cl[e].substr(0,p).trim();
				var value=cl[e].substr(p+1).trim();       
				if (name=='txtUserName'){
					output.txtUserName=value;
				}
				if (name=='sessionToken'){
					output.sessionToken=value;
				}
			}
		}
	}	
	return output;
};

function cookieString(str){	
	var cookies = str.split(";");
	var output = {};
	for(var c=0; c < cookies.length; c++){
		var p = cookies[c].indexOf("=");
		if(p != -1) {
			var name = cookies[c].substr(0,p).trim();
			var value = cookies[c].substr(p+1).trim();
			if (name=='txtUserName'){
				output.txtUserName=value;
			}
			if (name=='sessionToken'){
				output.sessionToken=value;
			}
		}
	}
	return output;
}


//}}}
// ccRegister //

//{{{
config.macros.register={};	
	
config.macros.register.handler=function(place,macroName,params,wikifier,paramString,tiddler){
	//config.macros.login.refresh(place);
};

config.macros.register.displayRegister=function(place, w, item){
	var me = config.macros.register;
	var w = new Wizard(item);
	w.addStep(me.stepRegisterTitle, me.stepRegisterHtml);
	w.formElem["reg_username"].onkeyup=function() {me.isUsernameAvailable(w);};
	w.setButtons([
		{caption: me.buttonRegister, tooltip: me.buttonRegisterToolTip, onClick:function() { me.doRegister(place, w)}},
		{caption: me.buttonCancel, tooltip: me.buttonCancelToolTip, onClick: function() { config.macros.ccLogin.refresh(place)}}
	]);
	var h1 = createTiddlyElement(null, "h1", null, null, "hahahaha");
	//	w.footElem.appendChild(h1, w.footElem);
	w.footElem.firstChild.parentNode.appendChild(h1, w.footElem);
	//w.footElem.firstChild.insertBefore(h1, w.footElem);
}

config.macros.register.setStatus=function(w, element, text){
	var label_var = w.getElement(element);
	removeChildren(label_var.previousSibling);
	var label = document.createTextNode(text);
	label_var.previousSibling.insertBefore(label,null);
}

config.macros.register.doRegister=function(place, w){
	var me = config.macros.register;
	if(w.formElem["reg_username"].value==''){
		me.setStatus(w, "username_error", me.msgNoUsername);
	}else {
		me.setStatus(w, "username_error", "");
	}
	if(me.emailValid(w.formElem["reg_mail"].value)){
		me.setStatus(w, "mail_error", me.msgEmailOk);
	}else{
		me.setStatus(w, "mail_error", "invalid email address");
		return false;
	}
	if(w.formElem["reg_password1"].value==''){
		me.setStatus(w, "pass1_error", me.msgNoPassword);
		return false;
	}else{
		me.setStatus(w, "pass1_error", "");
	}
	if(w.formElem["reg_password2"].value==''){
		me.setStatus(w, "pass2_error", me.msgNoPassword);
		return false;
	}
	if(w.formElem["reg_password1"].value != w.formElem["reg_password2"].value ){
		me.setStatus(w, "pass1_error", me.msgDifferentPasswords);
		me.setStatus(w, "pass2_error", me.msgDifferentPasswords);
		return false;
	}
 	var params ={};
	params.p = Crypto.hexSha1Str(w.formElem['reg_password1'].value);
	params.u = w.formElem['reg_username'].value;
	params.place = place;
	params.w = w;
	var loginResp=doHttp('POST',url+'/handle/register.php',"username="+w.formElem['reg_username'].value+"&reg_mail="+w.formElem['reg_mail'].value+"&password="+Crypto.hexSha1Str(w.formElem['reg_password1'].value)+"&password2="+Crypto.hexSha1Str(w.formElem['reg_password2'].value),null,null,null,config.macros.register.registerCallback,params);
	w.addStep(me.step2Title, me.msgCreatingAccount);
	w.setButtons([
		{caption: me.buttonCancel, tooltip: me.buttonCancelToolTip, onClick: function() {config.macros.ccLogin.refresh(place);}
	}]);
}

config.macros.register.emailValid=function(str){
	if((str.indexOf(".") > 0) && (str.indexOf("@") > 0))
		return true;
	else
		return false;
};

config.macros.register.usernameValid=function(str){
	if((str.indexOf("_") > 0) && (str.indexOf("@") > 0))
		return false;
	else
		return true;
};

config.macros.register.registerCallback=function(status,params,responseText,uri,xhr){
	var userParams = {};
	userParams.place = params.place;
	if (xhr.status==304){
		params.w.addStep(config.macros.register.errorRegisterTitle, config.macros.register.errorRegister);
		return false;
	}	
	var adaptor = new config.adaptors[config.defaultCustomFields['server.type']];
	var context = {};
	context.host = window.url;
	context.username = params.u;
	context.password = params.p;
	adaptor.login(context,userParams,config.macros.ccLogin.loginCallback);
	return true;
}

config.macros.register.isUsernameAvailable=function(w){
	var params = {};
	params.w = w;
	doHttp('POST',url+'/handle/register.php',"username="+w.formElem["reg_username"].value+"&free=1",null,null,null,config.macros.register.isUsernameAvailabeCallback,params);
	return false;
};

config.macros.register.isUsernameAvailabeCallback=function(status,params,responseText,uri,xhr){
	var me = config.macros.register;
	var resp = (responseText > 0) ? me.msgUsernameTaken : me.msgUsernameAvailable;
	config.macros.register.setStatus(params.w, "username_error", resp);
};
//}}}

// ccAdmin //
//{{{
config.macros.ccAdmin = {}
config.macros.ccAdmin.handler = function(place,macroName,params,wikifier,paramString,tiddler, errorMsg){
	var w = new Wizard();
	w.createWizard(place,config.macros.ccAdmin.WizardTitleText);
	config.macros.ccAdmin.refresh(w);
};

config.macros.ccAdmin.refresh= function(w){
	params = {};
	params.w = w;
	params.e = this;
	me = config.macros.ccAdmin;
	doHttp('POST',url+'/handle/workspaceAdmin.php','action=LISTALL&workspace='+workspace,null,null,null,config.macros.ccAdmin.listAllCallback,params);
	w.setButtons([
		{caption: me.buttonDeleteText, tooltip: me.buttonDeleteTooltip, onClick: function(w){ 
			config.macros.ccAdmin.delAdminSubmit(null, params);
		 	return false;
		}}, 
		{caption: me.buttonAddText, tooltip: me.buttonAddTooltip, onClick: function(w){
			config.macros.ccAdmin.addAdminDisplay(null, params); return false } }]);
};

config.macros.ccAdmin.delAdminSubmit = function(e, params){
	var listView = params.w.getValue("listView");
	var rowNames = ListView.getSelectedRows(listView);
	var delUsers = "";
	for(var e=0; e < rowNames.length; e++) 
		delUsers += rowNames[e]+",";
	doHttp('POST',url+'/handle/workspaceAdmin.php','action=DELETEADMIN&username='+delUsers+'&workspace='+workspace,null,null,null,config.macros.ccAdmin.addAdminCallback,params);
	return false; 
};

config.macros.ccAdmin.addAdminDisplay = function(e, params){
	doHttp('POST',url+'/handle/workspaceAdmin.php','action=LISTWORKSPACES',null,null,null,config.macros.ccAdmin.listWorkspaces,params);
};

config.macros.ccAdmin.listWorkspaces = function(status,params,responseText,uri,xhr){
	var frm = createTiddlyElement(null,'form',null,null);
	var me = config.macros.ccAdmin;
	frm.onsubmit = config.macros.ccAdmin.addAdminSubmit;	
	params.w.addStep(me.stepAddTitle,"<input type='hidden' name='admin_placeholder'/>"+me.labelUsername+"<input name=adminUsername><br />"+me.labelWorkspace+"<select name=workspaceName />");
	var workspaces = eval('[ '+responseText+' ]');
	for(var t=0; t<workspaces.length; t++) {
		var o = createTiddlyElement(params.w.formElem.workspaceName, "option", null, null, workspaces[t]);
		o.value=workspaces[t];
		if(workspaces[t] == workspace)
			o.selected = true;
	}
	params.w.formElem.admin_placeholder.parentNode.appendChild(frm);
	params.w.setButtons([
		{caption: me.buttonCancelText, tooltip: me.buttonCancelTooltip, onClick: function(w){ config.macros.ccAdmin.refresh(params.w) } },
		{caption: me.buttonCreateText, tooltip: me.buttonCreateTooltip, onClick: function(){config.macros.ccAdmin.addAdminSubmit(null, params);  } }
	]);
};

config.macros.ccAdmin.addAdminSubmit = function(e, params){
	doHttp('POST',url+'/handle/workspaceAdmin.php','&add_username='+params.w.formElem.adminUsername.value+'&action=addNew&workspace='+params.w.formElem.workspaceName[params.w.formElem.workspaceName.selectedIndex].value,null,null,null,config.macros.ccAdmin.addAdminCallback,params);
	return false; 
};

config.macros.ccAdmin.listAllCallback = function(status,params,responseText,uri,xhr) {
	var me = config.macros.ccAdmin;
	var out = "";
	var adminUsers = [];
	if(xhr.status == 403){
		var html ='';
		params.w.addStep(me.stepErrorText+workspace, me.stepErrorTitle);
		params.w.setButtons([]);
		return false;
	}
	try{
		var a = eval(responseText);
		for(var e=0; e < a.length; e++){
			out += a[e].username;
			adminUsers.push({
			name: a[e].username,
			lastVisit:a[e].lastVisit});
		}
	}catch(ex){
			params.w.addStep(" "+workspace, me.stepNoAdminTitle);
			params.w.setButtons([
				{caption: me.buttonCreateText, tooltip: me.buttonCreateTooltip, onClick: function(){ config.macros.ccAdmin.addAdminDisplay(null, params)}}]);
			return false;
	}
	var html ='<input type="hidden" name="markList"></input>';
	params.w.addStep(me.stepManageWorkspaceTitle+workspace, html);
	var markList = params.w.getElement("markList");
	var listWrapper = document.createElement("div");
	markList.parentNode.insertBefore(listWrapper,markList);
	var listView = ListView.create(listWrapper,adminUsers,config.macros.ccAdmin.listAdminTemplate);
	params.w.setValue("listView",listView);
};

config.macros.ccAdmin.addAdminCallback = function(status,params,responseText,uri,xhr) {
	config.macros.ccAdmin.refresh(params.w);
};

// Import Override - ensures imported tiddlers have cctiddly server type. 
config.macros.importTiddlers.onGetTiddler = function(context,wizard)
{
	
	if(!context.status)
		displayMessage("Error in importTiddlers.onGetTiddler: " + context.statusText);
	var tiddler = context.tiddler;
	if(store.tiddlerExists(tiddler.title)) {
		var t = store.getTiddler(tiddler.title);
		tiddler.fields = t.fields;
	}
	store.suspendNotifications();
	tiddler.fields['server.type'] = 'cctiddly';
	tiddler.fields['server.host'] = window.url;
	tiddler.fields['workspace']= window.workspace;
	store.saveTiddler(tiddler.title, tiddler.title, tiddler.text, tiddler.modifier, tiddler.modified, tiddler.tags, tiddler.fields, false, tiddler.created);// local 
//	config.extensions.ServerSideSavingPlugin.saveTiddler(tiddler); // remote save. 
	if(!wizard.getValue("sync")) {
		store.setValue(tiddler.title,'server',null);
	}
	store.resumeNotifications();
	if(!context.isSynchronous)
		store.notify(tiddler.title,true);
	var remainingImports = wizard.getValue("remainingImports")-1;
	wizard.setValue("remainingImports",remainingImports);
	if(remainingImports == 0) {
		if(context.isSynchronous) {
			store.notifyAll();
			refreshDisplay();
		}
		wizard.setButtons([
				{caption: config.macros.importTiddlers.doneLabel, tooltip: config.macros.importTiddlers.donePrompt, onClick: config.macros.importTiddlers.onClose}
			],config.macros.importTiddlers.statusDoneImport);
		autoSaveChanges();
	}
};
// ccAdaptorCommandsPlugin //
function ccTiddlyAdaptor(){}
merge(ccTiddlyAdaptor,{ 
	errorTitleNotSaved:"<h1>Your changes were NOT saved.</h1>", 
	errorTextSessionExpired:"Your Session has expired. <br /> You will need to log into the new window and then copy your changes from this window into the new window. ", 
	errorTextConfig:"There was a conflict when saving. <br /> Please open the page in a new window to see the changes.",
	errorTextUnknown:"An unknown error occured.",
	errorClose:"close",
	buttonOpenNewWindow:"Open a Window where I can save my changes	.... ",
	buttonHideThisMessage:"Hide this message", 
	msgErrorCode:"Error Code : "
});


if(!config.extensions) { config.extensions = {}; } //# obsolete from v2.4.2
config.extensions.ServerSideSavingPlugin = {
	adaptor: config.adaptors.cctiddly
};

//{{{
	
	config.commands.revisions = {};
	merge(config.commands.revisions,{
		text: "revisions",
		tooltip: "View another revision of this tiddler",
		loading: "loading...",
		done: "Revision downloaded",
		revisionTooltip: "View this revision",
		popupNone: "No revisions",
		revisionTemplate: "%0 r:%1 m:%2",
		dateFormat:"YYYY mmm 0DD 0hh:0mm"	
	});

	config.commands.deleteTiddlerHosted = {};
	merge(config.commands.deleteTiddlerHosted,{
		text: "delete",
		tooltip: "Delete this tiddler",
		warning: "Are you sure you want to delete '%0'?",
		hideReadOnly: true,
		done: "Deleted "
	});
	
	
// Ensure that the plugin is only installed once.
if(!version.extensions.AdaptorCommandsPlugin) {
	version.extensions.AdaptorCommandsPlugin = {installed:true};



// implementing closeTiddler without the clearMessage();
Story.prototype.closeTiddler = function(title,animate,unused)
{
	var tiddlerElem = this.getTiddler(title);
	if(tiddlerElem) {
		this.scrubTiddler(tiddlerElem);
		if(config.options.chkAnimate && animate && anim && typeof Slider == "function")
			anim.startAnimating(new Slider(tiddlerElem,false,null,"all"));
		else {
			removeNode(tiddlerElem);
			forceReflow();
		}
	}
};

function getServerType(fields)
{
	if(!fields)
		return null;
	var serverType = fields['server.type'];
	if(!serverType)
		serverType = fields['wikiformat'];
	if(!serverType)
		serverType = config.defaultCustomFields['server.type'];
	if(!serverType && typeof RevisionAdaptor != 'undefined' && fields.uuid)
		serverType = RevisionAdaptor.serverType;
	return serverType;
}

function invokeAdaptor(fnName,param1,param2,context,userParams,callback,fields)
{
	var serverType = getServerType(fields);
	if(!serverType)
		return null;
	var adaptor = new config.adaptors[serverType];
	if(!adaptor)
		return false;
	if(!config.adaptors[serverType].prototype[fnName])
		return false;
	adaptor.openHost(fields['server.host']);
	adaptor.openWorkspace(fields['server.workspace']);
	var ret = false;
	if(param1)
		ret = param2 ? adaptor[fnName](param1,param2,context,userParams,callback) : adaptor[fnName](param1,context,userParams,callback);
	else
		ret = adaptor[fnName](context,userParams,callback);
	return ret;
}

//# Returns true if function fnName is available for the serverType specified in fields
//# Used by (eg): config.commands.download.isEnabled
function isAdaptorFunctionSupported(fnName,fields)
{
	var serverType = getServerType(fields);
	if(!serverType || !config.adaptors[serverType])
		return false;
	if(!config.adaptors[serverType].isLocal && !fields['server.host'])
		return false;
	var fn = config.adaptors[serverType].prototype[fnName];
	return fn ? true : false;
}

config.commands.revisions.isEnabled = function(tiddler)
{
	return isAdaptorFunctionSupported('getTiddlerRevisionList',tiddler.fields);
};

config.commands.revisions.handler = function(event,src,title)
{
	var tiddler = store.fetchTiddler(title);
	userParams = {};
	userParams.tiddler = tiddler;
	userParams.src = src;
	userParams.dateFormat = config.commands.revisions.dateFormat;
	var revisionLimit = 10;
	if(!invokeAdaptor('getTiddlerRevisionList',title,revisionLimit,null,userParams,config.commands.revisions.callback,tiddler.fields))
		return false;
	event.cancelBubble = true;
	if(event.stopPropagation)
		event.stopPropagation();
	return true;
};

config.commands.revisions.callback = function(context,userParams)
// The revisions are returned as tiddlers in the context.revisions array
{
	var revisions = context.revisions;
	popup = Popup.create(userParams.src);
	Popup.show(popup,false);
	if(revisions.length==0) {
		createTiddlyText(createTiddlyElement(popup,'li',null,'disabled'),config.commands.revisions.popupNone);
	} else {
		revisions.sort(function(a,b) {return a.modified < b.modified ? +1 : -1;});
		for(var i=0; i<revisions.length; i++) {
			var tiddler = revisions[i];
			var modified = tiddler.modified.formatString(context.dateFormat||config.commands.revisions.dateFormat);
			var revision = tiddler.fields['server.page.revision'];
			var btn = createTiddlyButton(createTiddlyElement(popup,'li'),
					config.commands.revisions.revisionTemplate.format([modified,revision,tiddler.modifier]),
					tiddler.text||config.commands.revisions.revisionTooltip,
					function() {
						config.commands.revisions.getTiddlerRevision(this.getAttribute('tiddlerTitle'),this.getAttribute('tiddlerModified'),this.getAttribute('tiddlerRevision'),this);
						return false;
						},
					'tiddlyLinkExisting tiddlyLink');
			btn.setAttribute('tiddlerTitle',userParams.tiddler.title);
			btn.setAttribute('tiddlerRevision',revision);
			btn.setAttribute('tiddlerModified',tiddler.modified.convertToYYYYMMDDHHMM());
			if(userParams.tiddler.fields['server.page.revision'] == revision || (!userParams.tiddler.fields['server.page.revision'] && i==0))
				btn.className = 'revisionCurrent';
		}
	}
};

config.commands.revisions.getTiddlerRevision = function(title,modified,revision)
{
	var tiddler = store.fetchTiddler(title);
	var context = {modified:modified};
	return invokeAdaptor('getTiddlerRevision',title,revision,context,null,config.commands.revisions.getTiddlerRevisionCallback,tiddler.fields);
};

config.commands.revisions.getTiddlerRevisionCallback = function(context,userParams)
{
	if(context.status) {
		var tiddler = context.tiddler;
		store.addTiddler(tiddler);
		store.notify(tiddler.title, true);
		story.refreshTiddler(tiddler.title,1,true);
	} else {
		displayMessage(context.statusText);
	}
};

config.commands.deleteTiddlerHosted.handler = function(event,src,title)
{
	var tiddler = store.fetchTiddler(title);
		if(!tiddler)
			return false;
		var deleteIt = true;
		if(config.options.chkConfirmDelete)
		        deleteIt = confirm(this.warning.format([title]));
		if(deleteIt) {
			var ret = invokeAdaptor('deleteTiddler',title,null,null,null,config.commands.deleteTiddlerHosted.callback,tiddler.fields);
			if(ret){
				store.removeTiddler(title);
				story.closeTiddler(title,true);
			}
		}
		return false;

};

config.commands.deleteTiddlerHosted.callback = function(context,userParams)
{
	if(context.status) {
		displayMessage(config.commands.deleteTiddlerHosted.done + context.title);
	} else {
		if (context.statusText.indexOf("Not Found") == -1)
			displayMessage(context.statusText);
	}
};

}//# end of 'install only once'
//}}}


// ccAdaptor //

//{{{

	window.isLoggedIn = function(){
		return (window.loggedIn == '1') 
	}

	ccTiddlyAdaptor.prototype = new AdaptorBase();

	ccTiddlyAdaptor.mimeType = 'application/json';
	ccTiddlyAdaptor.serverType = 'cctiddly'; // MUST BE LOWER CASE
	ccTiddlyAdaptor.serverParsingErrorMessage = "Error parsing result from server";
	ccTiddlyAdaptor.errorInFunctionMessage = "Error in function ccTiddlyAdaptor.%0";

	ccTiddlyAdaptor.minHostName = function(host){
		return host ? host.replace(/^http:\/\//,'').replace(/\/$/,'') : '';
	};

	// Convert a page title to the normalized form used in uris
	ccTiddlyAdaptor.normalizedTitle = function(title){
		return title;
	};

	// Convert a date in YYYY-MM-DD hh:mm format into a JavaScript Date object
	ccTiddlyAdaptor.dateFromEditTime = function(editTime){
		var dt = editTime;
		return new Date(Date.UTC(dt.substr(0,4),dt.substr(5,2)-1,dt.substr(8,2),dt.substr(11,2),dt.substr(14,2)));
	};

	ccTiddlyAdaptor.prototype.login = function(context,userParams,callback){
		if(window.location.search.substring(1))
			var uriParams = window.location.search.substring(1);
		else
			var uriParams = "";
		context = this.setContext(context,userParams,callback);
		var uriTemplate = '%0/handle/loginFile.php?cctuser=%1&cctpass=%2&'+uriParams;
		var uri = uriTemplate.format([context.host,context.username,context.password]);
		var req = httpReq('GET',uri,ccTiddlyAdaptor.loginCallback,context);
		return typeof req == 'string' ? req : true;
	};

	ccTiddlyAdaptor.loginCallback = function(status,context,responseText,uri,xhr){
		if(xhr.status==401){
			context.status = false;
		}else{
			context.status = true;
			var c='sessionToken'+"="+responseText;
				c+="; expires=Fri, 1 Jan 2811 12:00:00 UTC; host=*";
				document.cookie=c;
		}
		if(context.callback)
			context.callback(context,context.userParams);
	};

	ccTiddlyAdaptor.prototype.register = function(context,userParams,callback){
		context = this.setContext(context,userParams,callback);
		var uriTemplate = '%0/handle/register.php';
		var uri = uriTemplate.format([context.host,context.username,Crypto.hexSha1Str(context.password)]);
		var dataTemplate = 'username=&0&reg_mail=%1&password=%2&password2=%3';
		var data = dataTemplate.format([context.username,context.password1,context.password2]);
		var req = httpReq('POST', uri,ccTiddlyAdaptor.registerCallback,context,null,data);
		return typeof req == 'string' ? req : true;
	};

	ccTiddlyAdaptor.prototype.rename = function(context, userParams, callback){
		if(window.location.search.substring(1))
			var postParams = "&"+window.location.search.substring(1);
		else
			var postParams = "";
		context = this.setContext(context,userParams,callback);
		var uri = window.url+"handle/renameTiddler.php?otitle="+context.title+"&ntitle="+context.newTitle+"&workspace="+window.workspace+postParams;;
		httpReq('POST', uri,ccTiddlyAdaptor.renameCallback,context,null,null);
	};

	ccTiddlyAdaptor.renameCallback = function(status,context,responseText,uri,xhr){
		if(context.callback)
			context.callback(context,context.userParams);
	};

	ccTiddlyAdaptor.registerCallback = function(status,context,responseText,uri,xhr){
		if(status){
			context.status = true;
		}else{
			context.status = false;
		}
		if(context.callback)
			context.callback(context,context.userParams);
	};

	ccTiddlyAdaptor.prototype.getWorkspaceList = function(context,userParams,callback){
	 	context = this.setContext(context,userParams,callback);
		var uriTemplate = '%0/handle/listWorkspaces.php';
		var uri = uriTemplate.format([context.host]);
		var req = httpReq('GET', uri,ccTiddlyAdaptor.getWorkspaceListCallback,context,{'accept':'application/json'});
		return typeof req == 'string' ? req : true;
	};

	ccTiddlyAdaptor.getWorkspaceListCallback = function(status,context,responseText,uri,xhr){
		context.status = false;
		context.workspaces = [];
		context.statusText = ccTiddlyAdaptor.errorInFunctionMessage.format(['getWorkspaceListCallback']);
		if(status){
		try{
			eval('var workspaces=' + responseText);
		}catch (ex){
			context.statusText = exceptionText(ex,ccTiddlyAdaptor.serverParsingErrorMessage);
			if(context.callback)
				context.callback(context,context.userParams);
				return;
			}
			for (var i=0; i < workspaces.length; i++){
				context.workspaces.push({title:workspaces[i]})
			}
			context.status = true;
		}else{
				context.statusText = xhr.statusText;
		}
		if(context.callback)
			context.callback(context,context.userParams);
	};

	ccTiddlyAdaptor.prototype.getTiddlerList = function(context,userParams,callback){
		context = this.setContext(context,userParams,callback);
		var uriTemplate = '%0/handle/listTiddlers.php?workspace=%1';
		var uri = uriTemplate.format([context.host,context.workspace]);
		var req = httpReq('GET', uri,ccTiddlyAdaptor.getTiddlerListCallback,context,{'accept':'application/json'});
		return typeof req == 'string' ? req : true;
	};

	ccTiddlyAdaptor.getTiddlerListCallback = function(status,context,responseText,uri,xhr){
		context.status = false;
		context.statusText = ccTiddlyAdaptor.errorInFunctionMessage.format(['getTiddlerListCallback']);
		if(status){
			try{
				eval('var tiddlers=' + responseText);
			}catch (ex){
				context.statusText = exceptionText(ex,ccTiddlyAdaptor.serverParsingErrorMessage);
				if(context.callback)
					context.callback(context,context.userParams);
				return;
			}
			var list = [];
			for(var i=0; i < tiddlers.length; i++){
				var tiddler = new Tiddler(tiddlers[i]['title']);
				tiddler.fields['server.page.revision'] = tiddlers[i]['revision'];
				list.push(tiddler);
			}
			context.tiddlers = list;
			context.status = true;
		}else{
			context.statusText = xhr.statusText;
		}
		if(context.callback)
			context.callback(context,context.userParams);
	};

	ccTiddlyAdaptor.prototype.generateTiddlerInfo = function(tiddler){
		var info ={};
		var host = this && this.host ? this.host : this.fullHostName(tiddler.fields['server.host']);
		var bag = tiddler.fields['server.bag']
		var workspace = tiddler.fields['server.workspace']
		var uriTemplate = '%0/%1/#%2';
		info.uri = uriTemplate.format([host,workspace,tiddler.title]);
		return info;
	};

	ccTiddlyAdaptor.prototype.getTiddlerRevision = function(title,revision,context,userParams,callback){
		context = this.setContext(context,userParams,callback);
		if(revision)
			context.revision = revision;
		return this.getTiddler(title,context,userParams,callback);
	};

	ccTiddlyAdaptor.prototype.getTiddler = function(title,context,userParams,callback){
		context = this.setContext(context,userParams,callback);
		if(title)
			context.title = title;
		   if(context.revision){
		         var uriTemplate = '%0/handle/revisionDisplay.php?title=%2&workspace=%1&revision=%3';
		  }else{
				var uriTemplate = '%0/handle/getTiddler.php?title=%2&workspace=%1';
		  }

		uri = uriTemplate.format([context.host,context.workspace,ccTiddlyAdaptor.normalizedTitle(title),context.revision]);
		context.tiddler = new Tiddler(title);
		context.tiddler.fields['server.type'] = ccTiddlyAdaptor.serverType;
		context.tiddler.fields['server.host'] = ccTiddlyAdaptor.minHostName(context.host);
		context.tiddler.fields['server.workspace'] = context.workspace;
		var req = httpReq('GET', uri,ccTiddlyAdaptor.getTiddlerCallback,context,{'accept':'application/json'});
		return typeof req == 'string' ? req : true;
	};

	ccTiddlyAdaptor.getTiddlerCallback = function(status,context,responseText,uri,xhr){
	        context.status = false;
	        context.statusText = ccTiddlyAdaptor.errorInFunctionMessage.format(['getTiddlerCallback']);
	        if(status){
	                var info=[]
	                try{
	                    eval('info=' + responseText);
	                }catch (ex){
	                        context.statusText = exceptionText(ex,ccTiddlyAdaptor.serverParsingErrorMessage);
	                        if(context.callback)
	                                context.callback(context,context.userParams);
	                        return;
	                }
	                context.tiddler.text = info['text'];
					context.tiddler.tags = info['tags'].split(" ");
	                context.tiddler.fields['server.page.revision'] = info['server.page.revision'];
					context.tiddler.fields['server.id'] = info['id'];
					context.tiddler.fields = merge(info['fields'], context.tiddler.fields);
				    context.tiddler.modifier = info['modifier'];
	                context.tiddler.modified = Date.convertFromYYYYMMDDHHMM(info['modified']);
	                context.tiddler.created = Date.convertFromYYYYMMDDHHMM(info['created']);
	                context.status = true;
	        }else{
	                context.statusText = xhr.statusText;
	                if(context.callback)
	                        context.callback(context,context.userParams);
	                return;
	        }
	        if(context.callback)
			context.callback(context,context.userParams);
	};

	ccTiddlyAdaptor.prototype.getTiddlerRevisionList = function(title,limit,context,userParams,callback){
		context = this.setContext(context,userParams,callback);
		context.title = title;
		context.revisions = [];
		var tiddler = store.fetchTiddler(title);
		var encodedTitle = encodeURIComponent(title);
		var uriTemplate = '%0/handle/revisionList.php?workspace=%1&title=%2';
		var host = this.fullHostName(this.host);
		var workspace = context.workspace ? context.workspace : tiddler.fields['server.workspace'];
		var uri = uriTemplate.format([host,workspace,encodedTitle]);
		var req = httpReq('GET', uri,ccTiddlyAdaptor.getTiddlerRevisionListCallback,context);
	};

	ccTiddlyAdaptor.getTiddlerRevisionListCallback = function(status,context,responseText,uri,xhr){
		if(responseText.indexOf('<!DOCTYPE html')==1)
			status = false;
		if(xhr.status=="204")
			status = false;
		context.status = false;
		if(status){
			var r =  responseText;
			if(r != '-' && r.trim() != 'revision not found'){
				var revs = r.split('\n');
				for(var i=0; i<revs.length; i++){
					var parts = revs[i].split(' ');
					if(parts.length>1){
						var tiddler = new Tiddler(context.title);
						tiddler.modified = Date.convertFromYYYYMMDDHHMM(parts[0]);
						tiddler.fields['server.page.revision'] = String(parts[1]);
						tiddler.modifier = String(parts[2]);
						tiddler.fields['server.host'] = ccTiddlyAdaptor.minHostName(context.host);
						tiddler.fields['server.type'] = ccTiddlyAdaptor.serverType;
						context.revisions.push(tiddler);
					}
				}
			}
			context.revisions.sort(function(a,b){return a.modified<b.modified?+1:-1;});
			context.status = true;
		}else{
			context.statusText = xhr.statusText;
		}
		if(context.callback)
			context.callback(context,context.userParams);
	};

	ccTiddlyAdaptor.prototype.putTiddler = function(tiddler,context,userParams,callback){
		context = this.setContext(context,userParams,callback);
		context.title = tiddler.title;
		if(window.location.search.substring(1))
			var postParams = window.location.search.substring(1);
		else
			var postParams = "";
		var recipeuriTemplate = '%0/handle/save.php';
		var host = context.host ? context.host : this.fullHostName(tiddler.fields['server.host']);
		var uri = recipeuriTemplate.format([host,context.workspace,tiddler.title]);
		var d = new Date();
		d.setTime(Date.parse(tiddler['modified']));
		d = d.convertToYYYYMMDDHHMM();

		//  SEO Code

		if(workspace)
		 	var breaker = "/";
		else
			var breaker = "";
		var el = createTiddlyElement(document.body, "div", "ccTiddlyTMP", null, null, { "style.display": "none" });
		el.style.display = "none";  // Just in case the above command is ignored
		var formatter = new Formatter(config.formatters);
		var wikifier = new Wikifier(tiddler.text,formatter,null,tiddler);
			wikifier.isStatic = true;
			wikifier.subWikify(el);
		delete formatter;
		var links = el.getElementsByTagName("a");
		for(var i = 0; i < links.length; i++) {
			var tiddlyLink = links[i].getAttribute("tiddlyLink");
		    if(tiddlyLink) {
		        if(hasClass(links[i], "tiddlyLinkNonExisting")) { // target tiddler does not exist
		            links[i].href = "#";
		        } else {
		            links[i].href = url+ workspace + breaker +tiddlyLink + ".html";
		        }
		    }
		}	
		// End SEO Code 

		var fieldString = "";
		for (var name in tiddler.fields){
			if (String(tiddler.fields[name]) && name != "server.page.revision" && name != "changecount")
				fieldString += name +"='"+tiddler.fields[name]+"' ";
		}
		if(!tiddler.fields['server.page.revision'])
			tiddler.fields['server.page.revision'] = 0;		
		else
			tiddler.fields['server.page.revision'] = parseInt(tiddler.fields['server.page.revision'],10);
		context.revision = tiddler.fields['server.page.revision'];
		if(!context.otitle)
			var otitle = tiddler.title;
		else
			var otitle = context.otitle;
		var payload = "workspace="+window.workspace+"&otitle="+encodeURIComponent(otitle)+"&title="+encodeURIComponent(tiddler.title) + "&modified="+tiddler.modified.convertToYYYYMMDDHHMM()+"&modifier="+tiddler.modifier + "&tags="+encodeURIComponent(tiddler.getTags())+"&revision="+encodeURIComponent(tiddler.fields['server.page.revision']) + "&fields="+encodeURIComponent(fieldString)+
	"&body="+encodeURIComponent(tiddler.text)+"&wikifiedBody="+encodeURIComponent(el.innerHTML)+"&id="+tiddler.fields['server.id']+"&"+postParams;
		var req = httpReq('POST', uri,ccTiddlyAdaptor.putTiddlerCallback,context,{'Content-type':'application/x-www-form-urlencoded', "Content-length": payload.length},payload,"application/x-www-form-urlencoded");
		return typeof req == 'string' ? req : true;
	};

	ccTiddlyAdaptor.putTiddlerCallback = function(status,context,responseText,uri,xhr){
		
		if(xhr.status != 201){
			ccTiddlyAdaptor.handleError(xhr.status);
		}else{
			context.status = true;
			if(responseText!="") {
				context.tiddler.fields['server.id'] = responseText;
			}
			context.tiddler.fields['server.page.revision'] = context.revision + 1;
		}
		if(context.callback){
			context.callback(context,context.userParams);
		}
	};
	
	
	ccTiddlyAdaptor.center  = function(el){
		var size = this.getsize(el);
		el.style.left = (Math.round(findWindowWidth()/2) - (size.width /2) + findScrollX())+'px';
		el.style.top = (Math.round(findWindowHeight()/2) - (size.height /2) + findScrollY())+'px';
	}

	ccTiddlyAdaptor.getsize = function (el){
		var x ={};
		x.width = el.offsetWidth || el.style.pixelWidth;
		x.height = el.offsetHeight || el.style.pixelHeight;
		return x;
	}

	ccTiddlyAdaptor.showCloak = function(){
		var cloak = document.getElementById('backstageCloak');
		if (config.browser.isIE){
			cloak.style.height = Math.max(document.documentElement.scrollHeight,document.documentElement.offsetHeight);
			cloak.style.width = document.documentElement.scrollWidth;
		}
		cloak.style.display = "block";
	}

	ccTiddlyAdaptor.hideError = function(){
		var box = document.getElementById('errorBox');
		box.parentNode.removeChild(box);
		document.getElementById('backstageCloak').style.display = "";
	}

	ccTiddlyAdaptor.handleError = function(error_code){
		setStylesheet(
		"#errorBox .button{padding:0.5em 1em; border:1px solid #222; background-color:#ccc; color:black; margin-right:1em;}\n"+
		"html > body > #backstageCloak{height:100%;}"+
		"#errorBox{border:1px solid #ccc;background-color: #eee; color:#111;padding:1em 2em; z-index:9999;}",'errorBoxStyles');
		var box = document.getElementById('errorBox') || createTiddlyElement(document.body,'div','errorBox');
		var error = ccTiddlyAdaptor.errorTitleNotSaved;
		switch(error_code){
			case 401:
				error += ccTiddlyAdaptor.errorTextSessionExpired;
				break;
			case 409:
				error += "\n\n"+ccTiddlyAdaptor.errorTextConfig+"\n \n error code : "+error_code+" \n";
				break;

			default:
				error += ccTiddlyAdaptor.errorTextUnknown+"<br />"+error_code;
		}
		box.innerHTML = " <a style='float:right' href='javascript:onclick=ccTiddlyAdaptor.hideError()'>"+ccTiddlyAdaptor.errorClose+"</a><p>"+error+"</p><br/><br/>";
		createTiddlyButton(box,ccTiddlyAdaptor.buttonOpenNewWindow,null,function(e){ window.open (window.location,"mywindow");	 return false;});
		createTiddlyElement(box,"br");
		createTiddlyElement(box,"br");
		createTiddlyButton(box,ccTiddlyAdaptor.buttonHideThisMessage,null,function(){ccTiddlyAdaptor.hideError();});
		box.style.position = 'absolute';
		ccTiddlyAdaptor.center(box);
		ccTiddlyAdaptor.showCloak();
	}

	ccTiddlyAdaptor.prototype.deleteTiddler = function(title,context,userParams,callback){	
		context = this.setContext(context,userParams,callback);
		context.title = title;
		title = encodeURIComponent(title);
		var uri = tiddler.fields['server.host']+'/handle/delete.php'
		var data = "workspace="+workspace+"&title="+title;
		
		var req = httpReq('POST', uri,ccTiddlyAdaptor.deleteTiddlerCallback,context, null, data);
		return typeof req == 'string' ? req : true;
	};

	ccTiddlyAdaptor.deleteTiddlerCallback = function(status,context,responseText,uri,xhr){
		if(status){
			context.status = true;
		}else{
			context.status = false;
			context.statusText = xhr.statusText;
		}
		if(context.callback)
			context.callback(context,context.userParams);
	};

	config.adaptors[ccTiddlyAdaptor.serverType] = ccTiddlyAdaptor;
//}}}


//}}}


// ccStats //

//{{{
	
config.macros.ccStats={};	
	
config.macros.ccStats.handler = function(place,macroName,params,wikifier,paramString,tiddler){
	var params;
	params.place = place;
	doHttp('POST',url+'/handle/workspaceAdmin.php','action=LISTWORKSPACES',null,null,null,config.macros.ccStats.listWorkspaces,params);
}

config.macros.ccStats.simpleEncode = function(valueArray,maxValue){
	var simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
	var chartData = ['s:'];
	  for (var i = 0; i < valueArray.length; i++){
	    var currentValue = valueArray[i];
	    if (!isNaN(currentValue) && currentValue >= 0){
	    	chartData.push(simpleEncoding.charAt(Math.round((simpleEncoding.length-1) * currentValue / maxValue)));
	    }else{
	      chartData.push('_');
	    }
	  }
	return chartData.join('');
}

config.macros.ccStats.max = function(array){
	return Math.max.apply(Math, array);
}

config.macros.ccStats.dataCallback = function(status,params,responseText,uri,xhr){
	me = config.macros.ccStats;
	if(xhr.status==401){
		createTiddlyElement(params.container, "h4", null, null, me.errorPermissionDenied.format([params.title], [workspace]));
		return false;
	}
	var res = eval("[" + responseText + "]");
	var d=[];
	var l="";
	for(var c=0; c<res.length; c++){
		d[c]= res[c].hits;
		l+=res[c].date+"|";
	}
	var maxValue = config.macros.ccStats.max(d);
 	params.gData = config.macros.ccStats.simpleEncode(d,maxValue);
	params.XLabel = l.substring(0, l.length -1);
	params.YLabel = "0|"+maxValue+"|";
	var image = 'http://chart.apis.google.com/chart?cht=lc&chs=100x75&chd='+params.gData+'&chxt=x,y&chxl=0:||1:|';
	var div = createTiddlyElement(params.container, "div", null, "div_button");
	setStylesheet(".div_button:hover{opacity:0.7; cursor: pointer} .div_button{ width:100%; padding:5px;color:#555;background-color:white;} ", "DivButton");
	div.onclick = function(){
		var full = "http://chart.apis.google.com/chart?cht=lc&chs=800x375&chd="+params.gData+"&chxt=x,y&chxl=1:|"+params.YLabel+"0:|"+params.XLabel+"&chf=c,lg,90,EEEEEE,0.5,ffffff,20|bg,s,FFFFFF&&chg=10.0,10.0&";
		setStylesheet(
		"#errorBox .button{padding:0.5em 1em; border:1px solid #222; background-color:#ccc; color:black; margin-right:1em;}\n"+
		"html > body > #backstageCloak{height:"+window.innerHeight*2+"px;}"+
		"#errorBox{border:1px solid #ccc;background-color: #fff; color:#111;padding:1em 2em; z-index:9999;}",'errorBoxStyles');
		var box = document.getElementById('errorBox') || createTiddlyElement(document.body,'div','errorBox');
		box.innerHTML =  "<a style='float:right' href='javascript:onclick=ccTiddlyAdaptor.hideError()'>"+ccTiddlyAdaptor.errorClose+"</a><h3>"+params.title+"</h3><br />";
		box.style.position = 'absolute';
		box.style.height= "460px";
		box.style.width= "800px";
		var img = createTiddlyElement(box, "img");
		img.src = full;
		ccTiddlyAdaptor.center(box);
		ccTiddlyAdaptor.showCloak();
	}
	var img = createTiddlyElement(div, "h2", null, null, params.title);
	var img = createTiddlyElement(div, "img");
	img.src = image;
	var span = createTiddlyElement(div, "div", null, "graph_label", params.desc);
	setStylesheet(".graph_label{  position:relative; width:300px; top:-80px; left:130px;}");
}

config.macros.ccStats.switchWorkspace = function(params){
	removeChildren(params.container);
	config.macros.ccStats.refresh(params);	
}

config.macros.ccStats.refresh = function(params){
	var me = config.macros.ccStats;
	var select = params.w.formElem.workspaces;
	if(select[select.selectedIndex].value!="")
		workspace = select[select.selectedIndex].value;
	params ={ container: params.container, url: window.url+"/handle/stats.php?graph=minute&workspace="+workspace,title:me.graph20MinsTitle, desc:me.graph20MinsDesc};
	doHttp('GET',params.url,null, null, null, null, config.macros.ccStats.dataCallback,params);
	params ={ container:params.container, url:  window.url+"/handle/stats.php?graph=hour&workspace="+workspace,title:me.graph24HourTitle, desc:me.graph24HourDesc};
	doHttp('GET',params.url,null, null, null, null, config.macros.ccStats.dataCallback,params);
	params ={ container: params.container, url:  window.url+"/handle/stats.php?graph=day&workspace="+workspace,title:me.graph7DaysTitle, desc:me.graph7DaysDesc};
	doHttp('GET',params.url,null, null, null, null, config.macros.ccStats.dataCallback,params);
	params ={ container: params.container, url:  window.url+"/handle/stats.php?graph=month&workspace="+workspace,title:me.graph5MonthsTitle, desc:me.graph5MonthsDesc};
	doHttp('GET',params.url,null, null, null, null, config.macros.ccStats.dataCallback,params);	
}

config.macros.ccStats.listWorkspaces = function(status,params,responseText,uri,xhr){
	params.container=createTiddlyElement(null, "div", "container");
	var me = config.macros.ccStats;
	var w = new Wizard();
	w.createWizard(params.place,me.stepTitle);
	w.addStep(null, "<select name='workspaces'></select><input name='stats_hol' type='hidden'></input>");
	var s = w.formElem.workspaces;	
	s.onchange = function(){config.macros.ccStats.switchWorkspace(params) ;};
	var workspaces = eval('[ '+responseText+' ]');
	for(var d=0; d < workspaces.length; d++){
		var i = createTiddlyElement(s,"option",null,null,workspaces[d]);
		i.value = workspaces[d];
		if (workspace == workspaces[d]){
			i.selected = true;
		}
	}
	params.w = w; 
	w.formElem.stats_hol.parentNode.appendChild(params.container);
	config.macros.ccStats.refresh(params);
}
//}}}


// ccEditWorkspace //


//{{{
config.macros.ccEditWorkspace={};			
config.macros.ccEditWorkspace.handler = function(place, macroName, params, wikifier, paramString, tiddler){
	var me = config.macros.ccEditWorkspace;
	if(workspacePermission.owner !=1){
		createTiddlyElement(place,'div', null, "annotation",  me.errorTextPermissionDenied);
		return null;
	}
	var w = new Wizard();
	w.createWizard(place, this.WizardTitleText);
	var booAdmin = false;
	var booUser = false;
	var booAnon = false;
	// Check which colums to display
	for(i = 0; i <= params.length - 1; i++){
		switch (params[i].toLowerCase()) {
			case 'admin':
				booAdmin = true;
				break;
			case 'user':
				booUser = true;
				break;
			case 'anon':
				booAnon = true;
				break;
		}
	}
	// if nothing passed show all
	if(!booAdmin && !booUser && !booAnon){
		booAdmin = true;
		booUser = true;
		booAnon = true;
	}
	var tableBodyBuffer = new Array();
	tableBodyBuffer.push('<table border=0px class="listView twtable">');
	tableBodyBuffer.push('<tr">');
	tableBodyBuffer.push('<th>' + this.stepLabelPermission + '</th>');
	if(booAnon){
		tableBodyBuffer.push('<th>' + this.stepLabelAnon + '</th>');
	}
	if(booUser){
		tableBodyBuffer.push('<th>' + this.stepLabelUser + '</th>');
	}
	if(booAdmin){
		tableBodyBuffer.push('<th>' + this.stepLabelAdmin + '</th>');
	}
	tableBodyBuffer.push('</tr>');
	tableBodyBuffer.push('<tr>')
	tableBodyBuffer.push('<th align="right">'+this.stepLabelRead+'</th>');
	if(booAnon){
		tableBodyBuffer.push('<td><input name="anR" class="checkInput" type="checkbox" ');
		tableBodyBuffer.push(workspacePermission.anonR == 1 ? 'checked' : '');
		tableBodyBuffer.push(' ></input></td>');
	}
	if(booUser){
		tableBodyBuffer.push('<td><input name="usR" class="checkInput" type="checkbox" ');
		tableBodyBuffer.push(workspacePermission.userR == 1 ? 'checked' : '');
		tableBodyBuffer.push('></input></td>');
	}
	if(booAdmin){
		tableBodyBuffer.push('<td><input name="adR" class="checkInput" type="checkbox" checked disabled></input></td>');
	}
	tableBodyBuffer.push('</tr>');
	tableBodyBuffer.push('<tr>');
	tableBodyBuffer.push('<th  align="right">' + this.stepLabelCreate + '</th>');
	if(booAnon){
		tableBodyBuffer.push('<td><input name="anC" class="checkInput" type="checkbox" ');
		tableBodyBuffer.push(workspacePermission.anonC == 1 ? 'checked' : '');
		tableBodyBuffer.push(' ></input></td>');
	}
	if(booUser){
		tableBodyBuffer.push('<td><input name="usC" class="checkInput" type="checkbox" ');
		tableBodyBuffer.push(workspacePermission.userC == 1 ? 'checked' : '');
		tableBodyBuffer.push(' ></input></td>');
	}
	if(booAdmin){
		tableBodyBuffer.push('<td><input name="adC" class="checkInput" type="checkbox" checked disabled></input></td>');
	}
	tableBodyBuffer.push('</tr>');
	tableBodyBuffer.push('<tr>');
	tableBodyBuffer.push('<th  align="right">' + this.stepLabelUpdate + '</th>');
	if(booAnon){
		tableBodyBuffer.push('<td><input name="anU" class="checkInput" type="checkbox" ');
		tableBodyBuffer.push(workspacePermission.anonU == 1 ? 'checked' : '');
		tableBodyBuffer.push(' ></input></td>');
	}
	if(booUser){
		tableBodyBuffer.push('<td><input name="usU" class="checkInput" type="checkbox" ');
		tableBodyBuffer.push(workspacePermission.userU == 1 ? 'checked' : '');
		tableBodyBuffer.push(' ></input></td>');
	}
	if(booAdmin){
		tableBodyBuffer.push('<td><input name="adU" class="checkInput" type="checkbox" checked disabled></input></td>');
	}
	tableBodyBuffer.push('</tr>');
	tableBodyBuffer.push('<tr>');
	tableBodyBuffer.push('<th  align="right">' + this.stepLabelDelete + '</th>');
	if(booAnon){
		tableBodyBuffer.push('<td><input name="anD" class="checkInput" type="checkbox" ');
		tableBodyBuffer.push(workspacePermission.anonD == 1 ? 'checked' : '');
		tableBodyBuffer.push(' ></input></td>');
	}
	if(booUser){
		tableBodyBuffer.push('<td><input name="usD" class="checkInput" type="checkbox" ');
		tableBodyBuffer.push(workspacePermission.userD == 1 ? 'checked' : '');
		tableBodyBuffer.push(' ></input></td>');
	}
	if(booAdmin){
		tableBodyBuffer.push('<td><input name="adD" class="checkInput" type="checkbox" checked disabled></input></td>');
	}
	tableBodyBuffer.push('</tr>');
	tableBodyBuffer.push('</table>');
	var stepHTML = tableBodyBuffer.join('');
	w.addStep(this.stepEditTitle,stepHTML);
	w.setButtons([
		{caption: this.buttonSubmitCaption, tooltip: this.buttonSubmitToolTip, onClick: function() {me.ewSubmit(place, macroName, params, wikifier, paramString, tiddler,w,booAnon,booUser);}
	}]);

};

config.macros.ccEditWorkspace.ewSubmit = function(place, macroName, params2, wikifier, paramString, tiddler,w, booAnon, booUser){
	var trueStr = "A";
	var falseStr = "U";
	var anon = '';
	var user = '';
	if(booAnon){
		var anonBuffer = new Array();
		anonBuffer.push(w.formElem['anR'].checked ? trueStr : falseStr);
		anonBuffer.push(w.formElem['anC'].checked ? trueStr : falseStr);
		anonBuffer.push(w.formElem['anU'].checked ? trueStr : falseStr);
		anonBuffer.push(w.formElem['anD'].checked ? trueStr : falseStr);
		anon = anonBuffer.join('');
	}
	if(booUser){
		var userBuffer = new Array();
		userBuffer.push(w.formElem['usR'].checked ? trueStr : falseStr);
		userBuffer.push(w.formElem['usC'].checked ? trueStr : falseStr);
		userBuffer.push(w.formElem['usU'].checked ? trueStr : falseStr);
		userBuffer.push(w.formElem['usD'].checked ? trueStr : falseStr);
		user = userBuffer.join('');
	}
	var params = new Array();
	params.w = w;
	params.u = user;
	params.a = anon;
	params.p = place;
	params.m =  macroName;
	params.pr = params2;
	params.wi = wikifier;
	params.ps = paramString;
	params.t = tiddler;
	doHttp('POST', url + '/handle/updateWorkspace.php', 'ccCreateWorkspace=' + encodeURIComponent(workspace) + '&ccAnonPerm=' + encodeURIComponent(anon) + '&ccUserPerm=' + encodeURIComponent(user), null, null, null, config.macros.ccEditWorkspace.editWorkspaceCallback, params);
	return false;
}
config.macros.ccEditWorkspace.editWorkspaceCallback = function(status,params,responseText,uri,xhr){
	var w = params.w;
	var me = config.macros.ccEditWorkspace;
	if(xhr.status == 200){
		// use the incoming parameters to set the workspace permission variables.
		if (params.a != ''){
			workspacePermission.anonR = (params.a.substr(0,1)=='A'?1:0);
			workspacePermission.anonC = (params.a.substr(1,1)=='A'?1:0);
			workspacePermission.anonU = (params.a.substr(2,1)=='A'?1:0);
			workspacePermission.anonD = (params.a.substr(3,1)=='A'?1:0);
		}
		if (params.u != ''){
			workspacePermission.userR = (params.u.substr(0,1)=='A'?1:0);
			workspacePermission.userC = (params.u.substr(1,1)=='A'?1:0);
			workspacePermission.userU = (params.u.substr(2,1)=='A'?1:0);
			workspacePermission.userD = (params.u.substr(3,1)=='A'?1:0);
		}
		w.addStep('',responseText);
		// want to set a back button here
		w.setButtons([
			{caption: me.button1SubmitCaption, tooltip: me.button1SubmitToolTip, onClick: function() {config.macros.ccEditWorkspace.refresh(params.p,	params.m,	params.pr,	params.wi,	params.ps,	params.t);}}
		]);
	}else{
		w.addStep(me.step2Error+': ' + xhr.status,config.macros.ccEditWorkspace.errorUpdateFailed);
	}
	return false;
};
config.macros.ccEditWorkspace.refresh = function(place, macroName, params, wikifier, paramString, tiddler){
	removeChildren(place);
	config.macros.ccEditWorkspace.handler(place, macroName, params, wikifier, paramString, tiddler);
}
//}}}

// ccChangePassword //

// {{{
	
	config.macros.ccChangePassword={};
	
	config.macros.ccChangePassword.handler=function(place,macroName,params,wikifier,paramString,tiddler,errorMsg){
		var w = new Wizard();
		var me = config.macros.ccChangePassword;
		w.createWizard(place,me.title);
		w.addStep(me.subTitle+cookieString(document.cookie).txtUserName,me.step1Html);
		w.setButtons([
			{caption: me.buttonChangeText, tooltip: me.buttonChangeToolTip, onClick: function(){config.macros.ccChangePassword.doPost(w);  } }
		]);
	};

	config.macros.ccChangePassword.doPost = function (w) {
		me = config.macros.ccChangePassword;
		if(!w.formElem.new1.value || !w.formElem.new2.value || !w.formElem.old.value) {
			displayMessage(me.noticePasswordUpdateFailed);
			return false;
		}
		if(w.formElem.new1.value != w.formElem.new2.value){
			displayMessage(me.noticePasswordsNoMatch);
			return false;
		}
		doHttp("POST", url+"handle/changePassword.php", "&new1="+Crypto.hexSha1Str(w.formElem.new1.value)+"&new2="+Crypto.hexSha1Str(w.formElem.new2.value)+"&old1="+Crypto.hexSha1Str(w.formElem.old.value),null,null,null,config.macros.ccChangePassword.callback);	
	}

	config.macros.ccChangePassword.callback = function(status,context,responseText,uri,xhr) {
		if(xhr.status == 304)
			displayMessage(me.noticePasswordUpdateFailed);
		else
			displayMessage(me.noticePasswordUpdated);
	}

	//}}}
// ccLoginStatus //

//{{{


config.macros.ccLoginStatus={};
	
config.macros.ccLoginStatus.handler=function(place,macroName,params,wikifier,paramString,tiddler){
	var loginDiv=createTiddlyElement(place,"div",null,"loginDiv",null);
	this.refresh(loginDiv);
};
	
config.macros.ccLoginStatus.refresh=function(place,errorMsg){
       var me = config.macros.ccLoginStatus;
       var loginDivRef=document.getElementById ("LoginDiv");
       removeChildren(loginDivRef);
       var wrapper=createTiddlyElement(place,"div");
       var str = (workspace == "" ? me.textDefaultWorkspaceLoggedIn :(me.textViewingWorkspace+workspace))+"\r\n\r\n";
       if (isLoggedIn()){
			name = cookieString(document.cookie).txtUserName;
			str += me.textLoggedInAs+decodeURIComponent(name)+".\r\n\r\n";
			if (workspacePermission.owner==1){
				str += me.textAdmin;
			}
       }else{
               str += me.textNotLoggedIn;
       }
       wikify(str,wrapper);
};
//}}}

// ccOptions //
//{{{
config.macros.ccOptions={};		
config.macros.ccOptions.handler=function(place,macroName,params,wikifier,paramString,tiddler){
	var me = config.macros.ccOptions;
	if(workspacePermission.owner==1)
		wikify("[["+me.linkManageUsers+"|Manage Users]]<br />[["+me.linkPermissions+"|Permissions]]<br />[["+me.linkStats+"|Statistics]]<br />", place);
	if (isLoggedIn())
		wikify("[["+me.linkFiles+"|files]]<br />", place);
		if (isLoggedIn()){
			if (workspacePermission.canCreateWorkspace==1)
				wikify("[["+me.linkCreate+"|CreateWorkspace]]<br />", place);
			// append url function required 
			wikify("[["+me.linkPassword+"|Password]]<br />", place);
			if (window.fullUrl.indexOf("?") >0)
				wikify("[["+me.linkOffline+"|"+fullUrl+"&standalone=1]]<br />", place);
			else 
				wikify("[["+me.linkOffline+"|"+fullUrl+"?standalone=1]]<br />", place);	
		}
};

//}}}
//{{{

config.macros.ccCreateWorkspace = {};

config.macros.ccCreateWorkspace.setStatus=function(w,element,text){
	var label_var = w.getElement(element);
	removeChildren(label_var.previousSibling);
	var label = document.createTextNode(text);
	label_var.previousSibling.insertBefore(label,null);
}

config.macros.ccCreateWorkspace.workspaceNameKeyPress=function(w){
	params={};
	params.w = w;
	doHttp('POST',url+'/handle/lookupWorkspaceName.php',"ccWorkspaceLookup="+w.formElem["workspace_name"].value+"&free=1",null,null,null,config.macros.ccCreateWorkspace.workspaceNameCallback,params);	
	return false;
};
 	
config.macros.ccCreateWorkspace.workspaceNameCallback=function(status,params,responseText,uri,xhr){
	var me = config.macros.ccCreateWorkspace;
	if(responseText > 0){{
			config.macros.register.setStatus(params.w, "workspace_error", me.errorWorkspaceNameInUse);
			config.macros.register.setStatus(params.w, "workspace_url", "");
	}}else{
		config.macros.register.setStatus(params.w, "workspace_error", me.msgWorkspaceAvailable);
		if (window.useModRewrite == 1)
			config.macros.register.setStatus(params.w, "workspace_url", url+''+params.w.formElem["workspace_name"].value);			 
		else
			config.macros.register.setStatus(params.w, "workspace_url", url+'?workspace='+params.w.formElem["workspace_name"].value);
	}
};

config.macros.ccCreateWorkspace.handler =  function(place,macroName,params,wikifier,paramString,tiddler, errorMsg){
	if (window.workspacePermission.canCreateWorkspace!=1) {
		createTiddlyElement(place,'div', null, "annotation",  config.macros.ccCreateWorkspace.errorPermissions);
		return null;
	}
	var me = config.macros.ccCreateWorkspace;
	var w = new Wizard();
	w.createWizard(place,me.wizardTitle);
	if(config.macros.ccCreateWorkspace.createWorkspaceAdvanced)
		me.stepCreateHtml += config.macros.ccCreateWorkspace.createWorkspaceAdvanced();

	w.addStep(me.stepTitle, me.stepCreateHtml);
	w.formElem["workspace_name"].onkeyup=function() {me.workspaceNameKeyPress(w);};
	w.formElem.onsubmit = function() { config.macros.ccCreateWorkspace.createWorkspaceOnSubmit(w);  return false;};
	w.setButtons([
		{caption: me.buttonCreateWorkspaceText, tooltip: me.buttonCreateWorkspaceTooltip, onClick:function(){config.macros.ccCreateWorkspace.createWorkspaceOnSubmit(w);}
	}]);
};

config.macros.ccCreateWorkspace.createWorkspaceOnSubmit = function(w){
	var params = {}; 
	params.w = w;	
	if(window.useModRewrite == 1)
		params.url = url+w.formElem["workspace_name"].value; 
	else
		params.url = url+'?workspace='+w.formElem["workspace_name"].value;
	var loginResp = doHttp('POST',url+'?&workspace='+w.formElem["workspace_name"].value+"/",'&ccCreateWorkspace=' + encodeURIComponent(w.formElem["workspace_name"].value)+'&amp;ccAnonPerm='+encodeURIComponent("AADD"),null,null,null,config.macros.ccCreateWorkspace.createWorkspaceCallback,params);
	return false; 
};

config.macros.ccCreateWorkspace.createWorkspaceCallback = function(status,params,responseText,uri,xhr) {
	if(xhr.status==201){
		params.w.addStep("Please wait", "This could take afew minutes depending on your internet connection.<img src='http://www.ajaxload.info/cache/FF/FF/FF/00/00/00/37-0.gif'/>"+"<br/><br/><input width='300' name='statusMarker'/>");
		params.w.setButtons([]);
		if(params.selectedPackage) {
	   		var url = store.getTiddlerSlice(params.selectedPackage,'URL');
			loadRemoteFile(url,config.macros.ccCreateWorkspace.fetchFileCallback ,params);
		} else {
			window.location = params.url;
		}
	}else if(xhr.status == 200){
		displayMessage(config.macros.ccCreateWorkspace.errorWorkspaceNameInUse);
	}else if(xhr.status == 403){
		displayMessage(config.macros.ccCreateWorkspace.errorPermissions);	
	}else{
			displayMessage("sd"+responseText);	
	}
};

//}}}
powerpape
|''Description:''|Visual TW |
|''Type:''|tiddlywiki|
|''URL:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Workspace:''|Main|
|''Description:''|Life Stream |
|''Type:''|tiddlywiki|
|''URL:''|http://simonmcmanus.com|
|''image:''|http://127.0.0.1/simonmcmanustheme.jpg|
|''Workspace:''|Main|
|''Description:''|MonkeyPirate|
|''Type:''|tiddlywiki|
|''URL:''|http://mptw.tiddlyspot.com/empty.html|
|''Workspace:''|Main|
|''Description:''|TiddlyThemes |
|''Type:''|tiddlywiki|
|''URL:''|http://tiddlythemes.com|
|''Workspace:''|Main|
|''Description:''|TiddlyVault |
|''Type:''|TiddlyWiki|
|''URL:''|http://tiddlyvault.tiddlyspot.com/|
|''Workspace:''|Main|
|''Description:''|TeamTasks |
|''Type:''|tiddlywiki|
|''URL:''|http://getteamtasks.com/teamtasks.html|
|''image:''|http://127.0.0.1/teamtasks.jpg|
|''Workspace:''|Main|
|''Description:''|TiddlyTools |
|''Type:''|TiddlyWiki|
|''URL:''|http://tiddlytools.com|
|''Workspace:''|Main|
|''Description:''|LocalccTiddly|
|''Type:''|cctiddly|
|''URL:''|http://127.0.0.1/Trunk/|
|''Workspace:''|martin|
powerpape
/***
|''Name:''|smmTheme|
|''Author:''|Saq Imtiaz and Simon McManus|
|''Source''|http://svn.tiddlywiki.org/Trunk/association/serversides/cctiddly/Trunk/tiddlers/themes/smmTheme.tiddler|
|''~CodeRepository:''|http://svn.tiddlywiki.org/Trunk/association/serversides/cctiddly/Trunk/tiddlers/themes/smmTheme.tiddler|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]] |
|''~CoreVersion:''|2.4.1|
|''~PageTemplate:''|##PageTemplate|
|''~tabs:''|##tabs|
|''~OptionsPanel:''|##OptionsPanel|
|''~StyleSheet:''|##StyleSheet|
|''~taskViewTemplate:''|##taskViewTemplate|
|''~taskEditTemplate:''|##taskEditTemplate|
|''~EditTemplate:''|##EditTemplate|
|''~ViewTemplate:''|##ViewTemplate|
***/


!PageTemplate
<!--{{{-->
<div class='header' macro='gradient vert #111 #222'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span><div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
</div>
<div id='bodywrapper'>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' force='true' tiddler='smmTheme##SideBarOptions'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<div id='contentFooter'  macro='gradient vert #222 #111'></div>
</div>
<!--}}}-->

!taskViewTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></div>
<div class='title' macro='view title'>Task : </div>
<div class='task'>
	<table>
	<tr>
		<td class='taskbody' width=100%><div class='viewer' macro='view text wikified'></div></td>
		<td class='taskControls' valign='top'><div class='taskControls' macro='tiddler TaskTiddlerControls'></td>
	</tr>
	</table>
</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='tagClear'></div>
<!--}}}-->

!taskEditTemplate
<!--{{{-->
<div class="editor">
<div class='toolbar' macro='toolbar[[ToolbarCommands::EditToolbar]]'></div>
<div class='title edit' macro='edit title'></div>
<div class='task'>
	<table>
	<tr>
		<td class='taskbody' width=100% height=100%><div class='viewer edit' macro='edit text wikified'></div></div></td>
		<td class='taskControls' valign=top><div class='taskControls' macro='tiddler TaskTiddlerControls'></td>
	</tr>
	</table>
</div>
<div class='subtitle'>Last edited by: <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='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<div class='tagClear'></div>
</div>
<!--}}}-->

!EditTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></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>
<!--}}}-->

!ViewTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='subtitle'>Last edited by: <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='tagClear'></div>
<!--}}}-->

!wizardViewTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
!OptionsPanel
[[help|Help]] <br />[[settings|AdvancedOptions]]<br /><<ccOptions>>

!tabs
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>

!SideBarOptions
<<search {{config.options.search}}>><<closeAll>><<newTiddler label:{{config.macros.newTiddler.label}} text:{{config.macros.newTiddler.text}} title:{{config.macros.newTiddler.title}} tag:"">
<<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel  {{config.macros.ccOptions.options}} 'change TiddlyWiki Options'>><<slider 'chkLoginStatus' 'LoginStatus' {{config.macros.ccLoginStatus.status}} 'Login to make changes'>><<slider chkSliderTabs SideBarTabs {{config.theme.contentTiddler}} {{config.theme.contentTiddlerTooltip}}>>


!StyleSheet
/***
General
***/
/*{{{*/
.tiddler .button:hover {
	background-color:#222;
}
.tiddler .button {
	border:1px solid black;
	line-height:2;
	margin:5px;
	padding:8px;
}

#contentWrapper .tiddler .button {
	margin-left:20px;
}
body .chkOptionInput {
	width:auto;
	float:right;
}

#contentWrapper .wizard .txtOptionInput {
	width:7em;
}

body{
	background: #111;
	color:white;
//	 background-image:url(http://friendster.bigoo.ws/content/layout/film-cartoon/film-cartoon_111.jpg);
//	 background-image:url(http://g.editingmyspace.com/shay773/halloweenbackgrounds/BG1.gif);
}

#backstageCloak {
	opacity:0.9; filter:'alpha(opacity:90)';
	background:#222;
}

#messageArea {
	border:0px;
	color:white;
	background-color:#222;
}

#messageArea .button{
	background:none;
}

#mainMenu br {
	display:none;
}

h1 {
	color:white;
}

#contentWrapper{
	position:relative;
	margin: 2.5em auto;
	width:780px;
	line-height: 1.6em;
	border:1px solid #111;
	font-size: 11px;
	font-family: Lucida Grande, Tahoma, Arial, Helvetica, sans-serif;
	height:1%;
	background-color:#222;
}

.clearAll{
	clear:both;
}

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

/*{{{*/

.siteTitle {
	font-family: 'Trebuchet MS' sans-serif;
	font-weight: bold;
	position:relative;
	top:20px;
	left :20px;
	font-size: 32px;
	color:#eee;
}

.siteSubtitle {
	padding-top:15px;
	font-size: 1.0em;
	display:block; 
	color: #999; margin-top:0.5em !important; margin-top:1em; margin-left:3em;
}

#displayArea {
	margin-left:1.35em;
	margin-right:16.3em;
	margin-top:0;
	padding-top:1em;
	padding-bottom:10px;
}

.tabUnselected {
	background:#222 none repeat scroll 0%;
	color:#999;
}

#sidebar {
	position:inherit;
	float:right;
	display:inline;
}

#tiddlerDisplay .tagging, #tiddlerDisplay .tagged {
	background-color:#222;
	border:none;
	float:none;
}

.sliderPanel .tabsetWrapper .tabContents {
	border-right:none;
	border-color:#999;
	background-color:#111;
}

#sidebarOptions .sliderPanel a{
	padding:3px;
	margin:0px;
	border:2px;
	background-color:#111;
}

.tabsetWrapper {
	position :relative;
}

#sidebar {
	padding-left:0.5em;
	background-color:#222;
	padding-top:1em;
}

#sidebarOptions a {
	margin:17px;
	display:block;
	margin:0.5em 0em;
	padding:0.3em 0.6em;
}

.popup li a {
	padding:12px;
}

#tiddlerDisplay .toolbar a.button, #sidebarOptions a, .toolbar .popup li a, #mainMenu a, #sidebarOptions .sliderPanel input {
	background-color:#111;
	color:#999;
	border:1px solid #111;
}

.wizard  .txtOptionInput {
	text-align:right;
}

a:hover {
	background-color:#222;
	color:#eee
}

#tiddlerDisplay .toolbar a.button:hover, #sidebarOptions a:hover, #mainMenu a:hover, #sidebarOptions .sliderPanel input:hover {
	border:1px dotted #000;
	background-color:#222;
	color:white;
}

#mainMenu a {
	padding:8px 15px 8px 15px;
	margin:10px;
	line-height:40px;
	border:0px solid #eee;
}

#contentWrapper #mainMenu { 
	position:static;
	width:100%;
	float:left;
	text-align:left;
	padding-top:20px;

}
.editor textarea, .editor input,  input, body select {
	border:1px solid #222;
	background-color:#333;
	color:#999;
	padding:3px;
	margin:3px;
}

#sidebarOptions input {
	border:1px solid #999;
	background-color:#00000;
	width:10em;
}

#sidebarTabs {
	margin:0px;
	padding:0px
}

#sidebarTabs .tabContents {
	color:#eee;
	background:#111;
}
.tagged li
{
	display: inline;
}

.tiddler .button {
	color:white;
	padding:0.4em 0.9em 0.4em 0.9em;
	margin:0px 0px 0px 7px;
}

#sideBarOptions .searchButton {
	display:none;
}

#sidebar .sliderPanel {
	border-color:-moz-use-text-color #222 -moz-use-text-color -moz-use-text-color;
	border-style:none solid none none;
	border-width:0 1px 0 0;
	margin-bottom:0.8em;
	margin-left:5px;
	padding:0;
	margin-left:0px;
}

#sidebarOptions .searchButton {
	display:none;
}

.title {
	color:#C0C0C0;
}

.subtitle, .subtitle a {
	color: #999;
	font-size: 1em;margin:0.2em;
	font-variant: small-caps;
}

.wizard .button:hover{
	background-color:#333;
	border:1px solid #444;
	color:white;
}
.selected .toolbar a {
	color:#999;
}

.selected .toolbar a:hover {
	color:#222;
	background:transparent;
	border:1px solid #fff;
}

.viewer pre {
	background:#111111 none repeat scroll 0 0;
	border:1px solid #FFEE88;
}

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

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

a,#sidebarOptions .sliderPanel a, #topMenu a, #topMenu .button {
	color:green;
	background-color:transparent;
}

#sidebarOptions .sliderPanel a:hover, #topMenu a, #topMenu .button:hover {
	color:white;
	background-color:transparent;
	border:0px;
}

#topMenu a, #topMenu .button, .wizard .button {
	padding: 5px 15px;
	margin:9px;
	border:1px solid #999;
	font-weight:bold;
	line-height:40px;
	top:1em;
	color:#eee;
	background-color:#222;
}

#topMenu br {
	display:none;
}

#topMenu a:hover, #topMenu .button:hover {
	background-color:#222;
}

.tagging, .tagged {
	border: 1px solid #eee;
}

.highlight, .marked {
	background:transparent;
	color:#111;
	border:none;
	text-decoration:underline;
}

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

.tiddler {
	padding-bottom: 40px;
}

.viewer th, thead td {
	background: #222;
	border:none;
	color: #fff;
}

.viewer table {
	border:1px dotted #222;
}

table.twtable {
	border-collapse:seperate;
}

.viewer pre {
	border: 1px solid #999;
}

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

.tabSelected {
	background:#111 none repeat scroll 0%;
	border:1px solid #111;
	border-bottom:1px solid black;
	color:#999;
}

.tabContents {
	background:#f7f7f7;
	border:0px;
}

.viewer code {
	background:##222 none repeat scroll 0%;
color:#999;
}

h1,h2,h3,h4,h5 {
	color: #555; border-color:#333; background: transparent; padding-bottom:2px; font-family: Arial, Helvetica, sans-serif;
}

h1 {
	font-size:18px;
}

h2 {
	font-size:16px;
}

h3 {
	font-size: 14px;
}

#contentFooter {
	background:#999;
	clear: both;
	padding: 0.5em 1em;
}

.wizard input {
	border:1px solid #333;
}
#sidebarOptions input {
	border: 1px solid #222;
}

.annotation {
	background-color:green;
	border:1px solid white;
	color:white;
}

.wizardFooter .button{
	background:#222;
	margin:3px;
	padding:0.5em;
	padding-left:1.5em;
	padding-right:1.5em;
	color:white;
	border:1px solid #333;
}
table, .viewer td, .viewer tr, .twtable td, .twtable tr {
	border:0px solid #666666;
}

.tagging .listTitle, .tagged .listTitle, .txtMainTab .tabContents li {
	color:white;
}

body .wizardFooter {
	background:none;
	font-weight:bold;}

.wizardStep {
	border:none;
	background-color:none;
}

body .wizard {
	width:80%;
	padding:10px;
	border:1px solid #EBE6F5;
}

.wizard  th{
	background:#222;
	color:#888;
	padding:3px;
	margin:40px;
};

.wizard, listView twtable {
	border:0px;
};

.wizard {
	padding : 4px 14px 4px 14px;
	font-weight:bold;
	color:#292929;
	border:solid 0px #292929;
	margin-top:1px;
}

.viewer .wizard, body .wizard{
	background:#111;
	margin:2em;
	border:0px;
	border:1px solid #333;
	color:#777;
}

.wizard h1{
	color:#999;
}

.wizard h2{
	padding:4px;
	color:white;
}

body .wizardStep{
	color:#999;
	border:0px;
	margin:0m;
	background:none;
}

body select {
	border:0px;
	padding:3px;
	margin:4px;
}

#backstagePanel {
	border:0px;
	background:none;
	width:60%;
	position:fixed
	padding:0px;
	margin:0px;
	margin-top:-36px;
}

#sidebar .sliderPanel {
	background-color:#222;
	font-size:1em;
}

.viewer .wizardStep table {
	border:0px;
}

.viewer th, .viewer td, .viewer tr, .viewer caption, .twtable th, .twtable td, .twtable tr, .twtable caption {
	border:0px;
	padding:0px;
	margin:0px;
}

.viewer .sortable td  {
	padding:12px;
	margin:21px;
}

.title {
	color:#C0C0C0;
	padding:10px;
}

.viewer table, table.twtable {
	border-collapse:seperated;
	border:0px;
}

.viewer th, .viewer thead td, .twtable th, .twtable thead td {
	border:0px;
	color:white;
}

.twtable th{
	background-color:#333;
	padding:15px;
	margin:15px;
}

table.sortable td.sortedCol {
	background-color:#333;
}

#backstageArea a:hover, #backstageArea a.backstageSelTab {
	background-color:#111;
	color:white;
}
/*}}}*/

[[StyleSheet]]

/***
|''Name:''|purpleTheme|
|''Description:''|A theme with lots of white space and a clean and elegant purple presentation|
|''Author:''|Saq Imtiaz and Simon McManus|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]] |
|''Source''|http://svn.tiddlywiki.org/Trunk/association/serversides/cctiddly/Trunk/tiddlers/themes/purpleTheme.tiddler|
|''CodeRepository''|http://svn.tiddlywiki.org/Trunk/association/serversides/cctiddly/Trunk/tiddlers/themes/purpleTheme.tiddler|
|''~CoreVersion:''|2.4.1|
|''~PageTemplate:''|##PageTemplate|
|''~tabs:''|##tabs|
|''~OptionsPanel:''|##OptionsPanel|
|''~SideBarTabs:''|##SideBarTabs|
|''~StyleSheet:''|##StyleSheet|
|''~taskViewTemplate:''|##taskViewTemplate|
|''~taskEditTemplate:''|##taskEditTemplate|
|''~EditTemplate:''|##EditTemplate|.wizzz
|''~ViewTemplate:''|##ViewTemplate|
***/
!PageTemplate
<!--{{{-->
<div id='bodywrapper'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' force='true' tiddler='purpleTheme##SideBarOptions'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<div id='contentFooter'  macro='gradient vert #eee #ccc'></div>
</div>
<!--}}}-->

!EditTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></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>
<!--}}}-->

!ViewTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='tagClear'></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>
<hr />
<!--}}}-->

!tabs
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>


!SideBarOptions
<<search {{config.options.search}}>><<closeAll>><<newTiddler label:{{config.macros.newTiddler.label}} text:{{config.macros.newTiddler.text}} title:{{config.macros.newTiddler.title}} tag:"">
<<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel  {{config.macros.ccOptions.options}} 'change TiddlyWiki Options'>><<slider 'chkLoginStatus' 'LoginStatus' {{config.macros.ccLoginStatus.status}} 'Login to make changes'>><<slider chkSliderTabs SideBarTabs {{config.theme.contentTitle}} {{config.theme.contentTiddlerTooltip}}>>

!StyleSheet
/***
General
***/
/*{{{*/

body, html{
	background-color: #999999;
	color:#333;
//	background:url(http://www.thefabricdeli.com/assets/images/qud21112-purple.jpg);
//	background:url(http://mr-pc.org/inc/paisleyTileSmall.png);
}

#backstageCloak {
	opacity:0.8; filter:'alpha(opacity:70)';
	background:black;
}
.tiddler .button {
	line-height:4;
	margin:5px;
	padding:8px;
}

body .chkOptionInput {
	width:auto;
	float:right;
}

#contentWrapper .wizard .txtOptionInput {
	width:7em;
}

.wizard  .txtOptionInput{
text-align:right;
	border:1px solid #ccc;
}

#contentWrapper .sliderPanel .tabsetWrapper .tabContents {
	border:0px;
	background-color:white;
}

.header {
	background-color:#eee;
}

#messageArea {
	border:1px solid white;
	background-color:#eee;
}

#messageArea .button {
	background:none;
}

h1 {
	color:black;
}

#contentWrapper {
	position:relative;
	margin: 2.5em auto;
	width:780px;
	line-height: 1.6em;
	border:1px solid #ccc;
	font-size: 11px;
	font-family: Lucida Grande, Tahoma, Arial, Helvetica, sans-serif;
	height:1%;
//	display:table;
	background-color:#eee;
}

.clearAll{
	clear:both;
}

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

/*{{{*/
.siteTitle {
	font-family: 'Trebuchet MS' sans-serif;
	font-weight: bold;
	position:relative;
	top:20px;
	left :20px;
	font-size: 32px;
	color:Purple;
}

.siteSubtitle {
	padding-top:15px;
	font-size: 1.0em;
	display:block;
	color: #999; margin-top:0.5em !important; margin-top:1em; margin-left:3em;
	padding-top:3em;
}

#displayArea {
	margin-left:1.35em;
	margin-right:16.3em;
	margin-top:0;
	padding-top:1em;
	padding-bottom:10px;
}

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

div.tabset {
	margin-bottom:1px;
}

.tabUnselected {
	background:#ddd none repeat scroll 0%;
	color:#999;
	border:1px solid #ccc;
}

#sidebar {
	position:inherit;
	float:right;
	display:inline;
}

#tiddlerDisplay .tagging, #tiddlerDisplay .tagged {
	background-color:#eee;
	border:none;
	float:none;
}

.sliderPanel .tabsetWrapper .tabContents {
	border-right:none;
	border-color:#999;
	background-color:#999;
}

#sidebarOptions .sliderPanel a {
	padding:3px;
	margin:0px;
	border:2px;
	background-color:#999;
}

.tabsetWrapper {
	position :relative;
}

#sidebar{
	padding-left:0.5em;
	background-color:#eee;
	padding-top:1em;
}

#sidebarOptions a {
	margin:17px;
	display:block;
	margin:0.5em 0em;
	padding:0.3em 0.6em;
}

.popup li a {
	margin:0px;
	padding:0px;
	display:inline;
	color:black;
}

.popup {
	background-color:white;
	border:1px solid purple;
}

.popup li a:hover {
	display:inline;
	margin:0px;
	padding:0px;
	background-color:white;
	color:purple;
}

.popup li {
	margin:0px;
	padding:5px;
	background-color:#eee;
}
.popup li:hover {
	background-color:white;
}

#tiddlerDisplay .toolbar a.button, #sidebarOptions a, .toolbar .popup li a, #mainMenu a, .tiddler .button, #sidebarOptions .sliderPanel input {
	border:1px solid white;
	background-color:white;
	color:purple;
}

#tiddlerDisplay .toolbar a.button:hover, #sidebarOptions a:hover,  #mainMenu a:hover, .tiddler .button, #sidebarOptions .sliderPanel input:hover
{
	border:1px solid #ccc;
}

#sidebarOptions a:hover {
border-right:1px solid white;
}

.tagged ul {
	list-style: none;
}

.tagged li {
	display: inline;
}

.zoomer {
	background:none; color:#ddd;
	border:2px solid #ddd;
}

a:active{
	border:1px solid red;
	background-color:#eee;
	color:[[ColorPalette::smmLight1]]
}

a:hover {
	background-color:#eee;
	color:[[ColorPalette::smmLight1]]
}

#backstageArea,#backstageArea a {
	background:transparent;
	color:white;
}

#mainMenu a {
	padding:8px 15px 8px 15px;
	margin:10px;
	line-height:40px;
	border:1px solid #eee;
}

#contentWrapper #mainMenu{
	position:static;
	width:100%;
	float:left;
	text-align:left;
	padding-top:20px;
}

.editor textarea, .editor input, input, body select {
	border:1px solid #ccc;
	background-color:white;
	color:#999;
	padding:3px;
	margin:3px;
}

#sidebarOptions input {
	width:85%;
	margin-left:-0.1em;}

#sidebarTabs {
	margin:0px;
	padding:0px
}

#sidebarTabs .tabContents {
	color:[[ColorPalette::smmLight1]];
	background:#999;
}

#contentWrapper .tiddler .button {
margin:0.4em;
padding:0.4em 0.8em;
}

#sideBarOptions .searchButton{
	display:none;
}

#sidebar .sliderPanel {
	margin-left:5px;
	border:0px;
	padding:0em;
	border-right:1px solid #eee;
	margin-bottom:0.8em;
}

#sidebarOptions .searchButton {
	display:none;
}

.title {
	color:#C0C0C0;
}

.subtitle, .subtitle a {
	color: #999;
	font-size: 1em;margin:0.2em;
	font-variant: small-caps;
}

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

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

a,#sidebarOptions .sliderPanel a, #topMenu a, #topMenu .button {
	color:purple;
	background-color:transparent;
}

#sidebarOptions .sliderPanel a:hover, #topMenu a, #topMenu .button:hover {
	color:black;
	background-color:transparent;
	border:0px;
}

 
#topMenu a, #topMenu .button {
	padding: 5px 15px;
	margin:9px;
	border:1px solid #999;
	font-weight:bold;
	line-height:40px;
	top:1em;
	color:[[ColorPalette::smmLight1]];
	background-color:#eee;
}

#topMenu br {
	display:none;
}

#topMenu a:hover, #topMenu .button:hover {
	background-color:#eee;
}

.tagging, .tagged {
	border: 0px dotted [[ColorPalette::smmLight1]];
}

.highlight, .marked {
	background:transparent;
	color:#999;
	border:none;
	text-decoration:underline;
}

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

.viewer th, thead td {
	background: #eee;
	border:none;
	color: #fff;
}

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

table.twtable {
	border-collapse:seperate;
}

.viewer pre {
	background-color:white;
	border: 1px dotted #999;
}

hr {
	border: dotted 1px #ccc;
}

#sidebarOptions .sliderPanel .tabUnselected {
	background:#eee none repeat scroll 0%;
	border:0px solid #999;
	color:#999;
}

.tabSelected, #sidebarOptions .sliderPanel .tabSelected {
	background:white none repeat scroll 0%;
	border:1px solid #ddd;
	border-bottom:1px solid white;
	color:#999;
}

.tabContents {
	background:#f7f7f7;
	border:0px;
}

.viewer code {
	background:##eee none repeat scroll 0%;
	color:#999;
}

h1,h2,h3,h4,h5 {
	color: #555; 
	border-color:#333; 
	background: transparent; 
	padding-bottom:2px; 
	font-family: Arial, Helvetica, sans-serif;
}

h1 {
	font-size:18px;
}

h2 {
	font-size:16px;
	border-bottom:1px solid #FFF;
}

h3 {
	font-size: 14px;
	border-bottom:1px solid #FFF;
}

.annotation {
	background-color:purple;
	border:1px solid white;
	color:white;
}

#contentFooter {
	background:#999;
	clear: both;
	padding: 0.5em 1em;
}

.button, .wizard .button:hover {
	border:0px;
}

.sliderPanel input  {
	border:1px solid #777;
	background-color:white;
	color:#777;	
}

#contentWrapper .tiddler .button:hover {
	border:1px solid;
}

table, .viewer td, .viewer tr, .twtable td, .twtable tr {
	border:0px solid #666666;
}

body .wizardFooter {
	margin:0px;
	padding-top:0px;
	background:white;
	font-weight:bold;
	padding-left:10em;
}

.wizardStep {
	padding:0px;
	border:none;
	background-color:none;
} 
	
.wizard  th{
	background:white;
	color:#888;
	padding:3px;
	margin:40px;
};

.wizard, listView twtable {
	border:0px; 
};

.wizard {
	color:#292929;
}

.viewer .wizard, body .wizard{
	background:white;
	margin:2em;
	border:1px solid #CCCCCC;
	color:#999;
}

.wizard h1 {
	color:#999;
	padding-top:10px;
	padding-bottom:10px;
}

.wizard h2 {
	color:black;
}

body .wizardStep {
	color:#999;
	border:0px;
	margin:0m;
	background:white;	
}

body select {
	border:0px;
	padding:3px;
	margin:4px;
}

#backstageArea a:hover {
	background-color:white;
}

#backstagePanel {
	background:none;
	width:60%;
	position:fixed
	padding:0px;
	margin:0px;
	margin-top:-36px;
}

#backstageToolbar a.backstageSelTab {
	background-color:white;
	border:1px solid white;
}

#sidebar .sliderPanel {
	background-color:#eee;
	font-size:1em;
}

.viewer .wizardStep table {
	border:0px;
}

.viewer th, .viewer td, .viewer tr, .viewer caption, .twtable th, .twtable td, .twtable tr, .twtable caption {
	border:0px;
	padding:0px;
	margin:0px;
}

.viewer .sortable td {
	padding:12px;
	margin:21px;
}

.title {
	color:#777;
	padding:0px;
}

.viewer table, table.twtable {
	border-collapse:seperated;
	border:0px;
}

.viewer th, .viewer thead td, .twtable th, .twtable thead td {
	border:0px;
	background-color:white;
	color:black;
}

.twtable th{
	background-color:#eee;
	padding:15px;
	margin:15px;
}

table.sortable td.sortedCol {
	background-color:white;
}
/*}}}*/

[[StyleSheet]]
powerpape
config.macros.taggedTabs={};

config.macros.taggedTabs.handler=function(place,macroName,params,wikifier,paramString,tiddler,errorMsg){
	var params = paramString.parseParams("taggedTabset",null,true,false,false);
	var tagged = store.getTaggedTiddlers(params[1].value,"title").reverse();
	var cookie = "taggedTabs";
	var wrapper = createTiddlyElement(null,"div",null,"tabsetWrapper taggedTabset" + cookie);
	var tabset = createTiddlyElement(wrapper,"div",null,"tabset");
	var validTab = false;
	tabset.setAttribute("cookie",cookie);
	for(var t=0; t<tagged.length; t++) {
		var label = tagged[t].title;
		if(label=='ccLogin') 
			tabLabel = config.macros.ccLogin.buttonLogin;
		else
			tabLabel = label;
		var prompt = tagged[t].title;
		var tab = createTiddlyButton(tabset,tabLabel,prompt,config.macros.tabs.onClickTab,"tab tabUnselected");
		tab.setAttribute("tab",label);
		tab.setAttribute("content",label);
		if(config.options[cookie] == label)
			validTab = true;
	}
	if(!validTab)
		config.options[cookie] = tagged[0].title;
	place.appendChild(wrapper);
	config.macros.tabs.switchTab(tabset, config.options[cookie]);
	
	setStylesheet("div.tiddler .tab {font-size:1.2em;  font-weight:bold;padding-left:2em; padding-right:2em; margin-left:0px; margin-right:1em; padding-bottom:2px}"+
	"div.tiddler .wizard { margin:0px; }"+
	" div.tabContents .wizard { margin:0px; }"+
	".tabsetWrapper .wizard h1 {display:none}"+
	".tabsetWrapper .wizard h2 {padding:0.5em}"+
	".viewer {float:right; width:90%;}"+

"div.viewer  div.tabsetWrapper{width:90%}"+
	"a.tabSelected{ filter:'alpha(opacity:60)'; }"+
	"div.tabset {padding:0px}"+
	"div.tabContents {padding:0px; background:transparent}",
	 "taggedTabs");
	
};



//}}}
/***
|Name|TaggedTemplateTweak|
|Source|http://www.TiddlyTools.com/#TaggedTemplateTweak|
|Documentation|http://www.TiddlyTools.com/#TaggedTemplateTweakInfo|
|Version|1.4.1|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Story.prototype.chooseTemplateForTiddler()|
|Description|use alternative ViewTemplate/EditTemplate for tiddler's tagged with specific tag values|
This tweak extends story.chooseTemplateForTiddler() so that ''whenever a tiddler is marked with a specific tag value, it can be viewed and/or edited using alternatives to the standard tiddler templates.'' 
!!!!!Documentation
>see [[TaggedTemplateTweakInfo]]
!!!!!Revisions
<<<
2008.08.29 [1.4.1] corrected handling for tiddlers with no matching tagged template when non-default theme is in effect (e.g., use "MyTheme##ViewTemplate").
| please see [[TaggedTemplateTweakInfo]] for previous revision details |
2007.06.11 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
	
version.extensions.TaggedTemplateTweak= {major: 1, minor: 4, revision: 1, date: new Date(2008,8,29)};

Story.prototype.taggedTemplate_chooseTemplateForTiddler = Story.prototype.chooseTemplateForTiddler
Story.prototype.chooseTemplateForTiddler = function(title,template)
{
	// get default template from core
	var coreTemplate=this.taggedTemplate_chooseTemplateForTiddler.apply(this,arguments);

	// if the tiddler doesn't exist yet or is untagged, return core result
	var tiddler=store.getTiddler(title);
	if (!tiddler || !tiddler.tags.length)
		return coreTemplate;

	// split core template into theme prefix and template name
	var theme="";
	var template=coreTemplate;
	var parts=template.split(config.textPrimitives.sectionSeparator);
	if (parts[1]) { theme=parts[0]; template=parts[1]; }
	else theme=config.options.txtTheme||""; // fallback if theme is not specified
	theme+=config.textPrimitives.sectionSeparator;

	// look for template whose prefix matches a tag on this tiddler (if any)
	for (i=0; i<tiddler.tags.length; i++) {
		var t=tiddler.tags[i]+template; // add tag prefix to template
		var c=t.substr(0,1).toUpperCase()+t.substr(1); // capitalized for WikiWord title
		if (store.getTiddlerText(theme+t))	{ return theme+t; } // theme##tagTemplate
		if (store.getTiddlerText(theme+c))	{ return theme+c; } // theme##TagTemplate
		if (store.getTiddlerText(t)) 		{ return t; }	     // tagTemplate
		if (store.getTiddlerText(c))		{ return c; }	     // TagTemplate
	}
	return coreTemplate; // no matching tag, return core result
}

/***
|''Name''|ServerSideSavingPlugin|
|''Description''|server-side saving|
|''Author''|FND|
|''Version''|0.3.2|
|''Status''|@@experimental@@|
|''Source''|http://svn.tiddlywiki.org/Trunk/association/plugins/ServerSideSavingPlugin.js|
|''License''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''Requires''|[[ServerConfig]]|
|''Keywords''|serverSide|
!Notes
This plugin relies on a dedicated configuration plugin to be present.
The specific nature of this plugins depends on the respective server.
!Revision History
!!v0.1 (2008-11-24)
* initial release
!!v0.2 (2008-12-01)
* added support for local saving
!!v0.3 (2008-12-03)
* added Save to Web macro for manual synchronization
!To Do
* conflict detection/resolution
* rename to ServerLinkPlugin?
* attempt to determine default adaptor (and defaultCustomFields) from systemServer tiddlers
* handle deleting/renaming (e.g. by hijacking the respective commands and creating a log)
!Code
***/
//{{{
if(!version.extensions.ServerSideSavingPlugin) { //# ensure that the plugin is only installed once
version.extensions.ServerSideSavingPlugin = { installed: true };

if(!config.extensions) { config.extensions = {}; } //# obsolete from v2.4.2

(function(plugin) { //# set up alias

if(!plugin || !plugin.adaptor) {
	throw "Missing dependency: ServerConfig";
}

plugin = {
	adaptor: plugin.adaptor, //# N.B.: expects config.extensions.ServerSideSavingPlugin.adaptor to be set
	locale: {
		saved: "%0 saved successfully",
		saveError: "Error saving %0: %1",
		deleted: "Removed %0",
		deleteError: "Error removing %0: %1",
		deleteLocalError: "Error removing %0 locally",
		removedNotice: "This tiddler has been deleted."
	},

	sync: function() {
		store.forEachTiddler(function(title, tiddler) {
			if(tiddler.fields.deleted) {
				plugin.removeTiddler(tiddler);
			} else if(tiddler.isTouched() && tiddler.getServerType() && tiddler.fields["server.host"]) {
				plugin.saveTiddler(tiddler);
			}
		});
	},

	saveTiddler: function(tiddler) {
		var adaptor = new this.adaptor();
		var context = {
			tiddler: tiddler,
			changecount: tiddler.fields.changecount
		};
		context.workspace = tiddler.fields["server.workspace"];
		var req = adaptor.putTiddler(tiddler, context, {}, this.saveTiddlerCallback);
		return req ? tiddler : false;
	},

	saveTiddlerCallback: function(context, userParams) {
		var tiddler = context.tiddler;
		if(context.status) {
			if(tiddler.fields.changecount == context.changecount) { //# check for changes since save was triggered
				tiddler.clearChangeCount();
			} else if(tiddler.fields.changecount > 0) {
				tiddler.fields.changecount -= context.changecount;
			}
			displayMessage(plugin.locale.saved.format([tiddler.title]));
			store.setDirty(false);
		} else {
			displayMessage(plugin.locale.saveError.format([tiddler.title, context.statusText]));
		}
	},

	removeTiddler: function(tiddler) {
		var adaptor = new this.adaptor();
		context = { tiddler: tiddler };
		context.workspace = tiddler.fields["server.workspace"];
		var req = adaptor.deleteTiddler(tiddler, context, {}, this.removeTiddlerCallback);
		return req ? tiddler : false;
	},

	removeTiddlerCallback: function(context, userParams) {
		var tiddler = context.tiddler;
		if(context.status) {
			if(tiddler.fields.deleted) {
				store.deleteTiddler(tiddler.title);
			} else {
				displayMessage(plugin.locale.deleteError.format([tiddler.title]));
			}
			displayMessage(plugin.locale.deleted.format([tiddler.title]));
			store.setDirty(false);
		} else {
			displayMessage(plugin.locale.deleteLocalError.format([tiddler.title, context.statusText]));
		}
	}
};

config.macros.saveToWeb = { // XXX: hijack existing sync macro?
	locale: {
		btnLabel: "save to web",
		btnTooltip: "synchronize changes",
		btnAccessKey: null
	},

	handler: function(place, macroName, params, wikifier, paramString, tiddler) {
		createTiddlyButton(place, this.locale.btnLabel, this.locale.btnTooltip,
			plugin.sync, null, null, this.locale.btnAccessKey);
	}
};

// hijack saveChanges to trigger remote saving
plugin.saveChanges = saveChanges;
saveChanges = function(onlyIfDirty, tiddlers) {
	if(window.location.protocol == "file:") {
		plugin.saveChanges.apply(this, arguments);
	} else {
		plugin.sync();
	}
};

// override removeTiddler to flag tiddler as deleted
TiddlyWiki.prototype.removeTiddler = function(title) { // XXX: should override deleteTiddler instance method?
	var tiddler = this.fetchTiddler(title);
	if(tiddler) {
		tiddler.tags = ["excludeLists", "excludeSearch", "excludeMissing"];
		tiddler.text = plugin.locale.removedNotice;
		tiddler.fields.deleted = true; // XXX: rename to removed/tiddlerRemoved?
		tiddler.incChangeCount();
		this.notify(title, true);
		this.setDirty(true);
	}
};

})(config.extensions.ServerSideSavingPlugin); //# end of alias

// override saveTiddler to fix core bug (ticket #769) -- XXX: to be fixed in TiddlyWiki v2.4.2
Story.prototype.saveTiddler = function(title,minorUpdate)
{
	var tiddlerElem = this.getTiddler(title);
	if(tiddlerElem) {
		var fields = {};
		this.gatherSaveFields(tiddlerElem,fields);
		var newTitle = fields.title || title;
		if(!store.tiddlerExists(newTitle))
			newTitle = newTitle.trim();
		if(store.tiddlerExists(newTitle) && newTitle != title) {
			if(!confirm(config.messages.overwriteWarning.format([newTitle.toString()])))
				return null;
		}
		if(newTitle != title)
			this.closeTiddler(newTitle,false);
		tiddlerElem.id = this.tiddlerId(newTitle);
		tiddlerElem.setAttribute("tiddler",newTitle);
		tiddlerElem.setAttribute("template",DEFAULT_VIEW_TEMPLATE);
		tiddlerElem.setAttribute("dirty","false");
		if(config.options.chkForceMinorUpdate)
			minorUpdate = !minorUpdate;
		if(!store.tiddlerExists(newTitle))
			minorUpdate = false;
		var newDate = new Date();
		var extendedFields = store.tiddlerExists(newTitle) ? store.fetchTiddler(newTitle).fields : (newTitle!=title && store.tiddlerExists(title) ? store.fetchTiddler(title).fields : merge({},config.defaultCustomFields));
		for(var n in fields) {
			if(!TiddlyWiki.isStandardField(n))
				extendedFields[n] = fields[n];
		}
		var tiddler = store.saveTiddler(title,newTitle,fields.text,minorUpdate ? undefined : config.options.txtUserName,minorUpdate ? undefined : newDate,fields.tags,extendedFields);
		autoSaveChanges(null,[tiddler]);
		return newTitle;
	}
	return null;
};

} //# end of "install only once"
//}}}
/***
|''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);
}
//}}}
/***
|Name|TaggedTemplateTweak|
|Source|http://www.TiddlyTools.com/#TaggedTemplateTweak|
|Documentation|http://www.TiddlyTools.com/#TaggedTemplateTweakInfo|
|Version|1.4.1|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|Story.prototype.chooseTemplateForTiddler()|
|Description|use alternative ViewTemplate/EditTemplate for tiddler's tagged with specific tag values|
This tweak extends story.chooseTemplateForTiddler() so that ''whenever a tiddler is marked with a specific tag value, it can be viewed and/or edited using alternatives to the standard tiddler templates.'' 
!!!!!Documentation
>see [[TaggedTemplateTweakInfo]]
!!!!!Revisions
<<<
2008.08.29 [1.4.1] corrected handling for tiddlers with no matching tagged template when non-default theme is in effect (e.g., use "MyTheme##ViewTemplate").
| please see [[TaggedTemplateTweakInfo]] for previous revision details |
2007.06.11 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.TaggedTemplateTweak= {major: 1, minor: 4, revision: 1, date: new Date(2008,8,29)};

Story.prototype.taggedTemplate_chooseTemplateForTiddler = Story.prototype.chooseTemplateForTiddler
Story.prototype.chooseTemplateForTiddler = function(title,template)
{
	// get default template from core
	var coreTemplate=this.taggedTemplate_chooseTemplateForTiddler.apply(this,arguments);

	// if the tiddler doesn't exist yet or is untagged, return core result
	var tiddler=store.getTiddler(title);
	if (!tiddler || !tiddler.tags.length)
		return coreTemplate;
	// split core template into theme prefix and template name
	var theme="";
	var template=coreTemplate;
	var parts=template.split(config.textPrimitives.sectionSeparator);
	if (parts[1]) { theme=parts[0]; template=parts[1]; }
	else theme=config.options.txtTheme||""; // fallback if theme is not specified
	theme+=config.textPrimitives.sectionSeparator;

	// look for template whose prefix matches a tag on this tiddler (if any)
	for (i=0; i<tiddler.tags.length; i++) {
		var t=tiddler.tags[i]+template; // add tag prefix to template
		var c=t.substr(0,1).toUpperCase()+t.substr(1); // capitalized for WikiWord title
		if (store.getTiddlerText(theme+t))	{ return theme+t; } // theme##tagTemplate
		if (store.getTiddlerText(theme+c))	{ return theme+c; } // theme##TagTemplate
		if (store.getTiddlerText(t)) 		{ return t; }	     // tagTemplate
		if (store.getTiddlerText(c))		{ return c; }	     // TagTemplate
	}
	return coreTemplate; // no matching tag, return core result
}
//}}}
powerpape
<<ccEditWorkspace>>
<<ccLogin>>
<<ccCreateWorkspace>>
<<ccStats>>
[[Login]]
<<taggedTabs loginBox>>
<div class='toolbar' macro='toolbar closeTiddler closeOthers'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
handle/proxy.php?feed=
<<ccFile>>
<<ccUpload>>
|~ViewToolbar|closeTiddler closeOthers +editTiddler > fields syncing permalink revisions references jump|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddlerHosted|
<<ccChangePassword>>
<<taggedTabs loginBox>>
powerpape
More info on Osmosoft can be found at [[osmosoft.com|http://osmosoft.com/]]


Please see the TiddlyWiki community wiki documentation : http://tiddlywiki.org/wiki/TiddlyWiki_Markup

~TiddlyWiki is a single html file containing all the characteristics of a wiki - all the content, all the functionality (including editing, saving, tagging and searching) and the style sheet. Because it's a single file, it's very portable - you can email it, put it on a web server or share it via a USB stick. ccTiddly provides a serverside backend to ~TiddlyWiki so you can store your content on the web and access it from anywhere. 

Together the two provide a powerful combination which allows you to collaborate with your colleages online, you can then tear a copy of all the work to take on a plane or train journey.  When you have found an internet connection again you can sync your changes with the online copy and you will be notified of any conflicts. 

Some things you could do with ccTiddly workspace include: 

	* A team/public Website
	* A Blog
    * A personal notebook
    * A GTD ("Getting Things Done") productivity tool
    * A collaboration/communication tool
	* A TeamTasks implementation
    * For building websites (this site is a TiddlyWiki file!)
    * For rapid prototyping
    * ...and much more!

You can import and export data to and from all sorts of places. Check out the backstage > import options. There's a more detailed list of features here.

<<slider cctHelpIntro [[ccTiddly Introduction]] "ccTiddly Introduction »" "A introduction to the basics of TiddlyWiki.">>
<<slider cctHelpFormatting [[TiddlyWiki Formatting Guide]] "Tiddly Wiki Formatting Guide »" "A basic guide to TiddlyWiki formatting.">>
<<slider cctHelpccTiddlyMacros [[ccTiddly Macros]] "ccTiddly Macros »" "A Guide to all the ccTiddly Macros">>
<<slider cctHelpTiddlyWikiMacros [[TiddlyWiki Macros]] "TiddlyWiki Macros »" "A Guide to all the TiddlyWiki Macros">>

!!!{{{<<today>>}}}
Shows current date.

!!!{{{<<version>>}}} 
This macro shows the version number of the current TiddlyWiki document.

!!!{{{<<Alltags>>}}}
Lists all tags. Clicking on a tag lists all the tiddlers assigned that tag. 

!!!{{{<<List [type]>>}}} 
Parameters : (all (default), missing, orphans, shadowed, touched, filter)

!!!{{{<<Timeline [date] [length] [format]>>}}} 
 The timeline macro creates a list of tiddlers sorted by a date specified.

Example : 
{{{<<timeline "modified" "0" "ddd, YYYY-0MM-0DD">>}}}

Produces : 
<<timeline "modified" "0" "ddd, YYYY-0MM-0DD">>
!!!{{{<<Slider cookie tiddler label tooltip>>}}}
The slider macro allows embedding tiddlers within another tiddler, with the option to toggle the visibility of the transcluded contents.

    * cookie: variable to save the state of the slider
    * tiddler: name of the tiddler to include in the slider
    * label: title text of the slider
    * tooltip: tooltip text of the slider 

 Example
{{{<<slider chkTestSlider [[OptionsPanel]] "Options" "Open advanced options">>}}}

Produces : 
<<slider chkTestSlider [[OptionsPanel]] "Options" "Open advanced options">>
!!!{{{<<Tabs>>}}}
The tabs macro creates an area where it displays one of several tiddlers alternately, as the user clicks on the tab labels at the top.

It is used like this:

{{{<<tabs ID Label1 Tip1 Tiddler1 Label2 Tip2 Tiddler2 [Label3 ...]>>}}}

produces :
<<tabs ID Label1 Tip1 Tiddler1 Label2 Tip2 Tiddler2 [Label3 ...]>>

    * ID: specifies the name of a cookie used to save the information about which tab was displayed last.
    * Label1, Label2, ... define the labels that are displayed at the top of the area for each tab
    * Tip1, Tip2, ... define tooltips that explain, somewhat more verbosely than the labels, what you can expect to find on each tab.
    * Tiddler1, Tiddler2, ... name the tiddlers that are displayed on each tab. 

Obviously, there must be exactly three strings for each tab.

The syntax for the tabs macro looks like this:

{{{<<tabs txt[cookieName]
	"[label]" "[title]" [[tiddler]]
	"[label]" "[title]" [[tiddler]]
	...
     >>}}}

produces :

<<tabs txt[cookieName]
	"[label]" "[title]" [[tiddler]]
	"[label]" "[title]" [[tiddler]]
	...
     >>

!!!{{{<<Tagging [tag]>>}}}
This macro generates a list of tiddlers that carry the specified tag.

<<tagging [tag]>>

If the tag parameter is not specified, the current tiddler's name will be used instead.
!!!{{{<<Tagchooser>>}}}
!!!{{{<<NewJournal>>}}}
This macro generates a button to create a journal tiddler, using the current time and date as title.

It is otherwise identical to the NewTiddler macro.

Example : 
{{{<<newJournal [date format]>>}}}

Produces : 
<<newJournal [date format]>>

The optional parameter can be used to specify a custom date format.

In addition, all of the NewTiddler macro's parameters are valid.

!!!{{{<<NewTiddler>>}}}

 Usage

<<newTiddler [parameters]>>

Parameters

This macro uses named parameters. All parameters are optional.
|Parameter|Description|
|label |button label|
|prompt|button tooltip|
|title|title for the new tiddler (defaults to "New Tiddler")|
|text|contents for the new tiddler|
|tag|tag to be applied to the new tiddler (parameter can be used repeatedly to specify multiple tags)|
|accessKey|single letter to use as access key to trigger the button|
|focus|which of the editable fields to default the focus to (e.g. "title", "text", "tags")|
|template|template tiddler to use to display the new tiddler (defaults to EditTemplate)|
|fields|custom fields to be assigned to the new tiddler, in name:value;name:value; format|

Only fields contained as input fields in the specified template can be primed with an initial value.
[edit] Example

<<newTiddler
	label:"New Tiddler"
	text:"Hello world."
	tag:"test"
	tag:"an example"
	accessKey:"1"
	focus:"tags"
>>



!!!{{{<<Savechanges>>}}}



!!!{{{<<Search>>}}}

This macro creates an input field to perform full-text searches on a TiddlyWiki document's tiddler contents.
[edit] Usage

Example : 
{{{<<search [value]>>}}}

Produces : 

<<search [value]>>

By specifiying the value parameter, the search form can be "preloaded" with the desired term.
[edit] Options
This section is still incomplete. You can help by contributing to its expansion.
Please improve the article, or discuss the issue on the talk page.

    * case-sensitive
    * regular expressions 


!!!{{{<<Gradient>>}}}

The Gradient macro allows simple horizontal and vertical coloured gradients. They are constructed from coloured HTML elements, and don't require any images to work.
The Gradient macro is an extended macro that processes the text after it up until the next '

>>

' sequence. It looks like this:
Example : 
{{{<<gradient vert #ffffff #ffdddd #ff8888>>gradient fill>>}}}

Produces : 
<<gradient vert #ffffff #ffdddd #ff8888>>gradient fill>>

The first parameter can be vert or horiz to indicate the direction of the gradient. The following parameters are two or more colours (CSS RGB(r,g,b) format is also acceptable). The macro constructs a smooth linear gradient between each of the colours in turn.

Inline CSS definitions can be added to gradient fills like this:


Example : 
{{{<<gradient vert #000000 #660000 #aa2222>>color:#ffffff;font-size:12pt;Darkness>>}}}

Produces : 
<<gradient vert #000000 #660000 #aa2222>>color:#ffffff;font-size:12pt;Darkness>>

!!!{{{<<Closeall>>}}}
!!!{{{<<Permaview>>}}}
Changes the browser address bar to a permalink to the current Tiddler or the set of open tiddlers. It is used with the ToolbarMacro like this:

Example : 
{{{<<toolbar permalink>>}}}
Produces : 
<<toolbar permalink>>

!!!{{{<<Toolbar>>}}}
The ToolbarMacro is used in the TemplateMechanism to define the toolbar that appearthat appear either in EditMode or in ViewMode. The arguments to the ToolbarMacro is a list of command names, as discussed in the CommandMechanism..

You can precede a command name with a "+" to specify a default command that is automatically chosen when a tiddler is double-clicked, or the ctrl-Enter key combination pressed. Similarly, precede it with "-" to specify a command to be chosen when the Escape key is pressed.
!!!{{{<<Annotations>>}}}

!!!{{{<<Edit>>}}}
The command <<edit>> switches from ViewMode to EditMode. The EditMacro is either a double mouse click inside the tiddler or the entry 'edit' in the tiddler's Toolbar. It is used in ViewTemplate as ToolbarMacro like this:
Example : 
{{{<<toolbar +editTiddler>>}}}
Produces : 
<<toolbar +editTiddler>>

!!!{{{<<Message>>}}}
!!!{{{<<Refreshdisplay>>}}}
!!!{{{<<View fieldname how...>>}}}
Retrieves a specified field (given by fieldname) from the tiddler to be displayed and outputs its value in one of the following ways (the optional //how// parameter):

    * (unspecified): render as is (without formatting)
    * link: format as a link (using createTiddlyLink)
    * wikified: format using all the normal rendering rules
    * date: expects a value of the form YYYYMMDDHHMM and outputs it using either a specified format (...) or config.views.wikified.dateFormat 

The standard field names are:

    * title - the tiddler title
    * tiddler - the tiddler title (as well)
    * text - the text of the tiddler
    * modifier - the person who last modified it
    * modified - date&time of last modification
    * created - when it was created
    * tags - the tiddler tags 

If your tiddlers contain custom fields, they could be specified as well.

The view macro is used extensively in the standard tiddler rendering templates (ViewTemplate and EditTemplate).




!!!{{{<<ccUpload>>}}}
If enabled on the server users can upload files to the ccTiddly server

!!!{{{<<ccLogin>>}}}
Displays the login box if the users is not logged in, if the user is logged in they are shown a logout button

!!!{{{<<ccLoginStatus>>}}}
As with {{{<<ccLogin>>}}} except this displays a link to the login tiddler so can be used where space is tight. 

!!!{{{<<ccCreateWorkspace>>}}}
Allows users with permission to create a workspace and define its permissions.

!!!{{{<<ccEditWorkspace>>}}}
Allows admin users to change the permission of a workspace.

!!!{{{<<ccAdmin>>}}}
Allows admin users to add and remove admin users for a workspace.

!!!{{{<<ccVersion>>}}}
Allows users to confirm which version of ccTiddly they are using.
<<ccAdmin>>
(this content is a work in progress)

!!!ccTiddly Tiddlers 

[[AnonDefaultTiddlers]]

Allows you to specify a different set of tiddlers to be loaded for anonymous users. Logged in users will be shown the [[DefaultTiddlers]].

[[ccAssignments]]

!!! Predefined ccTiddly Tags 

!!!!wizard
Displays the tiddler without showing the date editor tags or title. 

!!!!private
Only administrators of a workspace can read tiddlers tagged private.

!!! Working Offline : 
To take a copy of a ccTiddly workspace offline add &standalone=1 to the end of the URI and you will be prompted to download an offline file.

powerpape
merge(config.options, {search:"search.."})


config.theme = {
	contentTitle : ' ssss »',
	contentToolTip : 'aaaa',
	contentTiddler : 'Content »',
	contentTiddlerTooltip : 'click to view TiddlyWiki content'
};
merge(config.macros.ccAbout,{
	buttonBackstageText:"about",
	buttonBackstageTooltip:"Find out more about ccTiddly ",
	stepAboutTitle:"About",
	stepAboutTextStart:"You are running ccTiddly ",
	stepAboutTextEnd:"More info about ccTiddly can be found  at <a  target=new href=http://www.tiddlywiki.org/wiki/CcTiddly>http://www.tiddlywiki.org/wiki/CcTiddly</a><br/><br/>  More information about TiddlyWiki can be found at <a target=new href=http://www.tiddlywiki.com>http://www.tiddlywiki.com</a><br/>"
});

merge(config.macros.ccChangePassword,{
	title:"Change Password", 
	subTitle : "for user ", 
	step1Html: " <label for='old'>Old Password </label><input name='old' type='password'/><br/> <label for='new1'>New Password </label> <input  name='new1' type='password' /><br /><label for='new2'>Repeat Password</label> <input  name='new2' type='password' /> ",   
	buttonChangeText:"Change Password",
	buttonChangeToolTip:"Click to change your password", 
	buttonCancelText:"Cancel",
	buttonCancelToolTip:"Click to cancel",
	noticePasswordsNoMatch : "Your new passwords do not match", 
	noticePasswordWrong : "Your password is incorrect.",
	noticePasswordUpdated : "Your Password has been updated", 
	noticePasswordUpdateFailed : "Your Password was NOT updated." 
});

merge(config.macros.ccAdmin,{
	stepAddTitle:"Add a new Workspace Administrator",
	WizardTitleText:"Workspace Administration.",
	buttonDeleteText:"Delete Users",
	buttonDeleteTooltip:"Click to delete users.",
	buttonAddText:"Add User",
	buttonAddTooltip:"Click to add user.",
	buttonCancelText:"Cancel",
	buttonCalcelTooltip:"Calcel adding user.",
	buttonCreateText:"Make User Admin",
	buttonCreateTooltip:"Click to make user admin.",
	labelWorkspace:"Workspace: ",
	labelUsername:"Username  : ",
	stepErrorTitle:"You need to be an administrator of this workspace.",
	stepErrorText:"Permission Denied to edit workspace : ",
	stepNoAdminTitle:"There are no admins of this workspace.",
	stepManageWorkspaceTitle:"",
	listAdminTemplate: {
	columns: [	
		{name: 'Selected', field: 'Selected', rowName: 'name', type: 'Selector'},
		{name: 'Name', field: 'name', title: "Username", type: 'String'},	
		{name: 'Last Visit', field: 'lastVisit', title: "Last Login", type: 'String'}
	],
	rowClasses: [
		{className: 'lowlight', field: 'lowlight'}
	]}
});
/*
merge(ccTiddlyAutoSave,{
	msgSaved:"Saved ",
	msgError:"There was an error saving "
});
*/

merge(config.macros.ccCreateWorkspace, {
	wizardTitle:"Create Workspace",
	buttonCreateText:"create",
	buttonCreateWorkspaceText:"Create Workspace",
	buttonCreateTooltip:'Create new workspace',
	errorPermissions:"You do not have permissions to create a workspace.  You may need to log in.",
	msgPleaseWait:"Please wait, your workspace is being created.",
	msgWorkspaceAvailable:"Workspace name is available.",
	errorWorkspaceNameInUse:"Workspace name is already in use.",
	stepTitle:"Please enter workspace name",
	stepCreateHtml:"<input class='input' id='workspace_name' name='workspace_name' value='' tabindex='1' /><span></span><input type='hidden' name='workspace_error'></input><h2></h2><input type='hidden' name='workspace_url'></input>"
});

merge(config.macros.ccEditWorkspace,{
	WizardTitleText:"Edit Workspace Permissions",
	stepEditTitle:null,
	stepLabelCreate:'Create',
	stepLabelRead:'Read',
	stepLabelUpdate:'Edit',
	stepLabelDelete:'Delete',
	stepLabelPermission:'',
	stepLabelAnon:'  Anonymous   ',
	stepLabelUser:' Authenticated   ',
	stepLabelAdmin:' Admin  ',
	buttonSubmitCaption:"Update Workspace Permissions",
	buttonSubmitToolTip:"Update workspace permissions",
	button1SubmitCaption:"ok",
	button1SubmitToolTip:"review permissions",
	step2Error:"Error", 
	errorTextPermissionDenied:"You do not have permissions to edit this workspace permissions.  You may need to log in.",
	errorUpdateFailed:"Permissions Not changed"
});

merge(config.macros.ccFile,{
	wizardTitleText:"Manage Files",
	wizardStepText:"Manage files in workspace ",
	buttonDeleteText:"Delete Files",
	buttonDeleteTooltip:"Click to Delete files.",
	buttonUploadText:"Upload File",
	buttonUploadTooltip:"Click to Upload files.",
	buttonCancelText:"Cancel",
	buttonCancelTooltip:"Click to cancel.",
	labelFiles:"Existing Files ",
	errorPermissionDeniedTitle:"Permission Denied",
	errorPermissionDeniedUpload:"You do not have permissions to create a file on this server. ",
	errorPermissionDeniedView:"You do not have permissions to view files in this workspace. ",
	listAdminTemplate: {
	columns: [	
	{name: 'wiki text', field: 'wikiText', title: "", type: 'WikiText'},
	{name: 'Selected', field: 'Selected', rowName: 'name', type: 'Selector'},
	{name: 'Name', field: 'name', title: "File", type: 'WikiText'},
	{name: 'URI', field: 'URI', title: "URI", type: 'WikiText'},
	{name: 'Size', field: 'fileSize', title: "size", type: 'String'}
	],
	rowClasses: [
	{className: 'lowlight', field: 'lowlight'}
	]}
});

merge(config.macros.ccLogin,{
	WizardTitleText:null,
	usernameRequest:"Username",
	passwordRequest:"Password",
	stepLoginTitle:null,
	stepLoginIntroTextHtml:"<label>username</label><input name=username id=username tabindex='1'><br /><label>password</label><input type='password' tabindex='2' name='txtPassword' class='txtPassword'><input   name='password'>",
	stepDoLoginTitle:"Logging you in",
	stepDoLoginIntroText:"we are currently trying to log you in.... ",
	stepForgotPasswordTitle:"Password Request",
	stepForgotPasswordIntroText:"Please contact your system administrator or register for a new account.  <br /><input id='forgottenPassword' type='hidden' name='forgottenPassword'/>",
	stepLogoutTitle:"Logout",
	stepLogoutText:"You are currently logged in as ",
	buttonLogout:"logout",
	buttonLogoutToolTip:"Click here to logout.",
	buttonLogin:"Login",
	buttonlogin:"login",
	buttonLoginToolTip:"Click to Login.",	
	buttonCancel:"Cancel",
	buttonCancelToolTip:"Cancel transaction ",
	buttonForgottenPassword:"Forgotten Password",	
	buttonSendForgottenPassword:"Mail me a New Password",
	buttonSendForgottenPasswordToolTip:"Click here if you have forgotten your password",
	buttonForgottenPasswordToolTip:"Click to be reminded of your password",
	msgNoUsername:"Please enter a username", 
	msgNoPassword:"Please enter a password",
	msgLoginFailed:"Login Failed, please try again. ", 
	configURL:window.url+"/handle/login.php", 
	configUsernameInputName:"cctuser",
	configPasswordInputName:"cctpass",
	configPasswordCookieName:"cctPass"
});

merge(config.macros.ccLoginStatus,{
	textDefaultWorkspaceLoggedIn:"Viewing default workspace",
	textViewingWorkspace:"Viewing Workspace : ",
	textLoggedInAs:"Logged in as ",
	status:"status »",
	textNotLoggedIn:"You are not logged in.",
	textAdmin:"You are an Administrator."
});

merge(config.macros.ccOptions, {
	linkManageUsers:"users",
	linkPermissions:"permissions",
	linkFiles:"files",
	linkPassword:"password",
	linkCreate:"create",
	linkOffline:"offline",
	linkStats:"statistics",
	options:"options »"	
});

merge(config.macros.register,{
	usernameRequest:"username",
	passwordRequest:"password",
	passwordConfirmationRequest:"confirm password",
	emailRequest:"email",
	stepRegisterTitle:"Register for an account.",
	stepRegisterIntroText:"Hi, please register below.... ",
	stepRegisterHtml:"<label> username</label><input class='input' id='reg_username' name='reg_username' tabindex='1'/><span></span><input type='hidden'  name='username_error'></input><br /><label>email</label><input class='input' name=reg_mail id='reg_mail' tabindex='2'/><span> </span><input type='hidden' name='mail_error'></input><br/><label>password</label><input type='password' class='input' id='password1' name='reg_password1' tabindex='3'/><span> </span><input type='hidden'  name='pass1_error'></input><br/><label>confirm password</label><input type='password' class='input' id='password2' name='reg_password2' tabindex='4'/><span> </span><input type='hidden'  name='pass2_error'></input>",
	buttonCancel:"Cancel",
	buttonCancelToolTip:"Cancel transaction ",
	buttonRegister:"Register",	
	buttonRegisterToolTip:"click to register",
	msgCreatingAccount:"Attempting to create the account for you.", 
	msgNoUsername:"No username entered", 
	msgEmailOk:"Email address is OK.",
	msgNoPassword:"no password entered.",
	msgDifferentPasswords:"Your Passwords do not match.",
	msgUsernameTaken:"The username requested has been taken.",
	msgUsernameAvailable:"The username is available.",
	step2Title:"",
	step2Html:"Please wait while we create you an account...",
	errorRegisterTitle:"Error",
	errorRegister:"User not created, please try again with a different username."
});

merge(config.macros.ccStats,{
	graph24HourTitle:"Last 24 hours",
	graph24HourDesc:"The number of views of this workspace in the past 24 hours",
	graph20MinsTitle:"Last 20 Minutes",
	graph20MinsDesc:"The number of views of this workspace in the last 20 minutes",
	graph7DaysTitle:"Last 7 days",
	graph7DaysDesc:"The number of views of this workspace in the last 7 days.",
	graph5MonthsTitle:"Last 5 months",
	graph5MonthsDesc:"The number of views of this workspace in the past 30 days.",
	errorPermissionDenied:"Permissions Denied to data for %0 You need to be an administrator on the %1 workspace.",
	stepTitle:"Workspace Statistics"
});


// GENERAL NON CCT CONTENT 

config.theme = {
	contentTitle:"content »",
	contentToolTip : "View the TiddlyWiki tabs",
	help : "Help"
};

merge(config.macros.importTiddlers, {
	wizardTitle: "Import tiddlers",
	step1Title: "Step 1: Locate the server or TiddlyWiki file",
	step1Html: "Specify the type of the server: <select name='selTypes'><option value=''>Choose...</option></select><br>Enter the URL here: <input type='text' size=50 name='txtPath'><br><input type='hidden' size=50 name='txtBrowse'><br><hr>...or select a pre-defined feed: <select name='selFeeds'><option value=''>Choose...</option></select>"
});

merge(config.optionsDesc,{
	txtUserName: "",
	chkRegExpSearch: "Enable regular expressions for searches",
	chkCaseSensitiveSearch: "Case-sensitive searching",
	chkIncrementalSearch: "Incremental key-by-key searching",
	chkAnimate: "Enable animations",
	chkSaveBackups: "",
	chkAutoSave: "",
	txtTheme: "Change the TiddlyWiki theme being used",
	chkGenerateAnRssFeed: "",
	chkSaveEmptyTemplate: "",
	chkOpenInNewWindow: "Open external links in a new window",
	chkToggleLinks: "Clicking on links to open tiddlers causes them to close",
	chkHttpReadOnly: "",
	chkForceMinorUpdate: "",
	chkConfirmDelete: "Require confirmation before deleting tiddlers",
	chkInsertTabs: "Use the tab key to insert tab characters instead of moving between fields",
	txtBackupFolder: "",
	txtMaxEditRows: "Maximum number of rows in edit boxes",
	txtFileSystemCharSet: "Default character set for saving changes (Firefox/Mozilla only)"});

merge(config.macros.options,{
	wizardTitle: "Change Settings",
	step1Title: "",
	step1Html: '<input type="hidden" name="markList"></input><br><input type="hidden" checked="false" name="chkUnknown"></input>These options are saved in a cookie.'
});

merge(config.macros.options,{
	wizardTitle:"Advanced settings",
	step1Title:null,
		unknownDescription: "//(unknown)//",
	listViewTemplate: {
		columns: [
			{name: 'Option', field: 'option', title: "", type: 'String'},
			{name: 'Description', field: 'description', title: "", type: 'WikiText'}
			],
			rowClasses: [
						{className: 'lowlight', field: 'lowlight'}
						]
}
});
<link rel='alternate' type='application/rss+xml' title='RSS Feed for ccTiddly workspace : ' href='http://mdlalose.com/recipesindex.xml'/>
config.macros.OpenID={};
merge(config.macros.OpenID,{
	titleOpenID:"",
	buttonOpenIDText:"Login",
	buttonOpenIDToolTip:"Click to use OpenID Login" 
});

config.macros.OpenID.handler=function(place,macroName,params,wikifier,paramString,tiddler,errorMsg){
	var w = new Wizard();
	var me = config.macros.OpenID;
	w.createWizard(place,me.titleOpenID);
	w.addStep(null,"<!--<img width='150px' src='http://openid.net/wp-content/uploads/2007/10/openid_big_logo_text.png'/><br />--><input name='open_id_login' value='%0' size=40 style='background: rgb(255, 255, 255) url(http://www.openid.net/login-bg.gif) no-repeat scroll 0pt 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: rgb(0, 0, 0); padding-left: 18px;'/>".format([decodeURIComponent(cookieString(document.cookie).txtUserName)]));
	w.setButtons([
		{caption: me.buttonOpenIDText, tooltip: me.buttonOpenIDToolTip, onClick: function(){config.macros.OpenID.login(w);  } }
	]);
};

config.macros.OpenID.login = function (w) {
	var iframe = document.createElement("iframe");
	iframe.style.display = "none";
	iframe.src = url+"plugins/OpenID/files/openid/try_auth.php?action=verify&openid_identifier="+w.formElem.open_id_login.value;
	document.body.appendChild(iframe);
	iframe.onload = function() {
		// this is not working properly.
		if(iframe.src.indexOf("finish_auth.php")){
			window.location = iframe.src;	
		}
	};
	document.body.appendChild(iframe);
}

//}}}


<<OpenID>>
To get started with this workspace, you'll need to modify the following tiddlers:
* SiteTitle &amp; 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 workspace is opened when a user is logged in.
* AnonDefaultTiddlers: Contains the names of the tiddlers that you want to appear when the worksace is opened when a user who is not logged in.  This should contain  the login tiddler. [[Login]]
* You can change the permission of this workspace at anytime by opening the [[Manage Users]] and [[Permissions]] tiddlers.<<ccEditWorkspace>>
Eziko!
trial and error in selu+busi's kitchen
1 c  Sour cream
      1 c  Mayonnaise
      1 ts Dried parsley
      1 ts "Beau Monde" by Spice
           -Islands
      1 ts Dried minced onion
      1 ts Dill weed
 
  Mix well, chill, and serve with dipping veggies.

1 qt Milk
      1 pt Heavy cream
    1/2 ts Salt
      1    Vanilla bean
    3/4 c  Long-grained rice
      1 c  Granulated sugar
      1    Egg yolk
  1 1/2 c  Whipped cream
           Raisins (optional)
   
  In a heavy saucepan, combine the milk, cream, salt, vanilla bean and 3/4
  cup of the sugar and bring to a boil. Stirring well, add the rice. Allow
  the mixture to simmer gently, covered, for 1 3/4 hours over a very low
  flame, until rice is soft. Remove from the heat and cool slightly. Remove
  the vanilla bean. Blending well, stir in the remaining 1/4 cup of sugar and
  the egg yolk. Allow to cool a bit more. Preheat the broiler. Stir in all
  but 2 tablespoons of the whipped cream; pour the mixture into individual
  crocks or a souffle dish. (Raisins my be placed in the bottom of the
  dishes, if desired.) After spreading the remaining whipped cream in a thin
  layer over the top, place the crocks or dish under the broiler until the
  pudding is lightly browned. Chill before serving.
from elise.com

3 or 4 ripe bananas, smashed
1/3 cup melted butter
1 cup sugar
1 egg, beaten
1 teaspoon vanilla
1 teaspoon baking soda
Pinch of salt
1 1/2 cup of flour

No need for a mixer for this recipe. Preheat the oven to 180 deg C. With a wooden spoon, mix butter into the mashed bananas in a large mixing bowl. Mix in the sugar, egg, and vanilla. Sprinkle the baking soda and salt over the mixture and mix in. Add the flour last, mix. Pour mixture into a buttered 4x8 inch loaf pan. Bake for 1hr 10min. Cool on a rack. Remove from pan and slice to serve.
hmmm maybe 1hr 10min...
1    Egg
    3/4 c  Brown sugar
      1 ts Vanilla
      3 tb Flour; heaping tablespoons
  1 1/2 ts Baking powder
    1/4 ts Salt
    1/2 ts Nutmeg
    1/2 c  Nuts;chopped;walnuts, pecans
      2 md Apples; pared chopped fine
 
  Break egg into bowl, beat with sugar and vanilla. Add flour, baking powder,
  salt, nutmeg, and blend well. Stir in nuts and chopped apple. Bake in
  greased and floured 9-inch square baking dish or pan, in moderate oven
  (350^) for 30 minutes. Serves 4 to 6.
from [[Chilean Fresh Fruit|www.cffusa.org]]
		
375 grs. (3/4lb) fresh asparagus, cooked

250 grs. (1/2lb) cream cheese, softened

2 teaspoons grated lemon rind

2 tablespoons sour cream

1/4 cup (50grs) butter

2 teaspoons Dijon mustard
		
Puree asparagus in food processor until smooth; remove from bowl/ Process cream cheese with lemon rind, sour cream, butter and mustard until smooth. With motor running add pureed asparagus gradually and process until smooth. Place pate in container, cover and refrigerate several hours or overnight. This recipe is not suitable to freeze.

Serves 6-8
serves 4, from [[UKTVFood|http://www.uktvfood.co.uk/]] 

Ingredients
Main:
12 large green asparagus spears
12 slices Prosciutto
30g Butter, melted

Method
1. Set the oven to 180°C/gas 4. Now simply take a spear of asparagus, wrap a slice of Prosciutto ham around it and lay each one on a baking tray, brushing them lightly with butter to ensure they do not stick.

2. Cook for 3-4 minutes until the asparagus is nicely roasted and the ham is crispy.
5    Strips bacon
    2/3 c  Chopped onions
      1 c  Diced plum tomatoes (4-5
           -plum tomatoes); seeded and
           -chopped
  1 1/2 ts Balsamic vinegar
    3/8 ts Red pepper flakes
           Salt
      4    Flour tortillas; (8-inch)
      4 oz Creamy goat cheese; (Up to 5
           -ounces)
      1 sm Bunch watercress or arugula;
           -stemmed, cleaned, and dried
           Olive oil - for grilling or
           -sauteing
 
  Fry bacon in medium heavy skillet over medium heavey skillet over medium
  heat until crisp. Remove and drain on paper towels, then crumble. Pour off
  and discard all but 1 1/2 teaspoons bacon drippings. Place pan over medium
  heat. Add onions; saute, stirring, until softened, 2-3 minutes. Add
  tomatoes, vinegar and red pepper flakes; cook and stir only 30 seconds
  more. Do not over cook tomatoes. Remove from heat. Season generously with
  salt. Place tortillas on work surface. Spread each with 2 tablespoons goat
  cheese. Divide crumbled bacon and sprinkle over half of each tortilla.
  Divide and spread tomato mixture over bacon. Place 3-4 watercress spigs or
  2-3 arugula leaves over tomatoes on each tortilla. Fold tortillas in half.
  (Quesadillas can be assembeled 30 minutes ahead and held at cool room
  temperature. Keep loosely covered with plastic wrap.) When ready to cook
  quesadillas, heat stove-top grill pan or medium-large skillet over
  medium-high heat; brush lightly with olive oil. When oil is hot, add enough
  quesadillas to fit comfortably in single layer. Grill or saute until
  lightly browned, about 2 minutes per side. Remove and continue, adding more
  oil if needed, until all quesadillas are cooked. To serve, slice
  quesadillas in half and mound in napkin-lined shallow basket. Serve warm.
  Yield: 4 servings
great food website...actually, probably the best [[here|http://www.bbc.co.uk/food/]]

recipes originally from BBCFood are listed on the left. be warned, some have now been mangled beyond recognition!
from BBCFood, serves 4, prep < 30min, cook 30min

Ingredients
1kg/2¼lb potatoes, peeled and cubed
1 tbsp vegetable oil
250g/9oz bacon, cut into strips
55g/2oz butter
4 onions, finely sliced
pinch of sugar
140g/5oz cheddar, grated
2 tomatoes, sliced
salt and freshly ground black pepper

Method
1. Bring a pan of salted water to the boil and cook the potatoes until soft. Drain and mash.
2. While the potatoes are cooking, heat and cool the bacon in half the butter and the oil in a frying pan until just beginning to brown and crisp. Remove from the pan with a slotted spoon.
3. Add the onions to the pan. Add seasoning and the sugar. Fry gently until the onions are soft and caramelised. Take care not to allow them to burn.
4. Return the bacon to the pan and stir evenly through the onions. Add a little stock or water to de-glaze the pan and then tip the mixture into a heatproof dish.
5. Add the remaining butter and 110g/4oz ofthe cheese to the potato. Season and mix well. Preheat the grill to high.
6. Spoon the mixture over the onions and bacon, scatter with the remaining cheese and top with the slices of tomato.
7. Place under a hot grill until the cheese is melted and brown. Serve.
@@Ingredients:@@

    * At least 10 cups of flour
    * 6 eggs.
    * 1/4 cup oil
    * some butter
    * some salt
    * 3 cups water
    * Yeast, two packages (about a tablespoon)
    * Sugar or honey 

@@Method@@

            Put 3 cups of warm water in the bowl, with about 1/4 cup
            sugar or honey. Mix well, add 2 packages of yeast. Mix well.
            Dump in about 6 cups of flour, and as many eggs as you want,
            and some salt (not too much) and a little oil. Mix like 
		  crazy, adding more flour a bit at a time until you cannot 
		  work the spoon anymore. 
 
            Dump on a well floured counter. Clean the bowl and oil it.
            Now kneed the dough until it doesn't want any more flour.
            Could take 10 minutes. Put back in the oiled bowl. 
 
            Clean your counter again, and flour well. You are going to
            spread bagels all over it. You will need a LOT of room. 
		  Grease the cookie sheets with butter (works better). Put a
            quart of water in the sauce pan and bring to gentle boil.
            Meanwhile dump out the dough, kneed until elastic, then cut
            in half. Cut each half in half. Cut each quarter in half.
            Cut each eighth in half. Cut each 16th in half. If the
            pieces you have now are bigger than a lemon, cut in half
            again. Each piece will become a bagel.
 
            Roll each piece out to a snake - a long thin cylinder. Loop
            around your fingers and roll the ends together making a
            donut. Don't fret about wimpy looking rings - they will
            rise!  Put down on a floured surface to rise. By the time
            you finish rolling them all, they will be ready to boil.
 
            Heat oven to 350.  Boil each bagel on each side about 30
            seconds.  I usually do 2 at once, one 30 seconds before the
            next so that I have a continuous flow of bagels through the
            boiling water. Put boiled bagels on the sheets.
 
            When you have one sheet covered with bagels, stop the
            boiling. Mix eggwash: one egg and a bit of milk. Brush egg
            wash on top of bagels, sprinkle on sesame seeds, or poppy
            seeds, or your favorite. Or leave blank. Pop cookie sheet in
            oven for 20 minutes. Check the last 3 minutes to prevent
            burning. Have the next batch ready by the time the first
            batch comes out.
 
            Remove from cookie sheet (may need metal spatula) and let
            cool on cake rack.  Clean cookie sheet for re-use. Eggwash
            is hard to remove.  Eat with butter or cream cheese or
            anything. Clean up your mess.
 
            You can try other ingredients if you wish - rye flower or
            whole wheat, add seeds to the dough, add raisins, cranberries
            or dried fruit, or nuts. Try different amounts of eggs. Try
            molasses for sweetener. Try other shapes than donuts.
 
            The same recipe is good for traditional Challah bread. You
            just braid 4 very big snakes of dough and bake on a cookie
            sheet like the bagels - no boiling necessary. A Challah loaf
            takes only a quarter the dough of a batch of bagels, so I
            usually make a loaf and 3/4ths the usual number of bagels,
            all at once.
 
            Freeze the bagels you will not eat today. Give them to
            friends. They make great drop-off Christmas gifts! Great to
            bring to parties (with creamcheese, too). Slice thin and
            toast. Dip bagel chunks in cheese fondue.
(4 servings)
8 large tomatoes
1/2 tsp. celery salt
pinch garlic salt
sliced bread
3/4 cup grated cheese
3 tbsp. chopped parsley
2 tbsp. butter
worcestershire sauce
1 tsp. cornstarch
1/2 cup sour cream
juice of 1 lemon
1 tsp. sugar
5 tbsp. cooked ham
Cut tops off tomatoes, scoop out centers. Sprinkle insides with mixture of celery and
Turn upside down and let drain.
Soak bread in hot water, squeeze dry, place in bowl. Mix in grated cheese, parsley, chopped
Fill tomatoes with stuffing, replace tops.
Melt butter, add worchestershire (dash), cornstarch blended with cream, lemon juice,
water. Hat, don't boil, pour around tomatoes. Cook at 400 degrees for 15 minutes.
VEAL PAPRIKA
from allrecipes.com

 INGREDIENTS
    * 50 g white sugar
    * 2 g ground cinnamon
    * 170 g butter
    * 600 g white sugar
    * 3 eggs
    * 6 very ripe bananas, mashed
    * 454.4 g sour cream
    * 10 ml vanilla extract
    * 5 g ground cinnamon
    * 3 g salt
    * 15 g baking soda
    * 560 g all-purpose flour
    * 120 g chopped walnuts (optional)

DIRECTIONS
   1. Preheat oven to 300 degrees F (150 degrees C). Grease four 7x3 inch loaf pans. In a small bowl, stir together 1/4 cup white sugar and 1 teaspoon cinnamon. Dust pans lightly with cinnamon and sugar mixture.
   2. In a large bowl, cream butter and 3 cups sugar. Mix in eggs, mashed bananas, sour cream, vanilla and cinnamon. Mix in salt, baking soda and flour. Stir in nuts. Divide into prepared pans.
   3. Bake for 1 hour, until a toothpick inserted in center comes out clean.
Ingredients

    * 1/2 cup warm water
    * 3 teaspoons dry yeast
    * 1 teaspoon salt
    * 1 teaspoon sugar
    * 4 cups high gluten flour
    * 4 tablespoons extra-virgin olive oil

Directions

Place warm water in a warm mixing bowl and add yeast. Stir to dissolve and let stand 3 minutes. Add salt and sugar and stir through. Add flour and olive oil and mix, using hands until you can knead the dough without it sticking to your fingers. Add more water, if needed.

Wash and dry hands and remove ball to cutting board. Knead the dough, occasionally dusting with 1 teaspoon flour, until a firm, smooth homogenous ball is formed, about 15 minutes. Place ball of dough in a lightly oiled mixing bowl, cover with a clean kitchen towel and allow to rise in a warm place until its size is doubled, about 2 hours. Punch down and divide into 2 pieces.

Dough is now ready for use.
for New Orleans [[THK]]
Serves 4

*** Bananas Foster***
2 cube unsalted butter
1.5 tablespoon ground cinnamon
1.5 cup brown sugar, firmly packed
7 ripe bananas
3.5 teaspoons ground cinnamon
1 cup banana liqueur
1 cup rum*

*** Pudding***
1/3 cup butter or margarine, melted
16 cups French bread cubes, day old, lightly packed
1 1/2 cup sugar
2 tablespoons vanilla
1 teaspoon nutmeg
1 1/2 teaspoon cinnamon
3 cups milk
3/4 cup golden raisins
1 cup chopped, toasted, pecans


To Make Pudding Pour a small amount of the melted butter in a 9x13 pan and swirl around to cover bottom and sides. Place bread cubes in pan. In large bowl, beat eggs and sugar until thickened (3 - 3 1/2 minutes). Add vanilla, nutmeg, cinnamon and milk plus reserved butter. Beat at low speed to combine. Stir in raisins and pecans. pour over bread. Stir to evenly distribute rains and nuts. Allow bread to absorb all liquid (30-45 minutes). Press bread down often to cover all cubes. Preheat oven to 350F. Bake until crusty and golden brown (45-60 minutes). Cool to lukewarm and slice into squares.

Add sugar, cinnamon and butter to a lighted chafing dish. Alternately, add to a medium sauté pan or saucier and cook over low heat on the stove. Heat until butter and sugar has melted. Peel bananas, cut in half, then slice each piece lengthwise into two sections. Carefully add banana pieces to chafing dish, basting with syrup. Cook for about 3 minutes. Add rum. Cook 2 minutes longer. Remove from heat and add banana liqueur. 

 
*Dark rum adds extra richness to this already decadent dessert while light rum tones it down. 

For a dramatic presentation, flambé at the table. Have the ice cream in the dessert dishes. The easiest and safest way for the untrained chef to flambé is to REMOVE the pan from the heat source, add the banana liqueur and ignite with a long match. Baste the bananas with the flaming sauce, using a long handled spoon or ladle. The flame will go out once the alcohol has burned off. 

Practice common sense – fire is dangerous. Roll up your sleeves, tie back long hair – and don’t do this next to the curtains. Don’t lean over the pan when lighting. Keep a box of baking soda or a small fire extinguisher on hand. It is not advisable to let children make this dessert. You get the point! 
6 lg Chiles dry (morita or mulato
           Or guajillo or any kind) if
           The chiles are littles like
           Jalapeños or serranos, use
           15 chiles.
    1/2 md Onion
    1/4 c  Vinegar
      1 sm Clove of garlic
           Salt
           Vegetable oil
 
  The kind of chiles that you use determine the final flavor, you can
  experiment with different kinds or mixing the different kinds of chiles.
  But this is the basic recipe for prepare salsas with dry chiles.
  
  Wash the chiles in water and discard the seeds and threads of chiles. Let
  stand in water at least 2 or 3 hours or all the night, if you do not have
  time let the chiles in warm water at least 30 min. Then ground with the
  other ingredients and in a sauce pan put a little amount of vegetable oil
  when it will be warm add the salsa and cook 30 min or more, the flavor of
  vineagar have to disapear, add water if need. When it is cook you can use
  for "Chilaquiles", "Enchiladas", and eggs.
1 tablespoon Dijon Mustard
1/3 cup red wine vinegar
1 cup fresh basil leaves
1 egg yolk
1 cup olive oil
1/2 cup walnuts
3 chicken breasts
white wine
1 red onion, thinly sliced
1 cup long green beans cooked until barely tender


DIRECTIONS:
1. In the bowl of a food processor, combine mustard, red wine, basil and egg yolk. Process for 30 seconds. Scrape sides of bowl and process again. With motor running, slowly dribble in olive oil. Drop in walnuts and turn off machine.

2. Poach chicken breasts in a mixture of half water, half white wine. When cool enough to handle, tear into irregular pieces.

3. Combine chicken, red onion, and green beans with the dressing. Serve slightly warm to room temperature.

30g fresh yeast/ 3x7g sachets instant dried yeast
30 g honey or sugar
625 ml lukewarm water
1kg strong bread flour
15 g salt
bit of flour for dusting

Dissolve the yeast and honey/sugar in half the tepid water. 
Put flour and salt in a large bowl. Make a well in the middle and pour in dissolved yeast mixture.
working from the centre outwards, using 4 fingers of one hand slowly bring in more flour until the yeast mixture is soaked up.
Pour the rest of the tepid water in and gradually incorporate all the flour to make a moist dough. 
adjust the amount of water according to the flour you have

Knead for 5 minutes
flour both hands, lightly flour the top of the dough. make into a roundish shape and place on a baking tray.
deeply score dough with a knife and leave it to prove until it has doubled in size. clingfilm will speed things up.
this could take up to 40  minutes

bash the dough around for a while  and then shape it into whatever shape is required.
Let it prove for a second time until it doubles it size. No short cuts!!

gently place into a preheated oven

bake according to shape and size and adjusting for your own oven, for example

rolls : 200 celcius for 20 minutes
bread: 200 celcius for 50 minutes
Pizza base: divide dough into 4. bake at 5 to 7 minutes at 240 celcius
 

Ingredients
Beef Tataki
2 teaspoons peanut oil
300g piece beef eye fillet
2 tablespoons shoyu (Japanese soy sauce)
2 tablespoons mirin
2 tablespoons rice vinegar
Ponzu
1/2 cup shoyu (Japanese soy sauce)
2 tablespoons bonito flakes
1 tablespoon sugar
1/3 cup lemon and/or lime juice
1 tablespoon rice vinegar
Red Onion Pickle
1 red onion, finely sliced
2 tablespoons rice vinegar
To Serve
18 small lettuce leaves such as baby cos

Method
Beef Tataki
Heat the oil in a frying pan and sear the beef on each side until browned. Mix shoyu, mirin and vinegar together and pour over the beef, quickly turning it to coat. Remove the beef immediately from the heat, transfer to a dish and pour over the sauce. Cool, cover and refrigerate for 1 hour turning once

Ponzu
Place the shoyu in a saucepan and bring to the boil. Remove from the heat and stir in the bonito and sugar. Cool, strain and then stir in the lemon or lime juice and vinegar

Red Onion Pickle
Place the finely sliced red onion in a small saucepan with the rice vinegar and 1/4 cup water. Bring to the boil then drain and cool.

To Serve
Slice the beef quite thinly and arrange on a plate with the lettuce leaves, red onion pickle and a bowl of ponzu. To eat, take a lettuce leaf, top with a slice of beef and a little red onion, wrap up and dip in the ponzu. Serves 6.  
1/2 cup softened margarine 
1 cup sugar
2 eggs beaten
2 cups flour
1/2 tsp salt
1 tsp baking soda
2 tablespoons buttermilk (regular has worked too)
1 tsp vanilla essence
2 cups peeled diced apple

topping :
2 tablespoons margarine
2 tablespoons flour
2 tablespoons sugar
1 tsp cinnamon

Cream margarine, sugar and eggs
Stir in flour and salt
Dissolve soda in milk and add t the batter
stir in vanilla and apple pieces. oil a loaf tin
bake at  180 Celcius for 1hour and 10 to 40 mins (will check for our oven ). cool bread on rack

topping:
cream margarine and sugar. Add flour and cinnamon. Spread on still warm bread
1½ lbs. round steak, cut into small slices
Dash of salt and pepper
¼ cup all-purpose flour
¼ cup butter or margarine
1 can (4 oz.) sliced mushrooms
½ cup onions, chopped
1 small clove of garlic, chopped/minced
1 can (10½ oz.) beef broth
1 cup sour cream
1 pkg. (10 oz.) egg noodles
Combine flour, salt and pepper together. Roll meat in flour/pepper mixture. Brown meat in butter
until lightly brown on both sides. Take meat out of the pan as it is cooked. Brown onions, garlic
and mushrooms. Add meat back into the pan with the beef broth. Simmer approximately 1 hour
until meat is tender. Add sour cream and heat until mixture comes to a slight boil. Prepare egg
noodles according to package directions. Can also be served over rice, if preferred.
450g beef tenderloin, trimmed of fat
1 teaspoon salt
1/2 tsp freshly ground black pepper
2 tablespoons olive oil
2 cups chopped yellow onions
225g thinly sliced white button mushrooms
2 tsp chopped garlic
450 g Arborio rice
6 cups beef stock
1/2 cup heavy cream
1 tbsp butter
110g Parmigiano- Reggiano cheese, grated
1/2 cup chopped green onions / green part of scallions

Cut the beef crosswise into 1cm slices then 1.5 cm wide strips. Season with salt and pepper
Heat olive oil in a large, heavy pot over medium heat. Add beef and cook, stirring occasionally, until lightly browned (about 4 mins)
Addd onions and cook until slightly soft, stirring occasionally, about 4 minutes
Add mushrooms, garlic and rice. Stir for 2 minutes, then add beef stock and bring to boil. Reduce the heat to medium.
stir constantly until mixture is creamy and bubbly and the rice is tender (15 to 18 minutes)
Add the cream and continue to stir for 2 minutes. Remove from heat.
Add cheese and green onions and stir until cheese melts. 
Serve hot

8 Servings 

1 c Uncooked rice
5 T Butter
1 c Chopped onion
1 c Chopped carrots
2/3 c Chopped scallions
3 T Sesame seeds
5 Eggs
5 T Soy sauce
Salt
Pepper
Cook rice according to package directions. In a large skillet melt butter.
Add onions, carrots and scallions. Saute until carrots are translucent.
Set aside. Heat oven to 350 degrees. Place sesame seeds in a shallow pan.
Bake until golden brown (10 to 15 minutes), shaking pan occasionally for
even color. Lightly grease another skillet. Beat eggs. Pour into hot
skillet. Cook as you would scrambled eggs. Combine rice, vegetables,
sesame seeds and eggs. Add soy sauce. Stir. Salt and pepper to taste.
Benihana Ginger Salad Dressing
1/2 cup minced onion
1/2 cup peanut oil
1/3 cup rice vinegar
2 tablespoons water
2 tablespoons minced fresh ginger
2 tablespoons minced celery
2 tablespoons ketchup
4 teaspoons soy sauce
2 teaspoons sugar
2 teaspoons lemon juice
1/2 teaspoon minced garlic
1/2 teaspoon salt
1/4 teaspoon black pepper
1. Combine all ingredients in a blender. Blend on high speed for about
30 seconds or until all of the ginger is well-pureed.
Makes 1 3/4 cup
australian dessert for THK

     	



	

Ingredients:
1 qt. blackberries
1 c. sugar
1 stick butter
1 c. milk
1 c. sugar
1 c. self-rising flour

Directions:
Boil blackberries with 1 cup sugar and enough water to
make berries juicy for 10 minutes. Melt butter in 9 x 13-inch
baking dish in oven until butter is lightly browned. Combine
milk, 1 cup sugar and flour; beat hard until lumps are gone.
Pour batter into butter; bake 5 to 10 minutes in ( 450 : F) oven.
Pour berries over batter and bake 10 to 15 minutes longer or
until cobbler is browned.
Yield: 4 Servings
 
      4 oz Danish blue cheese or 8 oz.
           Danish blue Castello cheese,
           Chilled
    1/4 c  Marinated, dried tomatoes
      8 oz Green fettuccine or spinach
           Egg noodles
      2 tb Minced shallots
      1    Garlic clove, minced
      2 tb Dry white wine
  1 1/2 ts Finely chopped fresh basil,
           Or 1/2 tsp. dried basil
    1/4 c  Chopped fresh parsley
 
  On waxed paper, divide cheese into 10 - 12 pieces; set aside.  Drain
  oil from marinated tomatoes, reserving 1 tablespoon.  Cut tomatoes
  into thin strips and reserve.
  Prepare fettuccine according to package directions until al dente;
  drain and return to pot.
  Meanwhile, in small skillet over medium heat, heat reserved oil; add
  shallots and garlic.  Saute until shallots are limp but not brown.
  Add wine, basil and reserved tomatoes.  Heat through and keep hot.
  Add mixture to pasta; toss.  Add cheese and parsley; toss again to
  melt cheese.  Serve immediately on heated plates.

from http://recipes.bhg.com

    * Butter or margarine
    * 6 eggs
    * Snipped fresh chives or desired herb
    * Salt
    * Black pepper
    * 6 tablespoons shredded cheddar, Swiss, or Monterey Jack cheese

 
Directions

1. Generously grease three 10-ounce casseroles with butter. Carefully break 2 eggs into each casserole; sprinkle with chives, salt, and pepper. Set casseroles in a 13x9x2-inch baking pan; place on an oven rack. Pour hot water around casseroles in pan to a depth of 1 inch.

2. Bake in a 325 degree F oven for 20 minutes. Sprinkle cheese on top of eggs. Bake for 5 to 10 minutes more or until eggs are cooked and cheese melts. Makes 3 servings.
Broccoli Frittata

(4 servings) 

    * 1/2 cup non-fat cottage cheese
    * 1/2 teaspoon dried dill
    * 2 cups fat-free egg substitute
    * 1 10-oz package of frozen chopped broccoli
    * 1 tsp olive oil
    * 2 tsp margarine
    * 1 onion -- diced 

In large non-stick frying pan over medium heat, saute onions in oil for 5 minutes, or until soft. Add broccoli and dill; saute for 5 minutes, or until broccoli is heated through.

In a large bowl, mix eggs, and cottage cheese. Stir in broccoli mixture. Wipe out frying pan, then place it over medium-high heat and let stand for about 2 minutes. Add 1 teaspoon margarine and swirl the pan to distribute it. Add half of the egg mixture; lift and rotate pan so that eggs are evenly distributed.

As eggs set around the edges, lift them to allow uncooked portions to flow underneath. Turn heat to low, cover the pan, and cook until top is set. Invert onto a serving plate and cut into wedges. Repeat with remaining 1 teaspoon margarine and egg mixture.

2 to 2½ lbs. beef short ribs
Dash of salt
½ cup burgundy
1/3 cup red wine vinegar
1 cup catsup
2 Tbsp. cooking oil
2 Tbsp. honey
1 Tbsp. mustard
½ tsp. garlic salt
1 tsp. chili powder
Place ribs in a large kettle with water to cover and 1 tablespoon of salt. Bring to a boil, cover and
simmer ½ hour. Meanwhile, combine wine, vinegar, catsup, oil, honey, Worcestershire sauce,
mustard, garlic salt and chili powder. Simmer for 10 to 15 minutes. Drain ribs and place in a
shallow pan. Brush generously with sauce and roast at 350ºF for 15 to 20 minutes basting often.
Turn ribs and brush with sauce and continue roasting for 10 to 15 minutes or until tender.
2 lbs. stew meat
1 Tbsp. soy sauce
2 Tbsp. all-purpose flour
2 large onions, chopped
1 clove garlic, minced
¼ tsp. pepper
¼ tsp. marjoram
¼ tsp. thyme
1 cup red wine
1 cup mushrooms, sliced
Blend soy sauce with flour in a baking dish or crock-pot. Cut meat into 1½” cubes. Add soy sauce
mixture and coat meat cubes. Add sliced onions, garlic, pepper, marjoram, thyme and red wine to
meat. Stir gently to mix. Cover baking dish and simmer in the oven at 325°F for 1 hour. Add
mushrooms and bake for an additional 1½ to 2 hours or until meat is tender.
INGREDIENTS

    * 3 cups all-purpose flour (330g)
    * 3 tablespoons white sugar
    * 3 teaspoons baking powder
    * 1 1/2 teaspoons baking soda
    * 3/4 teaspoon salt
    * 3 cups buttermilk (720ml)
    * 1/2 cup milk 
    * 3 eggs
    * 1/3 cup butter, melted

DIRECTIONS

   1. In a large bowl, combine flour, sugar, baking powder, baking soda, and salt. In a separate bowl, beat together buttermilk, milk, eggs and melted butter. Keep the two mixtures separate until you are ready to cook.
   2. Heat a lightly oiled griddle or frying pan over medium high heat. You can flick water across the surface and if it beads up and sizzles, it's ready!
   3. Pour the wet mixture into the dry mixture, using a wooden spoon or fork to blend. Stir until it's just blended together. Do not over stir! Pour or scoop the batter onto the griddle, using approximately 1/2 cup for each pancake. Brown on both sides and serve hot.
Hash Browns - Low Carb Cabbage

    * 2 cups cabbage -- thinly sliced
    * 1 egg
    * 1 green onion -- chopped
    * 1 Tablespoon rapeseed oil
    * salt and pepper -- to taste 

Combine all ingredients except canola oil in a medium bowl. Stir until well combined.

Heat oil in a large skillet over medium-high heat.

With hands, clump hash mixture to form two patties. Place patties in skillet. When brown on one side, turn patties and cook the other side.

Ingredients
For the soup
1 tbsp vegetable oil
1 carrot, sliced
50g/1¾oz leek, green part only
300ml/10fl oz/½ pint chicken stock or vegetable stock
30ml/1fl oz milk
Salt and freshly ground black pepper
Serve
25g/1 oz Greek-style yoghurt

Method
For the soup
1. In a saucepan heat the oil and sweat the carrot and leek for 2-3 minutes. Add the stock and cook for five minutes.
2. Add the milk and season with salt and pepper.
3. Blitz in a blender until the soup is smooth.
4. Serve and garnish with a dollop of Greek-style yoghurt.
2 pounds flank steak
12 flour tortillas
1/2 cup tequila
1/4 cup lime juice
1/4 cup lemon juice
1/4 cup orange juice
4 cloves garlic crushed
1 medium onion chopped
1 tsp black pepper
1 cup salsa
1 cup guacamole
1 tsp tabasco

Mix juices, garlic, onion, tequila, tabasco and pepper in a bowl. Add meat and marinate both sides. Cover and refrigerate, turning meat over occasionally. Let sit for 4 hours or more. Preheat frill. Place a few drops of water on each tortilla, stack and wrap in aluminum foil. Place on grill. Remove meat from marinade, reserving marinade. Place on grill. Turn steak and tortillas once during cooking. Brush steak with marinade. 
Cook to your liking (12 to 15 minutes for medium rare) Cut into thin slices. Place a  few slices of steak on each tortilla with salsa and guacamole and serve.
for australian THK, from epicurean.com



Ingredients:
1 1/2 cups grated carrots lightly packed (3 large carrots)

1 rib celery, diced

1/2 cup raisins

Imitation Mayonnaise

2 teaspoons apple juice concentrate

1/16 teaspoon cayenne pepper

1/16 teaspoon curry powder

Lettuce

Directions:
In a salad bowl, combine the carrots with the celery and the raisins. Set aside.

Prepare the Imitation Mayonnaise in a blender or food processor.

Add the juice concentrate, cayenne pepper, and curry powder and blend thoroughly.

Mix with the carrots, raisins, and celery.

Serve on beds of lettuce arranged on salad plates.

Serves 4.
3 medium sized onions ( chopped & diced )

3 desert spoon cooking oil     

1 ½ desert spoon curry powder

 

Salt & peper to taste

½ cup sugar

½ kop vinegar

2 thick slices of brown bread

1 ½ cup milk

2 eggs

1kg mince

½ cup raisons

 

Using medium sized pot, fry onions in oil(or butter) till brown, add vinegar, sugar & curry powder. Bring to boil & remove from stove and allow to cool off.

Put mince into deep baking dish. Add salt & pepper to taste. Soak bread in little bit of milk, sqeeze out excess of milk & break up into mince. Keep rest of milk for later. Add (cooled off ) onion mix to mince mix & add raisons.  Mix thorough, level out mixture in dish & add couple of bay leaves randomly onto mix. Bake in oven at 180c for 35 minutes. Use remainder of milk, add eggs & mix. Remove dish, add egg mix over & return to oven until golden brown.

from BBCFood (brian turner)

Ingredients
For the soup
1 tbsp vegetable oil
1 carrot, sliced
50g/1¾oz leek, green part only
300ml/10fl oz/½ pint chicken stock or vegetable stock
30ml/1fl oz milk
Salt and freshly ground black pepper
Serve
25g/1 oz Greek-style yoghurt

Method
For the soup
1. In a saucepan heat the oil and sweat the carrot and leek for 2-3 minutes. Add the stock and cook for five minutes.
2. Add the milk and season with salt and pepper.
3. Blitz in a blender until the soup is smooth.
4. Serve and garnish with a dollop of Greek-style yoghurt.
1  eggplant
6 tbsp olive oil
3 garlic cloves, minced
1 jalapeno pepper, finely chopped
1/4 cup sun dried tomatoes, diced
4 tbsp soy sauce
1 tablespoon balsamic vinegar
1 teaspoon sugar
1 small tomato, peeled, seeded and diced
1 tablespoon chopped fresh coriander leaves

Remove the stem end of each eggplant, cut each eggplant in half lengthwise, and slice each on the diagonal into 1/2cm thick.

Heat the oil in a large skillet. Add the garlic and jalapeno pepper and cook over high heat until the garlic is soft. Add the sun-dried tomatoes and eggplant. Turn the heat to medium. Cook and stir for about 5 minutes until the eggplant is tender. Add the soy sauce, vinegar and sugar to the skilled. Cook until the liquid is absorbed. Add tomato and coriander. Stir to combine. Remove from the heat.

hmmm..next time try cubed aubergine
3 cups milk
1 cup chicken broth
6 slices bacon, diced
1/4 cup finely diced red onion
1/4 cup finely diced celery
1/4 cup chopped scallion
3 tbsp all purpose flour
2 cups shredded Canadian white cheddar cheese
1/2 tsp Tabasco sauce
1/2 tsp Worcestershire sauce
salt and pepper to taste

In a saucepan, heat the milk and the chicken broth over medium-low heat. Meanwhile, in a 4 or 5 quart Dutch oven, cook the bacon, stirring, over medium heat for about 5 minutes, or until lightly browned. Add the red onion, celery and scallion, and cook stirring, until the onion has softened, about 5 minutes. Add the flour and cook, stirring constantly, for 3 minutes.
Remove the Dutch oven from the heat, add the heated milk mixture, and whisk until blended. Return to the heat and cook, whisking constantly, until the mixture comes to a boil. Boil for 1 minute, or until thickened.
Remove the Dutch oven from the heat, and stir in the cheese, tabasco sauce, salt and pepper, until the cheese is melted and the soup is smooth.
Serve with thick crusty bread.
'Adare birthday'

cookies/biscuits
3 tbs butter
3 tbs white sugar

8 oz cream cheese
1/3 cup white sugar
2 tbs lemon juice
1/2 cup heavy whipping cream, whipped
1/2 cup sliced fresh strawberries or other fruit

- in a bowl mix crust, press in pan, place in fridge
- beat cream cheese, sugar, lemon juice. whip cream and fold in. spread in tin
- top with fruit
- freeze 1 hr covered with foil
place in fridge 30min before serving
INGREDIENTS

2 heads of broccoli
1 cup mayonnaise
2 tablespoons white wine vinegar
6 tablespoons sugar
4 strips bacon (crisp-fried and chopped)
1/2 cup golden raisins
handfull chopped pecan nuts (optional)

DIRECTIONS

1. Trim and chop broccoli into a large bowl
2. For dressing, mix mayonnaise, sugar and white wine vinegar until smooth
3. Pour over broccoli add raisins and mix
4. Add bacon and pecan nuts and toss

Before serving toss again because bacon and raisins tend to settle at the bottom



You will need:
300 ml of milk
25g butter
25g flour
50g grated Cheddar cheese
1/2 teaspoon of mustard
What you do:
Whisk together the milk, flour & butter in a microwaveable dish.
Microwave on high for 2 minutes.
Remove, & whisk together again.
Microwave for antoher 2 minutes. The sauce should be thickened & smooth. Season.
Stir in the cheese & mustard, until the cheese has melted.
4 large egss
225ml dashi
50ml sake
1 medium onion, peeled, halved and cut into thin crescents
1 leek, thinly sliced diagonally
1/2 tsp soy sauce
1tsp granulated sugar 
1tsp salt
1tsp mirin
225g boneless, skinless chicken breast, cut into bite sized pieces
2.1 kg of hot, cooked white rice

Break the eggs into a medium bowl, and whisk until just mixed.
Place the dashi and sake in a medium saucepan over a high heat. Add the onion and leek, and bring to the boil. Reduce the heat and simmer until vegetables are tender - about 5 minutes. Stir in the chicken pieces and cook for 3 minutes. Pour the beaten eggs over the surface of the chiken mix, so the eggs make a sort of 'cap'. Reduce the heat to low for about 2 minutes - until the egg and chicken are cooked through. Stir the mixture and turn off the heat. Divide the cooked rice into 4 bowls and ladle the chicken and egg mixture over the top.
¼ cup butter (or margarine)
¼ cup all-purpose flour
1 cup chicken broth (or 1 can)
1 can (12 oz.) evaporated milk
3 cups cooked rice
2½ cups cooked chicken, diced
1 can (5 oz.) sliced mushrooms
¼ cup carrots, finely chopped
¼ cup celery, finely chopped
½ cup slivered almonds, toasted
Preheat oven to 350°F. Melt butter; add flour and blend. Add broth, milk, celery and carrots; cook
over low heat until thick, stirring constantly. Add rice, chicken and mushrooms to milk mixture.
Mix until blended. Pour into a greased 9” x 13” baking dish. Top with almonds. Bake at 350°F for
45 minutes.
1 c. chopped onion
1 c. sliced fresh msuhrooms
1 c. sliced zucchini
1/2 c. chopped celery
1 clove garlic, minced
3 tbsp. butter, melted
1 can whole tomatoes, drained & chopped
1/2 tsp. salt
1 tsp. dried whole basil
1/4 tsp. crushed red pepper
8 oz. shell macaroni, uncooked
3 c. cooked chicken
1 1/2 c. whipping cream
2 c. shredded Monterey Jack cheese
1/2c. Parmesan cheese

Saute first 5 ingredients in butter until vegetables are crisp-tender. Stir in tomatoes, basil, salt and crushed pepper, set aside.

Cook pasta according to package directions, drain. Combine pasta, vegetable mixture and chicken in a large bowl. Spoon mixture into an 11 x 7 x 1 1/2 inch baking dish. Combine whipping cream and cheeses in a medium saucepan, cook over low heat until cheese melts, stirring frequently. Pour sauce over pasta mixture. 

To store: cover and refrigerate up to 24 hours

To cook: Bake, covered, at 350 degrees for 40-45 mintues or until thoroughly heated.
Made a [[risotto]] today with what we had in the kitchen, without the cream. consistency and taste pretty good (wifey said) but a tad oversalted. I decided to overload the chicken since we like it so much

400g chicken, deboned
1 cup arborio rice
3 large mushrooms, sliced
1/2 onion, finely chopped
3 cloves garlic, crushed
60ml cream
1/4 cup mozarella
1 litre chicken stock
1/2 cup white wine
rice flour (for browning chicken)
cloves
basil
from BBCFood, serves 4, prep 30min, cook 30min-1hr

Ingredients
1 medium green pepper, sliced
50g/20z button mushrooms
10g/ ½oz butter
400g/14oz cooked chicken, shredded
225g/8oz puff or flaky pastry (ready-made is fine)
1 egg, beaten
For the sauce
25g/1oz butter
25g/1oz flour
150-200ml/6-7fl oz chicken stock
2-3 tbsp double cream
squeeze of lemon juice
sprig of fresh tarragon

Method
1. Preheat the oven to 220C/425F/Gas 7.
2. Blanch the pepper for 2-3 minutes in a saucepan of boiling salted water, then drain, refresh in cold water and drain again.
3. Wipe the mushrooms and cut into quarters. Sauté in the 10g/1/2oz butter for 2-3 minutes, then set aside.
4. For the sauce, melt the 25g/1oz butter in a heavy-bottomed saucepan, add the flour and cook slowly over a low heat until the mixture is straw-coloured. Pour in the chicken stock, turn up the heat and stir constantly until simmering. Add the cream and reduce until the sauce has a syrupy consistency. Add the lemon juice and tarragon.
5. Turn off the heat, add the chicken, peppers and mushrooms to the pan.
6. Butter an ovenproof dish large enough to hold the chicken pie mixture with room to spare. Add the chicken mixture to the dish.
7. Roll out the pastry on a floured work surface, to a thickness of about 0.25in/1cm. Place the pastry over the filling and carefully trim the edges. Use the trimmings to make cut-out shapes to decorate the surface of the pie. Cut a couple of air holes with a knife to allow the steam to escape. Brush the pastry with the beaten egg.
8. Bake the pie in the preheated oven for about 25-35 minutes. The top should be nicely browned and the filling piping hot. Remove, allow to cool slightly and serve.


1 3/4 cups flour
1 3/4 cups firmly packed brown sugar
1 tsp salt
1 tsp cinnamon
1/4 tsp baking soda
1 cup butter, softened
2 eggs
1 tsp. vanilla
3 1/2 cups of granola

Pre heat oven to 200C. In large bowl, stir together flour, brown sugar, salt, cinnamon and baking soda. Stir in remaining ingredients except granola, mix until smooth. Stir in 3 cups of granola. Drop dough by rounded teaspoonfuls, roll in remaining 1/2 cup of granola. Place two inches apart on lightly greased cookie sheet. Bake for 10 to 12 minutes or until golden brown.
Yield: 6 Servings
 
      8    Boned halves chicken
           -breasts
      2 cn Cream of chicken soup
    1/4 lb Grated frozen butter
    1/4 lb Grated cheddar cheese
  1 1/2 c  Pepperidge farm stuffing
      3 oz Bourbon or Brandy
 
  Place chicken breasts side by side in a buttered casserole dish. Season
  with salt, pepper, garlic powder, etc. to your taste.  Pour the soup
  (undiluted) over the top of chicken.  Sprinkle with the grated butter,
  cheese, and stuffing.  Drizzle the bourbon or brandy over top. Bake
  uncovered at 350F (180C) for about and hour and half. Note: No stuffing?
  Make croutons by cutting bread into cubes, mix with olive oil, parmean
  cheese, dash of garlic powder and italian seasoning and bake on a cookie
  sheet at 350F (180C) for about 10 minutes.
it's @@bank holiday monday@@ have had a great, well-paced day with a bit of everything. we have the baking bug and have settled for a mega choc chip cookie recipe from the BBCFood website. i've had to go across the road to pick up choc chips and....[[self-raising flour]]!? recipe calls for it. busi's baking them this way...

Ingredients
175g/6oz soft margarine
225g/8oz caster sugar
2 eggs
350g/12oz self-raising flour
100g/4oz plain chocolate chips

Method
1. Preheat the oven to 180C/350F/Gas 4. Lightly grease 3 baking trays.
2. Measure all the ingredients into a medium bowl and mix thoroughly until a smooth biscuit dough is formed.
3. Place large spoonfuls of the mixture well apart on the prepared baking trays and flatten slightly using the back of a spoon.
4. Bake in the preheated oven for about 15-20 minutes or until golden brown and just firm to the touch. Cool on a wire rack, then store in an airtight container.

Secrets of Success:
Run a knife under the biscuits on the tray to see if they are done. If outside ones are browned, remove to a cooling rack and return the others to the oven.

''Results''
I think we'll stick to the non-self raising flour version...this was too much like a scone when we wanted a biscuit
2 x 7g Active dry yeast packages
1/2 cup warm water
1/2 cup warm milk
1/2 cup softened margarine
1/2 cup sugar
2 eggs beaten
1 tsp salt
4 1/2 to 5 cups flour

topping:
2 cups sugar
2 tbs ground cinnamon
3/4 cup melted margarine

In a large mixing bowl, dissolve yeast in water. Let it stand for 5 minutes
Add milk, butter, sugar, eggs and salt
Stir in enough flour to make a soft dough. Turn onto floured surface, knead 6 to 8 minutes until elastic
Place in a greased bowl, turning once to grease top
Cover and let rise until doubled (approx 1 1/2 hours)

Punch down. divide into 3 equal portions, covering 2 with clingfilm
shape / portion into 12 balls rolling each into a 20 cm rope
combine sugar and cinnamon
Dip rope in melted butter, coat with sugar mixture and shape like a pretzel
tuck and pinch the ends under and place on greased cookie sheets
Repeat with remaining dough
Cover and let rise until doubled (about 30 mins)
Bake at 190 celcius for 12 to 15 mins/ until golden brown

2 cans (17 oz.) dark red kidney beans
2 lbs. lean ground beef
1 onion, chopped
2 cans (15½ oz.) cut-up casserole tomatoes
1 green pepper, chopped (for variety chop ½ green pepper and ½ red pepper)
2 cans (15 oz.) tomato sauce
1 bay leaf
1 tsp. chili powder
1 tsp. cayenne pepper (or more, if preferred)
½ tsp. crushed red pepper (optional)
Dash of paprika
Dash of salt & pepper
Tabasco sauce, to taste
Season ground beef with salt and pepper and brown until done. Remove meat and sauté green and
red peppers and onions until soft. Combine all ingredients into a stew pot. Bring to a boil. Simmer
for about 1 hour. Stir frequently to keep chili from sticking to the pan.
from Dianne's mum

1 & 1/2 cup cake flour
3 tbsp cocoa
1 tsp bicarb soda
1 cup sugar
1/2 tsp salt
5 tbsp vegetable oil
1 tbsp vinegar (white or brown)
1 tsp vanilla essence
1 cup water

DIRECTIONS
1. Grease 9x9x2 pan
2. Sift all dry ingredients into a bowl, then transfer to greased pan
3. make 3 grooves in flour
4. into each pour vinegar, fish oil and vanilla essence, respectively
5. pour cup of water over it then mix till smooth
6. bake for 30min at 180C (fan oven). check cooked through - clear skewer

FROSTING
4tbsp softened butter
2/3 cup brown sugar
2 tbsp cream
1 cup coconut

1. place above in bowl and mix
2.  smooth over when cake is done
3. return to oven for 5min


3 tbsp. margarine
1/4 tsp. salt
5 cups miniature marshmallows
1/2 tsp. vanilla
4 tsp. cocoa
6 cups Coco Pops

Combine margarine and salt in a large saucepan over low heat.
When margarine has melted, add marshmallows and vanilla and stir until marshmallows have melted. Add cocoa and stir well. Remove from heat.
Add Coco Pops, and stir until the cereal is well-coated with the melted marshmallow mixture.
Pour the mixture onto a well-greased 9x13 baking dish. Press down until its flat in the dish. Cool.
2 lbs. chicken wings, cut up
1 cup soy sauce
1 cup granulated sugar
½ tsp. ginger
Salt & pepper, to taste
Preheat oven to 375°F. Combine soy sauce, sugar, ginger, salt and pepper in a saucepan. Bring
mixture to a boil stirring constantly until sugar dissolves. Place chicken wings in a baking pan.
Pour sauce over chicken wings. Bake at 375°F for one hour, turning chicken over after 30 minutes.
*Helpful hints: This recipe works well with raw brown sugar. Light soy sauce can also be used for
those watching their sodium level. If wings have been frozen, be sure to have them completely
defrosted before baking. Do not over cook or burn sauce, this will cause the chicken wings to have a
burnt taste. The sauce mixture can also be used over other chicken parts for a main dish. Serve
with steamed rice.
From [[The Congo Cookbook|http://www.congocookbook.com/]]
Canned sardines, often imported from Morocco, are cooked in stews throughout Central Africa. Any other sort of dried, smoked, or salted fish can be used in place of the sardines.

Ingredients

    * oil for frying (palm oil is most authentic, but any vegetable oil will do)
    * one onion, finely chopped
    * one clove of garlic, minced
    * one or two ripe tomatos, chopped (or canned tomatos, or tomato sauce or paste)
    * one to two pounds of spinach, cleaned, stems removed -- or -- cassava leaves ( Feuilles de Manioc), kale, collards, or turnip greens or similar, cleaned, stems removed and parboiled (or some combination of these)
    * salt, black pepper, cayenne pepper or red pepper (to taste)
    * canned sardines (two or three cans is good, but one can will do if you're on a tight budget) 

Method

    * If using dried or salted fish:
      Soak fish in water for a few hours, rinse and remove any skin or bones, and cut it into bite-sized pieces.
    * Heat a few spoonfuls of oil in a large saucepan and fry the onion and garlic for a few minutes.
    * Add the spinach (or greens) and fry them at high heat for a few minutes, stirring continually. (just a few minutes for spinach, but a few minutes more for other greens).
    * Stir in the tomatoes (or canned tomatos with their juice, or tomato sauce or paste), the salt and pepper, and a cup of water. Reduce heat, cover, and allow to simmer for twenty minutes or until the greens are nearly tender.
    * Add the sardines (or other preserved fish) and contine to simmer until the greens are ready to eat.
    * Serve with Baton de Manioc (also called Chikwangue), or Fufu, or Plantains, or Rice.
Ingredients

8 oz (225 g) rump steak
4 oz (110 g) rice noodles
1 stem lemon grass
1 fat garlic clove
1½ inch (4 cm) piece fresh ginger
6 spring onions
1 medium leek
1 medium carrot
2 rounded teaspoons cornflour
1 level teaspoon Chinese five-spice powder
2 tablespoons groundnut oil or other flavourless oil
2 tablespoons soy sauce
3 tablespoons dry sherry
pinch salt 

The secret of a successful stir-fry is speed. So what you need to do is have everything prepared before you start. The first item to prepare is the rice noodles. Place these in a large bowl with a little salt, then pour warm water over them and leave them to soak for exactly 15 minutes and no longer.

Now for the vegetables. First the lemon grass – remove the outer tougher leaves, trim off the woody tops, then slice the rest very finely. The garlic should be peeled and also chopped finely. The piece of ginger needs to be peeled, cut into thin slices and then the slices cut into tiny matchstick pieces. Finely slice the white part of the spring onions, then cut the tender green part into 2 inch (5 cm) lengths and then the lengths into little strips. Now the leek: first halve the white part lengthways and cut into similar matchstick-sized strips, then cut the green, tender part of the leek into diagonals to make diamond-shaped pieces. Cut the carrot lengthways and then make this, too, into matchsticks.

Now for the meat. This is cut into 2 inch (5 cm) pieces and these are then cut lengthways so that the meat, too, is now in thin strips. Next you need to take a small bowl and in it mix the cornflour and the five-spice powder together. Mix the meat in this mixture until it is all well coated. Drain the noodles, shaking off any excess water, and then all is ready to cook.

Now place the wok over a high heat, without adding any oil at first. As soon as it's very hot, add 1 tablespoon of the oil, let it sizzle, then add the meat and toss it and stir-fry it in the hot oil for about 2 minutes. Then remove the meat to a plate. Add the remaining oil, let it sizzle and then add the lemon grass, garlic and ginger. Toss these around for about 30 seconds, then add the carrots, spring onions and leek and toss these around also for 30 seconds. Next add the liquid – soy sauce, sherry and 2 tablespoons of water. Then, as soon as the liquid is very hot, stir in the noodles, combining them with the vegetables. Finally, return the meat to join all the vegetables, toss everything together a couple of times and serve immediately in hot bowls.
Yield: 6 Servings
 
      1    3.5lb frying chicken; cut
           -into 8 pieces
      1 lb Beef shanks; cut into 1-inch
           -pieces
      6 c  Chicken stock
      3 sl Thick cut bacon
      1 tb Dreid leaf thyme
      1    Bay leaf
    3/4 c  Pearl barley
  1 1/2 c  Chopped leek; white only
           Salt and pepper to taste
      2 tb Chopped parsley
 
  Put the chicken, beef, stock, bacon, thyme, and bay leaf in a large, heavy
  pot and bring to a boil. Reduce the heat and simmer, covered, for 30
  minutes. Meanwhile boil barley in 1 1/2 cups water for 10 minutes. Drain
  and set aside. Remove chicken for pot. When cool enoguh to handle, debone
  and set aside. Add leeks and barley to the pot, and simmer 15 minutes.
  Remove beef shanks and debone. Chop meat coarsely, and return to the pot,
  along with the chicken. Simmer covered, for 5 minutes more. Season with
  salt and pepper to taste and garnish with parsley.
*  1 and 1/2 cups white rice -- uncooked
    * 2 cups lowfat milk (or soy milk -- vanilla soy milk works great)
    * 1/4 cup sugar
    * 1 and 1/2 teaspoons of ground cinnamon 

Prepare the rice according to the directions on the package.

Combine warm cooked rice, milk, sugar, and cinnamon. Stir and serve. That's all there is to it.
from [[low carb luxury|http://www.lowcarbluxury.com/index.html]]   

    *  1/2 head raw cauliflower, (grated to make 3 1/2 cups)
    * 3 green onions
    * 1 clove garlic, minced or 1/2 tsp garlic powder
    * 1/2 teaspoon ginger
    * 3 Tablespoons Soy Sauce
    * 3 eggs, beaten
    * Olive Oil
    * Cooked Chicken, Beef, Pork, Shrimp, Ham, Turkey, etc.
      — Any mixture, your choice.

In a wok or large flat skillet, heat enough oil to cover the bottom. Fry minced garlic (or garlic powder) with finely diced white part of onions for approximately 1 minute. Add grated cauliflower and fry for 4-5 minutes, stirring constantly. Add soy, ginger, diced green onion tops, and pre-cooked cubed meat or baby shrimp. Stir to mix well and brown a bit. Push mixture to one side of pan. Add more oil if necessary and scramble eggs in empty side of pan until done but still moist. Stir eggs into "rice" mix and remove from heat.

Serves 3-4.   5-7 net grams of carbohydrate per serving. Stores and re-heats beautifully.

NOTE: For an additional 6 grams for the entire recipe, try adding 1/2 cup frozen green peas (about 2 minutes after adding cauliflower.) It adds great flavor and richness to the dish!
from BBCFood, Prep < 30 mins, cook 10-30 min

Ingredients
1 tbsp olive oil
¼ red onion, peeled and diced
salt and freshly ground black pepper
½ rump steak, very finely diced
1 tsp wholegrain mustard
dash of soy sauce
dash of Worcestershire sauce
1 tsp tomato ketchup
For the topping
½ squash (butternut or kabocha), peeled, diced and de-seeded
salt and freshly ground black pepper
1-2 tbsp fresh parsley, chopped

Method
1. To make the topping, bring a pan of water to the boil and cook the squash for 10-12 minutes, or until tender.
2. Heat the oil in a pan and sauté the onion with the seasoning for 2-3 minutes, to soften. Add the steak and fry for a few minutes, to colour. Add the mustard, soy sauce, Worcestershire sauce and tomato ketchup and heat gently for 6-8 minutes, stirring occasionally.
3. Drain the squash and return to the pan. Season and then mash until smooth. Stir in the parsley to combine.
4. Spoon the meat mixture into a chefs' ring on a serving plate. Spoon the squash on top and then carefully remove the ring.
5. Serve.
Great way to have this vegetable. From [[BBC Food|http://www.bbc.co.uk/food/recipes/database/chinesestulepakchoi_71264.shtml]]

Ingredients
2 heads of pak choi
2 tbsp olive oil
½ glass red wine
1 tsp red wine vinegar
2 spring onions, trimmed
1 red pepper, sliced
2 tbsp olive oil
1 wedge of lemon
handful of coriander
1 tsp sugar

Method
1. Braise the pak choi in the oil, wine and vinegar for 6-8 minutes, turning occasionally.
2. Blanch the spring onions in boiling water for one minute to soften.
3. Wrap the spring onions around the pak choi.
4. In a pan, heat the oil and sauté the pepper slices for 3-4 minutes.
5. Add the lemon wedge, coriander and sugar.
6. Season and serve with the pak choi and sauce it was braised in.
Ingredients

    * 375 g pasta (shells, penne or rigatoni)
    * 2 chicken breasts, diced
    * 1 medium onion, sliced
    * 200-250 g mushrooms, sliced
    * 1/4 teaspoon ground chili powder
    * 1/4 teaspoon dried basil
    * 1/4 teaspoon dried oregano
    * 1/4 cup of liquid chicken stock
    * 300 ml thickened cream
    * 2 teaspoons coarse grain mustard
    * olive oil
    * shaved parmesan cheese

Directions

   1.       Cook pasta until cooked, drain and return to the pan.
   2.      In a large frypan, add olive oil and fry the onion until translucent, add chicken, chilli, basil and oregano and cook until browned. Remove from pan.
   3.      In the same pan add mushrooms and cook until tender.
   4.      Add chicken stock, cream and mustard and return the chicken and onion mixture to the pan.
   5.      Bring to boil. Bring to boil, reduce heat and simmer until chicken is cooked through and the sauce is thickening.
   6.      Add the chicken sauce to the pasta and fold through.
   7.      Top with shaved parmesan cheese.
Combine:

1 pint Mayonnaise
1 pint Sour cream
1/2 C. Chili sauce
1/2 tsp. Cayenne pepper

Hash Browns - Low Carb Zucchini

    * 1 cup grated zucchini
    * 2 eggs -- beaten
    * 1 Tablespoon grated onion
    * 1 Tablespoon rapeseed oil
    * 1 dash onion powder
    * 1 dash garlic powder
    * salt and pepper to taste 

Combine all ingredients except canola oil in a medium bowl. Stir until well combined.

Heat oil in a large skillet over medium-high heat.

Spread hash mixture in skillet. When brown on one side, turn and cook the other side.
1 small chopped onion
1/2 tsp Balti curry paste
1 large peeled and grated carrot
150 ml rice
300 ml water
1 stock cube
Seasoning
A handful of broccoli florets

Fry the onion for 15 minutes until tender, then add the curry paste and cook for a further 2-3 min. Add the carrot, rice, water, stock cube and seasoning. Cover the pan, bring to the boil and simmer for 10 minutes. Add the broccoli and cook for a further 5 mins.
2 teaspoons dried oregano
2 teaspoons dried basil
1/2 teaspoon dried thyme
1/2 teaspoon dried rosemary
1 teaspoon salt
1/2 teaspoon coarsely ground black pepper
1/4 cup red wine vinegar
1 tablespoon fresh lemon juice
1/4 cup mayonnaise
3/4 cup extra-virgin olive oil
1/3 cup freshly grated Parmesan cheese
Crumble the oregano, basil, thyme and rosemary into a medium bowl. Stir
in the salt, pepper, vinegar and lemon juice. Whisk in the mayonnaise
and then the gradually whisk in the olive oil. Stir in the Parmesan
cheese. Transfer to a jar with a tight-fitting lid and store in the
refrigerator. Shake well before using.
3 tb Olive oil 1/4 c Tomato paste or ketchup
4 ea Cloves garlic, minced 3 tb Dijon Mustard
1/3 c Brown sugar, packed 2 tb Soy Sauce
1/4 c Cider vinegar 1 tb Red pepper flakes
2/3 c Chicken stock
Heat the oil in a small, heavy saucepan over medium heat. Add garlic and
saute until transparent, 2 to 3 minutes. Do not allow the garlic to burn.
Whisk in remaining ingredients, reduce heat to low; simmer 15 minutes to
20 minutes, until the mixture thickens. Stir occasionally.
you will need:

a couple of bars of chocolate (about 100g)
(break this into bits)
2tablespoons of golden sugar
a carton of single cream (I usually buy about 147g)
2 egg yolks
1/2 teaspoon vanilla extract

method:

Put the chocolate, cream and sugar in a small pan. Heat it very gently - if you aren’t
careful the chocolate will burn and man, that stinks! Stir until its really smooth.
Put the egg yolks in a big bowl and beat them until they’re a little stiff. Pour the chocolate
mix over the egg, mixing the whole time. Add the vanilla extract and give it another mix.
Pour the chocolate into whatever assortment of containers you feel like,
put them in the fridge and chill for AT LEAST 1 hour.


This is next to be tried in our baking ..... will modify depending on how it works out (maternity leave is great!)

3/4 cup butter (170g)
1 and 1/2 cups sugar (320g)
2 teaspoons vanilla
3 eggs
3/4 cup all purpose flour (100g)
1/2 cup cocoa powder (70g)
1 tsp baking powder
1 pinch salt (optional)
100g chopped pecans/ walnuts (optional)

Preheat oven to 180 Celcius
Line 33cm x 23cm cake tin with grease proof paper and grease tin. Melt butter
Beat eggs and sugar. Add vanilla, flour, cocoa, baking powder, salt (optional) melted butter
Add chopped nuts (optional)
Bake at 180 Celcius until toothpick inserted in the centre comes out clean (approx 20 to 30 minutes)
Cool the cake. Dust with powdered  sugar or glaze with chocolate glazing 

12 to 15 servings
Yield: 4 Servings
 
      4    Pork Center Loin Chops; 1-
           -Inch Thick
      1 tb Olive oil
      1    Onion; chopped
  1 1/2 ts Fennel seeds
      2 ts Paprika
    1/2 c  Dry white wine
    1/2 c  Low-Salt Chicken Broth;
           -Canned
      1 ts Fresh lemon juice
 
  Season pork with salt and pepper. Heat oil in heavy, large skillet over
  medium-high heat. Add pork; saute until brown and just cooked through,
  about 5 minutes per side. Transfer pork to plate; tent with foil to keep
  warm. Add onion and fennel seeds to same skillet and saute until onion is
  tender, about 5 minutes. Mix in paprika; stir 15 seconds. Add wine, broth
  and lemon juice and boil until sauce thickens slightly, scraping up browned
  bits, about 5 minutes. Season sauce to taste with salt and pepper. Spoon
  sauce over pork chops and serve.
1 1/2 lbs ground beef
1 large onion, chopped
1 can tomato juice
1 large can diced tomatoes
3 cans red kidney beans
chili powder
salt & pepper

Brown beef with salt and pepper and chopped onion; drain. Add tomato juice, tomatoes and beans, with liquid from the cans, and bring to simmer. Add chili powder to taste. Allow to simmer for a while longer until some of the liquid has reduced, then taste. Add more chili powder if you want, or even some habanero sauce.

Serve with steamed white rice.
Welcome
from [[allrecipes.com|http://allrecipes.com/Recipe/Eggless-Crepes/Detail.aspx?src=etaf]], thanks Joanna!

 INGREDIENTS

    * 1/2 cup skim milk
    * 2/3 cup water
    * 1/4 cup butter, melted
    * 2 tablespoons vanilla extract
    * 1 cup all-purpose flour
    * 1 tablespoon white sugar
    * 1/4 teaspoon salt
    * 1 tablespoon vegetable oil


 DIRECTIONS

   1. In a medium bowl, mix together milk, water, melted butter, and vanilla extract. In a small bowl, thoroughly mix flour, sugar, and salt. Whisk flour mixture into milk mixture until batter is smooth. Cover and refrigerate 2 hours.
   2. Warm a medium skillet over medium-high heat. Coat pan with a small amount of vegetable oil and pour in about 2 tablespoons of crepe batter. Swirl pan to allow batter to spread out thinly. Cook until edges are crispy and golden, then flip to cook other side until lightly browned. Repeat with remaining batter.

(Makes 1)

1tbsp instant espresso powder
1/3 cup cold water

Put ingredients into a blender and blend at highest speed until frothy - about 30 seconds. 
Put 4 or 5 ice cubes into a tall glass and pour in the frothy espresso. Add 4 tsp sugar or more to taste, add 1-2 tbsp. milk and stir well.
2 cloves of garlic
½ tsp. salt
¼ tsp. Worcestershire sauce
¼ cup butter
Dash of pepper
Dash of Tabasco sauce
Crush garlic cloves with ½ teaspoon of salt, a few grains of black pepper, Worcestershire sauce,
Tabasco sauce and butter. Heat gently to mix. Store in a tightly covered jar in the refrigerator.
No formal measurements for this simple recipe.

Wheat and egg and (if you don't use walnuts) nut free

For the filling, use any fruit you like - apple, apple and raspberry, plum, rhubarb etc are all good. Chop fruit up, add sugar to taste. Put into a deep baking dish. Soften fruit in the oven.

For the topping, mix oats, sugar (preferably a mix of golden caster and brown for extra taste, some honey if you like), a little spice (cinnamon, ground ginger and/or a little vanilla sugar) and butter (about 150 g). You can add chopped walnuts to the topping if nut allergies are not a problem. Sprinkle a thickish layer of topping on top  of the fruit. Bake at 200 C until brown on top (you may need to stick it under the grill for a short while).

Serve  with vanilla ice cream, cream or sweetened natural yoghurt.


3/4 cup Kikkoman Teriyaki Marinade & Sauce
2 tbsps brown sugar, packed
1 tsp grated fresh ginger root
4 fresh fish steaks (halibut, mahi mahi, striped bass or tuna) about 1 inch thick

Combine teriyaki sauce, brown sugar and ginger. Remove and reserve 1/4 cup and pour remainder over fish in large plastic food storage bag. Press air out of bag, close top securely. Turn bag over several times to coat fish well. Marinate 30 minutes, turning bag over once. Grill fish about 5 inches from hot coals 5 minutes on each side, or until fish flakes easily with fork, brushing occasionally with reserved sauce.
2 cups flour
2 cups Ricotta cheese
2 eggs

Put flour, ricotta and eggs in mixing bowl, and with a large spoon blend ingredients into a large ball. Place dough on a floured board, and roll into a ball again. Add mor flour, if necessary, to prevent sticking. Roll small amounts of dough, forming cigar-sized strands. Cut each strand into 1 inch pieces. With your knuckle or index finger, form a dent in the center of each. Drop into lots of boiling water (they will sink) and cook for about 8 to 10 mins. When the gnocchi floats to the top of the boiling water they are done. Drain and place on a large platter. Top with some marinara sauce, grated cheese, and coarsely chopped basil.
1 lg. head broccoli
2 lbs. gnocchi
1 med. onion, chopped
1 lb. bacon
1 1/2 sticks butter
garlic salt

Chop broccoli into small pieces, boil under tender. Cook gnocchi in boiling water, according to package instructions, until tender. Cut bacon into small pieces, and fry until crisp. Cook chopped onion until brown. Mix all ingredients, add garlic salt to taste.
2 tablespoons olive oil
1 tablespoon minced shallots
1 large clove garlic, minced
1 tablespoon minced fresh ginger
1 1/2 cups chicken broth
2 tablespoons soy sauce
1/4 teaspoon red pepper flakes
1 cup creamy peanut butter
1/2 teaspoon kosher salt
4 boneless, skinless chicken breasts
Vegetable spray
1 scallion, chopped


DIRECTIONS:
Heat the oil in a medium saute pan over medium-low heat. Add the shallots and cook for 1 minute, stirring often, then add the garlic and ginger and cook for 1 more minute. Add the chicken broth, soy sauce and red pepper flakes and raise the heat to medium-high to bring to a boil. Add the peanut butter and whisk carefully until smooth and incorporated. Remove from heat and add the salt. This sauce can be made up to 3 days in advance and kept in the refrigerator. Reheat before serving.

Heat the grill to medium-high and spray the chicken breasts with vegetable spray. Grill, breast side down, for 7 to 8 minutes, until golden brown. Turn over and brush each breast with 2 teaspoons of the sauce. Continue to cook for 7 to 8 more minutes until golden brown and done. Remove from the grill, sprinkle with scallions and serve with the remaining peanut sauce.
1 lb. ground beef
1 can (15 oz.) stewed tomatoes
1 can (15 oz.) tomato sauce
2 cups dry elbow macaroni
Cook macaroni as per directions on package. Brown ground beef and drain. Pour tomato sauce and
stewed tomatoes over mixture and stir in macaroni. Mix well and cook thoroughly.
Serves 4-6 cooking time 2 hrs
(from store recipe card @ [[Supervalu|www.supervalu.ie]])

2kg leg of lamb
3 garlic cloves, peeled & sliced
4 sprigs fresh rosemary
sea salt & freshly ground black pepper 

1 preheat the oven to 220C/425F. make around 15 deep slits in the lamb & push garlic slices into half of them

2. separate the leaves from the rosemary stalks and push into the remaining slits

3. season liberally with salt and pepper, rubbing well into the skin. transfer to roasting tin and cook in the oven for 30min

4. reduce temp to 180C/350F and cook for 1.5 hrs or until meat is tender. garnish with extra rosemary before serving with crsipy potatoes, peas & carrots

tips:
>- sear meat before roasting for exceptional flavour and sealing in the juices
>- if roast is browning too quickly, cover with foil
>- always cook a roast fat side up - the melting fat will naturally baste meat and keep it moist
>- always leave roast to cool after cooking since temperature of the meat will continue to rise immeditely after you remove it from the oven
1/2 cup liquid honey
1/4 cup lemon juice
1/4 cup water
3 tbsp ketchup
1 1/2 tsp garlic powder
1/2 tsp garlic salt
1 tsp ground ginger

Combine all ingredients in a sauce pan. Heat to boiling and simmer for 5 minutes.

Marinade 3lbs chicken wings separated into a 9x13 baking dish. Pour sauce over wings. Marinate for 2 hours.

Bake at 400F for 1 hour, turning once.
2 eggs
1 slice ham 
mozzarella cheese
1 tbsp. shortening

Mix 2 eggs with fork until whites and yolks are blended. In skillet, melt Crisco, add egg. Cook slowly until puffy and light brown on bottom (lift omelette at edge to judge colour.) Cut in half and flip. On one section, top with ham and cheese. Reduce heat and cover until cheese is melted. When serving, cover with other section of egg.
from [[allrecipes| http://allrecipes.com/Recipe/Honey-Garlic-Ribs/Detail.aspx]]

INGREDIENTS

    * 1.1 kg pork spareribs
    * 75 ml honey
    * 35 ml soy sauce
    * 35 ml distilled white vinegar
    * 1-1/4 cloves garlic, minced
    * 15 g brown sugar
    * 3 g baking soda
    * 3 g garlic salt

DIRECTIONS

   1. Preheat oven to 375 degrees F (190 degrees C).
   2. Slice the ribs into individual pieces. In a large bowl, combine the honey, soy sauce, vinegar, garlic and brown sugar. Stir until honey and sugar are completely dissolved, then stir in the baking soda. The mixture will begin to foam. Transfer ribs to the bowl, and turn to coat.
   3. Cover a cookie sheet with foil, and arrange the ribs meat side up on the sheet. Pour excess sauce over all, and sprinkle with the garlic salt.
   4. Bake for 1 hour, turning every 20 minutes.
easy as pie...

0. login 
1. click "new tiddler" on right-hand side bar
2. enter recipe title in top section then recipe in main section. please give credits/references where possible
3. in bottom section put "tags", these are terms that will be used to reference the recipe for filing. it's important you put at least a couple as this gives greater flexibility later. for example for oxtail soup, the tags  may be "oxtail soup beef". 
4. to list a recipe under one of the main menu items on the left-hand side bar, tag the appropriate tiddler name as it appears in the Main Menu eg Italian. for tags made up of more than one word, use square brackets e.g. [[Main Courses]]
5. click "done" when finished

if you're not sure, select existing recipe, select "edit" and see how that's been done then do the same
4 eggs
1/2 tsp salt
4 oz. corn starch
1 lb. topside of beef, cut into matchstick strips
2 cups vegetable oil
3 medium carrots, scraped and cut into matchstick strips
2 spring onions, cut into 1 inch sections
2 dry red chillies, shredded
3 garlic cloves, crushed
6 tsp sugar
2 tbsp soy sauce
4 tbsp wine vinegar

Mix together the eggs, salt and cornflour and toss the beef in this until well coated. Heat the oil in a wok to 350F or until a cube of bread browns in 30 seconds, and stir fry the beef for 1 1/2 minutes or until crispy. Remove and drain on paper towels. Reheat the oil and deep fry the carrots for 1 1/2 minutes.  Remove and drain on paper towels.
Pour off most of the oil, leaving about 1 1/2 tbsp in the bottom of the wok. Reheat, then add the spring onions, chillies and garlic. Stir fry together for about 30 seconds over the heat and then add the sugar, soy sauce and vinegar. Return the meat and the carrots to the sauce. Toss over the heat and serve.
thanks joanna D! delightful, busi could taste the salt...will try without any @ next attempt

1 cup flour
2/3 cup sugar
2 teaspoon baking powder
½ teaspoon salt
1 teaspoon cinnamon**
½ cup cocoa
½ cup milk
2 tablespoon margarine
1 teaspoon vanilla
1 cup brown sugar

Mix everything together and spread in square baking dish. Pour 1 ½ cups boiling water over mixture, but do not mix in. Bake at 175C (350F) for 30 min. Cool for 10 min. then serve with ice cream.

Note: This will not be like cake. It will look like it is not cooked completely.
1/2 cup butter
1/2 cup sugar
2 slightly beaten eggs
1 cup milk
2 cups flour
4 tsp baking powder
3/4 teaspoons salt

Beat butter and sugar well
Sift dry ingredients together and add to batter, alternating with milk/ egg mixture. Beat until smooth
grease/ line with paper 12 to 15 muffin cups. Pour batter evenly into cups
Bake at 200 Celcius until tops are firm but not brown
serve as dinner accompaniment

(8 Slices)
1-1/4 cups half and half
1 tbsp. olive or salad oil
1 tsp. cornstarch
1/2 tsp. paprika
1 tbsp. capers
1 12" loaf Italian bread
1 8 oz. package Mozzarella cheese
1 tbsp. chopped parsley
In 2-qt. saucepan, combine first 4 ingredients. Cook over medium heat, until boiling, stirring
constantly. Boil 1 minute. Reduce heat, stir in capers, cover, keep warm.
Preheat broiler. From Italian bread, diagonally cut 8 one inch thick slices (save remaining bread).
Toast bread in broiler on each side. Put sliced cheese on each piece and broil until melted.
Spoon cream mixture over cheese. Garnish with parsley. Serve immediately.
(4 servings)
2 potatoes, sliced
1 large carrot, sliced
1 small cauliflower
4 oz. frozen green beans
2 7 oz. cans tuns, drained
2 tomatoes, peeled, sliced
1 beet, sliced
5 anchovy fillets (optional)
1 onion, chopped
1 clove garlic
1 tbsp. capers
4 eggs, separated
1/3 cup hazelnuts
1/2 cup breadcrumbs
1/2 cup cheddar cheese
1 tbsp. parsley
salt and pepper
Cook potatoes and carrots in boiling, salted water 15 - 20 minutes. Divide cauliflower into sprigs
and add with beans for the last 10 minutes. Drain.
Lightly grease 4 pint oven dish. Layer cooked vegetables, tuna (flaked), tomatoes and beet
alternately.
Mix finely chopped anchovy (optional), onion, garlic (crushed), chopped capers and egg yolks to a
smooth consistency.
Stir in ground hazelnuts, breadcrumbs, grated cheese, then fold in parsley and stiffly beaten egg
whites. Season to taste.
Spread topping over vegetables and bake at 400 degrees 20 - 25 minutes.

Type the text for 'Lamb'
what you need:

125g butter
75g chocolate syrup (you could use golden syrup, but I can’t find it in Japan.)
200g chocolate (buy some expensive stuff)
1 egg, beaten
50g digestive biscuits, broken into chunks
50g walnut halves
50g sultanas

what you do:

First up, you need to grease a 900g loaf tin. Then, its probably best to line it with greaseproof paper (I don’t ever bother, because I always forget to buy greaseproof paper).
Now, heat the butter in a small pan, along with the syrup. Heat slowly, until the butter’s melted and it starts to boil. Remove from the heat, put to one side.
Put the chocolate into a heatproof bowl and leave it to melt over a pan of gently simmering water. Once its all melted, turn off the heat and add the butter/syrup mixture. Once that’s mixed, add the egg, little by little, stirring well after each new bit of egg you add.
Throw in the biscuits,walnuts and sultanas, and mix well.
Pour the whole shebang into the tin, cover with clingfilm and refrigerate for at least 4 hours. Overnight is best.

Serve, and enjoy adulation.
[[BBC Food|http://www.bbc.co.uk/food/]]	 
[[Allrecipes|http://allrecipes.com/Default.aspx/]]
[[Cooks.com|http://www.cooks.com/]]
From BBCFood, Brian Turner. Prep 30min, cook 20min

Ingredients
1 tbsp olive oil
1/3 onion, peeled and chopped
1 garlic clove, peeled and chopped
1 lamb steak, cut into strips
½ potato, peeled and diced
2 tbsp soy sauce
2 tsp honey
1 tbsp white wine
1 tbsp fresh chives, chopped
salt and freshly ground black pepper, to taste

Method
1. Heat the oil in a large frying pan.
2. Add the onion and garlic and fry until soft.
3. Add the lamb and potato and fry until the potato is cooked through.
4. Add the soy sauce, honey and white wine and stir well to collect the cooking juices.
5. Season the stir-fry.
6. Remove the pan from the heat.
7. Transfer the stir-fry to a shallow bowl and serve.
(3 - 4 Servings)
1 onion
1/4 cup olive oil
8 oz. ground beef
1 tsp. salt
1/2 tsp. white pepper
5 tbsp. red wine
1 tbsp. tomato paste
6 tbsp. whipping cream
pinch dried oregano
1-1/4 lb. lasagne
1/4 cup butter
pinch ground nutmeg
1/4 cup grated Parmesan cheese
Peel and dice onion. Heat oil in pan and fry meat and onions for 5 minutes, until brown. Add salt,
pepper, wine, and tomato paste and cook until thick. Stir in cream and oregano.
Cook lasagne in boiling water until just tender. Drain and rinse under cold water. Dry with paper
towel.
Arrange lasagne and meat sauce in layers in greased ovenproof dish, ending with a layer of lasagne.
Dot with butter and sprinkle with nutmeg and grated cheese. Bake at 350 degrees for 10 minutes.
the chocolate cream was a result of sheer determination by Langa, my preference is [[Vanilla Butter Cream]]

Ingredients
3 cups sifted cake flour
1 tablespoon baking powder
6 tablespoons butter
1-1/2 cups sugar
1 cup milk
2 teaspoons pure vanilla extract
6 egg whites

Instructions
Preheat oven to 160C (325F). Grease and line 2 9-inch cake pans with parchment.

Sift together flour and baking powder. Set aside.
Cream butter and sugar until light and fluffy.
With a mixer on slow speed, add flour mixture to the butter mixture,
alternately with milk. Beat after each addition. Beat in vanilla.

Whip the egg whites until stiff but not dry. Fold them into the cake batter gently, making sure not to over mix. Pour into prepared pans.

Bake for 25 - 30 minutes or until a tester comes out clean. Place cake pans on cooling rack and allow to cool completely before removing from pans.

Chocolate Cream

 Ingredients: 
1 1/2 cups whipping cream 
3 tablespoons powdered sugar 
1 teaspoon vanilla extract
1/2 cup semisweet real chocolate chips, melted 
Beat chilled whipping cream at high speed in chilled small, deep mixer bowl, scraping bowl often, until soft peaks form (1 to 2 minutes). Continue beating, gradually adding powdered sugar and 1 teaspoon vanilla, until stiff peaks form (1 to 2 minutes). Add melted chocolate. Continue beating until well mixed (1 minute). (DO NOT OVER BEAT.)
4 OZS DIGESTIVE BISCUITS
2 OZS MARG.
2 OZS CASTOR SUGAR

1 SQUEEZY LEMON
1 LEMON JELLY
8 OZS COTTAGE CHEESE
¼ PINT FRESH CREAM.

Grease cheesecake tin. Crush biscuits. Add sugar to biscuits. Melt marg. & mix in bis. And sugar. Spread over base of tin & press mixture down firmly. Leave in fridge to set.

Dissolve jelly in hot water. Sieve cheese into basin. Add lemon juice to jelly and whisk mixture to cheese. Whisk cream. Then whisk cream to mix. Pour onto biscuit base and leave to set in fridge.
from www.lovefoodhatewaste.com - website with great recipes for leftovers. we used this for leftover roast chicken. we've halved the lemon in the original recipe, too strong for us.
Ingredients
Serves 4-6

    * 450g leftover cooked chicken
    * 1 lemon
    * 1 garlic clove, peeled and crushed
    * 240g frozen peas
    * 125g babycorn, sliced into circles
    * 220g risotto or long grain Rice
    
Instructions

   1. Preheat the oven to 200°C (400°F) mark 6. Wash the lemon and finely grate the zest. Place the chicken strips in a deep tin. Pour the lemon juice and grated zest over and cook in the preheated oven for 15-20 minutes.
   2. Meanwhile, heat the garlic and olive oil together in a large wide saucepan, add the rice, and stir to coat the grains with the oil. Heat the chicken stock and keep it simmering on the top of the stove, next to the risotto pan.
   3. Gradually add the stock to the rice, stirring, allowing each lot to be absorbed before adding the next. Add the frozen peas and babycorn slices when you’ve used up about half of the stock. When all the stock has been used up, add the chicken strips and stir thoroughly until piping hot. Add the herbs and serve straight away.

INGREDIENTS - JERK MARINADE:

    * 3 scallions, chopped
    * 4 large garlic cloves, chopped
    * 1 small onion, chopped
    * 4 to 5 fresh Scotch bonnet or habanero chile, stemmed and seeded
    * 1/4 cup fresh lime juice
    * 2 tablespoons soy sauce
    * 3 tablespoons olive oil
    * 1 1/2 tablespoons salt
    * 1 tablespoon packed brown sugar
    * 1 tablespoon fresh thyme leaves
    * 2 teaspoons ground allspice
    * 2 teaspoons black pepper
    * 3/4 teaspoon freshly grated nutmeg
    * 1/2 teaspoon cinnamon

INGREDIENTS - CHICKEN

    * 4 chicken breast halves with skin and bones (3 lb), halved crosswise
    * 2 1/2 to 3 lb chicken thighs and drumsticks

COOKING INSTRUCTIONS:

   1. Make marinade by blending all marinade ingredients in a blender until smooth.
   2. Marinate and grill chicken by dividing chicken pieces and marinade between 2 sealable plastic bags. Seal bags, pressing out excess air, then turn bags over several times to distribute marinade. Put bags of chicken in a shallow pan and marinate, chilled, turning once or twice. Let chicken stand at room temperature 1 hour before cooking.
      Using a Charcoal Grill:

      Open vents on bottom of grill and on lid. Light a large chimney of charcoal briquettes (about 100) and pour them evenly over 1 side of bottom rack (you will have a double or triple layer of charcoal).

      When charcoal turns grayish white and you can hold your hand 5 inches above rack for 3 to 4 seconds, sear chicken in batches on lightly oiled rack over coals until well browned on all sides, about 3 minutes per batch. Move chicken as seared to side of grill with no coals underneath, then cook, covered with lid, until cooked through, 25 to 30 minutes more.
      Using a Gas Grill:

      Preheat burners on high, then adjust heat to moderate. Cook chicken until well browned on all sides, 15 to 20 minutes. Adjust heat to low and cook chicken, covered with lid, until cooked through, about 25 minutes more.

      This Grilled Jerk Chicken recipe makes 8 servings. If you have any modifications to make this recipe more delicious then feel free to leave a comment.
Pumpkin Pie Pre-heat oven 425*C

How to cook the pumpkin

There are many types of pumpkin or squash which can be used in this recipe. I use the round, orange “halloween” type. All these vegetables are very moist so baking is the best way to cook them to condense the pulp and create a custard-like, cooked pie filling.

Cut the pumpkin in the middle, horizontally, so one half is the bottom and one half the top. Remove the seeds. Bake each half in a medium (350*F) oven on a cooking sheet with the skin side up (like an upside down teacup) until tender. Scrape the pumpkin from the skin and drain off any excess liquid. (I use a sieve and lightly mash the pumpkin in the sieve which allows the liquid to drain and retains the pulp.) Don’t worry if the pulp is chunky. Measure into 2 cup aliquots and freeze until needed.

1 x 9 inch pastry shell

Sift into a bowl
1 1/2 cups (16 oz.) all purpose flour
1/2 tsp (teaspoon) salt (optional).
Work in 1/2 cup (4oz.) shortening or butter until mixture is grainy.
Add 3 T (tablespoons) cold water one at a time and work the mixture into a dough.

Roll out and shape into 9 inch pie pan.
(Tip to avoid a ‘soggy crust’, bake the pie crust 425*F, 12-15 minutes and cool before filling. Another tip, (which I do) is to brush the bottom of the pie shell with egg white before filling it to create a barrier between the crust and filling when baking the pie.)

Filling

2 cups (16oz.) cooked pumpkin
1, 14oz can Sweetened Condensed Milk (NOT evaporated milk)
2 eggs
1 tsp ground cinnamon
1/2 tsp ground ginger
1/2 tsp ground nutmeg
1/2 tsp salt (optional)

Blend all in blender or use a hand held blender. (This will cut the pumpkin into a smooth puree.)
Pour into pastry shell.
Bake 425*C 15 minutes. Reduce oven temperature to 350*C and bake 35-40 minutes longer or until knife inserted 1 inch from edge comes out clean. Store refrigerated.

Ingredients

    * 3  tablespoons  fresh lemon juice
    * 2  tablespoons  extravirgin olive oil
    * 2  garlic cloves, minced
    * 7  (6-ounce) skinless, boneless chicken breast halves
    * 1/2  teaspoon  salt
    * 1/2  teaspoon  freshly ground black pepper
    * Cooking spray

Preparation

1. Prepare grill to medium-high heat.
2. Combine first 4 ingredients in a large zip-top plastic bag; seal. Marinate in refrigerator 30 minutes, turning occasionally. Remove chicken from bag; discard marinade. Sprinkle chicken evenly with salt and pepper.
3. Place chicken on grill rack coated with cooking spray; grill 6 minutes on each side or until done.
from BBCFood, prep 30min

Ingredients
3 tbsp rolled oats
1 tbsp soft brown sugar
200ml/7fl oz condensed milk
100ml/3½fl oz double cream, whipped
2 limes, juice and zest

Method
1. Place the rolled oats and brown sugar into a bowl and mix well. Pour out into a small tart case.
2. Place the condensed milk, whipped double cream and lime juice into a separate bowl and mix well.
3. Pour the cream mixture onto the oats and sugar base and place into the fridge to cool for at least ten minutes.
4. Serve straight from the fridge, garnished with lime zest.
Had this low country dish recently in Myrtle Beach

 INGREDIENTS

    * 3/4 cup stone-ground grits
    * 3 cups milk
    * 30 ml extra virgin olive oil
    * 1 tsp butter
    * 1 small onion, finely chopped
    * 450 g (1lb) shrimp, peeled and deveined
    * 1/4 tsp salt
    * 1/8 tsp white pepper


 DIRECTIONS

   1. In a medium saucepan, bring the milk to a boil. Stir in the grits, and reduce heat to low. Cook, stirring occasionally, until silky, about 10 minutes.
   2. Meanwhile, heat olive oil and butter in a skillet over medium heat. Saute onions until tender, then toss in shrimp. Season with salt and pepper, and cook 4 to 5 minutes, or until shrimp turn pink. Stir shrimp mixture into grits, and continue cooking for 10 to 15 minutes. Serve hot.
Serves 2
(for Paul P - this is how i make it. the salt & sugar are optional)

150g maize (mealie) meal (approx 9 heaped tablespoons)
pinch salt
tablespoon sugar
200ml cold water
1200ml boiling water

1. add cold water to maize meal to make thin paste. add sugar and salt if using
2. on high heat add boiling water while stirring and allow to boil for 3 min
3. reduce to medium heat and leave for 6min, stirring occasionally
4. reduce heat to low and simmer for at least 10min (i often leave for 20min)

i serve  mine with any of the following:
- peanut butter
- cream or milk
- fresh lemon juice
- flavoured yoghurt
from [[allrecipes|http://allrecipes.com/Recipe/Maple-Glazed-Ribs-2/Detail.aspx]]

 INGREDIENTS

    * 1.1 kg pork spareribs, cut into serving size pieces
    * 200 ml pure maple syrup
    * 40 ml frozen orange juice concentrate
    * 40 ml ketchup
    * 25 ml soy sauce
    * 10 ml Dijon mustard
    * 10 ml Worcestershire sauce
    * 2 g curry powder
    * 7/8 clove garlic, minced
    * 1-2/3 green onions, minced
    * 8 g toasted sesame seeds

DIRECTIONS

   1. Preheat oven to 350 degrees F (175 degrees C). Place ribs meat side up on a rack in a 9x13 inch roasting pan. Cover pan tightly with foil. Bake for 1 1/4 hours.
   2. In a saucepan over medium heat, combine maple syrup, orange juice concentrate, ketchup, soy sauce, mustard and Worcestershire sauce. Stir in curry powder, garlic and green onions. Simmer for 15 minutes, stirring occasionally.
   3. Remove ribs from roasting pan, remove rack, and drain excess fat and drippings. Return ribs to pan, cover with sauce, and bake uncovered for 35 minutes, basting occasionally. Sprinkle with sesame seeds just before serving.

>fabulous recipe...to refine it we now either slow boil or (better yet) steam the ribs before basting/grilling. softens them up a good bit. thanks to CJ for the tip!
You will need:

for the marinade:

6 tbsp soy sauce
5cm fresh root ginger, grated
3 garlic cloves, crushed
3 spring onions, finely sliced
1 red chilli, finely chopped

for the salmon:

4 x 200g salmon fillets
25g butter

What You Do:

Put the soy sauce in a plastic dish. Add the other ingredients for the sauce, and season with black pepper. Stir well, then add the salmon fillets and toss them about to coat them with the marinade.

Put the butter into a frying pan, and heat slowly until it melts. Add the salmon & fry, skin side first, for about 4 minutes each side, until the salmon is cooked through, but still a little pink in the middle.

Serve with some rice & steamed broccoli.
1½ lbs. ground beef
3 slices of bread, cubed
1 cup milk
1 egg, slightly beaten
1¼ tsp. salt
¼ cup minced onion flakes (or chopped onions)
1 Tbsp. Worcestershire sauce
3 to 4 Tbsp. catsup (or chili sauce)
Combine all of the ingredients except for the ground beef. Mix in ground beef and pat into a 4”x 9”
loaf pan. Spread catsup or chili sauce over the top of the meatloaf before placing it in the oven.
Bake at 350ºF for about 1 hour.

4 chicken breast halves, skinned, boned and sliced
salt and pepper
4 cloves garlic, minced
2 cups water
1 tbsp cornstarch
5 tbsp corn oil
8 oz fresh mushrooms, sliced
4 pounds bok choy or chinese white cabbage, chopped
2 tbsp sugar
4 tbsp soy sauce
6 scallions, chopped

In a bowl, toss chicken with the salt and pepper, garlic and cornstarch mixture. Set aside. 
Heat 3 tbsp of corn oil in a wok and stir in mushrooms, bok choy and sugar for 2 minutes . Cover and cook for 5 minutes. Remove from wok.
Heat remaining corn oil in wok. Stir fry chicken for 2 minutes over high heat. Add soy sauce and mix well. Cover and cook for about 6 minutes or until the chicken is thoroughly cooked.
Mix in the cooked vegetables and scallions. Stir fry together for about 1 minute. Serve hot with rice.
(makes 2)
    * 4 large eggs
    * 1 and 1/2 cups fresh mushrooms -- sliced
    * 1 tablespoon fresh parsley -- chopped
    * 1 teaspoon fresh oregano
    * basil or thyme -- finely chopped
    * 2 teaspoons butter
    * salt and pepper to taste 

In small bowl, wisk together eggs and spices. Set aside.

In a medium skillet at just above medium heat, sauté the mushrooms in half the butter (1 teaspoon) until tender; set aside.

In same skillet, melt half of the remaining butter (1/2 teaspoon). Pour half of the egg mixture into skillet. Cook, lifting edge to allow uncooked portion to flow underneath. When almost set, spoon half of the mushrooms over half of the omelet. Fold other half over the mushrooms; slide onto a serving plate.

Repeat with remaining ingredients. 

added chives as well. don't overdo eggs!
serves 4

1 cup mealie meal meal 	
½ teaspoon sugar
2 cups water  	
2 tablespoons peanut butter
½ pound pumpkin, peeled, cooked and mashed (include any cooking liquid)
salt to taste 	

    * Bring the water to a boil in a good-sized saucepan and put in the mealie meal. Cook, stirring frequently, until it forms a porridge.
    * Next, stir in the mashed pumpkin. Then add the sugar, peanut butter and salt and combine all ingredients well.
    * Continue to cook for a few minutes over low heat, adding about ½ cup of the retained pumpkin cooking water if necessary to make the consistency you prefer. Serve immediately with spinach or another leafy green.
Madeira Cake

This cake improves with time, so can be made in advance. It also freezes well. from waitrose.com

Serves 8

Preparation time: 20 minutes
Cooking time: 1 hour, plus cooling
Ingredients

170g butter, softened, plus extra for greasing
170g caster sugar, plus extra to serve
Finely grated zest of 1 orange
Finely grated zest of 1 lemon, plus 1 tbsp lemon juice
4 eggs
170g plain flour, sifted
Pinch of salt
3/4 tsp baking powder
50g chopped candied peel (optional)
Instructions

Preheat the oven to 170C/gas mark 3. Butter a 225g non-stick loaf tin (about 12 x 20cm) or a 20cm-diameter round cake tin and line with greaseproof paper.

Put the butter, sugar, orange and lemon zest in a food processor and whiz until fluffy. Still beating, add one egg at a time, waiting until each is fully incorporated before adding the next. Add the lemon juice, then the flour, salt and baking powder, followed by the chopped candied peel, if using. Spoon the mixture into your prepared tin and bake for about an hour or until golden and springy. If the cake is browning too quickly, loosely cover the top with foil but remember to remove it shortly before the end of cooking. Test the cake by inserting a skewer into the centre. If it comes out clean, the cake is cooked.

Put the cake tin on a wire rack and leave for 15 minutes. Then remove the cake from the tin and sprinkle generously with caster sugar. Leave to cool. Madeira cake tastes best if not eaten on the day of cooking, so when cold, tightly wrap in foil and leave for a day or two.
6 each White onions
1 cup Milk
3 each Eggs, beaten
Salt
2 cups Pancake mix
Slice the onions crosswise and separate into rings.
Combine milk, eggs, and salt to taste in mixing bowl.
Soak the onions in the mixture about 30 minutes.
Place pancake mix in a shallow bowl.
Heat oil for frying in skillet to 375 degrees.
Remove the onion rings from milk mixture, dip in pancake mix
and place in hot oil. Fry rings until golden brown and drain on
paper towels. Pack fried onion rings solidly, but loosely, without
pressing, into an 8x4" loaf pan. Bake at 400 degrees 10 to 15
minutes. Turn onto serving plate.



3/4 cup onions, diced 1/8 inch
1 slice bacon, 1/4-inch diced
1 1/4 teaspoon garlic cloves, minced
1 ounce chicken bouillon
1 quart water
2 medium potatoes, cut in half length-wise,
then cut in 1/4-inch slices
2 cups cavallo greens (kale can be substituted),
cut in half, then sliced into 1/16-inch strips
1 1/2 cups sausage link - spicy, pre-cooked, cut in half
length-wise, then cut at an angle into 1/2-inch slices
3/4 cup heavy whipping cream
Place sausage link onto sheet pan and bake in 300 degree oven for
15 to 20 minutes or until done.
Place onions and bacon into 3 to 4 quart saucepan and cook onions
over medium heat until the onions are almost clear. Add garlic and
cook for 1 minute.
Add chicken bouillon, water and potatoes, bring to a simmer for 15 minutes.
Add remaining ingredients then simmer for 5 more minutes and serve. 

2 lbs boneless chicken pieces, skinned
1 egg
1 1/2 t salt
white pepper
oil (for frying)
1/2 c plus 1 T cornstarch
1/4 c flour
1 T minced ginger root
1 t minced garlic
dash crushed hot red chiles
1/4 c chopped green onions
1 T rice wine
1/4 c water
1/2 to 1 t sesame oil
ORANGE SAUCE FOR STIR FRY:
2 t Minced zest and
1/4 c Juice from
1 lg Orange
1/2 t Sugar
2 T Chicken stock
1 T Light soy sauce
Combine all ingredients in small bowl and set aside.
Cut chicken pieces in 2" squares and place in large bowl. Stir in egg,
salt, pepper, and 1 T oil and mix well. Stir cornstarch and flour
together. Add chicken pieces, stirring to coat.
Heat oil for deep-frying in wok or deep-fryer to 375. Add chicken pieces,
a small batch at time, and fry 3 to 4 minutes or until golden and crisp.
(Do not overcook or chicken will be tough.) Remove chicken from oil with
slotted spoon and drain on paper towels. Set aside.
Clean wok and heat 15 seconds over high heat. Add 1 T oil. Add ginger
and garlic and stir-fry until fragrant. Add and stir-fry crushed chiles
and green onions. Add rice wine and stir 3 seconds. Add Orange Sauce
and bring to boil. Add cooked chicken, stirring until well mixed.
Stir water into remaining 1 T cornstarch until smooth.
Add to chicken and heat until sauce is thick. Stir in 1 teas. sesame oil.
Serve at once.
Makes 6 servings.
1/3 cup orange juice
½ cup water
½ cup milk
¼ cup granulated sugar
½ tsp. vanilla
5 to 6 ice cubes

Blend all ingredients in a blender on high speed for 30 seconds. Serve immediately.
1 cup orange juice
1 cup water
2 egg whites
3/4 teaspoon vanilla extract
1/4 cup sugar
1 heaping cup ice
Combine all of the ingredients in a blender set on high speed for 15-30
seconds.
Makes 2 drinks. 

Type the text for 'OtherAsian'
[[Breakfast]]-[[Dessert]]
[[Main Courses]]-[[egg free]]

[[Bread]]-[[Casseroles]]-[[Cakes]]
[[Drinks]]-[[Pies]]-[[Sauces]]
[[Side Dishes & Snacks]]
[[Soups]]-[[Salads]]

[[Beef]]-[[Chicken]]-[[Fish]]
[[Pasta]]-[[Pork]]-[[Lamb]]

[[African]]-[[Chinese]]-[[Italian]]
[[Japanese]]-[[Indian]]
[[Mexican]]-[[Spanish]]
[[OtherAsian]]

[[Temperature Conversions]]

[[Weight and Volume Conversions]]

[[Methods]]

[[THK Matrix]]

[[Food Links]]

[[MainMenu]]





pot of salted water for blanching
1/4 head of broccoli, cut into florets
2 tbsp double cream
salt and freshly ground pepper
1/2 salmon fillet, sliced into 5cm pieces
1 tbsp vegetable oil

Bring salted water to boil. Add broccoli florets and cook for 2 minutes until tender. Drain. Reserve a few florets to serve with the salmon.
Place the rest in a food processor with the double cream, salt and pepper. Blend to a smooth puree. Keep warm

Heat oil in a frying pan. Season salmon pieces with salt and pepper. fry in hot pan for 1 to 2 mins until cooked
Serve immediately with the broccoli florets and broccoli puree
from sofeminine.co.uk

Ingredients
1/2 pint milk
2 heaped tsp Bisto granules (gravy ganules)
Coarse ground black pepper
Butter

Recipe :
1- Bring most of the milk to a simmer in a pan, but don't allow to boil.
2-Mix Bisto into remaining cold milk, then add to simering milk, stirring until thoroughly mixed in.
3- Bring back to simmer and allow to thicken then, add pepper to taste.
4- Add a knob of butter just before serving to give the sauce a shine.
Just don't let it boil!
serves 4-6

2 medium onions, finely chopped  	
2 green peppers, chopped
2 tablespoons butter 	
1 chicken, cut into pieces
2 cloves garlic, finely sliced and crushed 	
3 to 4 fresh tomatoes (or 1 large can of tomatoes)
1 teaspoon salt & ½ teaspoon pepper  	
6 tablespoons smooth peanut butter
1 chili pepper or ½ teaspoon cayenne pepper  	
½ pound spinach or pumpkin leaves

    * In a large stew pot over medium heat, sauté onions in butter until golden brown. Add garlic, salt and hot peppers.
    * Stir for 2 or 3 minutes then add green peppers and chicken. Brown the chicken.
    * When all the chicken pieces are brown on every side, mash tomatoes with a fork and mix them into the stew, along with about 2 cups water. Reduce heat and simmer for 5 to 10 minutes.
    * Thin the peanut butter with a few spoons of hot broth and add half the resulting paste to the pot. Simmer until the meat is well-cooked.
    * In a separate pot, boil spinach or pumpkin leaves for several minutes until tender. Drain and toss with the remainder of the peanut paste. Serve stew and greens side by side

From Aldi brochure

Ingredients

5 red and yellow peppers, diced
3 onion, roughly chopped
100g butter
1 chicken stock cube
4-6 chicken breasts
1 tub creme fraiche
basmati rice - enough to serve 4-6

Method

1. Gently saute the peppers and onions in butter over a low to medium heat (covered) for 15-20 min until soft.
2. Add the stock cube and blend using hand of jug blender
3. Pop the chicken breasts into the liquidised vegetables and poach gently for 15-2omin depending on how big the peices are
4. Spoon the creme fraiche over the chicken
5. Serve on bed of steamed basmati rice
serves 4-6. from www.vietnamese-recipes.com

3 medium eggplants
2 sprigs coriander

dressing
6 cloves garlic
1 tsp soy sauce
2 tsp rice vinegar
1/2 tsp salt
1 tsp sugar
1 tsp black pepper
1 tbsp sesame oil

method
      Bring a large pot of water to a full boil, then add the whole eggplants, let water return to the boil, then lower heat and simmer until the eggplants change color and begin to wilt, about 8 minutes.
      Remove from water and set in a colander to drain.
      Cut eggplants in half lengthways, then cut each half into 5 cm pieces, and place in a mixing bowl.
      In a small bowl, stir together all dressing ingredients, except sesame oil. Then, using a whisk or fork, add in the sesame oil while beating continuously until the dressing is well blended.
      Pour the dressing evenly over the eggplant and toss to blend.
      Transfer to a smaller serving dish.
2 large leeks, thickly sliced
1 red skinned apple, cored and cut into wedges
6 fresh sage leaves, finely chopped
2 pork chops

Cover base of steamer with leeks and apple wedges, season well with sea salt and freshly ground black pepper, and scatter over sage. Top with chops, season again, the place steamer over a pan of boiling water. Steam for 20-25 minutes until leeks are softened and chops are cooked through. Serve with fluffy jacket spuds.
You will need:
2 cups mashed potatoes
1 cup plain flour
2 tablespoons butter
salt
What you do:
Melt the butter & mix into the potatoes with the salt. Work in the flour quickly. Knead gently. Divide in half & roll each half out on a floured board to form a circle about the same size of a dinner plate. Cut in quarters & cook for about 3 minutes on each side in a lightly oiled frying pan. And serve with the rest of an Ulster Fry.
1 pound ground beef
1 small onion, diced (1 cup)
1 large carrot, julienned (1 cup)
3 stalks celery, chopped (1 cup)
2 cloves garlic, minced
2 14.5-ounce cans diced tomatoes
1 15-ounce can red kidney beans (with liquid)
1 15-ounce can great northern beans (with liquid)
1 15-ounce can tomato sauce
1 12-ounce can V-8 juice
1 tablespoon white vinegar
1 1/2 teaspoons salt
1 teaspoon oregano
1 teaspoon basil
1/2 teaspoon pepper
1/2 teaspoon thyme
1/2 pound (1/2 pkg.) ditali pasta
1. Brown the ground beef in a large saucepan or pot over medium heat.
Drain off most of the fat.
2. Add onion, carrot, celery and garlic and sauté for 10 minutes.
3. Add remaining ingredients, except pasta, and simmer for 1 hour.
4. About 50 minutes into simmer time, cook the pasta in 1 1/2 to 2 quarts
of boiling water over high heat. Cook for 10 minutes or just until
pasta is al dente, or slightly tough. Drain.
5. Add the pasta to the large pot of soup.
Simmer for 5-10 minutes and serve.
Serves 8.
Outback Steakhouse Aussie Fries
1 - 2 lb. bag of Frozen French Fries
1 Cup shredded Colby Jack cheese
6 pieces of Bacon, cooked
24 Fl. Oz. Peanut Oil (can be reused later; store
in refrigerator)
Divide the fries into half, and use the other half later.
Heat oil to 350 degrees. If you do not have a thermostat, make sure
the oil is hot enough, so that when you set a french fry in there it
will cook immediately. If the french fry sinks to the bottom, and
barely bubbles, it is not hot enough. Fry the potatoes in small
batches, they are done when they are golden brown, and float to the
top of the skillet. ( I like to use a Dutch Oven). Be sure to drain
the potatoes on paper towels. You can keep them warm in the oven
while the other fries are done.
When all french fries are done cooking, and drained place them onto
a platter. Salt the french fries if you like, and sprinkle on cheese
and cooked bacon. Pop these back into a warm oven until the cheese
begins to melt.
from BBCFood
make for 2-4, 20min

Ingredients
50g/9oz pumpkin purée
1 whole free-range egg
2 free-range egg yolks
1 vanilla pod, seeds only (discard the pod)
50g/1½oz self raising flour
1 tsp cinnamon
50ml/2fl oz condensed milk
200g/7oz Greek yoghurt, to serve

Method
1. Preheat the oven to 200C/400F/Gas 6.
2. Grease a baking sheet and preheat in the oven.
3. Place all the ingredients into a food processor and blend together.
4. Place spoonfuls of the mixture onto the preheated baking sheet, then flatten them out by lightly pressing down on them with a spatula.
5. Transfer to the oven for 12 minutes, until the scones are risen and golden.
6. To serve, transfer to a serving plate and place the Greek yoghurt in a serving bowl on the side.
1 pork tenderloin, about 1 pound
1/3 cup Kikkoman Quick & Easy Marinade - roasted garlic & herbs, toasted sesame, honey & mustard or gourmet teriyaki.

Butterfly pork lengthwise, being careful not to cut all the way through; press open to flatten. Place pork in large plastic food storage bag; pour in Kikkoman Quick & Easy Marinade. Press air out of bag, close top securely. Turn bag over several times to coat pork well. Marinate 20 minutes, turning over once. Grill 4 to 5 inches from hot coals for 8 minutes. Turn pork over, brush with additional marinade. Cook 7 to 8 minutes longer, or until just done.
750ml beef or chicken stock
125ml red wine vinegar
1 clove garlic
1 sprig flat leafed parsley
1/2tsp black peppercorns
6 small onions, peeled
12 sausages
12 chestnut mushrooms

In a large saucepan, bring stock, vinegar, garlic, parsley, peppercorns, onions and 250ml of water to boil. Add sausages and cover with a tight fitting lid. Simmer gently for 10 mins.
Add mushrooms and simmer for a further 10 minutes, until sausages are cooked through.
Serve with mashed potatoes.
2/3 cup Kikkoman Roasted Garlic Teriyaki Marinade & Sauce
1 tbsp brown sugar, packed
1 tbsp vegetable oil
6 boneless, skinless chicken breast halves

Combine sauce, sugar and oil, stirring until sugar dissolves. Pour mixture over chicken in large plastic food storage bag. Press air out of back, close top securely. Turn bag over several times to coat chicken. Refrigerate for 2 hours, turning bag over once. Remove chicken from marinade, and discard marinade. Grill chicken 4 to 5 inches from hot coals for 12 to 15 minutes, or until chicken is no longer pink in centre, turning over occasionally.
6 pork chops
2 1/2 cups of rice
1 can of consomme
1 c. water
1 lg. bell pepper
1 lg. onion
2 tomatoes, sliced

Mix together consomme, water and rice and put in a casserole dish. Put pork chops on top. Slice tomatoes, onion and bell pepper and put on top of pork chops. Cover and bake for 1 hour 15 minutes at 400 degrees.

1 pkg. (16 oz.) bacon (thick-sliced works best)
1 to 2 cans (8 oz.) whole water chestnuts
Toothpicks
Cut bacon in half. Roll a piece of bacon around one water chestnut. Place a toothpick in the center
to hold the bacon in place. Broil until bacon is crisp.

3 c Ketchup 2 tb Worcestershire sauce
1/4 c Sugar 2 tb Chili powder
1/2 c Tarragon Vinegar 1 tb Cayenne
1 ea Medium onion, minced 1 tb Garlic salt
Combine all ingredients in a saucepan and cook over medium heat for 10
minutes. Stir frequently. Allow to cool down to room temperature. Brush
the mixture on the pork during the final phase of cooking; if using
indirect heat, you may use it a mop.
Recipe By : The Complete Asian Cookbook

Serving Size : 32

PASTRY

    * 1 1/2 cups all-purpose flour
    * 3/4 teaspoon salt
    * 1 tablespoon oil or ghee (clarified butter)
    * 1/2 cup warm water 

FILLING

    * 1 tablespoon oil or ghee
    * 1 clove garlic -- finely chopped
    * 1 teaspoon fresh ginger root -- finely chopped
    * 2 medium onions -- finely chopped
    * 2 teaspoons curry powder
    * 1/2 teaspoon salt
    * 1 tablespoon vinegar or lemon juice
    * 8 oz steak or lamb -- minced
    * 1/2 cup hot water
    * 1 teaspoon garam masala
    * 2 tablespoons fresh mint or coriander leaves -- chopped
    * oil for frying 






Pastry: Sift flour and salt into a bowl, add oil and warm water and mix thoroughly, until ingredients are combined. (Add a little more water if necessary to combine ingredients.) Knead for about 10 minutes or until dough is elastic. Cover with plastic wrap and set aside while preparing filling.

Filling: Heat oil in a saucepan and fry garlic, ginger and half the onion until onion is soft. Add curry powder, salt and vinegar, mix well. Add minced steak and fry over a high heat, stirring constantly until meat changes color. Turn heat down and add hot water. Cover pan and cook until meat is tender and all the liquid has been absorbed. Towards end of cooking, stir frequently to prevent meat from sticking to base of pan. Sprinkle with garam masala and chopped mint or coriander, remove from heat and allow to cool. Mix in reserved chopped onion.

Take small pieces of dough, shape into balls and on a lightly floured board roll each one thinly to a circle, the size of a saucer. Cut each circle in half. put a teaspoon of filling on one side of each half circle and brush edges with water. Fold dough over and press edges together firmly. You will now have triangular shaped samoosas.
When they are all made, heat oil in a deep pan and deep fry a few at a time until golden brown on both sides. Drain on absorbent paper and serve hot.

NOTE: Both samoosa and singara can be made using spring roll wrappers. Cut into 2 1/2 inch strips the length of the pastry. Put a teaspoon of filling at one end and fold the pastry over diagonally, then fold again and again, still keeping a triangular shape. Moisten end of strip with water or beaten egg and press lightly.
Crust:
1 1/2 cups Fine graham cracker crumbs
1/4 cup Granulated sugar
1/2 cup Butter (softened)
Filling:
1 pound Cream cheese
1 cup Sour cream
2 tablespoons Cornstarch
1 cup Granulated sugar
2 tablespoons Butter (softened)
1 teaspoon Vanilla extract
Topping:
3/4 cup Sour cream
1/4 cup Powdered sugar
Preheat oven to 375 F. For crust combine crumbs, sugar and butter and mix
well. Press firmly into 9" pie-pan covering bottom only. Bake for 8 min.,
or until the edges are slightly brown. Reduce oven to 350 F. For filling,
combine cheese, sour cream, cornstarch, and sugar in bowl of mixer. Mix
until sugar has disolved. Add the butter and vanilla and blend until
smooth. Be careful not to overmix, or the filling will become too fluffy
and will crack when cooling. Pour the filling over the crust. Bake for 30
to 35 min., or until knife inserted 1" from edge comes out clean. Cool 1
hr. For topping, mix sour cream and powdered sugar. Spread mixture over
top of cooled cheesecake. Chill or freeze until ready to eat.
from [[Recipezaar|www.recipezaar.com]]

 1  	 cup   sugar
1/2 	cup unsalted butter
1 	large egg
1 1/4 	cups flour
2 	teaspoons baking powder
1/2 	cup buttermilk
1 	tablespoon lemon rind or orange rind (grated)
1 	teaspoon vanilla extract or lemon extract
1/2 	cup pecans (chopped)
1 	teaspoon castor sugar

 1. Preheat oven to 350 degrees.
   2. Mix sugar and butter until light and fluffy.
   3. Add egg mix well.
   4. Stir in flour and baking powder,alternating with buttermilk.
   5. Add lemon rind, vanilla or lemon extract, and pecans.
   6. Stir to mix.
   7. Pour batter into well buttered, floured loaf pan. Bake for 45 minutes.
   8. Check for doneness with toothpick.
   9. Remove from pan and sprinkle with sugar.

from [[Waitrose|http://www.waitrose.com/food_drink/index.asp]]

Makes 10

Preparation time: 20 minutes
Cooking time: 10-12 minutes
Ingredients

500g plain white flour
Pinch of salt
1½ tsp baking powder
125g cold butter, cubed
25g caster sugar
125g sultanas
1 large egg
210ml milk
Beaten egg, to glaze
Instructions

Preheat the oven to 250°C, gas mark 9.

Sieve the flour, salt, and baking powder into a large bowl. Add the butter and rub in lightly with your fingertips until the mixture resembles fine breadcrumbs. Alternatively, you can blitz the mixture to the same texture in a food processor, before tipping it back into a bowl. Stir in the sugar and sultanas. Make a well in the centre.

Whisk the egg and milk together and pour into the dry ingredients a little at a time, mixing until you have a soft dough. Turn out on to a floured board. Lightly shape into a round and roll out to about 2.5cm thick. Cut into scones with a 6.5cm cutter.

Place the scones on a non-stick baking sheet. Brush the tops with beaten egg. Bake for 10-12 minutes or until risen and golden brown then cool on a wire rack. Serve with jam and cream. Scones go stale quickly so eat these on the day you bake them.
legendary meat dish from Botswana. ask sitho all about this one...

Ingredients

    * 3 lbs. bone-in beef chuck
    * salt to taste
    * 1 tbsp. oil
    * 1 small yellow onion, chopped
    * 1 small clove garlic, chopped 

Instructions

Cut the beef chuck into large pieces, put in a pot and, cover with water and put on the stove. Cook covered in high heat until it starts bowling, then bring down heat and simmer uncovered until the meat is tender, about 2 hours.
Drain the meat, let cool, and then pound until ground beef. Mix with salt and return to the pot.
Heat the oil in a small frying pan, add the onions and garlic, and fry on medium heat for about 3 minutes.
Add the onion mixture to the meat, mix well, and cook over low heat until the beef is hot and caramelizes, stirring occasionally.
from The Washington Post
serves 4, 1hr 30min

    * 1 5-6lb chicken,wing tips removed
    * 1 lemon -- halved
    * 4 whole garlic cloves
    * 4 tablespoons unsalted butter -- (optional)
    * salt to taste
    * Freshly ground black pepper to taste
    * 1 cup homemade or canned chicken broth -- water,
    * fruit juice or wine, for deglazing 

Place oven rack on second level from bottom. Heat oven to 500 degrees.
Remove the fat from the tail and crop end of the chicken. Discard the neck and giblets or freeze for making chicken stock later. Reserve chicken livers for another use.
Stuff the cavity of the chicken with the lemon, garlic and butter, if using. Season the cavity and skin with salt and pepper.
Place the chicken in a 12-by-8-by-1 1/2-inch roasting pan, breast-side up. Put in the oven legs first and roast 50 to 60 minutes, or until the juices run clear. After the first 10 minutes, move the chicken with a wooden spatula to keep it from sticking.
Remove the chicken to a platter by placing a large wooden spoon into the tail end and balancing the chicken with a kitchen spoon pressed against the crop end. As you lift the chicken, tilt it over the roasting pan so that all the juices run out of the cavity and into the pan. Pour off excess fat from the pan and put the pan on top of the stove. Add the stock or other liquid and bring to a boil, scraping the bottom vigorously with a wooden spoon. Let reduce by half. Serve the sauce over the chicken or, for crisp skin, in a sauce boat.

Note from author Barbara Kafka: "If there is no lemon, garlic or butter on hand, Kafka says, roast the chicken without them. Or play. Use peeled shallots or a small onion, quarter ed. Add a couple of sage leaves or orange wedges. To avoid a smoky kitchen, be sure your oven is clean before you start and use the right-size pan."
from BBCFood, serves 1-2, prep 30min, cook 10min

Ingredients
1 tbsp vegetable oil
¼ red onion, peeled and chopped
1 garlic, peeled and crushed
170g/6oz minced pork
2 tbsp red wine
½ beef stock cube
1 tbsp soy sauce
1 tsp sugar
1 tbsp balsamic vinegar
1 tbsp hot water
For the mash
½ large potato, peeled and chopped
1 tbsp butter
1 tbsp cream
salt and freshly ground black pepper

Method
1. Heat the oil in a large non-stick frying pan and fry the onion and garlic for 2-3 minutes to soften.
2. Add the pork and fry for a few minutes to brown.
3. Stir in the wine and crumble in the stock cube. Add the soy sauce, sugar, balsamic and splash of hot water.
4. Heat gently for 10-12 minutes, or until cooked through.
5. Bring a pan of water to the boil and blanch the potato for 8-10 minutes.
6. Drain the potatoes and return to the pan. Add the butter, cream and seasoning and mash together until smooth and creamy.
7. Spoon the mince into a large chef's ring on a serving plate. Top with the mashed potato and then remove the ring.
8. Serve at once.
1 package (3 ½ ounces) Oakshire Shiitake Mushrooms
2 tablespoons butter or margarine
1/4 cup chopped onion
1/2 cup dry vermouth or dry white wine
1/2 cup heavy (whipping) cream
1/2 teaspoon chopped fresh tarragon or ¼ Teaspoon dried tarragon, crushed
1/8 teaspoon salt
1/8 teaspoon ground black pepper

Remove stems from Shiitake Mushrooms (use in stews, to flavor broths, etc.); slice caps; set aside. In a small saucepan melt butter. Add onion; cook and stir for 3 minutes. Add mushrooms; cook and stir until onion is tender, about 2 minutes. Stir in vermouth, cream, tarragon, salt and black pepper; bring to a boil; boil until sauce is reduced to 1 cup, 4 to 5 minutes, stirring occasionally. Serve over chicken, fish, veal, and vegetables or in baked potatoes.

Yield: 1 Cup
1 package (3.5 ounces) Oakshire Shiitake Mushrooms
6 cups lightly-packed trimmed spinach leaves in bite-sized pieces
1 cup chopped tomatoes
1/4 cup grapefruit juice
1/4 cup vegetable oil
1/2 teaspoon Dijon-style prepared mustard
1/4 teaspoon salt
1/8 teaspoon ground black pepper

Trim stem ends of Shiitake Mushrooms; cut mushrooms into thin slices, through the caps and stems. In a large serving bowl place mushrooms, spinach and tomatoes; set aside. In a small bowl whisk together grapefruit juice, oil, mustard, salt and pepper. Just before serving pour over vegetables, tossing gently.

Yield: 4 portions
from www.vietnamese-recipes.com

Ingredients :  Serves 4-5

8 oz  tender beef
 
Marinade

2 tablespoons  soy sauce
1 tablespoon cold water
1/2 tablespoon wine 
2 teaspoons cornstarch
1/2 teaspoon salt
1 tablespoon oil

3 green peppers
1 green onion
3 slices ginger
1/2 teaspoon sugar 
1 teaspoon salt 
1 tablespoon oil

Method :
    Shred beef about 1 inch in length, mix with soy sauce, wine oil, cornstarch, salt and soak for 1 hour.
     Clean green pepper, remove seeds and membrane, cut in halves and shred crosswise.
      Cut green onion and ginger into 1 inch lengths and shred.
      Heat oil in pan, fry beef and stir briskly over high heat about 10 seconds, drain out.
      Heat another 3 tablespoons oil in pan. Stir fry ginger and green onion, then add shredded green pepper, salt, sugar and stir well.
     Add beef, blend thoroughly and serve.
In a small pan, heat 2tbsp olive oil and gently soften 1 finely chopped onion, 2 finely chopped cloves garlic, and 1 finely chopped red pepper. Add 400g can chopped tomatoes, and 1tbsp tomato puree. Bring to boil and simmer for 5 mins. Season with sea salt and freshly ground black pepper, and unrefined caster sugar if needed. For a smoother sauce, whizz briefly in a food processor.

1/4 c. chopped onions
1c. uncooked rice
1/4 c. green peppers
1 tsp. chopped garlic
1 tsp. chopped celery
2 c. water
1/2 tsp. thyme leaves
1/2 tsp. cayenne pepper
1 tsp. chopped parsley
1/2 tsp. paprika
6 raw shrimp, peeled and deveined

Cook onions over medium heat. Saute until clear. Add all ingredients except shrimp. Stir well, then add the shrimp. Cover on very low heat for 35 minutes. Uncover and toss rice. Cover again and cook very slowly until rice is done.
4 med. even potatoes
1 tsp. salt
2 to 3 tbsp. melted butter
2 to 3 tbsp. chopped fresh herbs
4 tbsp. grated cheddar cheese
1 1/2 tbsp. Parmesan cheese

Cut potatoes into thin slices, but not all the way through. Use the handle of a spoon to prevent knife from cutting all the way. Place potatoes in a microsafe dish or pan. Sprinkle with melted butter and chopped parsley, sage or chives. Microwave at high power for 10 mins, rearranging the potatoes halfway through. Let rest for 5 minutes. Sprinkle with grated cheese and parmesan cheese. Microwave for another 4 to 6 mins until the cheese is melted and the potatoes are soft. Sprinkle with salt. Serve.
From [[Go Faster Food|www.gofasterfood.com]]

For the smokey chilli:

    * 400g stewing beef, chopped into fairly small chunks (1cm).
    * 2 tbsp flour mixed with ¼ tsp each salt, pepper and cayenne pepper.
    * 2 tbsp olive oil.
    * 100g spicy chorizo chopped into 1cm chunks.
    * 1 onion, peeled and sliced finely.
    * 2 green peppers, deseeded and chopped into 1cm chunks.
    * 1 bay leaf.
    * 1 tsp smoked paprika.
    * 1 large clove of garlic, peeled and crushed.
    * 100g black beans, rinsed and soaked overnight, then rinsed again and drained (you can use tinned as an alternative, although the dried beans will be superior in both taste and texture).
    * 500ml chicken stock.
    * 1 x 400g tin of chopped tomatoes.
    * Handful of chopped coriander leaves.
    * Squeeze of lime juice.
    * 1 green chilli, finely sliced and with seeds remaining, or two if you like it really hot.

For the salsa:

    * ½ small cucumber.
    * 1 avocado, peeled.
    * 10 cherry tomatoes.
    * 4 spring onions.
    * 1 tsp coriander seed, crushed in pestle and mortar.
    * Handful of mint leaves, roughly chopped.
    * Handful of coriander leaves, roughly chopped.
    * Juice of 1 lime.
    * Glug of olive oil.

1. 	Preheat the oven to 160°C/gas mark 3.
  	 
2. 	

Use a casserole dish that you can put on the hob and in the oven. Toss the meat in the flour mix. Heat up a tablespoon of oil in the casserole dish and brown the beef in batches over a high heat.

Set the beef aside and then quickly brown the chorizo and set aside. Scrape the juices off the bottom of the pan. A good way to do this is to pour a splash of whisky or brandy in and the brown scrapings come off the bottom of the pan really easily. Pour the juices onto the beef.
  	 
3. 	Add the remaining oil and then gently sauté the onion and green pepper with the bay leaf for a few minutes. Add the smoked paprika and stir. Add the garlic, the meat, the black beans, the stock and the tin of tomatoes and bring it all to the boil.
  	 
4. 	Give everything a good stir and then transfer to the oven and simmer for 1½ hours until the beef and the beans are tender and the sauce has become nice and thick.
  	 
5. 	Add the coriander and lime juice and taste for seasoning. You might want to add some salt and pepper at this stage or a little more smoked paprika.
  	 
6. 	Make the salsa by chopping up the avocado, cucumber and tomatoes very small and mixing them with the other ingredients. Don't make it too far in advance as it is best really fresh.
  	 
7. 	Serve the chopped green chillies in a bowl on the side for people to sprinkle over the top of the chilli to their own taste.

6 egg yolks
2 cups whipping cream
1/2 cup grated Parmesan cheese
1/4 tsp. salt
1/4 tsp. pepper
500 g bacon, cut into 1/2" lengths
1/2 cup onions, finely diced
2 cloves garlic
1/2 tsp. oregano
olive oil
1/2 cup white wine
750g spaghetti

Mix first 5 ingredients in a bowl and set aside.
Fry bacon with med heat until most of the fat is released but before it becomes crispy. Remove fat as it is produced. Use a large pot - pasta will be added to this later. 
Add white wine and oregano. Reduce the wine at low to med heat.
Add onion and garlic to bacon and saute for 10 - 15 mins. Add olive oil for the last few minutes. About halfways through this last step, begin to boil the spaghetti. When it is ready, mix it into the bacon. Mix in the cream mixture, one half at a time.
good use for leftover spaghetti !!

8 ounces spaghetti, cooked, rinsed, cooled
2 cups tomato-based pasta sauce, divided
5 large eggs
1/2 cup chopped fresh Italian parsley, divided
1/2 teaspoon salt
1/2 teaspoon ground black pepper
1/8 teaspoon cayenne pepper

5 tablespoons olive oil
1 cup grated Parmesan cheese

Preheat broiler. Toss pasta and 1 cup pasta sauce in medium bowl to blend. Combine eggs, 1/4 cup parsley, salt, black pepper, and cayenne pepper in small bowl; whisk to blend.

Heat oil in large broilerproof nonstick skillet over medium-high heat. Add pasta and toss until warmed through, about 4 minutes. Pour egg mixture over; do not stir. Reduce heat to medium-low. Cook until eggs start to firm and bottom begins to brown, lifting sides occasionally to let uncooked egg run underneath, about 8 minutes. Remove skillet from heat. Sprinkle frittata with cheese. Broil until cheese melts, about 3 minutes.

Meanwhile, heat remaining 1 cup pasta sauce in saucepan over low heat. Using flexible spatula, loosen edges and bottom of frittata. Slide out onto plate. Sprinkle with remaining 1/4 cup parsley. Cut frittata into wedges. Serve, passing warm sauce separately.

Makes 4 main-course servings

2 cups uncooked white rice
1 lb. hamburger
½ cup onion, chopped
2 Tbsp. granulated sugar
3 cups tomatoes, cut-up (canned or fresh)
1 can (15 oz.) tomato sauce
Salt & pepper, to taste
Make rice according to package directions. Brown hamburger and onion. Drain off excess grease.
In a butter-greased roaster, mix rice, hamburger, onion and the rest of the ingredients. Put a lid on
the pan and bake at 350°F for 45 minutes to 1 hour or until rice is tender.
4 skinless/boneless chicken breasts
2 cans (15 oz.) tomato sauce
1 red pepper
½ lb. mushrooms, sliced thick
1 onion, chopped
2 to 4 cloves of garlic, minced
½ cup red wine
½ cup cream
2 Tbsp. olive oil
1 Tbsp. Italian seasoning
1 tsp. crushed red pepper
Salt & pepper, to taste
1 box Fusilli pasta (or your favorite pasta)
Cut chicken into small bite size pieces. Wash and slice red peppers into 1” strips. Slice mushrooms
with stems. Heat a skillet with olive oil and pan sear the chicken pieces. Remove from skillet. Add
olive oil as needed. Sauté red peppers, and mushrooms until tender, but not mushy. Remove from
skillet. Chop onion and sauté in skillet until tender. Add tomato sauce, seasonings and a ½ cup red
wine. Bring sauce to a boil. Simmer for 10 to 15 minutes. Return all ingredients to the pan and stir
thoroughly. Bring to a boil, then simmer for 15 to 20 minutes. Add cream and bring to a slight boil.
Let simmer for 5 more minutes. The cream will thicken the sauce.
Cook pasta as directed on the box. Serve chicken over pasta, drizzle with sauce.
from BBCFood (the wildman!) Prep < 30 mins, cook 1-2hrs
	
This pie is a mixture of herby, spiced meat and crumbly pastry. You can eat it piping hot at home with some creamy mashed potato or you can take it on a picnic and eat it warm.

Ingredients
For the pastry
175g/6¼oz unsalted butter (or a mixture of butter and lard)
350g/12¼oz plain flour, plus extra for dusting the work surface
a pinch of salt
3-4 tbsp water
For the filling
1 small-medium onion
2 garlic cloves
2 tbsp olive oil
350g/12¼oz minced lamb
½ tsp ground cinnamon
½ tsp ground cumin
a good pinch of ground cloves
400g/14¼oz can chopped tomatoes
a big handful of fresh flatleaf parsley and/or fresh coriander leaves
1 free-range egg
salt and freshly ground black pepper

Method
1. To make the pastry, cut the butter into little cubes. Sift the flour into the mixing bowl and add the salt and butter. Rub the butter into the flour with your fingertips, breaking down the butter lumps until the mixture looks like tiny breadcrumbs.
2. Add enough cold water (start with three tablespoons) to bring the mixture into a firm, unsticky dough with a little gentle kneading. Divide the dough in half, wrap each piece in cling film and put them in the fridge while you make the filling for the pie.
3. Peel the onion and garlic and chop them finely. Heat the olive oil in the frying pan, add the onion and fry over a low heat, stirring occasionally with a wooden spoon, until the onion is lightly golden and starting to soften, or about 10 minutes. Add the chopped garlic and fry for a couple more minutes.
4. Add the minced lamb, turn up the heat and brown the meat, breaking it up with the back of a wooden spoon. Stir in the cinnamon, cumin and cloves. Season with half a teaspoon of salt and plenty of freshly ground black pepper, add the can of chopped tomatoes and stir.
5. Let the meat mixture simmer over a low heat for about half an hour, stirring occasionally. Most of the liquid should evaporate during this time, leaving you with a thick sauce. Turn off the heat.
6. Break off any tough stalks from the parsley and/or coriander and chop up the leaves. Stir them into the meat mixture and leave to cool while you roll out the pastry.
7. Heat the oven to 220C/425F/Gas 7. Place the baking sheet in the oven to get hot. Sprinkle a little flour on the work surface and the rolling pin. Take one half of the pastry from the fridge, unwrap it and start to roll it out gently but firmly, giving it a quarter turn after every couple of rolls so you know it hasn't stuck and so you get a fairly even circle. Always roll away from you rather than battering the pastry by rolling the pin back and forth.
8. When the circle of pastry is just a little bigger than the pie plate, roll it up on the pin and line the plate. Roll out the other piece of pastry in the same way.
9. Place a pie funnel into the middle of the pie dish, if you like, then spoon in the filling.
10. Break the egg into a cup and beat it lightly with a fork. Brush a little of the egg around the edge of the pastry. Roll up the second circle of pastry on the pin and cover the pie. Trim the sides, then pinch them together to make a wavy edge.
11. Brush the pie with more of the egg and use any pastry trimmings to decorate the top. Wearing oven gloves, place the pie on the heated baking sheet and bake for about 35 minutes, until the pastry is golden brown.
from [[epicurious|www.epicurious.com]] 

500g lean lamb stew meat (preferably shoulder), well trimmed, cut into 1-inch pieces
1/2 cup red wine vinegar
4 large garlic cloves, minced
1 tablespoon minced fresh ginger
1 tablespoon firmly packed brown sugar
1 tablespoon ground cumin
1 teaspoon ground cardamom
1/2 teaspoon dry mustard
1/4 teaspoon (generous) ground cloves
1/2 teaspoon cayenne pepper
1/2 cup lentils
1 3/4 cups canned unsalted chicken broth

Combine first 10 ingredients in large bowl and let stand at room temperature 30 minutes. Can be prepared 1 day ahead. Cover and refrigerate.)

Position rack in center of oven and preheat to 160°C. Bring lentils and broth to boil in heavy medium saucepan over high heat. Cover, reduce heat to medium-low and simmer until lentils are just tender, about 30 minutes.

Add lamb and marinade to lentils and blend well. Bring to simmer. Cover and bake until lamb is tender, about 50 minutes. Spoon off any fat from surface. Season to taste with salt and pepper. Serve with chutney (great with mrs balls!).
from BBCFood, serves 4, 1-2 hrs prep

Ingredients
600g/1lb5oz stewing steak, diced
280g/10oz ox kidney, trimmed and finely sliced
125g/4oz plain flour
salt and pepper to taste
1 onion, peeled and chopped
1 tbsp fresh parsley, chopped
7.5ml/½tbsp tomato purée
150ml/5fl oz beef stock
225g/8oz puff pastry
1 egg, beaten for glazing

Method
1. Heat the oven to 220C/425F/Gas 7.
2. Put the steak and kidney into a bowl and toss in the flour and some salt and pepper.
3. Put the onion, meat and parsley into a pie dish and pack down.
4. Pour in the tomato purée, stock and enough water to come half way up the dish.
5. Roll out the pastry to 2mm/1/8in thick and cut a long strip to fit around the pie dish.
6. Brush the lip of the dish with water and press the strip of pastry on to it.
Brush the strip with more water and put the pastry over the top to make a lid. Cut away any excess and crimp the edges. Cut a 1cm/½in hole in the centre to allow the steam to escape and decorate the pie with any leftover pastry trimmings.
7. Chill the pie for 10 minutes, brush with the beaten egg and then bake in the oven for 30 minutes until the pastry is golden and risen. Decrease the heat to 180C/350F/Gas 4 and continue cooking the pie for another 90 minutes until the meat is tender. If the pastry gets too dark, cover with foil.
1 large onion
1 red pepper
2 tbsp butter
400g sirloin steak, trimmed of fat
4 tbsp tomato ketchup
2 tbsp Worcester sauce
2 tbsp chopped parsley
7 cups freshly boiled rice
salt and pepper

Cut the onion and pepper into 1/3in slices
Cook the onion in a frying pan until golden on both sides, adding salt and pepper then set aside
Cook the steak over a high heat until browned on both sides, then cut it into bite-size pieces and set aside.
For the sauce, mix the tomato ketchup, Worcester sauce and 2 tbsp water in the pan in which the steak was cooked. Stir over a moderate heat for 1 minute, mixing in the meat residue.
Mix the butter and the chopped parsley into the rice. Top the rice with red pepper, onion and steak, and pour over the sauce.
(4 servings)
4 large eggplants
7 tbsp. oil
10 oz. ground pork
10 oz. ground beef
3 egg yolks
1 tsp. garlic salt
3/4 tsp. black pepper
1 tbsp. breadcrumbs, soft
5 tbsp. brandy
5 tbsp. cheese, grated
Halve eggplants, lengthwise, place on baking sheet, brush with oil, bake at 400 degrees for 30
minutes. Remove flesh, mix with all ingredients except cheese, fill eggplant shells. Sprinkle with
cheese, bake 30 minutes. Serve with baked tomatoes.
INGREDIENTS

    * 910 g fresh strawberries, hulled
    * 800 g white sugar
    * 60 ml lemon juice


DIRECTIONS

   1. In a wide bowl, crush strawberries in batches until you have 4 cups of mashed berry. In a heavy bottomed saucepan, mix together the strawberries, sugar, and lemon juice. Stir over low heat until the sugar is dissolved. Increase heat to high, and bring the mixture to a full rolling boil. Boil, stirring often, until the mixture reaches 220 degrees F (105 degrees C). Transfer to hot sterile jars, leaving 1/4 to 1/2 inch headspace, and seal. Process any unsealed jars in a water bath. If the jam is going to be eaten right away, don't bother with processing, and just refrigerate.

FOOTNOTES

    *
      To test for jelling
    *
      Place three plates in a freezer... after about 10 minutes of boiling place a tsp of the liquid of the jam onto the cold plate. Return to freezer for a minute. Run your finger through the jam on the plate... if it doesn't try to run back together (if you can make a line through it with your finger) it's ready to be canned!
from BBCFood
make 8-12 scones, 10-30 min


Ingredients
225g/8oz self raising flour
pinch of salt
55g/2oz butter
25g/1oz caster sugar
150ml/5fl oz milk

Method
1. Heat the oven to 220C/425F/Gas 7. Lightly grease a baking sheet.
2. Mix together the flour and salt and rub in the butter.
3. Stir in the sugar and then the milk to get a soft dough.
4. Turn on to a floured work surface and knead very lightly. Pat out to a round 2cm/¾in thick. Use a 5cm/2in cutter to stamp out rounds and place on a baking sheet. Lightly knead together the rest of the dough and stamp out more scones to use it all up.
5. Brush the tops of the scones with a little milk. Bake for 12-15 minutes until well risen and golden.
6. Cool on a wire rack and serve with butter and good jam and maybe some clotted cream.
Selu's recipe, serves 2

Ingredients
2 sweet potatoes
10cm leek
1 tsp nutmeg
500ml chicken stock (or vegetable stock)
dash cinnamon
100ml cream
knob of butter (or olive oil)
handful fresh chives, chopped

Method
-peel and dice sweet potatoes
-sweat leek and potatoes in butter on medium heat for 4 min
-add chicken stock and allow to simmer for 6 min
-transfer all to blender and run for about 1 min, until slurry paste
-return to saucepan at low heat and stir in half the cream
-serve and garnish with cream and fresh chive
body { 
	padding: 0; 
	margin: 0; 
	font: 0.7em Tahoma, sans-serif; 
	line-height: 1.5em;
	background: #fff; 
	color: #454545; 
}

a {	color: #E0691A;	background: inherit;}
a:hover { color: #6C757A; background: inherit; }

h1 { font: normal 2.1em Arial, Sans-Serif; letter-spacing: -1px; padding: 7px 0 0 8px; margin: 0; }
.dark  { color: #737373; background: inherit; font-weight: bold; }
h1 a, h2 a { text-decoration: none; }
h1 a:hover, h2 a:hover { color: #FF6600; background: inherit; }
h2 { margin: 0; padding: 0; font: bold 1.7em Arial, Sans-Serif; letter-spacing: -1px; }
h2 { font-size: 1.5em; margin-bottom: 5px; color: #000; background: inherit; }

p {	margin: 0 0 5px 0; }

ul { margin: 0; padding : 0; list-style : none; }

form { 	margin: 0; }

input.search { 
	width: 292px; 
	border: 0;
	background: #FFF url(input.gif) no-repeat;
	padding: 4px; 
	color: #E0691A;
	font-weight: bold;
}

input.submit {
	background: #E0691A url(submit.gif) no-repeat;
	border: 0;
	padding: 4px 0;
	width: 65px;
	margin: 0 15px 1px 0;
	color: #FFF;
	font: bold 1em Arial, Sans-Serif;
}

input.login { 
	width: 150px;
	border: none; 
	
	padding: 4px; 
}

/* layout
   ------ */

.content { 
	margin: 0 auto;
	width: 780px;
	padding: 10px; 
}

.header { 
	height: 95px;
	background: #eee;
	color: #808080;
	margin: 3px 0;
	padding: 10px 0 0 0;
	border-bottom: 1px solid #ccc;
}

.top_info {
	float: right;
	width: 555px;
	padding: 5px 0 4px 0;
	border-bottom: 1px solid #eee;
	background: #eee;
	color: #808080;
}

	.top_info_left {
		width: 200px;
		float: left;
	}

	.top_info_right {
		float: right;
		width: 290px;
		padding: 0 0 0 35px;
		border-left: 1px solid #eee;
	}

.browse_category  {
	font-size: 0.9em;
	width: 190px;
	color: #FFF;
	background: inherit;
}

.bar { 
	clear: both;
	font-size: 1.1em;
	height: 30px; 
	color: #FFF;
	margin: 0 0 0 0px; 
	background: #FF9148;
}

	.bar li { 
		margin: 0; 
		padding: 7px 12px 5px 12px;
		color: #FFEADC;
		background: #FF9148;
		float: left; 
	}
	
	.bar li.active { 
		background: #E0691A url(bar.gif) no-repeat center top; 
		color: #fff;
		font-weight: bold; 
		padding: 7px 10px 6px 10px;
	}
	
	.bar li a { 
		font-weight: bold;
		color: #FFF; 
		background: inherit;
		text-decoration: none;
	} 
	
	.bar li a:hover { 
		color: #E0691A; 
		background: inherit;
	} 

.search_field { 
	background: #fff url(searchbg.gif) no-repeat right; 
	color: #808080;
	clear: both;
	font-weight: bold;
	padding: 7px 25px 10px 10px;
	margin: 5px 0;
}

.grey {
	color: #808080;
	background: inherit;
	font-weight: normal;
}

.search_form { float: right; }

.subheader {
	margin: 0px 0 10px 0;
	border-bottom: 1px solid #eee;
	padding: 5px 0 5px 0;
	background: #A4A4A4;
	color: #fff;
}

/* left side
   --------- */

.left {
	float: left;
	width: 65%;
	margin: 0 0 10px 0;
}

.left h3 {
	clear: both;
	background: #A9C0CE url(corner.gif) no-repeat top right;
	color: #FFF;
	padding: 7px 0 7px 5px;
	font: bold 1em Tahoma, Arial, Sans-Serif;
	margin: 0 0 0px 0;
}
	.left_side {
		float: left;
		width: 180px;
		padding: 0 0 0 10px;
		margin: 10px 0;
	}
		
	.left_side a, .right_side a { color: #414141; background: #FFF; }
		
	.right_side {
		float: right;
		width: 220px;
		background: #FFF url(dotted.gif) repeat-y;
		color: #414141;
		padding: 0 0 0 40px;
		margin: 10px 0;
	}
		
	.left_box { margin: 0 0 10px 0; color: #000; background: #FFF; padding: 3px 0; }
	
		
/* right side
   ---------- */
		
.right {
	float: right;
	width: 34.6%;
	margin: 0 0 10px 0;
}

.right h3 {
	background: #6C757A  url(corner.gif) no-repeat top right;;
	color: #FFF;
	padding: 7px 0 7px 5px;
	font: bold 1em Tahoma, Arial, Sans-Serif;
	margin: 0 0 3px 0;
}

	.right_articles {
		background: #f5f5f5;
		color: #414141;
		padding: 8px;	
		margin: 0 0 3px 0;
	}
	
.image {
	float: left;
	margin: 0 9px 3px 0;
}

/* footer
   ------ */

.footer { 
	clear: both;
	text-align: center;
	padding: 10px 0 10px 0;
	margin: 0;
	border-top: 1px solid #ccc;
	line-height: 1.8em;
}

.footer a { color: #808080; background: #fff; }

2 eggs (can use egg whites only if preferred)

      ¼ cup sugar

      2 teaspoons baking powder

      ¼ teaspoon salt

      2 cups flour

      1-2 teaspoons vanilla extract (to taste)

      2 teaspoons ground cinnamon 

1. Beat together eggs and sugar with a wire whisk or electric mixer.

2. Add vanilla, cinnamon, baking powder and salt.

3. Stir in flour until batter is smooth and thick to the point that it coats the back of a spoon.

4. Pour onto a non-stick griddle or frying pan.

5. Flip when exposed top is bubbly and the edges of the pancake are drying.

6. Serve with your choice of syrup, fruit topping or as a desert with ice cream.

Additional Treats to Add in:
Chopped apples, pears or plums.
done at the caribbean [[THK]] meeting

3 large sweet potatoes
Coconut milk – enough to make a thick paste when blended with the potato
1 – 1 ½ cups sugar
1 tania (sized about half a fist)
Spices – nutmeg and cinnamon
Salt Butter
1 root fresh Ginger

Cut potato, ginger and tania into big pieces. Put into blender with enough coconut milk so that when blended it makes a thick paste. Note do not blend into a puree but just until it is not too lumpy. Pour into a mixing bowl and add grated nutmeg and a little cinnamon. Pour mixture into an oven proof dish. But a few blobs of salt butter on top (optional) and bake at 350 until all moisture is absorbed (when stuck with knife it
Selu's recipe, serves 2

Ingredients
2 sweet potatoes
10cm leek
1 tsp nutmeg
500ml chicken stock (or vegetable stock)
dash cinnamon
100ml cream
knob of butter (or olive oil)
handful fresh chives, chopped

Method
-peel and dice sweet potatoes
-sweat leek and potatoes in butter on medium heat for 4 min
-add chicken stock and allow to simmer for 6 min
-transfer all to blender and run for about 1 min, until slurry paste
-return to saucepan at low heat and stir in half the cream
-serve and garnish with cream and fresh chive
Italian deep fried doughnut with ricotta cheese centre - i made this at last month's THK. From allrecipes.com

INGREDIENTS

    * 1 pound ricotta cheese
    * 2 eggs
    * 2 tablespoons white sugar
    * 1 1/2 teaspoons vanilla extract
    * 1 1/2 tablespoons baking powder
    * 1 cup all-purpose flour
    * 2 quarts vegetable oil for frying
    * 1/4 cup honey
    * 1/4 cup confectioners' sugar for dusting

number of stars

READ REVIEWS (12)

    * Review/Rate This Recipe
    * Save To Recipe Box
    * Add to Shopping List
    * Add a Personal Note
    * Post a Recipe Photo
    * Post a Favorite Food List
    * Create a Menu

DIRECTIONS

   1. In large bowl, combine ricotta, eggs, sugar and vanilla. Mix together baking powder and 1/2 cup flour. Fold into ricotta mixture. Add enough of remaining flour to make a thick batter. Let rest 1 hour.
   2. Heat oil in large heavy saucepan over high heat until a small amount of batter dropped in oil sizzles and starts to color. Drop batter by teaspoons into hot oil and deep fry until golden. Remove with slotted spoon and drain on paper towels.
   3. Stack sfingi on serving platter in a pyramid. Drizzle stack with honey and dust with confectioner's sugar.
serves 4-6, from vietnamese-recipes.com

2 cucumbers
30ml sugar
100ml rice vinegar
1/2 lime, juiced
1-2 green thai chillies, seeded and finely diced
2 spring onions
1 small bunch fresh coriander leaves finely chopped
1 small bunch fresh mint leaves finely chopped
1/4 teaspoon salt

Method
        Use a vegetable peeler to remove strips of the cucumber peel
        Halve the cucumber lengthways and cut into slices. Place the slices on a plate and sprinkle with a little salt.
	Leave to stand for 15 minutes, then rinse and drain.
	In a bowl, mix the sugar with the vinegar until it has dissolved, then stir in the lime juice and a little salt to taste.
	Add the chilies, shallots, herbs and cucumber to the dressing.
	Leave to stand for 15-20 minutes to allow the flavors to mingle before serving.
1/3 C. Peanut Oil
1/3 C. Cider Vinegar
1/3 C. Water
2 Tbsp. Soy sauce
2 Tbsp. Green Onion stems
1 Tbsp. Honey
1/2 Tsp. Prepared hot mustard
Combine all ingredients in a jar with a tight-fitting lid;
shake the jar vigorously to combine ingredients thoroughly.
Keep refrigerated and covered to use within a few weeks.
Shake before using.
T.G.I. Friday's Jack Daniels Grill Glaze
1 head of garlic
1 tablespoon olive oil
2/3 cup water
1 cup pineapple juice
1/4 cup teriyaki sauce
1 tablespoon soy sauce
1 1/3 cups dark brown sugar
3 tablespoons lemon juice
3 tablespoons minced white onion
1 tablespoon Jack Daniels Whiskey
1 tablespoon crushed pineapple
1/4 teaspoon cayenne pepper
1. Cut about 1/2-inch off of top of garlic. Cut the roots so that the
garlic will sit flat. Remove the papery skin from the garlic, but
leave enough so that the cloves stay together. Put garlic into a
small casserole dish or baking pan, drizzle olive oil over it, and
cover with a lid or foil. Bake in a preheated 325° oven for 1 hour.
Remove garlic and let it cool until you can handle it.
2. Combine water, pineapple juice, teriyaki sauce, soy sauce, and
brown sugar in a medium saucepan over medium/high heat.
Stir occasionally until mixture boils then reduce heat until mixture
is just simmering.
3. Squeeze the sides of the head of garlic until the pasty roasted garlic
is squeezed out. Discard remaining skin and whisk to combine.
4. Add remaining ingredients to the pan and stir.
5. Let mixture simmer for 40-50 minutes or until sauce has reduced by
about 1/2 and is thick and syrupy. Make sure it doesn't boil over.
Makes 1 cup of glaze.
the husbands' kitchen, monthly get-together where husbands take over. [[website here|http://thehusbandskitchen.blogspot.com]]
2 cucumbers, peeled and chopped
1 garlic clove, minced
4 cups plain yoghurt
1/2 cup water
1/4 tsp salt
2 tbsp dill, chopped

In a blender, puree cucumber and garlic, pulsing the blades to liquify the chopped cubes. Toss in  the dill, salt, water and yoghurt and mix well. Refrigerate for at least 2 hours.
Matrix to work out rota for [[THK]]

||!dian 	|!john 	|    !selu 	|!matt|
|main| 0|25 	|50 	|75|
|starter 	|50| 	75 	|25| 	0|
|dessert 	|25 |0 |75 |	50|
|wildcard |	75 	|50 |0 |25|
|write-up| 	50 |75| 0 |25|


how we use this is

1. take THK number....eg 6 for ~THK6
2. divide number by 4
3. take decimal remainder (6 ÷ 4 = 1.50, so i take 50)
4. use that on chart to see what you're doing (for me, selu, 50 means i'm doing the main, and matt is doing dessert)

so an example

for ~THK19

1. take 19
2. divide by 4 (19/4 = 4.75)
3. decimal remainder is 75
4. from matrix above, matt is doing main, john doing starter + write-up, dian's wildcard and selu dessert.
Here are some common equivalents when converting International recipes.

250 degrees F = 130 degrees C or Gas mark 1/2
275 degrees F = 140 degrees C or Gas mark 1
300 degrees F = 150 degrees C or Gas mark 2
325 degrees F = 160 degrees C or Gas mark 3
350 degrees F = 180 degrees C or Gas mark 4
375 degrees F = 190 degrees C or Gas mark 5
400 degrees F = 200 degrees C or Gas mark 6
425 degrees F = 220 degrees C or Gas mark 7
450 degrees F = 230 degrees C or Gas mark 8
1.5kg chicken
6 sprigs fresh tarragon
500ml dry white wine (or increase water used by this amount)
1 onion, peeled and halved
1 bay leaf
2 sticks celery, chopped
3 cloves garlic, peeled
12 baby carrots
1 swede, peeled and cut into small chunks
12 baby leeks, or 3 large leeks, cut into chunks

Season chicken well inside and out with sea salt and freshly ground black pepper, and stuff cavity with a couple of sprigs of tarragon. Gently lift skin away from breast and stick remaining tarragon between each breast and skin.
Place chicken and remaining ingredients in a large casserole pan. Add enough water to just cover chicken. Cover and slowly bring to boil. Turn down to gentle simmer, and cook for 45 mins to 1 hour, till chicken is cooked. To test if its cooked, pierce chicken between thigh and breast. If juices have a pink tinge, keep cooking till they run clear.
Remove chicken from stock and place on a carving board, check seasoning of cooking liquid. Serve chicken with vegetables, a little stock as a light sauce, potatoes and a green vegetable.

*Freeze the stock for use when you need stock in other recipes.
a great variation from the creamy salmon we usually make. not too convinced about the noodles & stir-fry accompaniment. from [[The Irish Skipper|www.irishskipper.net]]

Serves 4

Ingredients.

§ 4 x Salmon darnes
§ 4 tablespoons Teriyaki sauce.
§ 1 tablespoon brown sugar.

Method.

• Mix teriyaki sauce and brown sugar until sugar has dissolved.
• Marinade salmon darnes in Teriyaki sauce for at least 15 minutes.
• Place under a hot grill, or pan fry for three to four minutes until cooked.
• While salmon is cooking, quickly stir fry the vegetables, and cook the noodles.
• Mix chilli sauce and vegetables with the noodles and serve alongside the salmon.
• Pour any remaining sauce over the salmon and serve.

This recipe can also be made by pan frying or baking the salmon in an oven.
2 lbs. flank steak
¼ cup soy sauce
3 Tbsp. honey
3 Tbsp. vinegar
1 tsp. garlic powder
1½ tsp. ginger
¾ cup cooking oil
Mix all ingredients and pour over steak. Marinate for several hours. Broil or BBQ until medium
rare.
You will need:

1 small onion, chopped
1 garlic clove, crushed
1 small chilli, deseeded & finely chopped
1 pepper, deseeded & chopped
400g can tomatoes
4 eggs
2 flour tortillas

What you do:
Heat some oil, & fry the onion gently for 10 minutes, until clear. Add the crushed garlic, chopped chilli & pepper to the pan & cook for 10 minutes more. Add the tomatoes & season with salt & freshly ground black pepper. Simmer for a further 10 minutes until thickened.
Heat some more oil in another pan & fry the eggs.
Toast the tortillas in a dry frying pan over a high heat for 30 seconds on each side. Put onto two plates & top with the sauce, then the eggs. Season well.

Roll up & get stuck in.
50 ml mirin
2tbsp soy sauce
1 tsp granulated sugar

Whisk all ingredients together in a bowl until the sugar has dissolved.
home page http://tiddlywiki.com/
tutorial http://www.blogjones.com/TiddlyWikiTutorial.html
1 pkg. (12 oz.) egg noodles
1 can (10¾ oz.) cream of mushroom soup
1½ cups milk (or 1- 12 oz. can evaporated milk)
1 to 2 cans (5 oz.) tuna, juices drained
1 cup potato chips, crushed
Cook egg noodles according to the directions on the package. Mix together cream of mushroom
soup, tuna and milk in a small saucepan. Cook over low heat until well blended. Put crushed chips
on the bottom of a 9” x 13” casserole dish. Place half of the noodles on top of the potato chips and
then part of the tuna/soup mixture. Repeat layering until all ingredients are used. Top with crushed
potato chips. Bake at 350°F for ½ hour.
*Helpful hints: Canned or freshly cooked chunk chicken may be substituted for the tuna.
link [[here|http://steamykitchen.com/blog/2007/08/28/how-to-turn-cheap-choice-steaks-into-gucci-prime-steaks/]]

Massively salt your steaks 15 min - 1 hour before grilling. 

Notice that I didn’t say, "sprinkle liberally" or even "season generously."  I’m talking about literally coating your meat until you can’t see red.

It should resemble a salt lick.

Let that meat be totally overwhelmed with the salt for 1 hour or less. Rinse, pat dry dry dry and then you’re ready to grill.

Before y’all throw a hissy fit, just hear me out. I first learned of this technique from Judy Rodgers’ Zuni Café Cookbook. Judy massively salts her chicken before roasting, and I’ve adapted the practice to steaks. Thanks to a couple of other books (McGee’s On Food and Cooking and Alton Brown’s I’m Just Here For the Food), and a few fellow bloggers, I have somewhat of an explanation of how it works.

But just so you know…I slept through high school biology and chemistry, especially during the chapter on osmosis. I’m asking for any researchers, doctors, scientists, butchers, plumbers, professional chefs, mechanics….basically anyone who didn’t sleep through school to add to this conversation.  Mainly because maybe, there might be as many holes in my slideshow as there are in my pea-head.

Oh, and if the drawings look like a 3rd grader did it, too bad….I’m not a artist, dammit!!!  YOU try drawing with a laptop touch-pad and a glass of bourbon on the rocks.

Slide #1:

All of you who season JUST before grilling - this is what you are really doing to the meat.  Did you know that?  All the water comes to the surface and if you don’t pat super-dry, you’re basically STEAMING the meat.

But if you let it sit for a while…this is what happens: cue Slide #2:

Now - note that only a little of the salt gets to go back into the meat. Don’t worry - you aren’t going to be eating all that salt! 

Slide #3:

Bourbon does that to me too.

Ok, Slide #4:  After you let it rest, then

 I can hear it now.."BUT….BUT…BUT….what of all the water that stayed on the surface of the meat?   Not all the water gets reabsorbed!  Will it taste like a salt lick?  (*%!*%!@#!#!!! I DON’T UNDERSTAND!!!"

Put your pants back on and sit down…and let’s move on to Slide #5:

 I meant "prune" not "prude" - but whatever.  too lazy to modify the jpg.

Why not brine?
Well, yeah…you could.  But that involves measuring, finding a big enough container, dissolving, finding enough space in the refrigerator for the big container, chilling, waiting, waiting, waiting, draining, washing big fat container, unchilling the meat to bring to room temp. Waaaayyyy too much work for a simple gal.  Plus, brined steak tastes like shit.   Because of high water concentration of a brine, you are ADDING a lot of water into the meat.  Not what you want for a steak.
Other Notes

Wow! I can’t believe all the response this post has been getting!  Based on your feedback (keep ‘em coming) I’ll be adjusting recipe, technique and explanations a little here and there. Most recently, I’ve enlisted a couple of other readers to do some testing for me to adjust the recipe. I usually will highlight edits in red - so check back often. 

    * Use kosher or sea salt, not table salt  <– that is important. It will not work well with tiny tiny grains of table salt.
    * Use steaks 1" or thicker.
    * Use 1/2 to 1-1/2 teaspoons of kosher salt per side. Amount based on how big your steak is. See table below.
    * Salt for anywhere from 15 minutes to 1 hour, based on thickness of steak.  Testing from other readers proves that the salting effect happens in as little as 15 minutes.  You’ll begin to see the water come out of the steak…which is what you want. Timetable is below in the recipe.
    * If you are Harold McGee, a member of Alton Brown’s research team or Mr. Burke my high school bio teacher…..and think I’m full of B.S…. please let me know.  But guys, none of this was in your books.  I had to formulate, extrapolate, hypotholate and guesstulate based on your stuff. Highly mental activity.
    * If you are not one of the above but have a better explanation than I my little brain could muster, comment below.
    * With respect, Ms.Judy Rogers, I’d like to suggest that your explanation of why salting works in your book may be incorrect.  Reverse osmosis doesn’t happen by itself…it requires an abundance of external force…kinda like me trying to get my kids to pick up their toys.
    * Should I call this Salt-Curing, Dry-Brining, Salting, Dry Rubbing or just plain Idiotic?  This sounds awfully like salt-curing - but doesn’t that dry out meat (like beef jerky)?  Well yes it does - but when you use A LOT more salt and leave it salting for A LOOOOOONG time.  We’re talking about a little tiny nap here - not weeks - just enough to break down the protiens.
    * Again, don’t worry about all that salt. Only a bit of it gets absorbed into the meat.  Most of it gets washed down the drain when you rinse off.  Really.

I understand that this method will cause chaos, confusion and controversy in your household.  But I encourage you to experiment — try adding spices, crushed garlic and rosemary sprigs to the salt, which will then act like Christina Aguilera dragging its entourage of flavors with it into the meat.
4 eggs, beaten
2 cups milk
1 cup packaged dry bread crumbs
4 Tbsp. butter
1 cup onions, finely chopped
2 lbs. ground beef
½ lb. ground pork
¼ tsp. allspice
¼ tsp. nutmeg
¼ tsp. dill weed
¼ tsp. cardamom
1/3 cup all-purpose flour
2 cans (10½ oz.) beef broth
1 cup light cream
Salt & pepper, to taste
Combine eggs, milk and bread crumbs. Sauté onions, spices and mix with bread crumbs. Add meats
and mix well. Refrigerate for 1 hour. Shape into meatballs. Preheat oven to 325°F. Brown
meatballs in skillet. Mix flour, drippings and salt & pepper. Stir in beef broth and boil. Add cream
and dill. Pour over meatballs and bake at 325°F for 30 minutes. Serve over egg noodles or rice.
Vegetable Frittata

(4 servings)  

    * 2 tablespoons margarine
    * 1 bag (16 ounces) frozen Mixture Broccoli Corn and Red Pepper
    * 1 1/2 cups liquid egg substitute
    * 1/2 cup water
    * 1 tablespoon Tabasco pepper sauce
    * 3/4 teaspoon salt 

Melt margarine in 12-inch non-stick skillet over medium heat. Add vegetables; cook and stir 3 minutes.

Lightly beat eggs, water, Tabasco sauce and salt.

Pour egg mixture over vegetables in skillet. Cover and cook 10 to 15 minutes or until eggs are set.

To serve, cut into wedges.
Ingredients
250ml (1cup) cake flour
1 tsp baking powder
1/2 tsp salt
1 egg
125 milk
125 ml oil for frying

How to prepare it
Sift flour, baking powder and salt together. beat egg separately and add to flour. Add milk and mix until smooth heat oil in frying pan and drop a tablespoon of the mixture into oil.

Don't make more than four at a time.

Fry for two to three minutes on one side, then turn and fry for one minute on other side. Serve hot.
17 min 10 min prep, 60 cookies
from recipezaar.com, zimbabwean recipe

10 	tablespoons butter
1/4 	cup sugar
1 	tablespoon lemon zest
1 	teaspoon ground nutmeg
1/4 	cup honey
1 	egg
1 	cup finely grated raw sweet potato
2 1/2 	cups all-purpose flour
1 1/2 	teaspoons baking powder
1/2 	teaspoon baking soda
1/2 	teaspoon salt
Lemon Glaze
1 	teaspoon butter
1-2 	teaspoon lemon juice
1 1/2 	cups powdered sugar
1 	tablespoon water

   1. Cream together butter and sugar in bowl. Blend in lemon zest, nutmeg, honey and egg. Fold in sweet potato.
   2. In separate bowl. sift flour, baking powder, baking soda and salt.
   3. Add it to the first mixture and blend well.
   4. Arrange cookie dough by rounded teaspoons on ungreased cookie sheet.
   5. Bake at 350 degrees for 7 minutes.
   6. To make glaze, use a wooden spoon to combine all ingredients in glass container until smooth.
   7. Add more water by the drop until glaze is easy to spread on cooled cookies.

<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'></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>
1 cup walnut halves
1/2 cup mayonnaise
1/4 cup plain yogurt
1 teaspoon prepared mustard
Pinch of dry mustard
Juice of 1/2 lemon
4 to 6 tart apples, peeled, cored, and diced (2 cups)
1 to 2 cups finely diced inner ribs celery
(white part only), leaves reserved
Salt and freshly ground black pepper
2 bunches tender greens, such as arugula, baby kale,
or pepper cress, washed and dried
2 tablespoons olive oil 1 tablespoon fresh lemon juice
Preheat the oven to 325°F.
Spread the walnuts on a baking sheet and toast in the oven
for 4 to 5 minutes, until aromatic and lightly toasted.
Let cool.
Combine the mayonnaise, yogurt, both mustards, and the lemon juice
in a large bowl. Fold in the apples and diced celery and
season with salt and pepper.
Put the salad greens in a large bowl. Add the olive oil and lemon juice,
season with salt and pepper, and toss well. Divide the greens among four
plates. Spoon the apple mixture onto the greens and sprinkle with the
toasted walnuts and reserved celery leaves.
Yield: Serves 4
Hi there! Welcome to our recipe wiki. Expect nothing and everything! There's lots here that we have tried (some creations too!) and others that we'd like to try but haven't had the opportunity...our wishlist as it were. If you've any interesting/great recipes you'd like to recommend please send us an email with details.

To view recipes in this database, use the search bar for any ingredient or the links on the right and left hand sidebars. Use the options that appear on the top left position of the recipe to open, close etc

If you have the proper credentials, you may add recipes directly after you login on the right-hand sidebar. Make sure that you are properly logged in, the [[wiki|http://en.wikipedia.org/wiki/Wiki]] will allow you to edit + change things but won't save these changes unless you're logged in.

Please make sure you've read the HowToAddRecipes before you edit/add to make sure that your recipe is easily searchable and filed properly. Thanks

Enjoy
[[selu+busi|http://www.mdlalose.com/]]

PS. We use [[Tiddlywiki|http://www.tiddlywiki.com/]], it's worked out best for our journals and personal databases such as this recipe one. This one uses the [[cctiddly|http://cctiddly.sourceforge.net/]] variant. 

PPS. To get a standalone copy of our recipe wiki, right-click [[this link|http://mdlalose.com/recipes/index.php?standalone=1&]] and choose "Save Link As" or "Save Target As" and save to somewhere on your computer. You are then free to edit and play with to your heart's content.


Volume  	   	 

| |1 cup |              200ml|       7 fluid oz|
| |1 teaspoon |         5ml 	 |     0.2 fluid oz|
| |100 ml	|                - 	    |      3.5 fluid oz|
| |1 tablespoon   |    15ml 	 |     0.5 fluid oz|
|  |1 pint    |           570ml 	     |    20 fluid oz|

Weight 	 (28g to an ounce)
	 
 ½ oz	        14g 	 
 ¾ oz 	        21g 	 
 1 oz	         28g	 
1½ oz 	       42g 	 
 2oz 	         56g 	 
 2½ oz 	       74g 	 
 3 oz 	         84g 	 
 4oz 	        112g 	 
 4½ oz 	      126g 	 
 5oz 	        140g 	 
 6oz 	        168g 	 
 7 oz 	        195g 	 
 8oz 	        225g 	 
 9oz 	        252g 	 
 10oz 	       280g 	 
 12oz 	       336g 	 
 1lb 	        450g	 
 2lb 	        900g 	 
 3lb 	        1.35kg
1 1/4 cups Cider vinegar
1 tsp. black pepper
2 1/2 tsp. salt
1 1/2 tsp. sugar
4 tsp. chili powder
1 tsp. dry mustard
1 tsp. paprika
1/2 tsp. ground cumin
Combine all ingredients and cook for 5-10
minutes to dissolve spices. Use as a marinade
and basting with your favorite BBQ recipe.
2 cups raisins
1 cup dark brown sugar
1/3 cup butter
1 teaspoon vanilla or rum (forgot it once, still tasted great)
1/4 teaspoon ground cloves
1 teaspoon cinnamon
1/4 teaspoon ginger
1/4 teaspoon nutmeg or allspice
1 cup applesauce (would like to try a different fruit puree ... )
1 tablespoon molasses (optional)

2 cups flour
1/2 teaspoon baking powder
1 teaspoon soda

Preheat oven to 175 celcius. grease a loaf tin
put all ingredients (except the last 3) into a pot and boil for about 3 minutes. put aside to cool.
sift together flour baking powder and soda. Add slowly to cooled mixture. beat together.
pour into loaf tin. bake for about 45 mins

The consistency is amazing for an egg free cake!!
for the base
150g Amoretti biscuits (or digestivises mixed with gingernuts is good)
80g UNSALTED butter
 
Filling
400g white chocolate
200g full fat soft cheese (Philadelphia)
50g sugar
250g mascarpone cheese
400ml creme fraiche
 
To Decorate
100g white chocolate (can mix dark chocolate as well for some colour_
150g raspberries (or other fruit)
 
You will need
20cm springbase cake tin (for the base to come out)
 
Step l - Make base by melting the butter in microwave and then adding the crushed biscuits.  Put into the base of the cake tin and allow to chill in the fridge
 
Step 2 - Melt chocolate either over a pan of water or in the microwave.  In a bowl or food processor beat together cream cheese, sugar, mascarpone and creme fraiche.  Add the melted chocolate (slightly cooled).  Beat until smooth.  Pour this mixture onto biscuit base.  Allow to cool in fridge or overnight.
 
Step 3 - Before serviing grate extra chocolate into the cheesecake and decorate with raspberries.
 
Hope you like this one.  You can also mix with the raspberries, fruits like blueberries and strawberries so you get a nice mix.
m
Another quick recipe is to put the mixed fruit in the bottom of a glass sundae dish (you can sieve them together if you want to) and then add some of the cheesecake mix on top with grated chocolate.  Just a simpler version for quickness.
1 cup -  brown sugar
4 tablespoons cocoa (I did half a cup melted chocolate)
1/2 tsp salt (omit if you are like me)
1 1/2 cups self raising flour
1/2 tsp baking soda/ soda bic
1/3 cup vegetable oil
1tsp vanilla essence
2tsp rice wine vinegar
3/4 cup cold water

preheat oven 180 celcius, grease sandwich tins (line them if you want)
mix sugar/cocoa/salt/ flour/soda
add oil/ vanilla essence and vinegar. pour cold water over mixture
pour into tins. bake for about 30 mins (until cake springs back when pressed lightly) cool thoroughly
combine well with a fork. do not beat

sandwich with chocolate icing
6 T butter
1/2 cup brown sugar
1 egg substitute (I used , Soy dessert)
2 T wheatgerm
1 and 1/3 cup self raising flour (1 cup wholewheat self raising if you can)
125g/ 4 and 1/2 oz melted chocolate

preheat oven 180 celcius. grease baking sheet.
beat butter and sugar until fluffy, beat in soy dessert. add wheatgerm and flours, bring it all together with hands/ spoon. 
drop rounded spoonfuls onto baking tray, flatten with a fork. Bake for 15 to 20 mins. cool on tray a few mins then on wire rack.

you can freeze them for up to 3 months!! or give them away!!

before you give them away, dip each biscuit in melted chocolate so it comes a little way up the biscuit. let excess chocolate drip back into the bowl.
leave to set in a cool place on baking paper
from Korean [[THK]]

chicken in a hot chili sauce (dak chochu jang boekum)
From: The Korean Kitchen: Classic Recipes from the Land of the Morning Calm
Servings: 6 servings

Ingredients:
2 pounds chicken parts, loose skin and fat discarded
5 tablespoons sugar
1 tablespoon garlic, chopped
1 scallion, chopped
1 tablespoon ginger, fresh, chopped
2 tablespoon soy sauce
5 tablespoon gochu jang, hot fermented
chili paste
2 tablespoons Korean sesame oil
2 tablespoons toasted sesame seeds
1/2 cups water

Instructions:
Cut the chicken into 3-inch pieces. Divide the wings. Mix the parts with the sugar and marinate for 1 hour or more (the sugar is a tenderizer). Mix together all the other seasonings: garlic, scallion, ginger, soy sauce, gochu jang, sesame oil and sesame seeds. Mix well, add to the chicken, and marinate for another hour. Pour the 1/2 cup of water into a pan and bring to a boil. Add the chicken and marinade and simmer, covered, over low heat for about 1/2 hour, which is enough to cook the chicken and evaporate nearly all the liquid. Stir the mixture once or twice during this process. Serve warm with rice, salads and kimchi.
(like a dense biscuit or English muffin)
1 ½ c. flour
1 tsp. baking powder
2 tsp. salt
1 Tbsp. sugar (if you don’t like them sweet, omit the sugar)
Water
· Sift dry ingredients together
· Add water while you mix until dough reaches a soft doughy consistency (solid and slightly sticky)
· Add flour (so it doesn’t stick to your hands) and knead until smooth
· Divide dough into small balls and fold the outsides inward to form a disk shaped patty
· Place on a non-stick pan on low heat for about 5-10 min. on each side or until cooked through

Madombi (dumplings)
2 c. flour
1 tbsp. instant yeast
2 tsp. salt
1 tbsp. sugar
Warm water
· Mix dough and knead to same consistency as above
· Since this one has yeast, let it stand covered in a warm place until it doubles in size
· Punch dough down and knead for several more minutes
· Form disks/ patties as above
· Place in boiling water for 15-25 min.





1 very ripe papaya, peeled and seeded
1/2 cup soy sauce
3 large garlic cloves, minced
2 pounds flank steak


DIRECTIONS:
In a large bowl, combine the papaya, soy sauce and garlic. Using the back of a fork, smash the papaya until it forms a chunky paste. Remove 1/2 cup of the marinade and refrigerate. Add the flank steak and a generous amount of salt and pepper to the remaining marinade and refrigerate overnight, turning once.

Heat a grill or grill pan to medium-high. Remove any excess marinade from the steak and discard. Grill each side of the steak for 5 to 7 minutes for medium rare. Allow to sit for 10 minutes on a cutting board, then slice against the grain into 1/2-inch-thick slices. Serve with the reserved marinade and, if you like, french fries.
1/2 cup pitted green olives
1/4 cup flat-leaf parsley
2 tablespoons lemon juice
Cracked black pepper
4 chicken breast fillets


DIRECTIONS:
Preheat the oven to 390 degrees F. Place the olives, parsley, lemon juice and pepper into a small food processor and process until roughly chopped. Line a baking dish with baking paper. Place the chicken in the dish and spread over the green olive paste. Bake for 20 minutes or until cooked through. Serve hot or cold with lemon wedges and a simple tomato and basil salad.
1 cup grated Parmesan cheese
1 cup panko bread crumbs
1 teaspoon parsley
3 tablespoons olive oil
8 thin-sliced skinless, boneless chicken breasts


DIRECTIONS:
In a large bowl, combine the cheese, bread crumbs and parsley. Add a generous amount of salt (or garlic salt) and pepper.

In a large skillet over medium-high heat, add the olive oil. Place one piece of chicken at a time into the Parmesan mixture and coat with the crumbs. Add 2 to 3 chicken pieces to the pan at a time; don't crowd. Cook for about 4 minutes per side. Season with additional salt and pepper. Serve with mashed sweet potatoes if you like.
125g butter
125g dark chocolate, chopped
200g brown sugar
3 eggs, lightly beaten
50g flour, sifted
50g cocoa powder
1/4 teaspon baking powder
225g philadelphia, softened
50g castor sugar

1. combine butter, chocolate and brown sugar in a medium saucepan and stir over medium heat until chocolate and butter have melted. remove from heat and whisk in eggs (haven't tried egg-replacement)
2. add flour cocoa and baking powder and stir well until combined and pour into a grease-lined 18cm x 28cm rectangular tin
3. beat philly and castor sugar until smooth and creamy. spoon randomly over chocolate mixture and swirl with the tip of a knife. bake at 180 C, gas mark 4 for 35-40min or until cooked through. allow to cool before slicing
in [[ndebele|http://en.wikipedia.org/wiki/Ndebele_people_(Zimbabwe)]], sorry!

from "pheka loMaMoyo" in the [[uMthunywa newspaper|http://www.umthunywa.co.zw/index.aspx]]

“Umsila yinyama emnandi kakhulu isibili.”
@@Okudingakalayo@@
 umsila owodwa wenkabi
 inkezo zokudla ezimbili zamafutha (cooking oil)
 ihanyanisi ezimbili
 umhluzi welemoni ngokhezo lokudla olulodwa
 ibilebile loba ipepper
 isawudo ngesilinganiso sakho
 ibhodo kumbe umphika
 amanzi
@@Ukupheka@@
 quma umsila ngamalunga awo wenze iziqana ezithize, uphele wonke jikelele
 gezisa iziqa ngamanzi aqandayo
 zesule iziqa ngelembu elimhlophe njalo elihlanzekileyo
 thela ifulawa emganwni ochayekileyo
 thatha isiqa ngasinye usibhuqe kufulawa ehlanganiswe lesawudo ibilebile kumbe ipepper
 thela amafutha embizeni uwenze atshise
 faka iziqa zomsila embizeni ukhanzinge zize zibeluthuthuvana kodwa zingatshi.
 khupha iziqa uzibeke laphaya
 hluba ihanyanisi uyikhanzinge emafutheni ize ibebomvana khonapho embizeni obukhanzinga khona iziqa zomsila
 cenga amafutha ubusubuyisela iziqa zomsila embizeni
 thela amanzi atshisayo phezulu komsila athi yalala
 vala ngesivalo uyekele kuxhwathe
 yekela kuxhwathe emlilweni omncinyane okwamahola amathathu lengxenye kusiya kwamane.
 nxa umsila usuvuthiwe khupha iziqa uzibeke emganwni
 susa amafutha aphezulu komhluzi
 khathesi thatha inkezo ezimbili zefulawa uzithele amanzi aqandayo ugoqoze kuze kuhlangane
 thela amanzi ahlanganiswe lefulawa embizeni elomhluzi
 ngokuthanda ungafaka iziqa zama kharothi
 thothinsela umhluzi welemoni emhluzini
 buyisela iziqa emhluzini ukuze zithambe
 okwesikhatshana nje uphinde uzikhuphe
 bona ukuthi iziqa zomsila ziyomayoma ukuze zibambeke.
@@Ukudliwa@@
Ukudliwa komsila yikuthi ubambe isiqa sinye ngasinye ngesandla ukhukhuze yonke inyama kuze kusale ithambo lodwa nje.
Ukudliwa lani
Pheka isitshwala ngendlela yakho
Pheka irayisi layo ngokunjalo
Pheka amatshakada kumbe amagwili lemibhida
Konke lokhu ungakudla lomsila, nanzelela ubumnandi benyama yikukhukhuza amathambo kodwa-ke awomsila wona aphambili ngobumnandi.
Ngithi ziphekele uzikholisele


Stephany's Favorite Vanilla Butter Cream from [[vanilla.com|http://www.vanilla.com]]

Stephany says: "This is my favorite butter cream. It is very perishable and should not be made more than a day in advance. If you are looking for a wonderful creamy and not very sweet icing that showcases the vanilla bean, I think you will love this one.

"It is important that you use the freshest unsalted butter. Do not use butter that has been sitting in your refrigerator for days. It picks up flavors and it will impart them to your icing.

"You can choose to use either the vanilla bean or vanilla extract. When using the bean, you will have the tiny seeds in your butter cream so if that is a concern then use the extract. I prefer the bourbon vanilla for its bold flavor. You do not want to taste the butter; you want to taste the vanilla!"

Makes about 5 cups

Ingredients

1 pound unsalted butter, room temperature
2 cups milk
1 vanilla bean or 1 tablespoon vanilla extract
3 eggs
1 cup sugar
3 tablespoons cornstarch

Instructions

In a heavy bottom saucepan scald the milk with the vanilla bean split and scraped. Remove from heat and allow mixture to steep for at least 30 minutes.

Mix together sugar and cornstarch. Add eggs and mix well, making sure all lumps are mixed out.

Pour half the hot milk into the egg/sugar mixture and stir until incorporated.
Pour back into the saucepan and cook until thick enough for a ribbon to stand on top of the custard.

Cool on an ice bath, stirring continuously. When it is at room temperature remove the vanilla bean.

Important: Test the custard with an instant read thermometer and make sure that the temperature difference between the butter and the custard is not more than 5 degrees. Ideally they should be around 65-70 degrees. This is important because if you begin to add the butter and the custard is too hot then you will get soup, not butter cream. If the butter and custard are too cold it will look like cottage cheese.

When the temperatures are correct, put butter into an electric mixing bowl and with the paddle attachment cream and mix on slow speed until it is smooth. Begin adding the custard little by little. Don’t turn the speed of the mixer up or you will beat in too much air. The butter cream will look creamy and smooth when it is ready to ice the cake. If using vanilla extract, add it now. Taste butter cream. If you can still taste butter, then add more vanilla. Keep adding vanilla until you are satisfied that the vanilla is what you taste and not the butter.
I will try these, with sugar to see if they are like buttermilk scones.
I will omit the black pepper and put a comment then.
   
 *  2 cups all-purpose flour, sifted, plus more for surface
    * 2 teaspoons baking powder
    * 1/4 teaspoon baking soda
    * 1/2 teaspoon salt
    * 1 stick cold unsalted butter, cut into small pieces, plus more for serving
    * 1/2 cup buttermilk
    * 1/2 cup heavy cream
    * Freshly ground black pepper, optional
    * Honey, for serving

Directions

Preheat the oven to 175 C. Line a baking sheet with parchment or waxed paper.

In a bowl combine the dry ingredients and blend thoroughly. 
Cream in the butter with your fingers or a fork, until the mixture resembles coarse crumbs. 
Add the buttermilk a little at a time and, using your hands or a fork, work it in just until it's thoroughly incorporated and you have a smooth ball of dough. Don't overwork or over-handle the dough.

On a lightly floured surface, press the dough out into a round that is about 1-inch thick. Using a round cookie cutter or the rim of a drinking glass, press out (2 1/2-inch) rounds; you should get about 7 biscuits. If you like, you can re-roll the leftover dough to make more, but the texture of these will be denser than the others.

Place the dough rounds on the prepared baking sheet 
brush the tops with heavy cream. 
Grind fresh pepper over top of biscuits, if desired.
Bake until golden on top and brown on the bottom, about 12 to 15 minutes.
Serve warm with butter and a drizzle of honey.
@@Carrot Cake@@					

2 cups all-purpose flour
2 cups sugar 						
½ teaspoon salt						
1 teaspoon baking soda				 
2 teaspoons ground cinnamon			 
3 eggs							 
1 ½ cups vegetable oil
2 cups finely grated carrots
1 teaspoons of vanilla extract 
1 cup well- drained crushed pineapple
1 cup shredded coconut 
1 cup chopped nuts, divided

@@Cream Cheese Frosting@@

2 packages (200g each) cream cheese softened (Philadelphia soft cheese)
2 cups castor sugar
6 tablespoons butter or margarine, softened
1 teaspoon vanilla extract

In a mixing bowl, combine dry ingredients. Add eggs, oil, carrots and vanilla; beat until combined. Stir in pineapple, coconut and ½ cup nuts. Pour into a greased 13 inch x 9 inch x 2 inch baking pan. Bakes at 350  F. for 50-60 minutes or until cake tests done. Cool. Combine frosting ingredients in a small bowl; mix until well blended. Frost cooled cake. Sprinkle with remaining nuts. Store in refrigerator. Yield: 12-16 servings

350 F = Gas mark 4
Main conventional oven 180
Main fan oven 160


Ingredients
   350g/12oz Beef Steak, fillet, rump or sirloin
   2 teasp Sugar
   2 tbsp Soy Sauce
   2 Stems Lemon Grass, finely chopped
   2 Garlic Cloves, crushed
   1 teasp Sesame Seeds
   Freshly Ground Black Pepper
   Lettuce to serve
   4 Spring Onions, thinly sliced on the diagonal to garnish
   Fresh Coriander sprigs to garnish
  
Instructions 
  
1.   Slice the beef into long thin strips. 
  
2. Place all the ingredients in a shallow dish and mix together using your hands until well combined. Cover and refrigerate for at least 3 hours. 
  
3. After the marinating time, thread meat onto pre-soaked wooden skewers, accordion style. Grill over medium coals for 15 to 20 minutes, turning 3 or 4 times and basting with any remaining marinade. 
  
4. To serve - arrange lettuce leaves on a serving platter and place the skewers on top. Garnish with coriander sprigs and spring onion slices. Serve hot. 
Ingredients:
2 1/4 cups flour
1/2 cup sugar
2 teaspoons baking powder
1/2 teaspoon salt
1/4 cup butter
1 cup cream
3/4 cup raspberries

Directions:

Preheat oven to 425F degrees. Combine flour, sugar, baking powder, and salt. Cut butter into mixture until it resembles a course meal. Set aside 2 teaspoons of cream. Add remaining cream and raspberries to dry ingredients. Mix lightly with fork until mixture forms a stiff dough. Knead on floured board 5 to 6 times. Roll into 7-inch round and cut into wedges. Place 1 inch apart on greased baking sheet; pierce top and brush with cream. Bake for 15 to 18 minutes. Serve warm.

From [[CD Kitchen|http://www.cdkitchen.com/]], serves/makes 6
Ingredients
    *   1-2 tbsp. water
    * 1/2 tsp. salt
    * 1 tbsp. grated fresh ginger
    * 3 tbsp. brown sugars
    * 3 tbsp. unsalted butters
    * 1 pinch grated nutmeg
    * 3 lb. carrots
    * 3 tbsp. unsalted butters
    * 1/2 tsp. salt
    * 3 lb. carrots
    * 1 tbsp. grated fresh ginger
    * 3 tbsp. brown sugars
    * 1 pinch grated nutmeg
    * 1-2 tbsp. water


      -Boil carrot sticks in very lightly salted water until almost cooked through - about five minutes.
      -Test for done-ness by removing one carrot stick with a slotted spoon, dunking it in ice water and tasting; it should be mostly tender but still have some snap.
      -While carrots cook, melt butter in a sauté pan over medium heat and add ginger.
      -Sauté for 30 seconds.
      -Add the sugar, salt, nutmeg and water. Blend them together until sugar dissolves, and remove from heat.
      -When carrots are done, remove them from the boiling water with a slotted spoon and add them to the sauté pan.
      -Return sauté pan to low heat and stir to coat carrots thoroughly with the ginger/sugar mixture.
      -If mixture is too thick, thin with a tablespoon or two of water.
      -Finish cooking carrots on low heat - about one to two minutes more - and serve immediately.

450g/ 3 1/2 cups flour

1 1/2 cups bran flakes

1 tsp salt

1 1/2 tsp baking powder

125g/9 tbsp butter

140g/ 3/4 cup sugar

125ml/ 1/2 cup vegetable oil or canola oil

250ml/1 cup buttermilk

1 egg

1/ Heat the oven to 180C/350F/Gas 4. Mix together in the flour, bran flakes, salt and baking powder in a large bowl.

2/ Melt the butter, sugar and oil in a saucepan. Stir the mixture until all the sugar is dissolved

3/ Beat the eggs with the buttermilk and add to the melted butter mixture. Add the butter and buttermilk mixture to the dry ingredients and mix well. fill your greased loaf pan and bake for 50-60 minutes until lightly golden a skewer comes out clean.

4/ Turn out the pan and allow to cool. Turn the oven down to 100C/200F/Gas 1. Cut into finger shaped rusks, about 1 inch thick. Place cut side up on a baking tray (preferably one with holes) and place back into the oven overnight, or for 8 hours.
For a 20cm tart tin
 
For the pastry:

170g plain flour
Pinch of salt
100g cold butter
2tbsp caster sugar
1 egg yolk
 
For the pie filling:

1 small culinary pumpkin or medium butternut squash
145g maple syrup
1 tsp cinnamon
½ tsp ground ginger
½ tsp ground cloves
3 tbsp golden rum (optional)
2 large eggs, beaten
150ml evaporated milk
 
1. Pre-heat the oven to 200C. Cut pumpkin or squash in half or quarters depending on the size, and scoop out the seeds and fibres inside. Place skin-side up in a roasting dish with a couple of tablespoons of water. Roast for about half an hour, until tender.

2. Keeping the oven on, take the pumpkin out and leave to cool slightly, then peel off the skin, and scoop the flesh into a food processor. Whizz until smooth, then put into a fine sieve or piece of muslin suspended over a bowl and drain for at least an hour. 

3. Meanwhile, make your pastry. Sift the flour into a mixing bowl, stir in the salt, then grate in the butter. Rub in using your fingertips until it resembles breadcrumbs, then stir through the sugar. Mix the egg yolk with 2 tbsp iced water, and sprinkle half over the mixture, then stir together with a knife until it comes together in a paste – add a little more liquid if necessary.

4. Bring the mixture together with your fingertips, and then roll out on a floured surface to the thickness of a £1 coin. Use it to line a 20cm tart tin. Cover with clingfilm and chill for 30 minutes.

5. Line the pastry case with greaseproof paper and fill with baking beans. Put in the oven for 15 minutes, then remove the paper and beans, and bake for another 5-10 minutes until the base is pale golden. Remove from the oven. Turn the oven down to 180C.

6. Meanwhile, put 250g pumpkin purée in a large bowl, discarding the excess liquid, and stir in the maple syrup, rum if using, and spices. Taste for sweetness, then mix in the eggs. Gradually stir in the evaporated milk until you have a thick, creamy consistency – you may not need it all. Pour into the pastry case.

7. Bake for about 40 minutes, checking from half an hour onwards, until the filling is set, but still slightly wobbly in the centre. Allow to cool on a wire rack for at least an hour before serving.

Is pumpkin pie an American classic we really should import, or something best left on the other side of the ocean? If so, what do you like to eat it with? If not, which squash do you think is the best for cooking?
from [[Jamie Oliver|http://www.jamieoliver.com/recipes/pizza-recipes/pizza-dough/]]

Ingredients:

• 1kg strong white bread flour or Tipo ‘00’ flour
or 800g strong white bread flour or Tipo ‘00’ flour, plus 200g finely ground semolina flour
• 1 level tablespoon fine sea salt
• 2 x 7g sachets of dried yeast
• 1 tablespoon golden caster sugar
• 4 tablespoons extra virgin olive oil
• 650ml lukewarm water

Sieve the flour/s and salt on to a clean work surface and make a well in the middle. In a jug, mix the yeast, sugar and olive oil into the water and leave for a few minutes, then pour into the well. Using a fork, bring the flour in gradually from the sides and swirl it into the liquid. Keep mixing, drawing larger amounts of flour in, and when it all starts to come together, work the rest of the flour in with your clean, flour-dusted hands. Knead until you have a smooth, springy dough.

Place the ball of dough in a large flour-dusted bowl and flour the top of it. Cover the bowl with a damp cloth and place in a warm room for about an hour until the dough has doubled in size. 

Now remove the dough to a flour-dusted surface and knead it around a bit to push the air out with your hands – this is called knocking back the dough. You can either use it immediately, or keep it, wrapped in clingfilm, in the fridge (or freezer) until required. If using straight away, divide the dough up into as many little balls as you want to make pizzas – this amount of dough is enough to make about six to eight medium pizzas.

Timing-wise, it’s a good idea to roll the pizzas out about 15 to 20 minutes before you want to cook them. Don’t roll them out and leave them hanging around for a few hours, though – if you are working in advance like this it’s better to leave your dough, covered with clingfilm, in the fridge. However, if you want to get them rolled out so there’s one less thing to do when your guests are round, simply roll the dough out into rough circles, about 0.5cm thick, and place them on slightly larger pieces of olive-oil-rubbed and flour-dusted tinfoil. You can then stack the pizzas, cover them with clingfilm, and pop them into the fridge.
1 pickled ox tongue 
For a 1.5kg tongue:
¼ tsp dry mustard
4 cloves
¼ tsp peppercorns
1 dsp brown sugar
1 dsp brown vinegar
2 cloves garlic, crushed
enough water to cover tongue

Put all ingredients except tongue in a large saucepan and allow to heat up. Wash tongue. Put the tongue in the saucepan, making sure there’s sufficient water to cover the tongue, cover and bring to the boil. Simmer the tongue for three hours. 
Remove the tongue from the liquid and cool until you can handle it. Peel the tongue and cut away the root.
Curl the tongue into a small stainless-steel bowl; sit the bowl on a plate (to take any overflow of juices), cover with an appropriately sized plate, and weight it down. Refrigerate overnight. The next day, upend the tongue onto a plate. It will keep for two or three days in the fridge.
serves 4-6

150ml olive oil
1 small onion, finely chopped
4 garlic cloves, crushed but left whole
1 celery stalk, finely chopped
1 sprig of rosemary
350g arborio rice
1 glass white wine
1kg pumpkin (used 550g butternut squash) cut into very small cubes
1.5 litres hot vegetable stock (used 750/750 chicken/veg)
50g butter
100g Parmesan cheese, finely grated


Put the stock in a saucepan on low heat and simmer gently

In another saucepan, heat the olive oil and sweat the onion, garlic, celery and rosemary until the vegetables soften. Remove the garlic and discard.

Add the rice, stirring well, and making sure each grain of rice is coated in the oil. Add the wine and allow it to evaporate, stirring all the time.

Add the pumpkin cubes, together with a ladleful of stock and stir. As the liquid evaporates, add another ladleful of stock. Continue to do this for 20min. Remove from heat and stir in the butter and Parmesan cheese (have also used grated mozzarella)

Serve immediately


from BBC Food


Fluffy American pancakes

These pancakes are light and fluffy and great for a weekend brunch. Try adding a large handful of fresh blueberries to the batter before cooking.
Ingredients
135g/4¾oz plain flour
1 tsp baking powder
½ tsp salt
2 tbsp caster sugar
130ml/4½fl oz milk
1 large egg, lightly beaten
2 tbsp melted butter (allowed to cool slightly) or olive oil, plus extra for cooking
To serve
Maple syrup
Butter
Preparation method
Sift the flour, baking powder, salt and caster sugar into a large bowl. In a separate bowl or jug, lightly whisk together the milk and egg, then whisk in the melted butter.
Pour the milk mixture into the flour mixture and, using a fork, beat until you have a smooth batter. Any lumps will soon disappear with a little mixing. Let the batter stand for a few minutes.
Heat a non-stick frying pan over a medium heat and add a knob of butter. When it's melted, add a ladle of batter (or two if your frying pan is big enough to cook two pancakes at the same time). It will seem very thick but this is how it should be. Wait until the top of the pancake begins to bubble, then turn it over and cook until both sides are golden brown and the pancake has risen to about 1cm (½in) thick.
Repeat until all the batter is used up. You can keep the pancakes warm in a low oven, but they taste best fresh out the pan.
Serve with lashings of real maple syrup and extra butter if you like.
• from Jamie at Home

ingredients

• sea salt and freshly ground black pepper
• 6 medium green and yellow courgettes
• 500g penne
• 4 large free-range or organic egg yolks
• 100ml double cream
• 2 good handfuls of freshly grated Parmesan cheese
• olive oil
• 12 thick slices of pancetta or smoked streaky bacon, cut into chunky lardoons
• a small bunch of fresh thyme, leaves picked and chopped, flowers reserved (if you can get hold of flowering thyme)
• optional: a few courgette flowers 


method

Carbonara is a classic pasta sauce made with cream, bacon and Parmesan and is absolutely delicious. Try to buy the best ingredients you can, as that’s what really helps to make this dish amazing. I’m using a flowering variegated variety of thyme but normal thyme is fine to use. When it comes to the type of pasta, you can serve carbonara with spaghetti or linguine, but I’ve been told by Italian mammas (who I don’t argue with!) that penne is the original, so that’s what I’m using in this recipe. Before you start cooking, it’s important to get yourself a very large pan, or use a high-sided roasting tray so you can give the pasta a good toss.

Put a large pan of salted water on to boil. Halve and then quarter any larger courgettes lengthways. Cut out and discard any fluffy middle bits, and slice the courgettes at an angle into pieces roughly the same size and shape as the penne. Smaller courgettes can simply be sliced finely. Your water will now be boiling, so add the penne to the pan and cook according to the packet instructions.

To make your creamy carbonara sauce, put the egg yolks into a bowl, add the cream and half the Parmesan, and mix together with a fork. Season lightly and put to one side.

Heat a very large frying pan (a 35cm one is a good start – every house should have one!), add a good splash of olive oil and fry the pancetta or bacon until dark brown and crisp. Add the courgette slices and 2 big pinches of black pepper, not just to season but to give it a bit of a kick. Sprinkle in the thyme leaves, give everything a stir, so the courgettes become coated with all the lovely bacon-flavoured oil, and fry until they start to turn lightly golden and have softened slightly.

It’s very important to get this next bit right or your carbonara could end up ruined. You need to work quickly. When the pasta is cooked, drain it, reserving a little of the cooking water. Immediately, toss the pasta in the pan with the courgettes, bacon and lovely flavours, then remove from the heat and add a ladleful of the reserved cooking water and your creamy sauce. Stir together quickly. (No more cooking now, otherwise you’ll scramble the eggs.)

Get everyone around the table, ready to eat straight away. While you’re tossing the pasta and sauce, sprinkle in the rest of the Parmesan and a little more of the cooking water if needed, to give you a silky and shiny sauce. Taste quickly for seasoning. If you’ve managed to get any courgette flowers, tear them over the top, then serve and eat immediately, as the sauce can become thick and stodgy if left too long.



From James Tanner, BBC Food

Ingredients

1 tbsp olive oil
1 boneless chicken thigh, skin removed, cut into strips
2 rashers bacon, chopped
1 garlic clove, crushed
salt and freshly ground black pepper
250ml/9fl oz double cream
125g/4½oz pasta bows, cooked, according to packet instructions
small handful fresh basil, torn, plus extra for garnish
85g/3oz cheddar, grated, plus extra to garnish


Preparation method

Heat the olive oil in a frying pan, add the chicken strips and bacon and cook for four minutes, or until the chicken is golden brown and cooked through.
Add the garlic and cook for one minute. Season, to taste, with salt and freshly ground black pepper, add the cream and warm through.
Add the creamy sauce to the cooked, drained pasta and stir well.
To serve, add the basil and cheddar, mix and spoon onto a serving plate. Garnish with extra grated cheese and basil leaves.
Rice Pudding Recipe
INGREDIENTS
2 1/2 cups (600 ml) of whole milk
1/3 cup (66 grams) of uncooked short grain white rice
Pinch of salt
1 egg
1/4 cup (50 grams) dark brown sugar
1 teaspoon of vanilla extract
1/4 teaspoon of cinnamon
1/3 cup (40 grams) raisins
METHOD
1 In a medium-sized, heavy-bottomed saucepan, bring the milk, rice and salt to a boil over high heat. Reduce heat to low and simmer until the rice is tender, about 20-25 minutes. Stir frequently to prevent the rice from sticking to the bottom of the pan.
2 In a small mixing bowl, whisk together egg and brown sugar until well mixed. Add a half cup of the hot rice mixture to the egg mixture, a tablespoon at a time, vigorously whisking to incorporate.
3 Add egg mixture back into the saucepan of rice and milk and stir, on low heat, for 10 minutes or so, until thickened. Be careful not to have the mixture come to a boil at this point. Stir in the vanilla. Remove from heat and stir in the raisins and cinnamon.
Serve warm or cold.