
function debugMsg(msg){try{console.debug(msg);}
catch(e){}}
function printf(fstring)
{var pad=function(str,ch,len)
{var ps='';for(var i=0;i<Math.abs(len);i++)ps+=ch;return len>0?str+ps:ps+str;}
var processFlags=function(flags,width,rs,arg)
{var pn=function(flags,arg,rs)
{if(arg>=0)
{if(flags.indexOf(' ')>=0)rs=' '+rs;else if(flags.indexOf('+')>=0)rs='+'+rs;}
else
rs='-'+rs;return rs;}
var iWidth=parseInt(width,10);if(width.charAt(0)=='0')
{var ec=0;if(flags.indexOf(' ')>=0||flags.indexOf('+')>=0)ec++;if(rs.length<(iWidth-ec))rs=pad(rs,'0',rs.length-(iWidth-ec));return pn(flags,arg,rs);}
rs=pn(flags,arg,rs);if(rs.length<iWidth)
{if(flags.indexOf('-')<0)rs=pad(rs,' ',rs.length-iWidth);else rs=pad(rs,' ',iWidth-rs.length);}
return rs;}
var converters=new Array();converters['c']=function(flags,width,precision,arg)
{if(typeof(arg)=='number')return String.fromCharCode(arg);if(typeof(arg)=='string')return arg.charAt(0);return'';}
converters['d']=function(flags,width,precision,arg)
{return converters['i'](flags,width,precision,arg);}
converters['u']=function(flags,width,precision,arg)
{return converters['i'](flags,width,precision,Math.abs(arg));}
converters['i']=function(flags,width,precision,arg)
{var iPrecision=parseInt(precision);var rs=((Math.abs(arg)).toString().split('.'))[0];if(rs.length<iPrecision)rs=pad(rs,' ',iPrecision-rs.length);return processFlags(flags,width,rs,arg);}
converters['E']=function(flags,width,precision,arg)
{return(converters['e'](flags,width,precision,arg)).toUpperCase();}
converters['e']=function(flags,width,precision,arg)
{iPrecision=parseInt(precision);if(isNaN(iPrecision))iPrecision=6;rs=(Math.abs(arg)).toExponential(iPrecision);if(rs.indexOf('.')<0&&flags.indexOf('#')>=0)rs=rs.replace(/^(.*)(e.*)$/,'$1.$2');return processFlags(flags,width,rs,arg);}
converters['f']=function(flags,width,precision,arg)
{iPrecision=parseInt(precision);if(isNaN(iPrecision))iPrecision=6;rs=(Math.abs(arg)).toFixed(iPrecision);if(rs.indexOf('.')<0&&flags.indexOf('#')>=0)rs=rs+'.';return processFlags(flags,width,rs,arg);}
converters['G']=function(flags,width,precision,arg)
{return(converters['g'](flags,width,precision,arg)).toUpperCase();}
converters['g']=function(flags,width,precision,arg)
{iPrecision=parseInt(precision);absArg=Math.abs(arg);rse=absArg.toExponential();rsf=absArg.toFixed(6);if(!isNaN(iPrecision))
{rsep=absArg.toExponential(iPrecision);rse=rsep.length<rse.length?rsep:rse;rsfp=absArg.toFixed(iPrecision);rsf=rsfp.length<rsf.length?rsfp:rsf;}
if(rse.indexOf('.')<0&&flags.indexOf('#')>=0)rse=rse.replace(/^(.*)(e.*)$/,'$1.$2');if(rsf.indexOf('.')<0&&flags.indexOf('#')>=0)rsf=rsf+'.';rs=rse.length<rsf.length?rse:rsf;return processFlags(flags,width,rs,arg);}
converters['o']=function(flags,width,precision,arg)
{var iPrecision=parseInt(precision);var rs=Math.round(Math.abs(arg)).toString(8);if(rs.length<iPrecision)rs=pad(rs,' ',iPrecision-rs.length);if(flags.indexOf('#')>=0)rs='0'+rs;return processFlags(flags,width,rs,arg);}
converters['X']=function(flags,width,precision,arg)
{return(converters['x'](flags,width,precision,arg)).toUpperCase();}
converters['x']=function(flags,width,precision,arg)
{var iPrecision=parseInt(precision);arg=Math.abs(arg);var rs=Math.round(arg).toString(16);if(rs.length<iPrecision)rs=pad(rs,' ',iPrecision-rs.length);if(flags.indexOf('#')>=0)rs='0x'+rs;return processFlags(flags,width,rs,arg);}
converters['s']=function(flags,width,precision,arg)
{var iPrecision=parseInt(precision);var rs=arg;if(rs.length>iPrecision)rs=rs.substring(0,iPrecision);return processFlags(flags,width,rs,0);}
farr=fstring.split('%');retstr=farr[0];fpRE=/^([-+ #]*)(\d*)\.?(\d*)([cdieEfFgGosuxX])(.*)$/;for(var i=1;i<farr.length;i++)
{fps=fpRE.exec(farr[i]);if(!fps)continue;if(arguments[i]!=null)retstr+=converters[fps[4]](fps[1],fps[2],fps[3],arguments[i]);retstr+=fps[5];}
return retstr;}
function toggleDiv(divID,mode){var elt=document.getElementById(divID);if(elt){elt.style.display=(mode?'block':'none');elt.style.visibility=(mode?'visible':'hidden');}}
function Shuffle(o){for(var j,x,i=o.length;i;j=parseInt(Math.random()*i),x=o[--i],o[i]=o[j],o[j]=x);return o;};function getElementsByClassName(oElm,strTagName,oClassNames){var arrElements=(strTagName=="*"&&oElm.all)?oElm.all:oElm.getElementsByTagName(strTagName);var arrReturnElements=new Array();var arrRegExpClassNames=new Array();if(typeof oClassNames=="object"){for(var i=0;i<oClassNames.length;i++){arrRegExpClassNames.push(new RegExp("(^|\\s)"+oClassNames[i].replace(/\-/g,"\\-")+"(\\s|$)"));}}
else{arrRegExpClassNames.push(new RegExp("(^|\\s)"+oClassNames.replace(/\-/g,"\\-")+"(\\s|$)"));}
var oElement;var bMatchesAll;for(var j=0;j<arrElements.length;j++){oElement=arrElements[j];bMatchesAll=true;for(var k=0;k<arrRegExpClassNames.length;k++){if(!arrRegExpClassNames[k].test(oElement.className)){bMatchesAll=false;break;}}
if(bMatchesAll){arrReturnElements.push(oElement);}}
return(arrReturnElements)}
function addEvent(obj,type,fn){if(obj.addEventListener){obj.addEventListener(type,fn,false);EventCache.add(obj,type,fn);}
else if(obj.attachEvent){obj["e"+type+fn]=fn;obj[type+fn]=function(){obj["e"+type+fn](window.event);}
obj.attachEvent("on"+type,obj[type+fn]);EventCache.add(obj,type,fn);}
else{obj["on"+type]=obj["e"+type+fn];}}
var EventCache=function(){var listEvents=[];return{listEvents:listEvents,add:function(node,sEventName,fHandler){listEvents.push(arguments);},flush:function(){var i,item;for(i=listEvents.length-1;i>=0;i=i-1){item=listEvents[i];if(item[0].removeEventListener){item[0].removeEventListener(item[1],item[2],item[3]);};if(item[1].substring(0,2)!="on"){item[1]="on"+item[1];};if(item[0].detachEvent){item[0].detachEvent(item[1],item[2]);};item[0][item[1]]=null;};}};}();addEvent(window,'unload',EventCache.flush);function Get_Cookie(name){var start=document.cookie.indexOf(name+"=");var len=start+name.length+1;if((!start)&&(name!=document.cookie.substring(0,name.length)))return null;if(start==-1)return null;var end=document.cookie.indexOf(";",len);if(end==-1)end=document.cookie.length;return unescape(document.cookie.substring(len,end));}
function Set_Cookie(name,value,expires,path,domain,secure){expires=expires*60*60*24*1000;var today=new Date();var expires_date=new Date(today.getTime()+(expires));var cookieString=name+"="+escape(value)+
((expires)?";expires="+expires_date.toGMTString():"")+
((path)?";path="+path:"")+
((domain)?";domain="+domain:"")+
((secure)?";secure":"");document.cookie=cookieString;}
String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"");}
String.prototype.ltrim=function(){return this.replace(/^\s+/,"");}
String.prototype.rtrim=function(){return this.replace(/\s+$/,"");}