/*
 * Copyright (c) 2009 Andreas Blixt <andreas@blixt.org>
 * Contributors: Aaron Ogle <aogle@avencia.com>
 * This and more JavaScript libraries: http://blixt.org/js
 * MIT License: http://www.opensource.org/licenses/mit-license.php
 * 
 * Hash handler
 * Keeps track of the history of changes to the hash part in the address bar.
 */
var Hash=(function(){var g=this,e=document.documentMode,f=g.history,j=g.location,k,c,b,d=function(){var l=j.href.indexOf("#");return(l==-1?"":j.href.substr(l+1))},h=function(){var l=d();if(l!=c){c=l;k(l)}},a=function(l){try{var n=b.contentWindow.document;n.open();n.write("<html><body>"+l+"</body></html>");n.close();c=l}catch(m){setTimeout(function(){a(l)},10)}},i=function(){try{b.contentWindow.document}catch(m){setTimeout(i,10);return}a(c);var l=c;setInterval(function(){var n,o;try{n=b.contentWindow.document.body.innerText;if(n!=l){l=n;j.hash=c=n;k(n)}else{o=d();if(o!=c){a(o)}}}catch(p){}},50)};return{init:function(l,m){if(k){return}k=l;c=d();l(c);if(g.ActiveXObject){if(!e||e<8){b=m;i()}else{g.attachEvent("onhashchange",h)}}else{if(f.navigationMode){f.navigationMode="compatible"}setInterval(h,50)}},go:function(l){if(l==c){return}if(b){a(l)}else{j.hash=c=l;k(l)}}}})();
/*
 * Copyright (c) 2009 Andreas Blixt <andreas@blixt.org>
 * This and more JavaScript libraries: http://blixt.org/js
 * MIT License: http://www.opensource.org/licenses/mit-license.php
 * 
 * jQuery hash plugin (Depends on jQuery, Hash)
 * Plugin for detecting changes to the hash and for adding history support for
 * hashes to certain browsers.
 */
(function(i,e){var d="jquery-history",f="/js/blank.html",a="hashchange",j="hash.fn",h,c=this,b=document.documentMode,g=function(k){i.event.trigger(a,[k])};i.hash={init:function(l){if(h){return}h=1;var k;if(c.ActiveXObject&&(!b||b<8)){i("body").prepend('<iframe id="'+d+'" style="display:none;" src="'+(l||f)+'"></iframe>');k=i("#"+d)[0]}e.init(g,k)},go:e.go};i.fn.hash=function(l,m){var k=this.data(j);if(k){this.unbind("click",k)}if(typeof l=="string"){k=function(){e.go(l);return false};this.data(j,k);this.click(k);if(m||m===undefined){this.attr("href","#"+l)}}return this};i.fn[a]=function(k){return this.bind(a,k)}})(jQuery,Hash);
/*
 * Copyright (c) 2009 Andreas Blixt <andreas@blixt.org>
 * This and more JavaScript libraries: http://blixt.org/js
 * MIT License: http://www.opensource.org/licenses/mit-license.php
 *
 * Application handler
 *
 * Handles path maps that direct control to handlers, along with the query
 * string parameters. Recommended use is for supporting paths in the hash part
 * of the address bar.
 */
