var ttybuffer=[];
G.adv={url:'xml/evsel.xml',init:function(){	var m=this,v,o,i,a=m.data=G.load(m.url),mv,mw,j,vv,p,d;	var dt = new Date()	m.ID = dt.getDate()+"-"+(dt.getMonth()+1)+"-"+dt.getFullYear()+"-"+dt.getHours()+":"+dt.getMinutes()+":"+dt.getSeconds()+"-"+Math.floor(Math.random()*99999);	m.feedback=''	o=$$('message',a)	v=m.message={}	for(i=0;i<o.length;i++) v[$a(o[i],'key')]=G.text(o[i]).split('|')	o=$$('word',a)	mv=m.moves={}	mw=m.voc={}	for(i=0;i<o.length;i++){		p=o[i];		v=G.text(p).split(',');		vv=v[0];		if($a(p,'move')=='1') mv[v[0]]=vv;		for(j=0;j<v.length;j++) mw[v[j]]=vv;	}	m.index('object','obj');m.index('location','loc');m.index('action','act');	$('tty').innerHTML="";	m.out((dt.getDate()+1)+'-'+(dt.getMonth()+1)+'-'+dt.getFullYear()+' '+dt.getHours()+':'+dt.getMinutes()+' logging in on the tweak show.../ ^^- ^^\\ ^^| ^^/ ^^- ^^\\ ^^| ^^/ ^^- ^^\\ ^^| ^^/ ^^- ^^\\ ^^| ^^/ ^^- ^^\\ ^^| ^^/ ^^- ^^\\ ^^| ^^/ ^^- ^^\\ ^^| ^^/ ^^- ^^\\ ^^| ^^/ ^^- ^^\\ ^^| ^^/ ^^- ^^\\ ^^| ^^/ ^^- ^^\\ ^^| ^^/ ^^- ^^\\ ^^| ^^connecte!*&$#@|([+=%{system taken over. Evsel says welcome. building environment.........<p> </p>');
	m.pending=null;
	m.exits={};
	$('tty').onmousedown=function(){$('cursor').innerHTML="";$('cursor').id="";$('inbox').id="";m.out(m.p(m.msg('mouse')));}
	document.onkeydown=G.adv.onKey
	m.newGame();m.doDesc()
	m.tty();	GoL.init(11);},index:function(a,b){	var m=this,o=$$(a,m.data),v=m[b]={},i;	for(i=0;i<o.length;i++)v[$a(o[i],'key')]=o[i];}, 	newGame:function(){ 	var m=this,o=m.obj,i,v=m.vars={},n,p;	for (p in o) v[p]=$a(o[p],'start');	m.current=$$('location',m.data)[0];},onEnter:function(){
	var m=G.adv,v=$('inbox').innerHTML,o=v.split(' '),p=0,w1,w2,ww,loc;
//	sendfeedback("http://www.spullenmannen.nl/deautoriteiten/feedback.php","location="+$a(m.current,'key')+"&command="+v);
//	sendfeedback("http://www.spullenmannen.nl/deautoriteiten/feedback.php","session="+m.ID+"&text="+m.feedback+"<p>> <i>"+v+"</i>");	m.feedback="";	$('inbox').id="";	$('cursor').innerHTML="";
	$('cursor').id="";
	if(m.pending)return m.doDesc();	if(v=='')return m.doDesc();//m.doReady('waiting');	while (p<o.length && !w1) {		w1=m.voc[o[p]];		p++;	}	if(!w1) return m.doReady('dontunderstand');	if(m.moves[w1]){		loc=m.exits[w1];		return loc?m.doGoto(loc):m.doReady('cantmove')	}	while(p<o.length && !w2) {		w2=m.voc[o[p]];		p++;	}	m.secondWord=w2;	ww=w1;	if(w2)ww+=' '+w2;	if(m.act[ww])m.doAction(ww);	else m.doAction(w1+' *');	m.doReady();},onKey:function(a){
	var o=a||window.event;	if(!ttybuffer.length) {		var code;
		if (o.keyCode) code = o.keyCode;
		else if (o.which) code = o.which;//$('inbox').innerHTML+=' '+code;		if(code==13) G.adv.onEnter();
		else if(code==8) {
			var str=$('inbox').innerHTML;
			$('inbox').innerHTML=str.substr(0,str.length-1);
		}
		else if(code==37) GoL.cursorleft();		else if(code==38) GoL.cursorup();		else if(code==39) GoL.cursorright();		else if(code==40) GoL.cursordown();		else if(code==45) GoL.flip();		else if(code==43||code==61||code==107||code==187) GoL.next();		else if(code==27) GoL.togglerun();		else if (code!=16) $('inbox').innerHTML+=(String.fromCharCode(code)).toLowerCase();	}
	return (o.keyCode!=8);},/* actions */doDesc:function(){	var m=this;
	m.pending=null;	m.exits={};	m.out(m.getText(m.current));	m.doReady();},doTake:function(a){	var m=this,v=$a(a,'object'),n=$a(m.current,'key'),w;
	switch(m.vars[v]) {		case n: m.vars[v]='CARRIED';/*m.doDesc();*/w=$a(a,'caption'); return m.p(w?w:''/*m.msg('taken')*/);		case 'CARRIED': return m.p(m.msg('alreadycarried'));	}	return m.p(''/*m.msg('nothere')*/);},doDrop:function(a){	var m=this,o=$a(a,'object'),v=m.vars[o],n=$a(m.current,'key'),oc=$a(a,'caption');	if(v=='CARRIED'){		m.vars[o]=n;		m.doDesc();		return m.p(oc?oc:m.msg('dropped'));	}	return m.p(m.msg('donthave'));},doInventory:function(){	var m=this,v=m.getAt('CARRIED');	if(v=='') return m.p(m.msg('nothingcarried'));	return m.p('<b>'+m.msg('youcarry')+'</b><br>'+v+'');},doExamine:function(){	var m=this,w=m.secondWord,n=m.vars[w];	if(n==$a(m.current,'key')||n=='CARRIED') return m.p(G.text(m.obj[w]));	return m.p(''/*m.msg('nothere')*/);},doReady:function(a){	var m=this;	if(a) m.out(m.p(m.msg(a)));
//	m.out(m.p(m.msg('whatnext')))},doGoto:function(a){	var m=this,v;m.abort=false	v=m.getChildren(a);if(m.abort){m.out(v);m.doReady();return}	m.current=m.loc[$a(a,'to')]	if(v=='')m.doDesc();else{m.out(v+m.p(m.msg('continue')));m.pending=true}
},doAction:function(a){	var m=this,o=m.act[a];if(!o)return m.out(m.p(m.msg('cantdo')))
	m.out(m.getChildren(o));//m.doReady()
},/* supporting functions */getExits:function(a){	var m=this,o=$$('exit',a),v=[],i,p,x0,x2	if(o.length==0)return	for(i=0;i<o.length;i++){		p=o[i];x0=$a(p,'go');x2=x0.split(',')		for(j=0;j<x2.length;j++)m.exits[x2[j]]=p		if ($a(p,'hint')) v.push('-'+$a(p,'hint')+'<br>')
	}	if (v.length) {		v.unshift('<p><b>'+m.msg('exits')+'</b><br>')		v.push('</p>')	}	return v.join('\n')},getText:function(a){	var m=this	switch(a.nodeName){	case 'location':return m.getChildren(a)+m.getObjects(a)	case '#text':return m.p(G.text(a))	case 'br':return '<br/>'	case 'goto':m.current=m.loc[$a(a,'location')];return m.doDesc()
	case 'exits':return m.getExits(a)	case 'quit':$('tty').style.display="none"; document.onkeydown=""; return ''	case 'inventory':return m.doInventory()	case 'abort':m.abort=true;return ''	case 'describe':return m.doDesc()	case 'examine':return m.doExamine()	case 'if':return m.getChildren(m.getIf(a)?$$('do',a)[0]:$$('else',a)[0])	case 'destroy':m.vars[$a(a,'object')]='NULL';//return m.doDesc()	case 'make':m.vars[$a(a,'object')]=$a(a,'value');//return m.doDesc()	case 'take':return m.doTake(a)	case 'drop':return m.doDrop(a)	case 'gol':if($a(a,'state')=="on")GoL.start(); else GoL.stop(); return ''	}	return '##'+a.nodeName+':'+G.text(a)+'##<br />'},getIf:function(a){	var m=this,o=$a(a,'test').split(' '),v=m.vars[o[0]],h=$a(m.current,'key')	switch(o[1]){		case 'PRESENT':return v==h || v=='CARRIED'		case 'CARRIED':return v=='CARRIED'		case 'IS':return v==o[2]	}	return false},getChildren:function(a){var m=this,o=a.childNodes,i,v=[];if(o)for(i=0;i<o.length;i++)v.push(m.getText(o[i]));return v.join('\n')},getObjects:function(a){	var m=this,v=m.getAt($a(a,'key'));	return v?('<p><b>'+m.msg('also')+'</b><br>'+v+'</p>'):''},getAt:function(a){		var m=this,o=m.vars,v=[],p		for(p in o) if(o[p]==a) if ($a(m.obj[p],'caption')) v.push('-'+$a(m.obj[p],'caption')+'<br>')		return v.join('\n')},msg:function(a){var m=this,v=m.message[a],n=v.length;return (n>1)?v[m.random(n)]:v},p:function(a){return '<p>'+a+'</p>'},random:function(a){return parseInt(Math.random()*a)},
out:function(text){
	var x=[],m=this;	if (m.out.caller!=m.tty&&m.out.caller!=m.init) m.feedback+=text;
	if(text){		x[0]=(ttybuffer.length?ttybuffer[ttybuffer.length-1][0]+1:0);
		x[1]=text;
		ttybuffer.push(x);		return x[0];
	}
},
tty:function(){
	var m=this,i,j,id,text,endtag,subid;
	if(ttybuffer.length){
		id='tty'+($('tty'+ttybuffer[0][0])?ttybuffer[0][0]:'');
		text=ttybuffer[0][1];
		if(text.charAt(0)=="<" && text.substr(1,2)!="br"){
			i=0; while(text.charAt(i)!=(">"||" "))i++; /// or space
			endtag="</"+text.substr(1,i);
			j=text.indexOf(endtag);
			subid=m.out(text.substring(i+1,j));			$(id).innerHTML+=text.substr(0,i)+' id=\"tty'+subid+'\">'+endtag;			text=text.substring(j+endtag.length,text.length);
		}
		else{			if(text.charAt(0)=="<" && text.substr(1,2)=="br") {				$(id).innerHTML+="<br>";				text=text.substring(4,text.length);			}
			else{				if(text.charAt(0)=="^") $(id).innerHTML=$(id).innerHTML.substr(0,$(id).innerHTML.length-1);
				else $(id).innerHTML+=text.charAt(0);				text=text.substring(1,text.length);			}
		}
		if(text.length) ttybuffer[0][1]=text;
		else{
			if(id!='tty')$(id).id="";
			ttybuffer.shift();
		}
	}
	else if(!$('inbox')) $('tty').innerHTML+='<span style="font-weight:bold;color:#0f0;">&gt;&nbsp;<span id="inbox"></span><span id="cursor" style="text-decoration:blink;">_</span></span>';
	$('tty').scrollTop=$('tty').scrollHeight;
	timer=setTimeout(function(){m.tty();},10);
//	if (!$('inbox')) m.tty(); else timer=setTimeout(function(){m.tty();},10);
}}