			commands=[
				{command:"gigs",desc:"Upcoming shows"},
				{command:"myspace",desc:"go to myspace page"},
				{command:"buy",desc:"BUY THE NEW E.P."},
				{command:"downloads",desc:"select a track to download"},
				{command:"pics",desc:"Tin Man at play"},
				{command:"merch",desc:"buy some merch"},
				{command:"videos",desc:"multimedia tin"},
				// {command:"keyeoke",desc:"Play the Emotional Response Keyeoke game"},
				{command:"exit",desc:"exit TinOS 1.4 shell"}
			];

			gigs=[
				{command:"April 17th '10: Norwich",desc:"Norwich Arts Centre, EP Launch"}
			];

      secret=[
        {command:"tiktok",desc:"download 'Wind Me Up'"}
      ];

      news=[
        {command: "E.P. Available for Pre-order",desc:"'I've Got My Lithium Ion You' out April 12th from www.NRONE.co.uk"}
      ];

			scanSpeedInMilliSecs=150;
			caretCount=0;
			caret="_";
			buffer="";
			page="";
			pageSize=0;
			commandRunning=false;

			function boot() {
				rasterScan();
        buildTable(news,"NEWS");
        /* buildTable(gigs,"GIGS"); */
        page+="<br />";
        page+="TinOS 1.4 ready<br />Type HELP for assistance. Type BUY EP to pre-order the E.P.";
      }

      function bootSecret() { /* Oooo... you found this in the code? How big and clever are you! */
				rasterScan();
        buildTable(secret,"CONGRATULATIONS");
        page+="<br />";
        page+="TinOS 1.4.0 ready<br />As you have proved yourself a cryptographic typographic geek you deserve a gift.<br />This is very special - it's a Tin Man original and it will only EVER be available from this hidden address.<br />Simply type <span style='color:white;'>tiktok</span> to download the track (or type <span style='color:white;'>help</span> for assistance):";
      }

			function reFocus() {document.getElementById("keyGrab").focus(); }

			function cr() { // Perform a carriage return, emptying the line buffer into the page buffer
				page+="<br />&gt; "+buffer;
				command=buffer.substr(0,(buffer.indexOf(" ")>0)?buffer.indexOf(" "):buffer.length);
				param=(buffer.indexOf(" ")>0)?buffer.substr(buffer.indexOf(" ")+1,buffer.length):"";
				command=command.toLowerCase();
				param=param.toLowerCase();
				if (command=="") {
					commandRunning=false;
				} else if (command=="help" || command=="ls") {
					help();
				} else if (command=="gigs") {
					page+="<br />";
					buildTable(gigs,"GIGS");
				} else if (command=="myspace" || command=="exit") {
					go("http://www.myspace.com/thetinman");
				} else if (command=="pics") {
					go("http://viewmorepics.myspace.com/index.cfm?fuseaction=user.viewAlbums&friendID=188305903");
				} else if (command=="videos") {
					go("http://www.youtube.com/watch?v=Y0k25q2YQQ0");
				} else if (command=="buy") {
					go("http://www.nrone.co.uk/shop.php?catalog=50");
				} else if (command=="merch") {
					go("http://www.nrone.co.uk/bands.php?band=Tin%20Man");
				} else if (command=="download" || command=="downloads") {
					go("http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewArtist?id=258991110");
				} else if (command=="keyeoke") {
					go("http://www.kongregate.com/games/gktvs/emotional-response");
					buildTable(downloads,"DOWNLOADS");
				} else if (command=="go") {
					if (param=="west") {
						page+="<br />You can't, you're dead. You should be concentrating on attaining a firm state of rigor mortis";
					} else {
						page+="<br />You can't go from here";
					}
				} else if (command=="tiktok") {
					download("http://www.tinmankind.co.uk/download.php?file=wind-me-up.mp3");
				} else if (command=="sorry") {
					page+="<br />That's ok.";
				} else if (command=="exit" || command=="quit") {
					history.back();
				} else {
					page+="<br />"+command+" command not found. Type help for assistance.";
				}
				buffer="";
			}

      function download(dlCall) {
				commandRunning=true;
				page+="<br />Please wait - downloading...";
				document.location.href=dlCall;
				commandRunning=false;
      }

			function go(url) {
				commandRunning=true;
				page+="<br />Please wait - mounting "+url+"...";
				document.location.href=url;
				commandRunning=false;
			}

			function help() {
				page+="<br />";
				buildTable(commands,"COMMANDS");
			}

			function rasterScan() {
				if (caretCount--==0) { caretCount=4; caret=(caret)?"":"_"; }
				document.getElementById("screen").innerHTML=page+((!commandRunning)?"<br />&gt; "+buffer+caret:"");
				reFocus();
				timerID=this.setTimeout("rasterScan()",scanSpeedInMilliSecs);
			}

			function backSpace() { if (buffer.length>0) buffer=buffer.substr(0,buffer.length-2); }

			function keyCap(ev) {
				if (window.event) {
					k=window.event.keyCode;
					c=k;
				} else {
					e=ev;
					k=e.keyCode;
					c=e.charCode;
				}
				if (k==13) {
					cr();
				} else if (k==8) {
					backSpace();
				} else {
					keyChar = String.fromCharCode(c);
					buffer+=keyChar;
				}
			}

			function ieSafariChromeCap(ev) {
				if (window.event && window.event.keyCode==8) backSpace();
			}

			function pad(s,len,padChar) {
				padChar=(padChar)?padChar:"&nbsp;";
				res="";
				for (n=0;n<len-s.length;n++) { res+=padChar; }
				return s+res;
			}

			function buildTable(list,title) {
				maxDesc=0;
				maxCommand=0;
				for (l=0;l<=list.length-1;l++) {
					maxCommand=Math.max(maxCommand,list[l].command.length);
					maxDesc=Math.max(maxDesc,list[l].desc.length);
				}
				lineLen=maxCommand+maxDesc+5;
				page+="+"+pad("",lineLen,"-")+"+<br />";
				if (title) page+="| "+pad(title,lineLen-1)+"|<br />";
				for (l=0;l<=list.length-1;l++) {
					page+="| "+pad(list[l].command,maxCommand)+" : "+pad(list[l].desc,maxDesc)+" |<br />";
				}
				page+="+"+pad("",lineLen,"-")+"+<br />";
			}
