/*
Parchment
=========
Built: 2013-02-17
Copyright (c) 2008-2012 The Parchment Contributors
BSD licenced
http://code.google.com/p/parchment
*/
(function(){var b=0;var d=/xyz/.test(function(){xyz})?/\b_super\b/:/.*/;var a,c;for(c in {toString:1}){a=1}Object.subClass=function(k){var h=this.prototype,g,f,e;var i=!/native code/.test(""+k.toString)&&k.toString;var j=function(l,m){return function(){var o=this._super,n;this._super=h[l];n=m.apply(this,arguments);this._super=o;return n}};b=1;g=new this;b=0;for(f in k){g[f]=typeof k[f]=="function"&&typeof h[f]=="function"&&d.test(k[f])?j(f,k[f]):k[f]}if(!a&&i){g.toString=d.test(i)?j("toString",i):i}e=g.init?function(){if(!b){this.init.apply(this,arguments)}}:function(){};e.prototype=g;e.constructor=e;e.subClass=Object.subClass;return e}})();(function(){function b(h,i){return h[i]<<24|h[i+1]<<16|h[i+2]<<8|h[i+3]}function c(h){return[(h>>24)&255,(h>>16)&255,(h>>8)&255,h&255]}function e(h,i){return String.fromCharCode(h[i],h[i+1],h[i+2],h[i+3])}function g(h){return[h.charCodeAt(0),h.charCodeAt(1),h.charCodeAt(2),h.charCodeAt(3)]}var f=Object.subClass({init:function a(k){this.type="";this.chunks=[];if(k){if(e(k,0)!="FORM"){throw new Error("Not an IFF file")}this.type=e(k,8);var j=12,h=k.length;while(j<h){var m=b(k,j+4);if(m<0||(m+j)>h){throw new Error("IFF: Chunk out of range")}this.chunks.push({type:e(k,j),offset:j,data:k.slice(j+8,j+8+m)});j+=8+m;if(m%2){j++}}}},write:function d(){var m=g(this.type);for(var n=0,j=this.chunks.length;n<j;n++){var k=this.chunks[n],o=k.data,h=o.length;m=m.concat(g(k.type),c(h),o);if(h%2){m.push(0)}}return g("FORM").concat(c(m.length),m)}});f.num_from=b;f.num_to_word=c;f.text_from=e;f.text_to_word=g;window.IFF=f})();(function(i,f,b){var k=function(o,q){for(var p in q){o[p]=q[p]}return o},n=/inh|tra|(\d+, ?){3}0/,a=f(i),e=f(document),d,c;f(function(){d=f("body");var o=f("<span> </span>").appendTo(d);c=o.height();o.remove()});k(f.cssHooks,{bgcolor:{get:function(q){var o=f(q),p=o.css("background-color");if(n.test(p)){return o.parent().css("bgcolor")}return p},set:function(q,r){var o=f(q),p=o.parent();o.css("background-color",r);if(n.test(p.css("background-color"))){p.css("bgcolor",r)}}}});var h=i.scrollByPages||function(p){var o=document.documentElement.clientHeight,q=o-Math.min(o/10,c*2);scrollBy(0,q*p)},m=i.getSelection||function(){return document.selection?document.selection.createRange().text:""},g=Object.subClass({init:function(o){var q=this,p=f("<input>",{"class":"TextInput",autocapitalize:"off",keydown:function(s){var t=q.keyCode=s.which,r;if(q.mode!="line"){return}if(t==38){q.prev_next(1);r=1}if(t==40){q.prev_next(-1);r=1}if(t==33){h(-1);r=1}if(t==34){h(1);r=1}if(t==13){q.submitLine();r=1}s.stopPropagation();if(r){return false}},keypress:function(r){if(q.mode=="char"){q.charCode=r.which;q.submitChar();return false}},keyup:function(){if(q.mode=="char"){q.submitChar()}}});q.lastinput=f('<span class="lastinput"/>').appendTo(o);e.on("click.TextInput keydown.TextInput",function(r){if(r.target.nodeName!="INPUT"&&m()==""){if(a.scrollTop()+a.height()-p.offset().top>-60){i.scrollTo(0,9000000000);r.target=p[0];p.focus().trigger(r);r.stopPropagation()}else{if(r.type=="keydown"&&r.which==8){return false}}}});q.history=[];q.input=p;q.container=o;q.statuswin=f("<div>");q.scrollParent=f.browser.webkit?d:f("html")},die:function(){e.off(".TextInput")},scroll:function(){this.scrollParent.scrollTop(this.lastinput.offset().top-this.statuswin.height()-c)},getLine:function(p){var r=p.target.children().last(),q=this.input,o;this.order=p;this.mode="line";this.current=0;this.mutable_history=this.history.slice();this.mutable_history.unshift("");o=/^([\s\S]+<br>)(.+?)$/.exec(r.html());if(o){r.html(o[1]);o=r.clone().html(o[2]).appendTo(r)}else{o=r}q.width(20).val("").appendTo(o).width(p.target.offset().left+p.target.width()-q.offset().left);this.scroll()},submitLine:function(){var o=this.input.val();this.lastinput.appendTo(this.input.parent());this.input.detach();if(o!=this.history[0]&&/\S/.test(o)){this.history.unshift(o)}e.trigger({type:"TextInput",mode:"line",input:o});this.mode=0;this.order.response=o;this.order.terminator=13;this.callback(this.order)},prev_next:function(s){var o=this.input,p=this.mutable_history,q=this.current,r=q+s;if(r<p.length&&r>=0){p[q]=o.val();o.val(p[r]);this.current=r}},getChar:function(o){this.order=o;this.mode="char";this.keyCode=this.charCode=0;this.input.addClass("CharInput").appendTo(this.container);this.scroll()},submitChar:function(){var q=this.keyCode,o=this.charCode,p={keyCode:q,charCode:o};if(!q&&!o){return}this.input.detach().removeClass("CharInput");e.trigger({type:"TextInput",mode:"char",input:p});this.mode=0;this.order.response=p;this.callback(this.order)}});var l=Object.subClass({init:function(p,q){var o=this;this.elem=p.addClass("TextGrid").on("stream",function(r){o.stream(r.order.data);return false}).css("bgcolor","inherit");this.lineheight=q.env.charheight;this.io=q;q.TextInput.statuswin=this.elem;this.lines=[];this.styles=[];this.cursor=[0,0]},stream:function(s){var r,o,u,t,q=this.elem,D=this.cursor[0],p=this.cursor[1],C=this.lines,A=this.styles,v=this.io.env,B,y,x,z,w=C.length;for(u=0;u<s.length;u++){r=s[u];o=r.code;if(o=="height"){while(r.lines>C.length){this.addline()}if(r.lines<C.length){if(r.lines!=0){while(r.lines<C.length&&/\S/.test(C[r.lines].join(""))){r.lines++}x=f("<div>").addClass("box").prependTo(this.io.target);i.scrollTo(0,9000000000);x.css({top:a.scrollTop()+this.lineheight*r.lines,left:x.offset().left-1});this.write(x,C.slice(r.lines),A.slice(r.lines))}C.length=r.lines;A.length=r.lines;if(D>r.lines-1){D=0;p=0}}}if(o=="clear"){t=0;while(t<C.length){this.addline(t++)}D=0;p=0}if(o=="cursor"){D=r.to[0];p=r.to[1];if(D<0){D=0}if(p<0){p=0}while(D>=C.length){this.addline()}}if(o=="get_cursor"){r.pos=[D,p];this.io.input(r)}if(o=="stream"){while(D>=C.length){this.addline()}z=b;if(r.css){z=f("<tt>").appendTo(q).css(r.css).attr("style");if(z){z=' style="'+z+'"'}}y=r.text;t=0;while(t<y.length){x=y.charAt(t++);if(x!="\n"){C[D][p]=x;A[D][p++]=z}if(x=="\n"||p==v.width){D++;p=0;if(D>=C.length&&t<y.length){this.addline()}}}}if(o=="eraseline"){for(t=p;t<v.width;t++){C[D][t]=" ";A[D][t]=b}}}this.cursor=[D,p];this.write(q,C,A);if(C.length!=w){f(".main").css("padding-top",q.height())}},write:function(u,p,t){var o="",r=0,q,v,s;while(r<p.length){v="";s=t[r][0];for(q=0;q<p[r].length;q++){if(t[r][q]==s){v+=p[r][q]}else{o+="<tt"+(s||"")+">"+v+"</tt>";s=t[r][q];v=p[r][q]}}o+="<tt"+(s||"")+">"+v+"</tt>";if(++r<p.length){o+="<br>"}}u.html(o)},addline:function(r){var q=this.io.env.width,o=[],p=0;r=r||this.lines.length;while(p++<q){o.push(" ")}this.lines[r]=o;this.styles[r]=Array(q)}});var j=function(s){var o=s.order,r=s.io.structures[o.name]||{node:"span"},q=o.node||r.node,t=o.text,p=f("<"+q+">").appendTo(s.target).addClass(o.name).css(o.css||{}).text(t||"");if(r.func){r.func(p,s.io)}return false};StructIO=Object.subClass({init:function(r){r=k({},r);this.env=r;var p=f(r.container),o=f("<tt>00000</tt>").appendTo(p),t=o.height(),q=o.width()/5,s=Math.min(Math.floor(p.width()/q),r.width||80);o.remove();k(r,{charheight:t,charwidth:q,width:s,fgcolour:p.css("color"),bgcolour:p.css("bgcolor")});p.width(s*q+2);this.container=p;this.target=p;p.on("stream",j);this.TextInput=new g(p);this.structures={main:{node:"div"},status:{node:"div",func:function(u,v){new l(u,v)}}}},event:function(r){var o,t,q,u=this.target,s=this.TextInput,p;for(q=0;q<r.length;q++){o=r[q];t=o.code;if(t=="structures"){o.code=b;f.extend(this.structures,o)}if(t=="find"){this.target=u=f("."+o.name)}if(t=="stream"){(o.to?f("."+o.to):u).trigger({type:"stream",io:this,order:o})}if(t=="clear"){var p=o.name?f("."+o.name):u;p.empty();if(o.css&&o.css["background-color"]){(o.name=="main"?d:p).css("background-color",o.css["background-color"])}}if(t=="read"){o.target=u;s.getLine(o)}if(t=="char"){s.getChar(o)}if(t=="quit"){s.scroll()}}}});i.StructIO=StructIO;StructIO.TextInput=g})(window,jQuery);var Runner=Object.subClass({init:function(c,b){var a=this;b=window.engine=this.e=new window[b]();this.io=new StructIO(c);this.toEngine=this.io.TextInput.callback=function(d){b.inputEvent(d)};b.outputEvent=function(d){a.fromEngine(d)}},fromParchment:function(b){var a=b.code;if(a=="load"){b.env=this.io.env}this.toEngine(b)},fromEngine:function(e){var d=this.e,c=0,a,f,b;this.io.event(e);for(;c<e.length;c++){a=e[c];f=a.code;if(f=="quit"){return}if(f=="save"||f=="restore"){this.toParchment(a)}if(f=="restart"){this.io.target=this.io.container.empty();b=1}if(f=="tick"){b=1}}if(b){this.toEngine(a)}}});jQuery.ajaxSetup({cache:1,converters:{"* binary":true}});jQuery.ajaxPrefilter("script",function(a){if(a.isLocal){a.crossDomain=1}});var parchment={options:{container:"#parchment",lib_path:"lib/",page_title:1,panels:["search","url","about"],proxy_url:"http://zcode.appspot.com/proxy/"},lib:{}},urloptions=(function(c){var d=0,a={},b;if(c[0]==""){d++}while(d<c.length){b=/([^=]+)(=(.*))?/.exec(c[d++]);a[b[1]]=b[3]?unescape(b[3]):true}return a})(location.search.slice(1).split(/[&;]/g));(function(a){window.FatalError=function(b){this.message=b;this.traceback=this._makeTraceback(arguments.callee);this.onError(this);if(a(".load").length>0){a(".load").detach()}};FatalError.prototype={onError:function(c){var b=c.message;a("#parchment").append('<div class="error">An error occurred:<br/><pre>'+b+"\n\n"+c.traceback+"</pre></div>");if(window.console){console.error(b)}},_makeTraceback:function(b){var f="";var d=0;var c=100;while(b!=null&&d<c){var g=b.toString();if(!g){f="\n (anonymous function)"+f}else{var h=g.match(/function (\w*)/);if(!h||!h[1]){f="\n (anonymous function)"+f}else{f="\n "+h[1]+f}}try{b=b.caller}catch(i){b=null}d++}if(d==c){f="..."+f}return"Traceback (most recent call last):\n"+f}}})(jQuery);(function(g,e){if(g.execScript){execScript("Function VBCStr(x)\nVBCStr=CStr(x)\nEnd Function\nFunction VBLastAsc(x)\nDim l\nl=LenB(x)\nIf l mod 2 Then\nVBLastAsc=AscB(MidB(x,l,1))\nElse\nVBLastAsc=-1\nEnd If\nEnd Function","VBScript")}var f=/chrome\/(\d+)/i.exec(navigator.userAgent),d=f&&parseInt(f[1])>4,a=function(q,r){var r=r||[],p=0,o;for(o=q.length%8;p<o;++p){r.push(q.charCodeAt(p)&255)}for(o=q.length;p<o;){r.push(q.charCodeAt(p++)&255,q.charCodeAt(p++)&255,q.charCodeAt(p++)&255,q.charCodeAt(p++)&255,q.charCodeAt(p++)&255,q.charCodeAt(p++)&255,q.charCodeAt(p++)&255,q.charCodeAt(p++)&255)}return r},l=function(p,o){return(o||"")+String.fromCharCode.apply(1,p)},h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",c=(function(){var o=[],p=0;for(;p<h.length;p++){o[h.charAt(p)]=p}return o})(),b=function(t,r){if(g.atob){return a(atob(t),r)}var r=r||[],u,q,p,y,x,w,v,s=0,o=t.length;while(s<o){y=c[t.charAt(s++)];x=c[t.charAt(s++)];w=c[t.charAt(s++)];v=c[t.charAt(s++)];u=(y<<2)+(x>>4);q=((x&15)<<4)+(w>>2);p=((w&3)<<6)+v;r.push(u,q,p)}if(v==64){r.pop()}if(w==64){r.pop()}return r},i=function(t,r){if(g.btoa){return btoa(l(t,r))}var r=r||"",u,q,p,y,x,w,v,s=0,o=t.length;while(s<o){u=t[s++];q=t[s++];p=t[s++];y=u>>2;x=((u&3)<<4)+(q>>4);w=((q&15)<<2)+(p>>6);v=p&63;r+=(h.charAt(y)+h.charAt(x)+h.charAt(w)+h.charAt(v))}if(isNaN(q)){r=r.slice(0,-2)+"=="}else{if(isNaN(p)){r=r.slice(0,-1)+"="}}return r},j=function(t){var u=VBCStr(t),s=VBLastAsc(t),o=[],q=0,p=u.length%4,r;while(q<p){o.push((r=u.charCodeAt(q++))&255,r>>8)}p=u.length;while(q<p){o.push((r=u.charCodeAt(q++))&255,r>>8,(r=u.charCodeAt(q++))&255,r>>8,(r=u.charCodeAt(q++))&255,r>>8,(r=u.charCodeAt(q++))&255,r>>8)}if(s>-1){o.push(s)}return o},m=jQuery.ajaxSettings.xhr(),k={binary:m.overrideMimeType&&!(e.browser.opera&&parseFloat(e.browser.version)<10.5)?"charset":"responseBody" in m?"responseBody":0},n=function(q,t,p){var s,o,r;q=e.trim(q);if(p.mode=="base64"){if(g.atob){r=atob(q);s=a(r)}else{s=b(q)}}else{if(p.mode=="charset"){s=a(q)}else{s=j(p.xhr.responseBody)}}p.responseArray=s;p.responseText=r};m=undefined;e.ajaxPrefilter("binary",function(p,s,q){var r=p.isLocal&&!p.crossDomain&&d?0:k.binary,o=p.xhr;p.xhr=function(){return q.xhr=o.apply(p)};p.binary=r;q.done(n);p.jsonp=false;p.jsonpCallback="processBase64Zcode";q.mode="base64";if(p.url.slice(-3).toLowerCase()==".js"){return"jsonp"}if(r&&!p.crossDomain){return"text"}if(p.legacy){p.url=p.legacy;return"jsonp"}p.data="url="+p.url;p.url=parchment.options.proxy_url;if(r&&e.support.cors){return"text"}p.data+="&encode=base64&callback=pproxy";p.jsonpCallback="pproxy";return"jsonp"});e.ajaxPrefilter("text",function(o,q,p){p.mode=o.binary;if(p.mode=="charset"){o.mimeType="text/plain; charset=x-user-defined"}});g.file={text_to_array:a,array_to_text:l,base64_decode:b,base64_encode:i,support:k}})(window,jQuery);(function(b){var a=this,c='<p><a href="'+location.href+"?story=http://mirror.ifarchive.org/",d=function(e){return c+e.path+'">'+e.desc+"</a></p>"};parchment.lib.UI=Object.subClass({init:function(e){this.library=e;this.panels={};this.load_indicator=b('<div class="dialog load"><p>Parchment is loading.<p>> <blink>_</blink></div>')},stylesheet_add:function(){var e=arguments,f;for(f=1;f<e.length;f++){if(document.createStyleSheet){document.createStyleSheet(e[f])}else{b("<link>",{rel:"alternate stylesheet",href:e[f],title:e[0],type:"text/css"}).appendTo("head")[0].disabled=true}}},stylesheet_switch:function(f,e){b('link[rel*="stylesheet"][title="'+f+'"]').each(function(){this.disabled=!e})},load_panels:function(){var e=parchment.options.panels,i,h,g,f=function(){var k=RegExp(h.val().replace(" ","( )?"),"i"),j=b.grep(i,function(l){return k.test(l.path+l.desc)});j=j.slice(0,30);g.html(b.map(j,d).join(""))};if(b.inArray("search",e)!=-1){this.panels.search=b('<div class="panel search"><label for="panel_search">Search the IF Archive for games you can play with Parchment. You might also like to search the <a href="http://ifdb.tads.org">IFDB</a> or the <a href="http://ifwiki.org">IF Wiki</a>.</label><input id="panel_search"><div></div></div>');h=this.panels.search.find("input");g=h.next();h.keydown(function(){h.unbind("keydown");b.getJSON("stories/if-archive.json").done(function(j){i=j;h.keyup(f);f()})})}if(b.inArray("url",e)!=-1){this.panels.url=b('<form class="panel url"><label for="panel_url">You may use Parchment to play any story file on the internet, simply copy its address here:</label><input id="panel_url" name="story"></form>')}this.library.container.append(this.panels[e[0]]);this.panels.active=e[0]}})})(jQuery);(function(e,c){var g=/([-\w\s_]+)(\.[\w]+(\.js)?)?$/,i=/\.js$/,d=function(){throw new FatalError("Parchment could not load the story. Check your connection, and that the URL is correct.")},f=function(k){c(".load").detach();var l=e.runner=new (e[k[2].vm.runner]||Runner)(parchment.options,k[2].vm.engine),j=location.hash;l.toParchment=function(m){k[2].library.fromRunner(l,m)};l.fromParchment({code:"load",data:(new parchment.lib.Story(k[2].responseArray)).data});if(j&&j!="#"){l.fromParchment({code:"restore",data:file.base64_decode(j.slice(1))})}else{l.fromParchment({code:"restart"})}};parchment.lib.Story=IFF.subClass({init:function h(p,k){this.title=k;if(p[0]<9){this._super();this.chunks.push({type:"ZCOD",data:p});this.data=p}else{if(IFF.text_from(p,0)=="Glul"){this._super();this.chunks.push({type:"GLUL",data:p});this.data=p}else{if(IFF.text_from(p,0)=="FORM"){this._super(p);if(this.type=="IFRS"){for(var n=0,j=this.chunks.length;n<j;n++){var o=this.chunks[n].type;if(o=="ZCOD"&&!this.zcode){this.data=this.chunks[n].data}else{if(o=="GLUL"&&!this.glulx){this.data=this.chunks[n].data}else{if(o=="IFmd"){this.metadata=file.array_to_text(this.chunks[n].data);var m=c(this.metadata);if(m){if(c("title",m)){this.title=c("title",m).text()}if(c("ifid",m)){this.ifid=c("ifid",m).text()}if(c("release",m)){this.release=c("release",m).text()}}}}}}}}}}}});var a=Object.subClass({add:function(j){this[j.ifid]=j;if(j.url){this.url[j.url]=j}},url:{}}),b=Object.subClass({init:function(){this.container=c(parchment.options.container);this.ui=new parchment.lib.UI(this)},load:function(q){var j=this,l=parchment.options,o=urloptions.story,k,n=urloptions.vm,m=0;if(l.lock_story){o=l.default_story;if(!o){throw new FatalError("Story file not specified")}}else{if(l.default_story||o){o=o||l.default_story}else{return this.ui.load_panels()}}c("#about").remove();c("body").append(j.ui.load_indicator);if(!c.isArray(o)){o=[o,0]}k=o[0];j.url=k;storyName=g.exec(k);storyName=storyName?storyName[1]+" - Parchment":"Parchment";if(l.page_title){e.document.title=storyName}if(n){n=parchment.vms[n]}else{for(;m<parchment.vms.length;m++){if(parchment.vms[m].match.test(k)){n=parchment.vms[m];break}}}if(!n){throw new FatalError("File type is not supported!")}try{this.launch(n,o)}catch(p){throw new FatalError(p)}},launch:function(n,o){var k=this,p=[c.ajax(o[0],{dataType:"binary",legacy:o[1]}).done(function(r,s,q){q.library=k;q.vm=n}).fail(d)],j=[],m=0,l;if(!n.loaded){n.loaded=1;while(m<n.files.length){l=parchment.options.lib_path+n.files[m++];if(i.test(l)){j.push(c.getScript(l))}else{this.ui.stylesheet_add(n.id,l)}}p[1]=c.when.apply(1,j)}c.when.apply(1,p).done(f)},fromRunner:function(m,l){var k=l.code,j=location.hash;if(k=="save"){location.hash=file.base64_encode(l.data)}if(k=="restore"){if(j&&j!="#"){l.data=file.base64_decode(j.slice(1))}}m.fromParchment(l)},stories:new a(),savefiles:{}});parchment.lib.Library=b;parchment.vms=[];parchment.add_vm=function(j){parchment.vms.push(j);parchment.vms[j.id]=j}})(window,jQuery);parchment.add_vm({id:"zvm",match:/(z[58]|zlb|(z|zcode.+)(blorb|blb))(.js)?$/i,files:["zvm.min.js"],engine:"ZVM"});(function(a,b){var c=a.parchment;b(function(){var d;if(a.parchment_options){b.extend(c.options,parchment_options)}if(!c.options.lock_options&&urloptions.options){b.extend(c.options,b.parseJSON(urloptions.options))}d=new c.lib.Library();c.library=d;d.load();if(location.href.indexOf("iplayif.com")!=-1){b.getScript("http://google-analytics.com/ga.js",function(){_gat._getTracker("UA-7949545-3")._trackPageview()})}})})(this,jQuery);