
Function.prototype.method=function(name,func){this.prototype[name]=func;return this;}
if(typeof Object.create!=='function'){Object.create=function(o){function F(){}
F.prototype=o;return new F();};}
function isAlien(a){return isObject(a)&&typeof a.constructor!='function';}
function isArray(a){return isObject(a)&&a.constructor==Array;}
function isBoolean(a){return typeof a=='boolean';}
function isEmpty(o){var i,v;if(isObject(o)){for(i in o){v=o[i];if(isUndefined(v)&&isFunction(v)){return false;}}}
return true;}
function isFunction(a){return typeof a=='function';}
function isNull(a){return typeof a=='object'&&!a;}
function isNumber(a){return typeof a=='number'&&isFinite(a);}
function isObject(a){return(a&&typeof a=='object')||isFunction(a);}
function isString(a){return typeof a=='string';}
function isUndefined(a){return typeof a=='undefined';}
Array.method('append',function(){for(var i=0;i<arguments.length;++i){var value=arguments[i];if(value)
this.push(value);}
return this;});String.method('entityify',function(){return this.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");}).method('quote',function(){var c,i,l=this.length,o='"';for(i=0;i<l;i+=1){c=this.charAt(i);if(c>=' '){if(c=='\\'||c=='"'){o+='\\';}
o+=c;}else{switch(c){case'\b':o+='\\b';break;case'\f':o+='\\f';break;case'\n':o+='\\n';break;case'\r':o+='\\r';break;case'\t':o+='\\t';break;default:c=c.charCodeAt();o+='\\u00'+Math.floor(c/16).toString(16)+
(c%16).toString(16);}}}
return o+'"';}).method('supplant',function(o){var i,j,s=this,v;for(;;){i=s.lastIndexOf('{');if(i<0){break;}
j=s.indexOf('}',i);if(i+1>=j){break;}
v=o[s.substring(i+1,j)];if(!isString(v)&&!isNumber(v)){break;}
s=s.substring(0,i)+v+s.substring(j+1);}
return s;}).method('trim',function(){return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/,"$1");});function getArgs(){var args={};var query=window.location.search.substring(1);if(!query)return args;var pairs=query.split('&');for(var i=0;i<pairs.length;++i){var pos=pairs[i].indexOf('=');if(pos>0)
args[pairs[i].substring(0,pos)]=decodeURIComponent(pairs[i].substring(pos+1));}
return args;}
function StringBuilder(value){this.strings=[''];this.append(value);}
StringBuilder.method('append',function(){for(var i=0;i<arguments.length;++i){var value=arguments[i];if(value)
this.strings.push(value);}
return this;}).method('clear',function(){this.strings.length=1;return this;}).method('toString',function(){return this.strings.join('');});
