var Thumber = { x: 0, y: 0, obj: {}, img: null, lnk: null, timer: null, opacityTimer: null, errorTimer: null, hidden: true, linkPool: {}, baseURI: "./", imageCache: [], init: function() { //HACK by nova, show hover-effect if class is not given //only on links in content area, only if the next element is not an image var content = document.getElementById("content"); var lnks = content.getElementsByTagName('a'); var i = lnks.length || 0; var cnt = 0; while (i--) { if ( lnks[i].className.search(/no-thumber/) == -1 ) { if(lnks[i].children[0]){ if(lnks[i].children[0].nodeName.toLowerCase() !== 'img'){ Thumber.addEvent(lnks[i], ["focus", "mouseover"], Thumber.initThumb); Thumber.addEvent(lnks[i], ["blur", "mouseout"], Thumber.hideThumb); Thumber.linkPool[lnks[i].href] = cnt++; } } } } if (cnt) { Thumber.preloadImages(); Thumber.obj = document.createElement('div'); Thumber.ind = document.createElement('div'); Thumber.ind.className = "imageLoaded"; Thumber.img = document.createElement('img'); Thumber.img.alt = "preview"; Thumber.img.id = "fdImage"; Thumber.addEvent(Thumber.img, ["load"], Thumber.imageLoaded); Thumber.addEvent(Thumber.img, ["error"], Thumber.imageError); Thumber.obj.id = "fdImageThumb"; Thumber.obj.style.visibility = "hidden"; Thumber.obj.style.top = "0"; Thumber.obj.style.left = "0"; Thumber.addEvent(Thumber.img, ["mouseout"], Thumber.hideThumb); Thumber.obj.appendChild(Thumber.ind); Thumber.obj.appendChild(Thumber.img); Thumber.addEvent(Thumber.obj, ["mouseout"], Thumber.hideThumb); document.getElementsByTagName('body')[0].appendChild(Thumber.obj); } }, preloadImages: function() { var imgList = ["lt.png", "lb.png", "rt.png", "rb.png", "error.gif", "loading.gif"]; var imgObj = document.createElement('img'); for (var i = 0, img; img = imgList[i]; i++) { Thumber.imageCache[i] = imgObj.cloneNode(false); Thumber.imageCache[i].src = Thumber.baseURI + img; } }, imageLoaded: function() { if (Thumber.errorTimer) clearTimeout(Thumber.errorTimer); if (!Thumber.hidden) Thumber.img.style.visibility = "visible"; Thumber.ind.className = "imageLoaded"; Thumber.ind.style.visibility = "hidden"; }, imageError: function(e) { if (Thumber.errorTimer) clearTimeout(Thumber.errorTimer); Thumber.ind.className = "imageError"; Thumber.errorTimer = window.setTimeout("Thumber.hideThumb()", 2000); }, initThumb: function(e) { e = e || event; Thumber.lnk = this; var positionClass = "left"; var heightIndent; var indentX = 0; var indentY = 0; var trueBody = (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body; if (String(e.type).toLowerCase().search(/mouseover/) != -1) { if (document.captureEvents) { Thumber.x = e.pageX; Thumber.y = e.pageY; } else if (window.event.clientX) { Thumber.x = window.event.clientX + trueBody.scrollLeft; Thumber.y = window.event.clientY + trueBody.scrollTop; } indentX = 10; heightIndent = parseInt(Thumber.y - (Thumber.obj.offsetHeight)) + 'px'; } else { var obj = this; var curleft = curtop = 0; if (obj.offsetParent) { curleft = obj.offsetLeft; curtop = obj.offsetTop; while (obj = obj.offsetParent) { curleft += obj.offsetLeft; curtop += obj.offsetTop; } } curtop += this.offsetHeight; Thumber.x = curleft; Thumber.y = curtop; heightIndent = parseInt(Thumber.y - (Thumber.obj.offsetHeight) - this.offsetHeight) + 'px'; } if (parseInt(trueBody.clientWidth + trueBody.scrollLeft) < parseInt(Thumber.obj.offsetWidth + Thumber.x) + indentX) { Thumber.obj.style.left = parseInt(Thumber.x - (Thumber.obj.offsetWidth + indentX)) + 'px'; positionClass = "right"; } else { Thumber.obj.style.left = (Thumber.x + indentX) + 'px'; } if (parseInt(trueBody.clientHeight + trueBody.scrollTop) < parseInt(Thumber.obj.offsetHeight + Thumber.y) + indentY) { Thumber.obj.style.top = heightIndent; positionClass += "Top"; } else { Thumber.obj.style.top = (Thumber.y + indentY) + 'px'; positionClass += "Bottom"; } Thumber.obj.className = positionClass; Thumber.timer = window.setTimeout("Thumber.showThumb()", 500); }, showThumb: function(e) { Thumber.hidden = false; Thumber.obj.style.visibility = Thumber.ind.style.visibility = 'visible'; Thumber.obj.style.opacity = Thumber.ind.style.opacity = '0'; Thumber.img.style.visibility = "hidden"; var addy = String(Thumber.lnk.href); Thumber.errorTimer = window.setTimeout("Thumber.imageError()", 15000); Thumber.img.src = 'https://thumber.de/image/?size=XL&url=' + encodeURIComponent(addy); Thumber.fade(10); }, hideThumb: function(e) { e = e || window.event; if (e.type == "mouseout") { var elem = e.relatedTarget || e.toElement; if (elem.id && elem.id.search("fdImage") != -1) return false; } Thumber.hidden = true; if (Thumber.timer) clearTimeout(Thumber.timer); if (Thumber.errorTimer) clearTimeout(Thumber.errorTimer); if (Thumber.opacityTimer) clearTimeout(Thumber.opacityTimer); Thumber.obj.style.visibility = 'hidden'; Thumber.ind.style.visibility = 'hidden'; Thumber.img.style.visibility = 'hidden'; Thumber.ind.className = "imageLoaded"; }, fade: function(opac) { var passed = parseInt(opac); var newOpac = parseInt(passed + 10); if (newOpac < 90) { Thumber.obj.style.opacity = Thumber.ind.style.opacity = '.' + newOpac; Thumber.opacityTimer = window.setTimeout("Thumber.fade('" + newOpac + "')", 20); } else { Thumber.obj.style.opacity = Thumber.ind.style.opacity = '1'; } }, addEvent: function(obj, types, fn) { var type; for (var i = 0; i < types.length; i++) { type = types[i]; 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]); } else obj.addEventListener(type, fn, false); } } } Thumber.addEvent(window, ['load'], Thumber.init);