// TripleFlap, <http://floern.com/software/tripleflap>, a flying twitter bird. Copyright (c)2010 Florian Buenzli, <http://floern.com/>, GNU/GPL.
if(typeof(twitterAccount)!="string")var twitterAccount="";
if(typeof(tweetThisText)!="string"||tweetThisText=="")var tweetThisText=document.title+": "+document.URL;
if(typeof(showTweet)!="boolean")var showTweet=false;
var tweetthislink=null;
if(typeof(otherPageOrFeed)!="string"||otherPageOrFeed=="")var otherPageOrFeed=false;
var birdSprite="img/birdsprite.png";
var twitterfeedreader="./twitterfeedreader.php";
var birdSpeed=12;
var birdSpaceVertical=20;
var birdSetUp=2;
var spriteWidth=64;
var spriteHeight=64;
var spriteAniSpeed=72;
var spriteAniSpeedSlow=Math.round(spriteAniSpeed*1.75);
var targetElems=new Array("hr","input","textarea","button","select","table","ul","h2","td","img","p","code","object","h3","h4","ol","span","a","li","h1","b","div");
var neededElems4random=15;
var minElemWidth=Math.round(spriteWidth/2);
var scareTheBirdMouseOverTimes=3;
var scareTheBirdTime=1500;
var showOnMobile=false;
var birdIsFlying=false;
var scrollPos=0;
var windowHeight=getWindowHeight();
var windowWidth=getWindowWidth();
if(windowHeight<=spriteHeight+2*birdSpaceVertical)windowHeight=spriteHeight+2*birdSpaceVertical+1;
if(windowWidth<=spriteWidth)windowWidth=spriteWidth+1;
var birdPosX=Math.round(Math.random()*(windowWidth-spriteWidth+200)-200);
var birdPosY=-2*spriteHeight;
var timeoutAnimation=false;
var timeoutFlight=false;
var showButtonsTimeout=null;
var hideButtonsTimeout=null;
var scareTheBirdLastTime=0;
var scareTheBirdCount=0;
var birdIsHidden=false;
function tripleflapInit(reallystart){
if(typeof(reallystart)=="undefined"){window.setTimeout("tripleflapInit(1)",250);return;}
if(!showOnMobile&&typeof(navigator.userAgent)=="string"&&is_mobile(navigator.userAgent))return;
if(!is_utf8(tweetThisText))tweetThisText=utf8_encode(tweetThisText);
var tweetthislink="http://twitter.com/home?status="+escape(tweetThisText);
if(twitterAccount=="")showTweet=false;
var accountURL=(twitterAccount!="")?"http://twitter.com/"+twitterAccount:((otherPageOrFeed!=false)?otherPageOrFeed:"http://twitter.com/");
var tBird=document.createElement("a");
tBird.setAttribute("id","tBird");
tBird.setAttribute("href",accountURL);
tBird.setAttribute("target","_blank");
tBird.style.display="block";
tBird.style.position="absolute";
tBird.style.left=birdPosX+"px";
tBird.style.top=birdPosY+"px";
tBird.style.width=spriteWidth+"px";
tBird.style.height=spriteHeight+"px";
tBird.style.background="url('"+birdSprite+"') no-repeat transparent";
tBird.style.backgroundPosition="-0px -0px";
tBird.style.zIndex="947";
tBird.onmouseover=function(){
scareTheBird();
showButtonsTimeout=window.setTimeout("showButtons(0,"+windowWidth+","+windowHeight+")",400);
window.clearTimeout(hideButtonsTimeout);};
tBird.onmouseout=function(){hideButtonsTimeout=window.setTimeout("hideButtons()",50);};
document.body.appendChild(tBird);
var tBirdLtweet=document.createElement("a");
tBirdLtweet.setAttribute("id","tBirdLtweet");
tBirdLtweet.setAttribute("href",tweetthislink);
tBirdLtweet.setAttribute("target","_blank");
tBirdLtweet.setAttribute("title","tweet this");
tBirdLtweet.style.display="none";
tBirdLtweet.style.position="absolute";
tBirdLtweet.style.left="0px";
tBirdLtweet.style.top="-100px";
tBirdLtweet.style.background="url('"+birdSprite+"') no-repeat transparent";
tBirdLtweet.style.opacity="0";
tBirdLtweet.style.filter="alpha(opacity=0)";
tBirdLtweet.style.backgroundPosition="-64px -0px";
tBirdLtweet.style.width="58px";
tBirdLtweet.style.height="30px";
tBirdLtweet.style.zIndex="951";
tBirdLtweet.onmouseover=function(){window.clearTimeout(hideButtonsTimeout);};
tBirdLtweet.onmouseout=function(){hideButtonsTimeout=window.setTimeout("hideButtons()",50);};
document.body.appendChild(tBirdLtweet);
var tBirdLfollow=tBirdLtweet.cloneNode(false);
tBirdLfollow.setAttribute("id","tBirdLfollow");
tBirdLfollow.setAttribute("href",accountURL);
tBirdLfollow.setAttribute("title","follow "+(twitterAccount?"@"+twitterAccount:"me"));
tBirdLfollow.style.backgroundPosition="-64px -30px";
tBirdLfollow.style.width="58px";
tBirdLfollow.style.height="20px";
tBirdLfollow.style.zIndex="952";
tBirdLfollow.onmouseover=function(){window.clearTimeout(hideButtonsTimeout);};
tBirdLfollow.onmouseout=function(){hideButtonsTimeout=window.setTimeout("hideButtons()",50);};
document.body.appendChild(tBirdLfollow);
if(showTweet==true){
var tBirdStatxLow=document.createElement("div");
tBirdStatxLow.setAttribute("id","tBirdStatxLow");
tBirdStatxLow.style.display="none";
tBirdStatxLow.style.position="absolute";
tBirdStatxLow.style.left="0px";
tBirdStatxLow.style.top="-100px";
tBirdStatxLow.style.background="transparent";
tBirdStatxLow.style.opacity="0";
tBirdStatxLow.style.filter="alpha(opacity=0)";
tBirdStatxLow.style.width="192px";
tBirdStatxLow.style.zIndex="955";
tBirdStatxLow.onmouseover=function(){window.clearTimeout(hideButtonsTimeout);};
tBirdStatxLow.onmouseout=function(){hideButtonsTimeout=window.setTimeout("hideButtons()",50);};
var tBirdStatxUpr=tBirdStatxLow.cloneNode(false);
tBirdStatxUpr.setAttribute("id","tBirdStatxUpr");
tBirdStatxUpr.onmouseover=function(){window.clearTimeout(hideButtonsTimeout);};
tBirdStatxUpr.onmouseout=function(){hideButtonsTimeout=window.setTimeout("hideButtons()",50);};
var tBirdStatxArrLow=document.createElement("div");
tBirdStatxArrLow.setAttribute("id","tBirdStatxArrLow");
tBirdStatxArrLow.style.background="url('"+birdSprite+"') no-repeat transparent";
tBirdStatxArrLow.style.backgroundPosition="-64px -50px";
tBirdStatxArrLow.style.width="32px";
tBirdStatxArrLow.style.height="9px";
tBirdStatxArrLow.style.margin="0 0 -1px 56px";
tBirdStatxArrLow.style.position="relative";
tBirdStatxArrLow.style.zIndex="957";
var tBirdStatxArrUpr=tBirdStatxArrLow.cloneNode(false);
tBirdStatxArrUpr.setAttribute("id","tBirdStatxArrUpr");
tBirdStatxArrUpr.style.backgroundPosition="-96px -50px";
tBirdStatxArrUpr.style.margin="-1px 0 0 60px";
var tBirdStatxInLow=document.createElement("div");
tBirdStatxInLow.setAttribute("id","tBirdStatxInLow");
tBirdStatxInLow.style.background="#fbfcfc";
tBirdStatxInLow.style.border="1px solid #555";
tBirdStatxInLow.style.borderRadius="6px";
tBirdStatxInLow.style.padding="3px 5px";
tBirdStatxInLow.style.fontSize="11px";
tBirdStatxInLow.style.fontFamily="Arial";
tBirdStatxInLow.style.textAlign="left";
tBirdStatxInLow.style.position="relative";
tBirdStatxInLow.style.zIndex="956";
tBirdStatxInLow.innerHTML="loading...";
var tBirdStatxInUpr=tBirdStatxInLow.cloneNode(false);
tBirdStatxInUpr.setAttribute("id","tBirdStatxInUpr");
tBirdStatxInUpr.innerHTML="loading...";
tBirdStatxLow.appendChild(tBirdStatxArrLow);
tBirdStatxLow.appendChild(tBirdStatxInLow);
tBirdStatxUpr.appendChild(tBirdStatxInUpr);
tBirdStatxUpr.appendChild(tBirdStatxArrUpr);
document.body.appendChild(tBirdStatxLow);
document.body.appendChild(tBirdStatxUpr);}
var timeoutAnimation=window.setTimeout("animateSprite(0,0,0,0,null,true)",spriteAniSpeed);
window.onscroll=recheckposition;
if(showTweet==true)loadStatusText();
recheckposition();}
function animateSprite(row,posStart,posEnd,count,speed,onlySet){
if(typeof(count)!="number"||count>posEnd-posStart)count=0;
document.getElementById("tBird").style.backgroundPosition="-"+Math.round((posStart+count)*spriteWidth)+"px -"+(spriteHeight*row)+"px";
if(onlySet==true)return;
if(typeof(speed)!="number")speed=spriteAniSpeed;
timeoutAnimation=window.setTimeout("animateSprite("+row+","+posStart+","+posEnd+","+(count+1)+","+speed+")",speed);}
function animateSpriteAbort(){
window.clearTimeout(timeoutAnimation);}
function recheckposition(force){
if(force!=true)force=false;
if(birdIsFlying||birdIsHidden)return false;
windowHeight=getWindowHeight();
windowWidth=getWindowWidth();
if(windowHeight<=spriteHeight+2*birdSpaceVertical)
windowHeight=spriteHeight+2*birdSpaceVertical+1;
if(windowWidth<=spriteWidth)
windowWidth=spriteWidth+1;
if(typeof(window.pageYOffset)=="number")scrollPos=window.pageYOffset;
else if(document.body&&document.body.scrollTop)scrollPos=document.body.scrollTop;
else if(document.documentElement&&document.documentElement.scrollTop)scrollPos=document.documentElement.scrollTop;
birdPosY=parseInt(document.getElementById("tBird").style.top);
birdPosX=parseInt(document.getElementById("tBird").style.left);
if(scrollPos+birdSpaceVertical>=birdPosY||scrollPos+windowHeight-spriteHeight<birdPosY||force){
hideButtons();
elemPosis=chooseNewTarget();
if(elemPosis.length<1){
elemType=null;
elemNr=null;
elemTop=scrollPos+Math.round(Math.random()*(windowHeight-spriteHeight));
elemLeft=Math.round(Math.random()*(windowWidth-spriteWidth));
elemWidth=0;}
else{
newTarget=elemPosis[Math.round(Math.random()*(elemPosis.length-1))];
elemType=newTarget[0];
elemNr=newTarget[1];
elemTop=newTarget[2];
elemLeft=newTarget[3];
elemWidth=newTarget[4];}
targetTop=elemTop-spriteHeight;
targetLeft=Math.round(elemLeft-spriteWidth/2+Math.random()*elemWidth);
if(targetLeft>windowWidth-spriteWidth-24)targetLeft=windowWidth-spriteWidth-24;
else if(targetLeft<0)targetLeft=0;
birdIsFlying=true;
flyFromTo(birdPosX,birdPosY,targetLeft,targetTop,0);}}
function chooseNewTarget(){
var elemPosis=new Array();
var obergrenze=scrollPos+spriteHeight+birdSpaceVertical;
var untergrenze=scrollPos+windowHeight-birdSpaceVertical;
for(var ce=0;ce<targetElems.length;ce++){
var elemType=targetElems[ce];
var allElem=document.getElementsByTagName(elemType);
var sumElem=allElem.length;
var oldElem=new Array();
var okElem=0;
var loopCount=0;
if(sumElem>10)sumElem=10;
while(okElem<sumElem){
loopCount+=1;
if(oldElem.length>25||oldElem.length==allElem.length||loopCount>allElem.length*3)break;
var cu=Math.ceil(Math.random()*1000)%allElem.length;
if(oldElem.join(',').match(cu))continue;
oldElem[oldElem.length]=cu;
if(allElem[cu].className.match('smallnav'))continue;
var top=allElem[cu].offsetTop;
var left=allElem[cu].offsetLeft;
var width=allElem[cu].offsetWidth;
var offParent=allElem[cu].offsetParent;
while(offParent!=document.body&&offParent!=null){
left+=offParent.offsetLeft;
top+=offParent.offsetTop;
offParent=offParent.offsetParent;}
if(top<=obergrenze||top>=untergrenze||width<minElemWidth||left<0)continue;
okElem+=1;
elemPosis[elemPosis.length]=new Array(elemType,cu,top,left,width);
if(elemPosis.length>=neededElems4random)return elemPosis;}}
return elemPosis;}
function flyFromTo(startX,startY,targetX,targetY,solved,direction){
justStarted=(solved==0);
solved+=(solved>birdSpeed/2)?birdSpeed:Math.round( (solved==0)?birdSpeed/4:birdSpeed/2 );
solvedFuture=solved+( (solved>birdSpeed/2)?birdSpeed:Math.round(birdSpeed/2));
distanceX=targetX-startX;
distanceY=targetY-startY;
distance=Math.sqrt(distanceX*distanceX+distanceY*distanceY);
solvPerc=Math.abs(1/distance*solved);
solvDistX=Math.round(distanceX*solvPerc);
solvDistY=Math.round(distanceY*solvPerc);
solvPercFuture=Math.abs(1/distance*solvedFuture);
solvDistXFuture=Math.round(distanceX*solvPercFuture);
solvDistYFuture=Math.round(distanceY*solvPercFuture);
if(typeof(direction)!="string"){
direction=null;
angle=( (distanceX!=0)?Math.atan((-distanceY)/distanceX)/Math.PI*180:90 )+((distanceX<0)?180:0);
if(angle<0)angle+=360;
if(angle<45)direction='o';
else if(angle<135)direction='n';
else if(angle<202.5)direction='w';
else if(angle<247.5)direction='sw';
else if(angle<292.5)direction='s';
else if(angle<337.5)direction='so';
else direction='o';}
if(Math.abs(solvDistXFuture)>=Math.abs(distanceX)&&Math.abs(solvDistYFuture)>=Math.abs(distanceY)){
animateSpriteAbort();
switch(direction){
case 'so':animateSprite(1,0,0,0,null,true);break;
case 'sw':animateSprite(1,2,2,0,null,true);break;
case 's':animateSprite(0,2,2,0,null,true);break;
case 'n':animateSprite(4,0,0,0,null,true);break;
case 'o':animateSprite(1,0,0,0,null,true);break;
case 'w':animateSprite(1,2,2,0,null,true);break;
default:animateSprite(0,0,0,0,null,true);}
timeoutAnimation=window.setTimeout("animateSprite(0,0,0,0,null,true)",spriteAniSpeed);}
if(Math.abs(solvDistX)>=Math.abs(distanceX)&&Math.abs(solvDistY)>=Math.abs(distanceY)){
solvDistX=distanceX;
solvDistY=distanceY;
birdIsFlying=false;
window.setTimeout("recheckposition()",500);}
else{
if(justStarted){
animateSpriteAbort();
switch(direction){
case 'so':animateSprite(1,0,0,0,null,true);timeoutAnimation=window.setTimeout("animateSprite(1,1,1,0,null,true)",spriteAniSpeed);break;
case 'sw':animateSprite(1,2,2,0,null,true);timeoutAnimation=window.setTimeout("animateSprite(1,3,3,0,null,true)",spriteAniSpeed);break;
case 's':animateSprite(0,2,2,0,null,true);timeoutAnimation=window.setTimeout("animateSprite(0,3,3,0,null,true)",spriteAniSpeed);break;
case 'n':timeoutAnimation=window.setTimeout("animateSprite(4,0,3,0,"+spriteAniSpeedSlow+")",1);break;
case 'o':animateSprite(1,0,0,0,null,true);timeoutAnimation=window.setTimeout("animateSprite(2,0,3,0,"+spriteAniSpeedSlow+")",spriteAniSpeed);break;
case 'w':animateSprite(1,2,2,0,null,true);timeoutAnimation=window.setTimeout("animateSprite(3,0,3,0,"+spriteAniSpeedSlow+")",spriteAniSpeed);break;
default:animateSprite(0,0,0,0,null,true);}}
timeoutFlight=window.setTimeout("flyFromTo("+startX+","+startY+","+targetX+","+targetY+","+solved+",'"+direction+"')",50);}
hideButtons();
document.getElementById("tBird").style.left=(startX+solvDistX)+"px";
document.getElementById("tBird").style.top=(startY+solvDistY+birdSetUp)+"px";}
function scareTheBird(nul){
newTS=new Date().getTime();
if(scareTheBirdLastTime<newTS-scareTheBirdTime){
scareTheBirdCount=1;
scareTheBirdLastTime=newTS;}
else{
scareTheBirdCount++;
if(scareTheBirdCount>=scareTheBirdMouseOverTimes){
scareTheBirdCount=0;
scareTheBirdLastTime=0;
recheckposition(true);}}}
function hideTheBird(){
birdPosY=parseInt(document.getElementById("tBird").style.top);
birdPosX=parseInt(document.getElementById("tBird").style.left);
flyFromTo(birdPosX,birdPosY,-spriteWidth-1,-spriteHeight-1,0);
birdIsHidden=true;}
function reshowTheBird(){
birdIsHidden=false;
recheckposition(true);}
function showButtons(step,winWidth,winHeight){
birdPosY=parseInt(document.getElementById("tBird").style.top);
birdPosX=parseInt(document.getElementById("tBird").style.left);
if(step==0&&document.getElementById("tBirdLtweet").style.display=="block")step=100;
if(birdIsFlying)step=0;
opacity=Math.round(step*15);
if(opacity<0)opacity=0;
if(opacity>100)opacity=100;
if(birdPosX<winWidth-300||birdPosX<winWidth/2){
buttonPosX1=birdPosX+spriteWidth-15;
buttonPosX2=birdPosX+spriteWidth-10;}
else{
buttonPosX1=birdPosX+16-parseInt(document.getElementById("tBirdLtweet").style.width);
buttonPosX2=birdPosX+11-parseInt(document.getElementById("tBirdLfollow").style.width);}
buttonPosY1=birdPosY-0;
buttonPosY2=birdPosY-0+parseInt(document.getElementById("tBirdLtweet").style.height);
document.getElementById("tBirdLtweet").style.left=buttonPosX1+"px";
document.getElementById("tBirdLtweet").style.top=buttonPosY1+"px";
document.getElementById("tBirdLtweet").style.display="block";
document.getElementById("tBirdLtweet").style.opacity=opacity/100;
document.getElementById("tBirdLtweet").style.filter="alpha(opacity="+opacity+")";
document.getElementById("tBirdLfollow").style.left=buttonPosX2+"px";
document.getElementById("tBirdLfollow").style.top=buttonPosY2+"px";
document.getElementById("tBirdLfollow").style.display="block";
document.getElementById("tBirdLfollow").style.opacity=opacity/100;
document.getElementById("tBirdLfollow").style.filter="alpha(opacity="+opacity+")";
if(showTweet==true){
if(typeof(window.pageYOffset)=="number")scrollPos=window.pageYOffset;
else if(document.body&&document.body.scrollTop)scrollPos=document.body.scrollTop;
else if(document.documentElement&&document.documentElement.scrollTop)scrollPos=document.documentElement.scrollTop;
if(birdPosX<64)boxMoveX=64-birdPosX;
else if(birdPosX>winWidth-64)boxMoveX=winWidth-birdPosX-64;
else boxMoveX=0;
txtBoxPosX=Math.round(birdPosX+spriteWidth/2 - parseInt(document.getElementById("tBirdStatxLow").style.width)/2+boxMoveX);
if(birdPosY<winHeight/2+scrollPos){
txtBoxPosY=birdPosY+spriteHeight;
document.getElementById("tBirdStatxLow").style.left=txtBoxPosX+"px";
document.getElementById("tBirdStatxLow").style.top=txtBoxPosY+"px";
document.getElementById("tBirdStatxLow").style.display="block";
document.getElementById("tBirdStatxLow").style.opacity=opacity/100;
document.getElementById("tBirdStatxLow").style.filter="alpha(opacity="+opacity+")";}
else{
txtBoxPosY=birdPosY-document.getElementById("tBirdStatxUpr").offsetHeight;
document.getElementById("tBirdStatxUpr").style.left=txtBoxPosX+"px";
document.getElementById("tBirdStatxUpr").style.top=txtBoxPosY+"px";
document.getElementById("tBirdStatxUpr").style.display="block";
document.getElementById("tBirdStatxUpr").style.opacity=opacity/100;
document.getElementById("tBirdStatxUpr").style.filter="alpha(opacity="+opacity+")";}}
if(opacity>=100)return;
step++;
showButtonsTimeout=window.setTimeout("showButtons("+step+","+winWidth+","+winHeight+")",60);}
function hideButtons(){
window.clearTimeout(showButtonsTimeout);
document.getElementById("tBirdLtweet").style.display="none";
document.getElementById("tBirdLtweet").style.opacity="0";
document.getElementById("tBirdLtweet").style.filter="alpha(opacity=0)";
document.getElementById("tBirdLfollow").style.display="none";
document.getElementById("tBirdLfollow").style.opacity="0";
document.getElementById("tBirdLfollow").style.filter="alpha(opacity=0)";
if(showTweet==true){
document.getElementById("tBirdStatxLow").style.display="none";
document.getElementById("tBirdStatxLow").style.opacity="0";
document.getElementById("tBirdStatxLow").style.filter="alpha(opacity=0)";
document.getElementById("tBirdStatxUpr").style.display="none";
document.getElementById("tBirdStatxUpr").style.opacity="0";
document.getElementById("tBirdStatxUpr").style.filter="alpha(opacity=0)";}}
function loadStatusText(){
param="tuac="+twitterAccount;
var req=(window.XMLHttpRequest)?new XMLHttpRequest():((window.ActiveXObject)?new ActiveXObject("Microsoft.XMLHTTP"):false);
if(!req)document.getElementById("tBirdStatxInLow").innerHTML="Error: could not create Ajax-request";
req.open("POST",twitterfeedreader,true);
req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
req.setRequestHeader("Content-Length",param.length);
req.setRequestHeader("Connection","close");
req.onreadystatechange=function(){
if(req.readyState==4){
resp=(req.status==200)?req.responseText:"Error: Ajax-request failed,HTTP-Code "+req.status;
resp=resp.replace(/<a /g,'<a ');
document.getElementById("tBirdStatxInLow").innerHTML=resp;
document.getElementById("tBirdStatxInUpr").innerHTML=resp;}}
req.send(param);}
function getWindowWidth(){
if(typeof(window.innerWidth)=="number")ww=window.innerWidth;
else if(document.documentElement&&document.documentElement.clientWidth)ww=document.documentElement.clientWidth;
else if(document.body&&document.body.clientWidth)ww=document.body.clientWidth;
else ww=1000;
return ww;}
function getWindowHeight(){
if(typeof(window.innerHeight)=="number")wh=window.innerHeight;
else if(document.documentElement&&document.documentElement.clientHeight)wh=document.documentElement.clientHeight;
else if(document.body&&document.body.clientHeight)wh=document.body.clientHeight;
else wh=500;
return wh;}
function is_mobile(is_mobile_ua){
return (is_mobile_ua.toLowerCase().search(/(iphone|ipod|opera mini|windows ce|windows phone|palm|blackberry|android|symbian|series60|samsung|nokia|playstation portable|htc[\-_]|up\.browser|profile\/midp|[1-4][0-9]{2}x[1-4][0-9]{2})/)>-1)}
function utf8_encode(str){
str=str.replace(/\r\n/g,"\n");
utf8str="";
for(n=0;n<str.length;n++){
c=str.charCodeAt(n);
if(c<128){
utf8str+=String.fromCharCode(c);}
else if(c>127&&c<2048){
utf8str+=String.fromCharCode((c>>6)|192);
utf8str+=String.fromCharCode((c&63)|128);}
else{
utf8str+=String.fromCharCode((c>>12)|224);
utf8str+=String.fromCharCode(((c>>6)&63)|128);
utf8str+=String.fromCharCode((c&63)|128);}}
return utf8str;}
function is_utf8(str){
strlen=str.length;
for(i=0;i<strlen;i++){
ord=str.charCodeAt(i);
if(ord<0x80)continue;
else if((ord&0xE0)===0xC0&&ord>0xC1)n=1;
else if((ord&0xF0)===0xE0)n=2;
else if((ord&0xF8)===0xF0&&ord<0xF5)n=3;
else return false;
for(c=0;c<n;c++)
if(++i===strlen||(str.charCodeAt(i)&0xC0)!==0x80)return false;}
return true;}