var Application=(function(){var d=/\.([A-F0-9]{2})/g,e=function(f,g){return String.fromCharCode(parseInt(g,16))},b=/[^A-Za-z0-9,_!~*'()-]/g,c=function(f){var g=f.charCodeAt(0);if(g>255){return""}else{return(g<16?".0":".")+g.toString(16).toUpperCase()}},a=function(k){var j=[],f=[],h=function(l,i){if(typeof l=="string"){l=new RegExp(l)}if(!(l instanceof RegExp)){throw"Type error (pattern); expected RegExp or string."}if(typeof i!="function"){throw"Type error (handler); expected function."}j.push(l);f.push(i)};for(var g=0;g<k.length;g++){h(k[g][0],k[g][1])}this.exec=function(s){var u,r,t,o={},m,p,q,n;if((q=s.indexOf("?"))>=0){m=s.substr(q+1).split("&");u=s.substr(0,q);for(q=0,n=m.length;q<n;q++){p=m[q].split("=",2);o[a.decode(p[0])]=(p.length==2?a.decode(p[1].replace(/\+/g," ")):true)}}else{u=s}for(q=0,n=j.length;q<n;q++){r=j[q].exec(u);if(r){r=r.slice(1);t=new f[q](this,s,u,r,o);t.run.apply(t,r);return}}}};a.decode=function(f){return f.replace(d,e)},a.encode=function(f){return f.replace(b,c)},a.handler=function(f){var g=function(l,h,j,i,k){this.get_param=function(m,n){return(m in k?k[m]:n)};this.get_matches=function(){var o=[],n,m;for(n=0,m=i.length;n<m;n++){o[n]=i[n]}return o};this.get_params=function(){var m={},n;for(n in k){m[n]=k[n]}return m};this.get_path=function(){return j};this.get_requestPath=function(){return h};this.get_app=function(){return l}};g.prototype={delay:function(j){var i=this;return setTimeout(function(){i.run.apply(i,i.get_matches())},j)},redirect:function(j){var k=this.get_matches(),i=new j(this.get_app(),this.get_path(),k,this.get_params());i.run.apply(i,k)},run:f};return g};return a})();
/*
 * Copyright (c) 2009 Andreas Blixt <andreas@blixt.org>
 * This and more JavaScript libraries: http://blixt.org/js
 * MIT License: http://www.opensource.org/licenses/mit-license.php
 * 
 * Simple JSON encoder/decoder
 * Encodes/decodes JavaScript values as JSON (see http://json.org/)
 */
if(!JSON){var JSON=(function(){var c=new RegExp('[\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\ufeff\ufff0-\uffff]',"g"),a={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},b=function(d){return a[d]||"\\u"+("000"+d.charCodeAt(0).toString(16)).slice(-4)};return{stringify:function(h){switch(typeof h){case"string":return'"'+h.replace(c,b)+'"';case"object":if(h==null){return"null"}var e=[],g,f,d,j;if(h instanceof Array){for(f=0,d=h.length;f<d;f++){if((g=JSON.stringify(h[f]))!=null){e[e.length]=g}}return"["+e+"]"}for(j in h){if((g=JSON.stringify(h[j]))!=null){e[e.length]=JSON.stringify(j)+":"+g}}return"{"+e+"}";case"number":return isFinite(h)?String(h):"null";case"boolean":return String(h)}return null},parse:function(d){if(typeof d!="string"){return null}return JSON.e("("+d+")")}}})();JSON.e=function(c){return eval(c)};
/*
 * Copyright (c) 2009 Andreas Blixt <andreas@blixt.org>
 * This and more JavaScript libraries: http://blixt.org/js
 * MIT License: http://www.opensource.org/licenses/mit-license.php
 *
 * Physics
 * Simple mass-spring physics engine.
 *
 * This is a work in progress.
 */
}var Physics=function(e,o,c,n){var g=5,p=0.03,h,b,f,a,m=[],j=[],l,d,k,i;this._get_atom=function(q){return m[q]};this._get_constraint=function(q){return j[q]};this.set_bounds=function(r,t,q,s){if(typeof r!="number"||!isFinite(r)){throw"Type error (x1); expected finite number."}if(typeof t!="number"||!isFinite(t)){throw"Type error (y1); expected finite number."}if(typeof q!="number"||!isFinite(q)){throw"Type error (x2); expected finite number."}if(typeof s!="number"||!isFinite(s)){throw"Type error (y2); expected finite number."}if(h!=r){l=true}if(f!=t){d=true}if(b!=q){k=true}if(a!=s){i=true}h=r;f=t;b=q;a=s};this.set_density=function(s,q){if(typeof s!="number"||!isFinite(s)){throw"Type error (aid); expected finite number."}if(typeof q!="number"||!isFinite(q)){throw"Type error (density); expected finite number."}if(s%1){throw"Index must be a whole number."}if(s<0||s>=m.length){throw"Index out of range."}if(q<=0){throw"Invalid density."}var r=m[s];r.density=q;r.rad_den=r.radius*r.radius*Math.PI*q};this.set_gravity=function(q){if(typeof q!="number"||!isFinite(q)){throw"Type error (grav); expected finite number."}p=q};this.set_position=function(s,q,t){if(typeof s!="number"||!isFinite(s)){throw"Type error (aid); expected finite number."}if(typeof q!="number"||!isFinite(q)){throw"Type error (x); expected finite number."}if(typeof t!="number"||!isFinite(t)){throw"Type error (y); expected finite number."}if(s%1){throw"Index must be a whole number."}if(s<0||s>=m.length){throw"Index out of range."}var r=m[s];r.ox=r.x=q;r.oy=r.y=t};this.set_radius=function(s,q){if(typeof s!="number"||!isFinite(s)){throw"Type error (aid); expected finite number."}if(typeof q!="number"||!isFinite(q)){throw"Type error (radius); expected finite number."}if(s%1){throw"Index must be a whole number."}if(s<0||s>=m.length){throw"Index out of range."}if(q<=0){throw"Invalid radius."}var r=m[s];r.radius=q;r.rad_den=q*q*Math.PI*r.density};this.atom=function(r,u,q,s){var t=m.length;m[t]={};this.set_position(t,r,u);this.set_radius(t,q);this.set_density(t,typeof s=="number"?s:1);return t};this.constrain=function(q,r){return -1};this.countAtoms=function(){return m.length};this.countConstraints=function(){return j.length};this.step=function(){var y,x,v,s,r,q,D,C,w,u,B,A,t,z;for(x=0,s=j.length;x<s;x++){}for(y=0;y<g;y++){for(x=0,s=m.length;x<s;x++){r=m[x];if(r.still){if(y>0){continue}if(l||d||k||i){r.still=false}}for(v=x+1;v<s;v++){q=m[v];D=q.x-r.x;C=q.y-r.y;A=Math.sqrt(D*D+C*C);t=r.radius+q.radius;if(A>=t){continue}B=A?(A-t)/A/3:0.5;D*=B;C*=B;if(r.rad_den==q.rad_den){z=0.5}else{z=r.rad_den/(r.rad_den+q.rad_den)}r.x+=D*(1-z);r.y+=C*(1-z);q.x-=D*z;q.y-=C*z;r.still=false;q.still=false}if(r.still){continue}w=r.x;u=r.y;r.x+=w-r.ox;r.y+=u-r.oy+p;if(r.x+r.radius>b){if(k){B=(b-r.radius)-r.x;r.x+=B;w+=B}else{B=r.x-w;r.x=b-r.radius;w=r.x+B*0.5}u+=(u-r.oy)*0.005}else{if(r.x-r.radius<h){if(l){B=(h+r.radius)-r.x;r.x+=B;w+=B}else{B=r.x-w;r.x=h+r.radius;w=r.x+B*0.5}u+=(u-r.oy)*0.005}}if(r.y+r.radius>a){if(i){B=(a-r.radius)-r.y;r.y+=B;u+=B}else{B=r.y-u;r.y=a-r.radius;u=r.y+B*0.5;if(Math.abs(r.x-w)+Math.abs(r.y-u)<0.1){r.still=true}}w+=(w-r.ox)*0.005}else{if(r.y-r.radius<f){if(d){B=(f+r.radius)-r.y;r.y+=B;u+=B}else{B=r.y-u;r.y=f+r.radius;u=r.y+B*0.5}w+=(w-r.ox)*0.005}}r.ox=w;r.oy=u}}l=false;k=false;d=false;i=false};this.set_bounds(e,o,c,n)};
/*
 * Copyright (c) 2009 Andreas Blixt <andreas@blixt.org>
 * This and more JavaScript libraries: http://blixt.org/js
 * MIT License: http://www.opensource.org/licenses/mit-license.php
 * 
 * Service client library (Depends on jQuery, JSON)
 * Handles communication with an API through simple HTTP requests.
 */
var ServiceClient=(function(d,e){var b=function(i,h,j,f){i.attempts++;if(i.attempts<3){d.ajax(h)}else{var g={message:"The request failed after "+i.attempts+" attempts.",type:"JavaScriptError"};if(i.onError){i.onError.call(i.bindError||i.bind,g)}else{alert(g.type+": "+g.message)}}},c=function(g,f){switch(f.status){case"error":if(g.onError){g.onError.call(g.bindError||g.bind,f.response)}else{alert(f.response.type+": "+f.response.message)}break;case"list":break;case"success":if(g.onSuccess){g.onSuccess.call(g.bind,f.response)}break;default:alert("Unknown status: "+f.status);break}},a=function(k){var j,i=null,g=null,f=[],h=false;this.set_errorHandler=function(l,m){if(l===null){i=null;return}if(typeof l!="function"){throw"Type error (func); expected function or null."}if(typeof m!="object"&&typeof m!="undefined"){throw"Type error (bind); expected object."}i=l;g=m};this.get_path=function(){return k};this.call=function(n,t,s,r,p,o){if(typeof n!="string"){throw"Type error (action); expected string."}if(h){f[f.length]=arguments;return}h=true;var l={attempts:0,bind:r,bindError:o||g,onError:p||i,onSuccess:s};var m=[];for(var v in t){var w=e.stringify(t[v]);if(w){m[m.length]=v+"="+encodeURIComponent(w)}}var u=this;d.ajax({cache:false,complete:function(){h=false;if(f.length>0){u.call.apply(u,f.shift())}},data:m.join("&"),dataType:"json",error:function(x,q){b(l,this,x,q)},success:function(q){c(l,q)},timeout:3000,url:k+n})}};return a})(jQuery,JSON);window.PR_SHOULD_USE_CONTINUATION=true;window.PR_TAB_WIDTH=8;window.PR_normalizedHtml=window.PR=window.prettyPrintOne=window.prettyPrint=void 0;window._pr_isIE6=function(){var a=navigator&&navigator.userAgent&&/\bMSIE 6\./.test(navigator.userAgent);window._pr_isIE6=function(){return a};return a};(function(){var l="break continue do else for if return while ";var C=l+"auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile ";var v=C+"catch class delete false import new operator private protected public this throw true try ";var o=v+"alignof align_union asm axiom bool concept concept_map const_cast constexpr decltype dynamic_cast explicit export friend inline late_check mutable namespace nullptr reinterpret_cast static_assert static_cast template typeid typename typeof using virtual wchar_t where ";var F=v+"boolean byte extends final finally implements import instanceof null native package strictfp super synchronized throws transient ";var aj=F+"as base by checked decimal delegate descending event fixed foreach from group implicit in interface internal into is lock object out override orderby params partial readonly ref sbyte sealed stackalloc string select uint ulong unchecked unsafe ushort var ";var E=v+"debugger eval export function get null set undefined var with Infinity NaN ";var y="caller delete die do dump elsif eval exit foreach for goto if import last local my next no our print package redo require sub undef unless until use wantarray while BEGIN END ";var X=l+"and as assert class def del elif except exec finally from global import in is lambda nonlocal not or pass print raise try with yield False True None ";var j=l+"alias and begin case class def defined elsif end ensure false in module next nil not or redo rescue retry self super then true undef unless until when yield BEGIN END ";var W=l+"case done elif esac eval fi function in local set then until ";var K=(o+aj+E+y+X+j+W);var M="str";var J="kwd";var m="com";var af="typ";var U="lit";var ac="pun";var T="pln";var p="tag";var S="dec";var Z="src";var ai="atn";var r="atv";var ae="nocode";var ad=function(){var am=["!","!=","!==","#","%","%=","&","&&","&&=","&=","(","*","*=","+=",",","-=","->","/","/=",":","::",";","<","<<","<<=","<=","=","==","===",">",">=",">>",">>=",">>>",">>>=","?","@","[","^","^=","^^","^^=","{","|","|=","||","||=","~","break","case","continue","delete","do","else","finally","instanceof","return","throw","try","typeof"];var an="(?:^^|[+-]";for(var al=0;al<am.length;++al){an+="|"+am[al].replace(/([^=<>:&a-z])/g,"\\$1")}an+=")\\s*";return an}();var Q=/&/g;var V=/</g;var x=/>/g;var I=/\"/g;function D(al){return al.replace(Q,"&amp;").replace(V,"&lt;").replace(x,"&gt;").replace(I,"&quot;")}function q(al){return al.replace(Q,"&amp;").replace(V,"&lt;").replace(x,"&gt;")}var c=/&lt;/g;var B=/&gt;/g;var b=/&apos;/g;var h=/&quot;/g;var ak=/&amp;/g;var H=/&nbsp;/g;function s(ao){var aq=ao.indexOf("&");if(aq<0){return ao}for(--aq;(aq=ao.indexOf("&#",aq+1))>=0;){var al=ao.indexOf(";",aq);if(al>=0){var an=ao.substring(aq+3,al);var ap=10;if(an&&an.charAt(0)==="x"){an=an.substring(1);ap=16}var am=parseInt(an,ap);if(!isNaN(am)){ao=(ao.substring(0,aq)+String.fromCharCode(am)+ao.substring(al+1))}}}return ao.replace(c,"<").replace(B,">").replace(b,"'").replace(h,'"').replace(ak,"&").replace(H," ")}function P(al){return"XMP"===al.tagName}function ah(ap,an){switch(ap.nodeType){case 1:var am=ap.tagName.toLowerCase();an.push("<",am);for(var ao=0;ao<ap.attributes.length;++ao){var al=ap.attributes[ao];if(!al.specified){continue}an.push(" ");ah(al,an)}an.push(">");for(var aq=ap.firstChild;aq;aq=aq.nextSibling){ah(aq,an)}if(ap.firstChild||!/^(?:br|link|img)$/.test(am)){an.push("</",am,">")}break;case 2:an.push(ap.name.toLowerCase(),'="',D(ap.value),'"');break;case 3:case 4:an.push(q(ap.nodeValue));break}}function n(ar){var aw=0;var al=false;var av=false;for(var ao=0,an=ar.length;ao<an;++ao){var ax=ar[ao];if(ax.ignoreCase){av=true}else{if(/[a-z]/i.test(ax.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){al=true;av=false;break}}}function au(ay){if(ay.charAt(0)!=="\\"){return ay.charCodeAt(0)}switch(ay.charAt(1)){case"b":return 8;case"t":return 9;case"n":return 10;case"v":return 11;case"f":return 12;case"r":return 13;case"u":case"x":return parseInt(ay.substring(2),16)||ay.charCodeAt(1);case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":return parseInt(ay.substring(1),8);default:return ay.charCodeAt(1)}}function am(ay){if(ay<32){return(ay<16?"\\x0":"\\x")+ay.toString(16)}var az=String.fromCharCode(ay);if(az==="\\"||az==="-"||az==="["||az==="]"){az="\\"+az}return az}function aq(aF){var aJ=aF.substring(1,aF.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var aD=[];var ay=[];var aH=aJ[0]==="^";for(var aK=aH?1:0,aC=aJ.length;aK<aC;++aK){var aA=aJ[aK];switch(aA){case"\\B":case"\\b":case"\\D":case"\\d":case"\\S":case"\\s":case"\\W":case"\\w":aD.push(aA);continue}var az=au(aA);var aE;if(aK+2<aC&&"-"===aJ[aK+1]){aE=au(aJ[aK+2]);aK+=2}else{aE=az}ay.push([az,aE]);if(!(aE<65||az>122)){if(!(aE<65||az>90)){ay.push([Math.max(65,az)|32,Math.min(aE,90)|32])}if(!(aE<97||az>122)){ay.push([Math.max(97,az)&~32,Math.min(aE,122)&~32])}}}ay.sort(function(aN,aM){return(aN[0]-aM[0])||(aM[1]-aN[1])});var aB=[];var aI=[NaN,NaN];for(var aK=0;aK<ay.length;++aK){var aL=ay[aK];if(aL[0]<=aI[1]+1){aI[1]=Math.max(aI[1],aL[1])}else{aB.push(aI=aL)}}var aG=["["];if(aH){aG.push("^")}aG.push.apply(aG,aD);for(var aK=0;aK<aB.length;++aK){var aL=aB[aK];aG.push(am(aL[0]));if(aL[1]>aL[0]){if(aL[1]+1>aL[0]){aG.push("-")}aG.push(am(aL[1]))}}aG.push("]");return aG.join("")}function ap(aE){var aC=aE.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var aA=aC.length;var aG=[];var aF;for(var aD=0,aF=0;aD<aA;++aD){var az=aC[aD];if(az==="("){++aF}else{if("\\"===az.charAt(0)){var ay=+az.substring(1);if(ay&&ay<=aF){aG[ay]=-1}}}}for(var aD=1;aD<aG.length;++aD){if(-1===aG[aD]){aG[aD]=++aw}}for(var aD=0,aF=0;aD<aA;++aD){var az=aC[aD];if(az==="("){++aF;if(aG[aF]===undefined){aC[aD]="(?:"}}else{if("\\"===az.charAt(0)){var ay=+az.substring(1);if(ay&&ay<=aF){aC[aD]="\\"+aG[aF]}}}}for(var aD=0,aF=0;aD<aA;++aD){if("^"===aC[aD]&&"^"!==aC[aD+1]){aC[aD]=""}}if(aE.ignoreCase&&al){for(var aD=0;aD<aA;++aD){var az=aC[aD];var aB=az.charAt(0);if(az.length>=2&&aB==="["){aC[aD]=aq(az)}else{if(aB!=="\\"){aC[aD]=az.replace(/[a-zA-Z]/g,function(aH){var aI=aH.charCodeAt(0);return"["+String.fromCharCode(aI&~32,aI|32)+"]"})}}}}return aC.join("")}var at=[];for(var ao=0,an=ar.length;ao<an;++ao){var ax=ar[ao];if(ax.global||ax.multiline){throw new Error(""+ax)}at.push("(?:"+ap(ax)+")")}return new RegExp(at.join("|"),av?"gi":"g")}var ag=null;function a(ao){if(null===ag){var am=document.createElement("PRE");am.appendChild(document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));ag=!/</.test(am.innerHTML)}if(ag){var an=ao.innerHTML;if(P(ao)){an=q(an)}return an}var al=[];for(var ap=ao.firstChild;ap;ap=ap.nextSibling){ah(ap,al)}return al.join("")}function ab(an){var al="                ";var am=0;return function(ar){var ap=null;var av=0;for(var aq=0,au=ar.length;aq<au;++aq){var at=ar.charAt(aq);switch(at){case"\t":if(!ap){ap=[]}ap.push(ar.substring(av,aq));var ao=an-(am%an);am+=ao;for(;ao>=0;ao-=al.length){ap.push(al.substring(0,ao))}av=aq+1;break;case"\n":am=0;break;default:++am}}if(!ap){return ar}ap.push(ar.substring(av));return ap.join("")}}var O=new RegExp("[^<]+|<!--[\\s\\S]*?-->|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>|</?[a-zA-Z](?:[^>\"']|'[^']*'|\"[^\"]*\")*>|<","g");var u=/^<\!--/;var R=/^<!\[CDATA\[/;var t=/^<br\b/i;var f=/^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/;function A(ay){var au=ay.match(O);var ax=[];var ao=0;var al=[];if(au){for(var at=0,an=au.length;at<an;++at){var av=au[at];if(av.length>1&&av.charAt(0)==="<"){if(u.test(av)){continue}if(R.test(av)){ax.push(av.substring(9,av.length-3));ao+=av.length-12}else{if(t.test(av)){ax.push("\n");++ao}else{if(av.indexOf(ae)>=0&&Y(av)){var am=av.match(f)[2];var ar=1;var aq;end_tag_loop:for(aq=at+1;aq<an;++aq){var aw=au[aq].match(f);if(aw&&aw[2]===am){if(aw[1]==="/"){if(--ar===0){break end_tag_loop}}else{++ar}}}if(aq<an){al.push(ao,au.slice(at,aq+1).join(""));at=aq}else{al.push(ao,av)}}else{al.push(ao,av)}}}}else{var ap=s(av);ax.push(ap);ao+=ap.length}}}return{source:ax.join(""),tags:al}}function Y(al){return !!al.replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,' $1="$2$3$4"').match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/)}function L(al,an,ap,am){if(!an){return}var ao={source:an,basePos:al};ap(ao);am.push.apply(am,ao.decorations)}function i(an,am){var al={};var ao;(function(){var ay=an.concat(am);var aC=[];var aB={};for(var aw=0,au=ay.length;aw<au;++aw){var at=ay[aw];var ax=at[3];if(ax){for(var az=ax.length;--az>=0;){al[ax.charAt(az)]=at}}var aA=at[1];var av=""+aA;if(!aB.hasOwnProperty(av)){aC.push(aA);aB[av]=null}}aC.push(/[\0-\uffff]/);ao=n(aC)})();var ar=am.length;var aq=/\S/;var ap=function(aC){var au=aC.source,at=aC.basePos;var ay=[at,T];var aA=0;var aI=au.match(ao)||[];var aE={};for(var az=0,aM=aI.length;az<aM;++az){var aB=aI[az];var aL=aE[aB];var aD;var aH;if(typeof aL==="string"){aH=false}else{var av=al[aB.charAt(0)];if(av){aD=aB.match(av[1]);aL=av[0]}else{for(var aK=0;aK<ar;++aK){av=am[aK];aD=aB.match(av[1]);if(aD){aL=av[0];break}}if(!aD){aL=T}}aH=aL.length>=5&&"lang-"===aL.substring(0,5);if(aH&&!(aD&&aD[1])){aH=false;aL=Z}if(!aH){aE[aB]=aL}}var aw=aA;aA+=aB.length;if(!aH){ay.push(at+aw,aL)}else{var aG=aD[1];var aF=aB.indexOf(aG);var ax=aF+aG.length;var aN=aL.substring(5);var aJ=ay.length-10;L(at+aw,aB.substring(0,aF),ap,ay);L(at+aw+aF,aG,w(aN,aG),ay);L(at+aw+ax,aB.substring(ax),ap,ay)}}aC.decorations=ay};return ap}function k(am){var ao=[],al=[];if(am.tripleQuotedStrings){ao.push([M,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(am.multiLineStrings){ao.push([M,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{ao.push([M,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(am.hashComments){if(am.cStyleComments){ao.push([m,/^#(?:[^\r\n\/]|\/(?!\*)|\/\*[^\r\n]*?\*\/)*/,null,"#"])}else{ao.push([m,/^#[^\r\n]*/,null,"#"])}}if(am.cStyleComments){al.push([m,/^\/\/[^\r\n]*/,null]);al.push([m,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(am.regexLiterals){var ap=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");al.push(["lang-regex",new RegExp("^"+ad+"("+ap+")")])}var an=am.keywords.replace(/^\s+|\s+$/g,"");if(an.length){al.push([J,new RegExp("^(?:"+an.replace(/\s+/g,"|")+")\\b"),null])}ao.push([T,/^\s+/,null," \r\n\t\xA0"]);al.push([U,/^@[a-z_$][a-z_$@0-9]*/i,null,"@"],[af,/^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/,null],[T,/^[a-z_$][a-z_$@0-9]*/i,null],[U,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[ac,/^.[^\s\w\.$@\'\"\`\/\#]*/,null]);return i(ao,al)}var aa=k({keywords:K,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function N(ap){var ax=ap.source;var ao=ap.extractedTags;var an=ap.decorations;var au=[];var ar=0;var aC=null;var av=null;var am=0;var aB=0;var aD=ab(window.PR_TAB_WIDTH);var az=/([\r\n ]) /g;var aq=/(^| ) /gm;var ay=/\r\n?|\n/g;var at=/[ \r\n]$/;var al=true;function aw(aE){if(aE>ar){if(aC&&aC!==av){au.push("</span>");aC=null}if(!aC&&av){aC=av;au.push('<span class="',aC,'">')}var aF=q(aD(ax.substring(ar,aE))).replace(al?aq:az,"$1&nbsp;");al=at.test(aF);var aG=window._pr_isIE6()?"&nbsp;<br />":"<br />";au.push(aF.replace(ay,aG));ar=aE}}while(true){var aA;if(am<ao.length){if(aB<an.length){aA=ao[am]<=an[aB]}else{aA=true}}else{aA=false}if(aA){aw(ao[am]);if(aC){au.push("</span>");aC=null}au.push(ao[am+1]);am+=2}else{if(aB<an.length){aw(an[aB]);av=an[aB+1];aB+=2}else{break}}}aw(ax.length);if(aC){au.push("</span>")}ap.prettyPrintedHtml=au.join("")}var z={};function e(an,ao){for(var al=ao.length;--al>=0;){var am=ao[al];if(!z.hasOwnProperty(am)){z[am]=an}else{if("console" in window){console.warn("cannot override language handler %s",am)}}}}function w(am,al){if(!(am&&z.hasOwnProperty(am))){am=/^\s*</.test(al)?"default-markup":"default-code"}return z[am]}e(aa,["default-code"]);e(i([],[[T,/^[^<?]+/],[S,/^<!\w[^>]*(?:>|$)/],[m,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[ac,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]+?)<\/script\b[^>]*>/i],["lang-css",/^<style\b[^>]*>([\s\S]+?)<\/style\b[^>]*>/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);e(i([[T,/^[\s]+/,null," \t\r\n"],[r,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[p,/^^<\/?[a-z](?:[\w:-]*\w)?|\/?>$/],[ai,/^(?!style\b|on)[a-z](?:[\w:-]*\w)?/],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[ac,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^sty\w+\s*=\s*\"([^\"]+)\"/i],["lang-css",/^sty\w+\s*=\s*\'([^\']+)\'/i],["lang-css",/^sty\w+\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);e(i([],[[r,/^[\s\S]+/]]),["uq.val"]);e(k({keywords:o,hashComments:true,cStyleComments:true}),["c","cc","cpp","cxx","cyc","m"]);e(k({keywords:"null true false"}),["json"]);e(k({keywords:aj,hashComments:true,cStyleComments:true}),["cs"]);e(k({keywords:F,cStyleComments:true}),["java"]);e(k({keywords:W,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);e(k({keywords:X,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);e(k({keywords:y,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);e(k({keywords:j,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);e(k({keywords:E,cStyleComments:true,regexLiterals:true}),["js"]);e(i([],[[M,/^[\s\S]+/]]),["regex"]);function g(an){var ap=an.sourceCodeHtml;var am=an.langExtension;an.prettyPrintedHtml=ap;try{var aq=A(ap);var al=aq.source;an.source=al;an.basePos=0;an.extractedTags=aq.tags;w(am,al)(an);N(an)}catch(ao){if("console" in window){console.log(ao);console.trace()}}}function G(an,am){var al={sourceCodeHtml:an,langExtension:am};g(al);return al.prettyPrintedHtml}function d(ax){var ar=window._pr_isIE6();var av=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")];var am=[];for(var au=0;au<av.length;++au){for(var at=0,ao=av[au].length;at<ao;++at){am.push(av[au][at])}}av=null;var ap=Date;if(!ap.now){ap={now:function(){return(new Date).getTime()}}}var aq=0;var al;function an(){var ay=(window.PR_SHOULD_USE_CONTINUATION?ap.now()+250:Infinity);for(;aq<am.length&&ap.now()<ay;aq++){var aA=am[aq];if(aA.className&&aA.className.indexOf("prettyprint")>=0){var az=aA.className.match(/\blang-(\w+)\b/);if(az){az=az[1]}var aD=false;for(var aC=aA.parentNode;aC;aC=aC.parentNode){if((aC.tagName==="pre"||aC.tagName==="code"||aC.tagName==="xmp")&&aC.className&&aC.className.indexOf("prettyprint")>=0){aD=true;break}}if(!aD){var aB=a(aA);aB=aB.replace(/(?:\r\n?|\n)$/,"");al={sourceCodeHtml:aB,langExtension:az,sourceNode:aA};g(al);aw()}}}if(aq<am.length){setTimeout(an,250)}else{if(ax){ax()}}}function aw(){var aF=al.prettyPrintedHtml;if(!aF){return}var aB=al.sourceNode;if(!P(aB)){aB.innerHTML=aF}else{var ay=document.createElement("PRE");for(var aA=0;aA<aB.attributes.length;++aA){var aG=aB.attributes[aA];if(aG.specified){var aD=aG.name.toLowerCase();if(aD==="class"){ay.className=aG.value}else{ay.setAttribute(aG.name,aG.value)}}}ay.innerHTML=aF;aB.parentNode.replaceChild(ay,aB);aB=ay}if(ar&&aB.tagName==="PRE"){var aC=aB.getElementsByTagName("br");for(var az=aC.length;--az>=0;){var aE=aC[az];aE.parentNode.replaceChild(document.createTextNode("\r"),aE)}}}an()}window.PR_normalizedHtml=ah;window.prettyPrintOne=G;window.prettyPrint=d;window.PR={combinePrefixPatterns:n,createSimpleLexer:i,registerLangHandler:e,sourceDecorator:k,PR_ATTRIB_NAME:ai,PR_ATTRIB_VALUE:r,PR_COMMENT:m,PR_DECLARATION:S,PR_KEYWORD:J,PR_LITERAL:U,PR_NOCODE:ae,PR_PLAIN:T,PR_PUNCTUATION:ac,PR_SOURCE:Z,PR_STRING:M,PR_TAG:p,PR_TYPE:af}})();
/*
 * Copyright (c) 2009 Andreas Blixt <andreas@blixt.org>
 * MIT License: http://www.opensource.org/licenses/mit-license.php
 * 
 * JS Realm application
 */
jQuery.fn.prettify=function(){this.html(prettyPrintOne(this.html()))};var JsRealm=function(d){var c="Blixt's JavaScript realm",n="/js/two-cents.php/",s=d("#home"),i=d("#project"),p=d("#not-found"),b=d("#not-found-path"),q=d("#two-cents"),k=d("#world"),h=arguments.callee,a=["/js/Hash.js","/js/jquery.hash.js","/js/Application.js","/js/JSON.js","/js/Physics.js","/js/ServiceClient.js","/js/prettify.js","/js/jsrealm.js"],f=(function(){var x=q.find("#two-cents-new"),v=x.find("#two-cents-name"),w=x.find("#two-cents-message"),z=x.find("#two-cents-submit"),t=x.find("input:text, textarea"),y="",u=function(A){ServiceClient.call(this,A)};u.prototype={get:function(A){y=A;this.call("get",{path:A},this.refresh,this)},put:function(C,A,B){this.call("put",{path:C,name:A,message:B},this.refresh,this)},refresh:function(D){var C,B,A;x.nextAll().remove();w.val(w.data("empty-text"));w.addClass("empty");z.attr("disabled",false);for(B=0,A=D.length;B<A;B++){C=D[B];q.append(d("<li/>").append(d("<strong/>").text(C.name),d("<span/>").text(C.message)))}}};t.each(function(){var A=d(this);A.data("empty-text",A.val());A.addClass("empty")}).focus(function(){var A=d(this);if(A.hasClass("empty")){A.val("");A.removeClass("empty")}}).blur(function(){var A=d(this);if(!A.val()){A.val(A.data("empty-text"));A.addClass("empty")}});z.click(function(){if(t.hasClass("empty")){alert("You must fill in all fields!");return}z.attr("disabled",true);l.put(y,v.val(),w.val())});return u})(),l=new f(n),r=function(){var u=arguments[0],t;for(t=1;t<arguments.length;t++){arguments[t].remove()}this.show=function(v){if(u==v){return}u.replaceWith(v);u=v}},g=new r(s,i,p),j=Application.handler(function(){document.title=c;g.show(s);l.get(this.get_path())}),o=(function(){var v="/js/projects.json",D,y,G=i.find("#view-select"),I=G.find("#select-info"),K=I.find("a"),t=i.find("#view-info"),x=G.find("#select-demo"),z=x.find("a"),F=i.find("#view-demo"),J=G.find("#select-code"),M=J.find("a"),w=i.find("#view-code"),A=w.find("#download-code"),N=i.find("h1"),H=i.find("p.description"),L=t.find("#info-content"),E=F.find("#demo-content"),u=w.find("#code-content"),C=new r(t,F,w),B=function(Q,S,T,R){var P=T+"Cache",O=function(U){S[P]=U;if(R){Q.text(U).prettify()}else{Q.html(U).find("pre").prettify()}};if(P in S){O(S[P])}else{O("Loading...");d.get(S[T],null,O)}};d.getJSON(v,function(Q){var R,S,T,P,O;D={};for(O=0;O<Q.length;O++){R=Q[O];d("<h2/>").text(R.name).appendTo(s);d("<p/>").text(R.text).appendTo(s);P=d("<ul/>").addClass("projects").appendTo(s);for(T in R.list){D[T]=S=R.list[T];d("<li/>").append(d("<a/>").hash("project/"+T).text(S.name),"<br/>",d("<em/>").text(S.text)).appendTo(P)}}});return Application.handler(function(P){if(!D){this.delay(10);return}if(!(P in D)){this.redirect(m);return}if(!y||y!=D[P]){y=D[P];N.text(y.name);H.text(y.text);K.hash("project/"+P+"?view=info");z.hash("project/"+P+"?view=demo");M.hash("project/"+P+"?view=code");if(y.info){B(L,y,"info");y.defaultView="info";I.removeClass("empty")}else{L.html("<p>There is no information available for this project.</p>");I.addClass("empty")}if(y.demo){B(E,y,"demo");if(!y.defaultView){y.defaultView="demo"}x.removeClass("empty")}else{E.html("<p>There is no demonstration available for this project.</p>");x.addClass("empty")}if(y.code){A.attr("href",y.code);A.parent().insertBefore(u);B(u,y,"code",true);if(!y.defaultView){y.defaultView="code"}J.removeClass("empty")}else{A.parent().remove();u.text("There is no source code available for this project.");J.addClass("empty")}if(!y.defaultView){y.defaultView="info"}}var O=this.get_param("view",y.defaultView);switch(O){case"info":C.show(t);break;case"demo":C.show(F);break;case"code":C.show(w);break;default:alert("Invalid view!");d.hash.go("project/"+P);return}G.find("li").removeClass("current");G.find("#select-"+O).addClass("current");document.title=y.name+" ("+O+") in "+c;g.show(i);l.get(this.get_path())})})(),m=Application.handler(function(){document.title="Path not found in "+c;b.text(this.get_path());g.show(p);l.get("not-found")}),e=new Application([["^$",j],["^project/([^/]+)$",o],["^.*$",m]]);d(document).hashchange(function(u,t){e.exec(t)});d.hash.init();(function(){var v=20,y=[40,60,40,20,60],z=new Physics(0,-250,k.width(),k.height()),B,t,E=[],A="",x,D,C=-1,w=0,u=0;for(x=0;x<v;x++){E[x]=D=y[x%y.length];A+='<img alt="Atom" class="atom atom-'+D+'" ';A+='src="/js/atom-'+D+'.gif"/>'}k.append(A);B=k.find("img.atom");B.mousedown(function(){if(C!=-1){return false}C=B.index(this);B.eq(C).addClass("dragging");return false});d(document).mouseup(function(){if(C==-1){return}B.eq(C).removeClass("dragging");C=-1}).mousemove(function(F){w=F.pageX;u=F.pageY});setInterval(function(){var G;if(C>-1){G=z._get_atom(C);G.still=false;G.x+=(w-G.x)*0.2;G.y+=(u-G.y)*0.2}z.set_bounds(0,-250,k.width(),k.height());z.step();for(var H=0,F=z.countAtoms();H<F;H++){G=z._get_atom(H);if(G.still){continue}B.eq(H).css({left:G.x,top:G.y})}},40);t=setInterval(function(){var G=E[z.countAtoms()],F=G/2+Math.random()*(k.width()-G),I=-100,H=z.atom(F,I,G/2+1);if(z.countAtoms()>=v){clearInterval(t)}},250)})();h.demos={};h.include=function(t){for(var u=0;u<a.length;u++){if(a[u]==t){return}}d("body").prepend('<script src="'+t+'" type="text/javascript"><\/script>');a.push(t)}};jQuery(JsRealm);