
function path4id(id)
{var path='';var strId=''+id
while(strId.length>3)
{path+=strId.substr(0,3)+'/';strId=strId.substr(3);}
return path+id;}
function shard4id(id)
{var path='';var strId=''+id
while(strId.length>3)
{path=strId.substr(0,3);strId=strId.substr(3);}
return path;}
function numf(n)
{var s='';while(n>=1000)
{var nMod=n%1000;s=','+((nMod>=100?'':nMod>=10?'0':'00')+nMod)+s;n=Math.floor(n/1000);}
return n+s;}
function formatMillis(millis)
{var hrs,mins,secs;var oneMin=60*1000;var oneHour=oneMin*60;hrs=Math.floor(millis/oneHour);millis-=oneHour*hrs;mins=Math.floor(millis/oneMin);millis-=oneMin*mins;secs=Math.floor(millis/1000);if(hrs<10)
hrs='0'+hrs;if(mins<10)
mins='0'+mins;if(secs<10)
secs='0'+secs;if(hrs>0)
return hrs+':'+mins+':'+secs;else if(mins>0)
return mins+':'+secs;else
return'0:'+secs;}
var ESCAPE_XML_PATTERN=/[<>'"&]/gm;function escapeXML(x)
{if(x==null||x=='')
return x;this.ESCAPE_XML_PATTERN.lastIndex=0;var lastIndex=0;var match=null;var content=[];while((match=ESCAPE_XML_PATTERN.exec(x))!=null)
{content.push(x.substring(lastIndex,match.index));switch(match[0])
{case'<':content.push('&lt;');break;case'>':content.push('&gt;');break;case"'":content.push('\'');break;case'"':content.push('&quot;');break;case'&':content.push('&amp;');break;}
lastIndex=ESCAPE_XML_PATTERN.lastIndex;}
content.push(x.substring(lastIndex));return content.join('');}
function trim(x)
{return x.replace(/^\s\s*/,'').replace(/\s\s*$/,'');}
function StringBuffer(){this.buffer=[];}
StringBuffer.prototype.append=function(string)
{this.buffer.push(string);return this;}
StringBuffer.prototype.toString=function()
{return this.buffer.join("");}
StringBuffer.prototype.isEmpty=function()
{if(this.buffer.length==0)
return true;else
return false;}
