Fx.Scroll=new Class({Extends:Fx,options:{offset:{x:0,y:0},wheelStops:true},initialize:function(b,a){this.element=this.subject=$(b);this.parent(a);var d=this.cancel.bind(this,false);if($type(this.element)!="element"){this.element=$(this.element.getDocument().body)}var c=this.element;if(this.options.wheelStops){this.addEvent("start",function(){c.addEvent("mousewheel",d)},true);this.addEvent("complete",function(){c.removeEvent("mousewheel",d)},true)}},set:function(){var a=Array.flatten(arguments);this.element.scrollTo(a[0],a[1])},compute:function(e,d,c){var b=[];var a=2;a.times(function(f){b.push(Fx.compute(e[f],d[f],c))});return b},start:function(c,h){if(!this.check(arguments.callee,c,h)){return this}var e=this.element.getSize(),f=this.element.getScrollSize();var b=this.element.getScroll(),d={x:c,y:h};for(var g in d){var a=f[g]-e[g];if($chk(d[g])){d[g]=($type(d[g])=="number")?d[g].limit(0,a):a}else{d[g]=b[g]}d[g]+=this.options.offset[g]}return this.parent([b.x,b.y],[d.x,d.y])},toTop:function(){return this.start(false,0)},toLeft:function(){return this.start(0,false)},toRight:function(){return this.start("right",false)},toBottom:function(){return this.start(false,"bottom")},toElement:function(b){var a=$(b).getPosition(this.element);return this.start(a.x,a.y)}});Fx.Elements=new Class({Extends:Fx.CSS,initialize:function(b,a){this.elements=this.subject=$$(b);this.parent(a)},compute:function(g,h,j){var c={};for(var d in g){var a=g[d],e=h[d],f=c[d]={};for(var b in a){f[b]=this.parent(a[b],e[b],j)}}return c},set:function(b){for(var c in b){var a=b[c];for(var d in a){this.render(this.elements[c],d,a[d],this.options.unit)}}return this},start:function(c){if(!this.check(arguments.callee,c)){return this}var h={},j={};for(var d in c){var f=c[d],a=h[d]={},g=j[d]={};for(var b in f){var e=this.prepare(this.elements[d],b,f[b]);a[b]=e.from;g[b]=e.to}}return this.parent(h,j)}});Hash.Cookie=new Class({Extends:Cookie,options:{autoSave:true},initialize:function(b,a){this.parent(b,a);this.load()},save:function(){var a=JSON.encode(this.hash);if(!a||a.length>4096){return false}if(a=="{}"){this.dispose()}else{this.write(a)}return true},load:function(){this.hash=new Hash(JSON.decode(this.read(),true));return this}});Hash.Cookie.implement((function(){var a={};Hash.each(Hash.prototype,function(c,b){a[b]=function(){var d=c.apply(this.hash,arguments);if(this.options.autoSave){this.save()}return d}});return a})());var Color=new Native({initialize:function(b,c){if(arguments.length>=3){c="rgb";b=Array.slice(arguments,0,3)}else{if(typeof b=="string"){if(b.match(/rgb/)){b=b.rgbToHex().hexToRgb(true)}else{if(b.match(/hsb/)){b=b.hsbToRgb()}else{b=b.hexToRgb(true)}}}}c=c||"rgb";switch(c){case"hsb":var a=b;b=b.hsbToRgb();b.hsb=a;break;case"hex":b=b.hexToRgb(true);break}b.rgb=b.slice(0,3);b.hsb=b.hsb||b.rgbToHsb();b.hex=b.rgbToHex();return $extend(b,this)}});Color.implement({mix:function(){var a=Array.slice(arguments);var c=($type(a.getLast())=="number")?a.pop():50;var b=this.slice();a.each(function(d){d=new Color(d);for(var e=0;e<3;e++){b[e]=Math.round((b[e]/100*(100-c))+(d[e]/100*c))}});return new Color(b,"rgb")},invert:function(){return new Color(this.map(function(a){return 255-a}))},setHue:function(a){return new Color([a,this.hsb[1],this.hsb[2]],"hsb")},setSaturation:function(a){return new Color([this.hsb[0],a,this.hsb[2]],"hsb")},setBrightness:function(a){return new Color([this.hsb[0],this.hsb[1],a],"hsb")}});function $RGB(d,c,a){return new Color([d,c,a],"rgb")}function $HSB(d,c,a){return new Color([d,c,a],"hsb")}function $HEX(a){return new Color(a,"hex")}Array.implement({rgbToHsb:function(){var b=this[0],c=this[1],j=this[2];var g,f,h;var i=Math.max(b,c,j),e=Math.min(b,c,j);var k=i-e;h=i/255;f=(i!=0)?k/i:0;if(f==0){g=0}else{var d=(i-b)/k;var a=(i-c)/k;var l=(i-j)/k;if(b==i){g=l-a}else{if(c==i){g=2+d-l}else{g=4+a-d}}g/=6;if(g<0){g++}}return[Math.round(g*360),Math.round(f*100),Math.round(h*100)]},hsbToRgb:function(){var c=Math.round(this[2]/100*255);if(this[1]==0){return[c,c,c]}else{var a=this[0]%360;var e=a%60;var g=Math.round((this[2]*(100-this[1]))/10000*255);var d=Math.round((this[2]*(6000-this[1]*e))/600000*255);var b=Math.round((this[2]*(6000-this[1]*(60-e)))/600000*255);switch(Math.floor(a/60)){case 0:return[c,b,g];case 1:return[d,c,g];case 2:return[g,c,b];case 3:return[g,d,c];case 4:return[b,g,c];case 5:return[c,g,d]}}return false}});String.implement({rgbToHsb:function(){var a=this.match(/\d{1,3}/g);return(a)?hsb.rgbToHsb():null},hsbToRgb:function(){var a=this.match(/\d{1,3}/g);return(a)?a.hsbToRgb():null}});var Group=new Class({initialize:function(){this.instances=Array.flatten(arguments);this.events={};this.checker={}},addEvent:function(b,a){this.checker[b]=this.checker[b]||{};this.events[b]=this.events[b]||[];if(this.events[b].contains(a)){return false}else{this.events[b].push(a)}this.instances.each(function(c,d){c.addEvent(b,this.check.bind(this,[b,c,d]))},this);return this},check:function(c,a,b){this.checker[c][b]=true;var d=this.instances.every(function(f,e){return this.checker[c][e]||false},this);if(!d){return}this.checker[c]={};this.events[c].each(function(e){e.call(this,this.instances,a)},this)}});var Asset=new Hash({javascript:function(f,d){d=$extend({onload:$empty,document:document,check:$lambda(true)},d);var b=new Element("script",{src:f,type:"text/javascript"});var e=d.onload.bind(b),a=d.check,g=d.document;delete d.onload;delete d.check;delete d.document;b.addEvents({load:e,readystatechange:function(){if(["loaded","complete"].contains(this.readyState)){e()}}}).setProperties(d);if(Browser.Engine.webkit419){var c=(function(){if(!$try(a)){return}$clear(c);e()}).periodical(50)}return b.inject(g.head)},css:function(b,a){return new Element("link",$merge({rel:"stylesheet",media:"screen",type:"text/css",href:b},a)).inject(document.head)},image:function(c,b){b=$merge({onload:$empty,onabort:$empty,onerror:$empty},b);var d=new Image();var a=$(d)||new Element("img");["load","abort","error"].each(function(e){var f="on"+e;var g=b[f];delete b[f];d[f]=function(){if(!d){return}if(!a.parentNode){a.width=d.width;a.height=d.height}d=d.onload=d.onabort=d.onerror=null;g.delay(1,a,a);a.fireEvent(e,a,1)}});d.src=a.src=c;if(d&&d.complete){d.onload.delay(1)}return a.setProperties(b)},images:function(d,c){c=$merge({onComplete:$empty,onProgress:$empty},c);if(!d.push){d=[d]}var a=[];var b=0;d.each(function(f){var e=new Asset.image(f,{onload:function(){c.onProgress.call(this,b,d.indexOf(f));b++;if(b==d.length){c.onComplete()}}});a.push(e)});return new Elements(a)}});var Tips=new Class({Implements:[Events,Options],options:{onShow:function(a){this.tipTween.start(0.5)},onHide:function(a){a.tipTween.start(0)},showDelay:100,hideDelay:100,className:null,offsets:{x:16,y:16},fixed:false},initialize:function(){var c=Array.link(arguments,{options:Object.type,elements:$defined});this.setOptions(c.options||null);this.tip=new Element("div").inject(document.body);this.tipTween=new Fx.Tween(this.tip,{property:"opacity",duration:200,link:"cancel"});if(this.options.className){this.tip.addClass(this.options.className)}var b=new Element("div",{"class":"tip-top"}).inject(this.tip);this.container=new Element("div",{"class":"tip"}).inject(this.tip);var a=new Element("div",{"class":"tip-bottom"}).inject(this.tip);this.tip.setStyles({position:"absolute",top:0,left:0});this.tipTween.set(0);if(c.elements){this.attach(c.elements)}},attach:function(a){$$(a).each(function(d){var g=d.retrieve("tip:title",d.get("title"));var f=d.retrieve("tip:text",d.get("rel")||d.get("href"));var e=d.retrieve("tip:enter",this.elementEnter.bindWithEvent(this,d));var c=d.retrieve("tip:leave",this.elementLeave.bindWithEvent(this,d));d.addEvents({mouseenter:e,mouseleave:c});if(!this.options.fixed){var b=d.retrieve("tip:move",this.elementMove.bindWithEvent(this,d));d.addEvent("mousemove",b)}d.store("tip:native",d.get("title"));d.erase("title")},this);return this},detach:function(a){$$(a).each(function(c){c.removeEvent("mouseenter",c.retrieve("tip:enter")||$empty);c.removeEvent("mouseleave",c.retrieve("tip:leave")||$empty);c.removeEvent("mousemove",c.retrieve("tip:move")||$empty);c.eliminate("tip:enter").eliminate("tip:leave").eliminate("tip:move");var b=c.retrieve("tip:native");if(b){c.set("title",b)}});return this},elementEnter:function(b,a){$A(this.container.childNodes).each(Element.dispose);var d=a.retrieve("tip:title");if(d){this.titleElement=new Element("div",{"class":"tip-title"}).inject(this.container);this.fill(this.titleElement,d)}var c=a.retrieve("tip:text");if(c){this.textElement=new Element("div",{"class":"tip-text"}).inject(this.container);this.fill(this.textElement,c)}this.timer=$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this);this.position((!this.options.fixed)?b:{page:a.getPosition()})},elementLeave:function(a){$clear(this.timer);this.timer=this.hide.delay(this.options.hideDelay,this)},elementMove:function(a){this.position(a)},position:function(d){var b=window.getSize(),a=window.getScroll();var e={x:this.tip.offsetWidth,y:this.tip.offsetHeight};var c={x:"left",y:"top"};for(var f in c){var g=d.page[f]+this.options.offsets[f];if((g+e[f]-a[f])>b[f]){g=d.page[f]-this.options.offsets[f]-e[f]}this.tip.setStyle(c[f],g)}},fill:function(a,b){(typeof b=="string")?a.set("html",b):a.adopt(b)},show:function(){this.tipTween.start(0.9)},hide:function(){this.tipTween.start(0)}});var SmoothScroll=new Class({Extends:Fx.Scroll,initialize:function(b,c){c=c||document;var e=c.getDocument(),d=c.getWindow();this.parent(e,b);this.links=(this.options.links)?$$(this.options.links):$$(e.links);var a=d.location.href.match(/^[^#]*/)[0]+"#";this.links.each(function(g){if(g.href.indexOf(a)!=0){return}var f=g.href.substr(a.length);if(f&&$(f)){this.useLink(g,f)}},this);if(!Browser.Engine.webkit419){this.addEvent("complete",function(){d.location.hash=this.anchor},true)}},useLink:function(b,a){b.addEvent("click",function(c){this.anchor=a;this.toElement(a);c.stop()}.bind(this))}});var buttonLoading=new Class({initialize:function(a){if(!a.getElement(".loading_holder")){this.doLayout(a)}},doLayout:function(a){this.button=a;this.choice=a.getElement(".text");this.holder=new Element("div",{"class":"loading_holder"}).inject(this.choice);this.loader=new Element("div").set("html",'<span class="processing"></span><span class="success">ok!</span><span class="fail">ERROR!</span><span class="neutral">?</span>').inject(this.holder);this.processing=this.loader.getElement(".processing");this.open={left:28,opacity:1};this.ready={left:-48,opacity:0};this.close={left:28,opacity:0};this.fx={success:new Fx.Morph(this.loader.getElement(".success"),{link:"cancel",duration:"short",transition:"back:out"}),neutral:new Fx.Morph(this.loader.getElement(".neutral"),{link:"cancel",duration:"short",transition:"back:out"}),fail:new Fx.Morph(this.loader.getElement(".fail"),{link:"cancel",duration:"short",transition:"back:out"})};this.fx.success.set(this.close);this.fx.fail.set(this.close);this.fx.neutral.set(this.close);this.processing.setStyle("opacity",0)},startLoading:function(){this.fx.success.start(this.close);this.processing.setStyle("opacity",1);this.button.addClass("inactive").addClass("dead")},stopSuccess:function(){this.fx.success.set(this.ready);this.processing.setStyle("opacity",0);this.fx.success.start(this.open);(function(){this.fx.success.start(this.close)}).delay(1400,this);this.button.removeClass("inactive").removeClass("dead")},stopNeutral:function(){this.fx.neutral.set(this.ready);this.processing.setStyle("opacity",0);this.fx.neutral.start(this.open);(function(){this.fx.neutral.start(this.close)}).delay(1400,this);this.button.removeClass("inactive").removeClass("dead")},stopFail:function(){this.processing.setStyle("opacity",0);this.fx.fail.start(this.open);this.button.removeEvents("click");var a=new Element("div",{id:"error_notice"}).inject($("options"),"before");a.set("html",'<p>You found a bug! Sorry about that.. if you can&mdash;<a href="mailto:chris@textbasedadventure.com?subject=TBA ERROR!">click here</a>&mdash;to send me an email and let me know what you were doing when you got this error and I\'ll fix it as soon as possible!</p>');var b=new Fx.Morph(a,{link:"cancel",duration:400,transition:"back:out"});b.set({height:0,opacity:0}).start({height:70,opacity:1})}});var submitForm=function(b,c){var e=new buttonLoading(b);c.getElement(".submit").dispose();$("options").getElement(".ajax_submit").setStyle("display","block");b.addEvent("click",function(f){f.stop();if(!b.hasClass("inactive")){d()}});c.getElement("input").focus();c.getElements("input").each(function(f){f.addEvent("keydown",function(g){if(g.key=="enter"){g.stop();d()}})});function d(){new Request.HTML({url:c.getProperty("action")+"?ajax",onRequest:function(){e.startLoading()},onComplete:function(f,g,h){a(f,g,h)}}).post(c)}function a(f,g,i){try{if(i.split("***&***")[0]==1){e.stopSuccess();(function(){window.location=i.split("***&***")[1]}).delay(500)}else{var j=JSON.decode(i.split("***&***")[1]);e.stopNeutral();c.getElements(".errorlist").each(function(k){k.retrieve("morph").start(0).chain(function(){k.dispose()})});j.errors.each(function(l){field=$("id_"+l.field);var k=new Element("ul",{"class":"errorlist"}).set("html","<li>"+l.errors+"</li>").inject(field.getParent("td"),"top");var m=new Fx.Tween(k,{property:"opacity",duration:250,link:"cancel"});k.store("morph",m);k.addEvent("click",function(){field.focus();m.start(0)});field.addEvents({click:function(){m.start(0)},focus:function(){m.start(0)},keydown:function(){m.start(0)}});m.set(0);m.start(1)})}}catch(h){e.stopFail()}}};var enableEdit=new Class({initialize:function(c,d,b,a){this.page=a;this.el=c;if(b=="text"){this.editor=new Element("input",{type:"text",value:d,id:"edit_"+this.el.getProperty("id")}).inject("content")}else{if(b=="textarea"){this.editor=new Element("textarea",{rows:10,cols:40,value:d,id:"edit_"+this.el.getProperty("id")}).inject("content")}}this.el.addClass("editable");this.cords=this.el.getCoordinates("content");this.editor.addClass("inline_edit");this.editor.setStyles({position:"absolute",width:this.cords.width,height:this.cords.height,top:this.cords.top,left:this.cords.left,display:"none"});this.el.store("tip:title","click to edit...");new Tips(this.el);this.slide_close=-160;this.cancel_open=0;this.save_open=-32;this.cancelWrap=new Element("div",{styles:{position:"absolute",top:this.cords.top,left:-120,overflow:"hidden",width:120,height:50}}).inject("content");this.cancelDiv=new Element("div",{id:"cancel"+this.el.getProperty("id"),"class":"cancel_button",styles:{position:"absolute",left:this.slide_close}}).inject(this.cancelWrap);this.cancelButton=new Element("a",{href:"#",html:'<div class="link_content"><div class="carrot">&gt;</div><div class="cancel">Undo</div></div>',events:{click:function(){this.cancelTween.start(this.slide_close);this.saveTween.start(this.slide_close);this.editor.setStyle("display","none");this.editor.value=d}.bind(this)}}).inject(this.cancelDiv);this.cancelTween=new Fx.Tween(this.cancelDiv,{property:"left",duration:250,link:"cancel",transition:"back:out"});this.saveWrap=new Element("div",{styles:{position:"absolute",top:this.cords.top,right:-5,overflow:"hidden",width:130,height:50}}).inject("content");this.saveDiv=new Element("div",{id:"save"+this.el.getProperty("id"),"class":"save_button",styles:{position:"absolute",right:this.slide_close}}).inject(this.saveWrap);this.saveButton=new Element("a",{href:"#",html:'<div class="link_content"><div class="carrot">&gt;</div><div class="choice"><div class="text">Save\u2026</div></div></div>',events:{click:function(){new Request.HTML({url:"/edit/"+this.page+"/",data:this.el.getProperty("id")+"="+encodeURIComponent(this.editor.value),onRequest:function(){this.loading.startLoading()}.bind(this),onComplete:function(e,f,h){this.editor.setStyle("display","none");this.editor.value=d;try{if(h.split("***&***")[0]==1){this.loading.stopSuccess();this.cancelTween.start(this.slide_close);this.saveTween.start(this.slide_close);this.editor.set("value",h.split("***&***")[1]);this.el.set("html",h.split("***&***")[2])}else{this.loading.stopFail()}}catch(g){this.loading.stopFail()}}.bind(this)}).post()}.bind(this)}}).inject(this.saveDiv);this.saveTween=new Fx.Tween(this.saveDiv,{property:"right",duration:250,link:"cancel",transition:"back:out"});this.loading=new buttonLoading(this.saveButton);c.addEvents({click:function(){this.editor.setStyle("display","block");this.editor.focus();this.cancelTween.start(this.cancel_open);this.saveTween.start(this.save_open)}.bind(this)})}});var Site={start:function(){Site.defaultText()},defaultText:function(){if($("id_choice")){if($("id_submit")){$("id_submit").dispose()}var e=$("id_choice");var j=$("id_text");var f=$("submit_page").getElement("a");var c=new buttonLoading(f);var a=-200;var b=5;var d=new Fx.Tween(j,{property:"opacity",duration:250,link:"cancel"});var g=new Fx.Tween(f,{property:"right",duration:250,link:"cancel",transition:"back:out"});var h=e.value;var i=j.value;e.value=h;j.value=i;d.set(0);g.set(a);f.addEvents({click:function(){new Request.HTML({url:$("new_page_form").getProperty("action")+"?ajax",onRequest:function(){c.startLoading()},onComplete:function(k,l,n){try{if(n.split("***&***")[0]==1){c.stopSuccess();(function(){window.location=n.split("***&***")[1]}).delay(500)}else{c.stopFail()}}catch(m){c.stopFail()}}}).post($("new_page_form"))}});e.addEvents({keydown:function(k){if(k.key=="enter"){k.stop();j.focus()}},keyup:function(){if(e.value==h||e.value==""&&j.value==i){d.start(0);e.getParent().removeClass("active")}else{d.start(1);e.getParent().addClass("active")}},focus:function(){e.getParent().addClass("hover");if(e.value==h){e.value=""}},blur:function(){e.getParent().removeClass("hover");if(e.value==h||e.value==""&&j.value==i){e.value=h;e.getParent().removeClass("active");d.start(0);g.start(a)}}});j.addEvents({mouseenter:function(){j.addClass("hover")},mouseleave:function(){j.removeClass("hover")},keyup:function(){if(j.value==i||j.value==""){g.start(a)}else{g.start(b)}},focus:function(){j.addClass("hover");if(j.value==i){j.value=""}},blur:function(){j.removeClass("hover");if(j.value==i||j.value==""){if(e.value==h||e.value==""){e.value=h;e.getParent().removeClass("active");d.start(0)}j.value=i;g.start(a)}}})}}};window.addEvent("domready",Site.start);