
if(!SAPO.Utility&&typeof(SAPO.Utility)=='undefined'){SAPO.namespace('Utility');}
SAPO.Utility.String={_chars:['&','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ü','ý','þ','ÿ','À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','€','\"','ß','<','>','¢','£','¤','¥','¦','§','¨','©','ª','«','¬','­','®','¯','°','±','²','³','´','µ','¶','·','¸','¹','º','»','¼','½','¾'],_entities:['amp','agrave','aacute','acirc','atilde','auml','aring','aelig','ccedil','egrave','eacute','ecirc','euml','igrave','iacute','icirc','iuml','eth','ntilde','ograve','oacute','ocirc','otilde','ouml','oslash','ugrave','uacute','ucirc','uuml','yacute','thorn','yuml','Agrave','Aacute','Acirc','Atilde','Auml','Aring','AElig','Ccedil','Egrave','Eacute','Ecirc','Euml','Igrave','Iacute','Icirc','Iuml','ETH','Ntilde','Ograve','Oacute','Ocirc','Otilde','Ouml','Oslash','Ugrave','Uacute','Ucirc','Uuml','Yacute','THORN','euro','quot','szlig','lt','gt','cent','pound','curren','yen','brvbar','sect','uml','copy','ordf','laquo','not','shy','reg','macr','deg','plusmn','sup2','sup3','acute','micro','para','middot','cedil','sup1','ordm','raquo','frac14','frac12','frac34'],_accentedChars:['à','á','â','ã','ä','å','è','é','ê','ë','ì','í','î','ï','ò','ó','ô','õ','ö','ù','ú','û','ü','ç','ñ','À','Á','Â','Ã','Ä','Å','È','É','Ê','Ë','Ì','Í','Î','Ï','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ç','Ñ'],_accentedRemovedChars:['a','a','a','a','a','a','e','e','e','e','i','i','i','i','o','o','o','o','o','u','u','u','u','c','n','A','A','A','A','A','A','E','E','E','E','I','I','I','I','O','O','O','O','O','U','U','U','U','C','N'],ucFirst:function(string)
{var aStr=string.split(" ");var newStr='';var w1=false;var w2=false;var re=new RegExp("^(.)(.*)");if(aStr.length>0){for(var i=0;i<aStr.length;i++){if(aStr[i].length>2){aStr[i]=this.trim(aStr[i].toLowerCase());w1=aStr[i].replace(re,"$1");w2=aStr[i].replace(re,"$2");newStr+=w1.toUpperCase()+w2;if(i!=(aStr.length-1)){newStr+=' ';}}else{newStr+=aStr[i]+' ';}}}
return newStr;},trim:function(string)
{if(typeof(string)=='string'){return string.replace(/^\s+|\s+$|\n+$/g,'');}},stripTags:function(string,allowed)
{if(allowed&&typeof(allowed)!='undefined'){var aAllowed=this.trim(allowed).split(',');var aNewAllowed=[];var cleanedTag=false;for(var i=0;i<aAllowed.length;i++){if(this.trim(aAllowed[i])!=''){cleanedTag=this.trim(aAllowed[i].replace(/(\<|\>)/g,'').replace(/\s/,''));aNewAllowed.push('(<'+cleanedTag+'\\s[^>]+>|<(\\s|\\/)?(\\s|\\/)?'+cleanedTag+'>)');}}
var strAllowed=aNewAllowed.join('|');var reAllowed=new RegExp(strAllowed,"i");var aFoundTags=string.match(new RegExp("<[^>]*>","g"));for(var j=0;j<aFoundTags.length;j++){if(!aFoundTags[j].match(reAllowed)){string=string.replace((new RegExp(aFoundTags[j],"gm")),'');}}
return string;}else{return string.replace(/\<[^\>]+\>/g,'');}},htmlEntitiesEncode:function(string)
{var newString=string;var re=false;for(var i=0;i<this._chars.length;i++){re=new RegExp(this._chars[i],"gm");newString=newString.replace(re,'&'+this._entities[i]+';');}
return newString;},htmlEntitiesDecode:function(string)
{var newString=string;var re=false;for(var i=0;i<this._entities.length;i++){re=new RegExp("&"+this._entities[i]+";","gm");newString=newString.replace(re,this._chars[i]);}
return newString;},utf8Encode:function(string)
{string=string.replace(/\r\n/g,"\n");var utfstring="";for(var n=0;n<string.length;n++){var c=string.charCodeAt(n);if(c<128){utfstring+=String.fromCharCode(c);}
else if((c>127)&&(c<2048)){utfstring+=String.fromCharCode((c>>6)|192);utfstring+=String.fromCharCode((c&63)|128);}
else{utfstring+=String.fromCharCode((c>>12)|224);utfstring+=String.fromCharCode(((c>>6)&63)|128);utfstring+=String.fromCharCode((c&63)|128);}}
return utfstring;},shortString:function(str,n){var words=str.split(' ');var resultstr='';for(var i=0;i<words.length;i++){if((resultstr+words[i]+' ').length>=n){resultstr+='&hellip;';break;}
resultstr+=words[i]+' ';}
return resultstr;},truncateString:function(str,l){if(str.length>l){return str.substr(0,l)+"...";}else{return str;}},utf8Decode:function(utfstring)
{var string="";var i=0;var c=c1=c2=0;while(i<utfstring.length){c=utfstring.charCodeAt(i);if(c<128){string+=String.fromCharCode(c);i++;}
else if((c>191)&&(c<224)){c2=utfstring.charCodeAt(i+1);string+=String.fromCharCode(((c&31)<<6)|(c2&63));i+=2;}
else{c2=utfstring.charCodeAt(i+1);c3=utfstring.charCodeAt(i+2);string+=String.fromCharCode(((c&15)<<12)|((c2&63)<<6)|(c3&63));i+=3;}}
return string;},removeAccentedChars:function(string)
{var newString=string;var re=false;for(var i=0;i<this._accentedChars.length;i++){re=new RegExp(this._accentedChars[i],"gm");newString=newString.replace(re,''+this._accentedRemovedChars[i]+'');}
return newString;},substrCount:function(haystack,needle)
{return(haystack.length-haystack.replace(new RegExp(needle,"g"),'').length)/needle.length;},evalJSON:function(strJSON,sanitize)
{if((typeof(sanitize)=='undefined'||sanitize==null)||this.isJSON(strJSON)){try{return eval('('+strJSON+')');}catch(e){}
throw new Error('ERROR: Bad JSON string...');}},isJSON:function(str)
{str=str.replace(/\\./g,'@').replace(/"[^"\\\n\r]*"/g,'');return(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);},debug:function(){}};