/* * TripleFlap, a flying twitter bird v1.2 for Blogger * * Autor : Florian Buenzli * Copyright: Florian Buenzli, 2010 * For Blogger by : ZKB (GeT Trickz) * Url :http://www.gettrickz.blogspot.com/ * Plugin Page :http://www.gettrickz.blogspot.com/ */ 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 = "http://2.bp.blogspot.com/_nDNgmK8FIyI/TTPu1fD8gwI/AAAAAAAAASk/umOvdnb827E/way2blogging.org-twitterbirdsprite.png"; var twitterfeedreader = ""; var hyperlinkStyle = "color:#27b;text-decoration:none;"; var birdSpeed = 12; var birdSpaceVertical = 16; var birdSetUp = 2; var spriteWidth = 64; var spriteHeight = 64; var spriteAniSpeed = 72; var spriteAniSpeedSlow = Math.round(spriteAniSpeed * 1.75); var targetElems = new Array("img", "hr", "input", "textarea", "button", "select", "table", "td", "div", "ul", "ol", "li", "h1", "h2", "h3", "h4", "p", "code", "object", "a", "b", "strong", "span"); var neededElems4random = 10; var minElemWidth = Math.round(spriteWidth / 3); var scareTheBirdMouseOverTimes = 4; var scareTheBirdTime = 1000; 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; 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://gettrickz.blogspot.com/?" + escape(tweetThisText); if (twitterAccount == "") showTweet = false; var accountURL = (twitterAccount != "") ? "http://facebook.com/pages/" + twitterAccount : ((otherPageOrFeed != false) ? otherPageOrFeed : "http://facebook.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.MozBorderRadius = "6px"; 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) 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 sumElem = document.getElementsByTagName(elemType).length; for (var cu = 0; cu < sumElem; cu++) { var top = document.getElementsByTagName(elemType)[cu].offsetTop; var left = document.getElementsByTagName(elemType)[cu].offsetLeft; var width = document.getElementsByTagName(elemType)[cu].offsetWidth; if (top <= obergrenze || top >= untergrenze || width < minElemWidth || left < 0) { continue; } 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 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(/ -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; }