
String.prototype.entityify=function(){
 return this.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
}
String.prototype.quote=function(){
 return '"' + this.replace(/(["\\])/g, '\\$1') + '"';
}
String.prototype.supplant=function(oProps,bReplaceWithBlank,oCallBack){
 var i,j,vValue;
 var sString=this;
 var q=0;
 var sOpenTag=(isUndefined(oProps.__open_tag))?'{' : oProps.__open_tag;
 var sCloseTag=(isUndefined(oProps.__close_tag))?'}' : oProps.__close_tag;
for(;;){
 i=q+sString.substring(q,sString.length).indexOf(sOpenTag);
if(i < 0){
 break;
}
 if(i+1 <=q){
 break;
}
j=sString.indexOf(sCloseTag,i+1);
 if(j==-1){
 break;
}
if(isDefined(oCallBack)){
 vValue=oCallBack(sString.substring(i+1,j),oProps);
}else{
 vValue=oProps[sString.substring(i+1,j)];
}
if(isUndefined(vValue)){
 if(bReplaceWithBlank){
 vValue='';
}else{
 q=i+1;
 continue;
}
}
 sString=sString.substring(0,i)+vValue+sString.substring(j+1);
}
 return sString;
}
String.prototype.trim=function(){
 return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/,"$1");
}
if(!isFunction(Function.apply)){
 Function.prototype.apply=function(o,a){
 var r,x='____apply';
 if(!isObject(o)){
 o={};
}
 o[x]=this;
 switch((a&&a.length)||0){
 case 0:
 r=o[x]();
 break;
 case 1:
 r=o[x](a[0]);
 break;
 case 2:
 r=o[x](a[0],a[1]);
 break;
 case 3:
 r=o[x](a[0],a[1],a[2]);
 break;
 case 4:
 r=o[x](a[0],a[1],a[2],a[3]);
 break;
 case 5:
 r=o[x](a[0],a[1],a[2],a[3],a[4]);
 break;
 case 6:
 r=o[x](a[0],a[1],a[2],a[3],a[4],a[5]);
 break;
 default:
}
 delete o[x];
 return r;
}
}
Function.prototype.inherits=function(parent){
 var d=0,p=(this.prototype=new parent());
 this.prototype.uber=function uber(name){
 var f,r,t=d,v=parent.prototype;
 if(t){
 while(t){
 v=v.constructor.prototype;
 t-=1;
}
 f=v[name];
}else{
 f=p[name];
 if(f==this[name]){
 f=v[name];
}
}
 d+=1;
 r=f.apply(this,Array.prototype.slice.apply(arguments,[1]));
 d-=1;
 return r;
}
 return this;
}
Function.prototype.swiss=function(parent){
 for(var i=1;i < arguments.length;i+=1){
 var name=arguments[i];
 this.prototype[name]=parent.prototype[name];
}
 return this;
}
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';
}
function isDefined(a){
 return typeof a!='undefined';
}
function stringify(arg){
 var i,o,v;
switch(typeof arg){
 case 'object':
 if(arg){
 if(arg.constructor==Array){
o='[';
 for(i=0;i < arg.length;++i){
 v=stringify(arg[i]);
 if(v!='function'&&!isUndefined(v)){
 o+=(o!='['?',' : '')+v;
}else{
 o+=',';
}
}
 return o+']';
}else if(typeof arg.toString!='undefined'){
 o='{';
 for(i in arg){
 v=stringify(arg[i]);
 if(v!='function'&&!isUndefined(v)){
 o+=(o!='{'?',' : '')+
 i.quote()+':'+v;
}
}
 return o+'}';
}else{
 return;
}
}
 return 'null';
 case 'unknown':
 case 'undefined':
 return;
 case 'string':
 return arg.quote();
 case 'function':
 return 'function';
 default:
 return String(arg);
}
}