function clone(b){var c={};for(var a in b){var d=b[a];if(d instanceof Array){d=d.clone()}else{if(typeof d=="object"){d=clone(d)}}c[a]=d}return c}function extend(){var c=arguments[0];for(var a=1;a<arguments.length;++a){for(var b in arguments[a]){c[b]=arguments[a][b]}}return c}function toQueryString(c){var b=[];for(var a in c){if(typeof c[a]!="function"){b.push(encodeURIComponent(a)+"="+encodeURIComponent(c[a]))}}return b.join("&")}function fromQueryString(a){var b={};a.split("&").map(function(d){var c=d.split("=");b[decodeURIComponent(c[0])]=decodeURIComponent(c[1])});return b}function toCssString(c){var b=[];for(var a in c){if(typeof c[a]!="function"){b.push(a+":"+c[a]+((typeof c[a]=="number"&&Math.abs(c[a])>1)?"px":""))}}return b.join(";")}function range(c){var a=[],b=-1;while(++b<c){a.push(b)}return a}function add(d,c){return d+c}function mul(d,c){return d*c}function sub(d,c){return d-c}function div(d,c){return d/c}function sqr(b){return b*b}(function(){var b=String.prototype;var a=Array.prototype;var d=Number.prototype;var c=Function.prototype;b.pad=function(g,f){f=f||" ";var e=this.length;return(Math.abs(g)>e)?(g>0?this+f.rep(g-e):f.rep(Math.abs(g)-e)+this):this.toString()};b.rep=b.x=function(e){return(new Array(e+1)).join(this)};b.insws=function(){return this.replace(/(\w)(?=[A-Z](?=[a-z]))/g,"$1 ")};b.trim=function(){return this.replace(/^\s+|\s+$/g,"")};b.trimsplit=b.ts=function(e){return this.split(e).map(trim)};b.map=function(f,e){return this.split("").map(f,e)};b.reduce=function(e,f){return this.split("").reduce(e,f)};d.zf=d.zerofill=function(e,f){if(f){return this.toFixed(f).pad(-e,"0")}return this.toString().pad(-e,"0")};d.pad=function(e,g,f){if(g){return this.toFixed(g).pad(e,f)}return this.toString().pad(e,f)};d.times=function(h,f){var g=[],e=-1;if(typeof h=="function"){while(++e<this){g.push(h.call(this,e,f))}}else{if(h instanceof Array){while(++e<this){g.push(h.clone())}}else{if(typeof h=="object"){while(++e<this){g.push(clone(h))}}else{while(++e<this){g.push(h)}}}}return g};d.within=d.constrain=function(f,e,g){if(g){if(this<f){return(2*f-this).constrain(f,e)}else{if(this>e){return(2*e-this).constrain(f,e)}}}return Math.min(Math.max(f,this),e)};d.positive=function(){return this.constrain(1,Infinity)};d.negative=function(){return this.constrain(-Infinity,-1)};d.nonPositive=function(){return this.constrain(0,Infinity)};d.nonNegative=function(){return this.constrain(Infinity,0)};b.format=b.fmt=function(u){function e(y){var z=y.match(/^(\.?\w+|\[\d+\])(?=\.|$|\[\d+)/)[0];var m=y.replace(z,"");if(m){return e.call(this[z.replace(/^\.|^\[|\]$/g,"")],m)}else{return this[z.replace(/^\.|^\[|\]$/g,"")]}}function n(m){var z=this;for(var y in m){if(typeof m[y]=="function"){continue}var A=new RegExp("\\{"+y+"\\}","g");z=z.replace(A,m[y])}return z}var w=n.call(this,u);var o="(?:\\.|\\[\\d+\\])?[\\w\\[\\]\\.]*)(?::(?:(-|0)?(\\d+)(?:\\.(\\d+))?)?(r|n|x|o|b)?";for(var x in u){var r,i=[];r=i[0]=u[x];if(typeof r=="function"){continue}var g=new RegExp("\\{("+x+o+")?\\}");var k=i[1]=new Number(r),s;while(s=w.match(g)){var l=s[0],p=s[1],t=s[2],q=s[3],f=s[4],h=s[5];var j=!!(p||h);if(p){r=e.call(u,p);k=new Number(r)}switch(h){case"b":r=k.toString(2);break;case"o":r=k.toString(8);break;case"x":r=k.toString(16);break;case"n":r=k.toPos();break;case"r":r=k.toRoman();break}try{w=w.replace(l,(isNaN(k)||h)?r.pad(t=="-"?-q:q):(t=="0"?k.zf(q,f):k.pad(q,f)))}catch(v){throw new Error("Undefined parameter "+p+" in template "+this)}if(j){r=i[0];k=i[1]}}}return w};if(!("reduce" in Array)){a.reduce=function(f,j){var h=0;if(arguments.length<2){j=this[++h]}var g=j,e=this.length;for(;h<e;++h){g=f(g,this[h],h,this)}return g}}if(!("flatten" in Array)){a.flatten=function(){function e(f,g){if(g instanceof Array){return g.reduce(e,f)}f.push(g);return f}return this.reduce(e,[])}}if(!("uniq" in Array)){a.uniq=function(){function e(f,g){if(f.indexOf(g)==-1){f.push(g)}return f}return this.reduce(e,[])}}a.delayedReduce=function(g,f,m,n){var j=0;if(arguments.length<2){m=this[++j]}var h=m,e=this.length;var k=function(o,l,i,p){o=f(o,l,i,p);if(++i<e){window.setTimeout(arguments.callee,g,o,p[i],i,p)}else{if(n){n(o)}}};k(h,this[j],j,this)};a.diff=function(e){return this.map(function(f,g){return(f==e[g])?undefined:[f,e[g]]})};a.clone=function(){return this.map(function(e){if(e instanceof Array){return e.clone()}else{if(typeof e=="object"){return clone(e)}else{return e}}})};a.pick=function(f){if(f===undefined){return this[Math.floor(Math.random()*this.length)]}var e=[];f=Math.floor(f)||1;return f.map(function(){if(e.length==this.length){return undefined}do{var g=Math.floor(Math.random()*this.length)}while(g in e);e.push(g);return this[g]},this)};a.shuffle=function(){var g=-1,h=this.length;while(++g<h){var e=Math.floor(Math.random()*h);var f=this[g];this[g]=this[e];this[e]=f}return this};a.sum=function(){return this.reduce(add,0)};a.prod=function(){return this.reduce(mul,1)};c.timeit=function(e,f){var h=new Date();this.apply(e,f);var g=(new Date())-h;return(g<1000)?g+"ms":(g/1000).toFixed(3)+"s"};c.bind=c.detach=function(f){var e=this;return function(){return e.apply(f,arguments)}};c.fork=function(){var e=arguments,g=this;var f=function(){return g.apply(null,e)};window.setTimeout(f,10)};d.map=function(h,f){if(typeof h!="function"){throw new Error("Type error: map expecting first parameter to be a function not "+typeof h)}if(f===undefined){f=this}var e=[];for(var g=0;g<this;++g){e.push(h.call(f,g,g,undefined))}return e};d.abbr=function(){var f=this.toString();var e=Math.floor((f.length-1)/3);if(e>0){return f.substr(0,f.length-3*e)+[,"K","M","B"][Math.min(3,e)]}else{return f}};d.toPos=function(){var e=this%10,f="th",g;if(g=this%100-e==10){return this+"-th"}switch(e){case 1:f="st";break;case 2:f="nd";break;case 3:f="rd";break}return this+"-"+f};d.toRoman=(function(){var e=["IIII","V","XXXX","L","CCCC","D","MMMM"];return function(j){if(this<1||this>4000){return this}var m=this,h="";j=!!j;for(var g=0,k;k=e[g];++g){var f=k.length+1;var l=m%f;h=e[g].substr(0,l)+h;m=(m-l)/f}if(!j){h=h.replace(/DCCCC/g,"CM").replace(/CCCC/g,"CD").replace(/LXXXX/g,"XC").replace(/XXXX/g,"XL").replace(/VIIII/g,"IX").replace(/IIII/g,"IV")}return h}})();d.toAgoInterval=(function(){var e=["second","minute","hour","day","week","month","year","decade"];var f=[1,60,3600,86400,604800,2630880,31570560,315705600];return function(){var g=(Date.now()-this)/1000,h,j;for(h=f.length-1;h>=0&&(j=Math.floor(g/f[h]))<1;--h){}if(h==-1||h==0&&j<20){return"just now"}return(j>1?j:"a")+" "+e[h]+(j>1?"s":"")+" ago"}})();d.dev=d.deviate=function(){var f,e=arguments[0],g=false;switch(arguments.length){case 0:throw new Error("To few arguments for deviate");break;case 1:f=e;break;case 2:if(typeof arguments[1]=="boolean"){f=e;g=arguments[1]}else{f=arguments[1]}break;default:f=arguments[1];g=!!arguments[2];break}if(g){f=this*f;e=this*e}return this-e+Math.random()*(f+e)};deviate=function(deviation){return deviation && Math.floor(2*deviation * Math.random() - deviation) || 0;}})();
