/* javascript for Bubble Tooltips by Alessandro Fulciniti - http://pro.html.it - http://web-graphics.com obtained from: http://web-graphics.com/mtarchive/001717.php phpBB Development Team: - modified to adhere to our coding guidelines - integration into our design - added ability to perform tooltips on select elements - further adjustements */ var head_text, tooltip_mode; /** * Enable tooltip replacements for links */ function enable_tooltips_link(id, headline, sub_id) { var links, i, hold; head_text = headline; if (!document.getElementById || !document.getElementsByTagName) { return; } hold = document.createElement('span'); hold.id = '_tooltip_container'; hold.setAttribute('id', '_tooltip_container'); hold.style.position = 'absolute'; document.getElementsByTagName('body')[0].appendChild(hold); if (id === null) { links = document.getElementsByTagName('a'); } else { links = document.getElementById(id).getElementsByTagName('a'); } for (i = 0; i < links.length; i++) { if (sub_id) { if (links[i].id.substr(0, sub_id.length) === sub_id) { prepare(links[i]); } } else { prepare(links[i]); } } tooltip_mode = 'link'; } /** * Enable tooltip replacements for selects */ function enable_tooltips_select(id, headline, sub_id) { var links, i, hold; head_text = headline; if (!document.getElementById || !document.getElementsByTagName) { return; } hold = document.createElement('span'); hold.id = '_tooltip_container'; hold.setAttribute('id', '_tooltip_container'); hold.style.position = 'absolute'; document.getElementsByTagName('body')[0].appendChild(hold); if (id === null) { links = document.getElementsByTagName('option'); } else { links = document.getElementById(id).getElementsByTagName('option'); } for (i = 0; i < links.length; i++) { if (sub_id) { if (links[i].parentNode.id.substr(0, sub_id.length) === sub_id) { prepare(links[i]); } } else { prepare(links[i]); } } tooltip_mode = 'select'; } /** * Prepare elements to replace */ function prepare(element) { var tooltip, text, desc, title; text = element.getAttribute('title'); if (text === null || text.length === 0) { return; } element.removeAttribute('title'); tooltip = create_element('span', 'tooltip'); title = create_element('span', 'top'); title.appendChild(document.createTextNode(head_text)); tooltip.appendChild(title); desc = create_element('span', 'bottom'); desc.innerHTML = text; tooltip.appendChild(desc); set_opacity(tooltip); element.tooltip = tooltip; element.onmouseover = show_tooltip; element.onmouseout = hide_tooltip; if (tooltip_mode === 'link') { element.onmousemove = locate; } } /** * Show tooltip */ function show_tooltip(e) { document.getElementById('_tooltip_container').appendChild(this.tooltip); locate(this); } /** * Hide tooltip */ function hide_tooltip(e) { var d = document.getElementById('_tooltip_container'); if (d.childNodes.length > 0) { d.removeChild(d.firstChild); } } /** * Set opacity on tooltip element */ function set_opacity(element) { element.style.filter = 'alpha(opacity:95)'; element.style.KHTMLOpacity = '0.95'; element.style.MozOpacity = '0.95'; element.style.opacity = '0.95'; } /** * Create new element */ function create_element(tag, c) { var x = document.createElement(tag); x.className = c; x.style.display = 'block'; return x; } /** * Correct positioning of tooltip container */ function locate(e) { var posx = 0; var posy = 0; e = e.parentNode; if (e.offsetParent) { for (posx = 0, posy = 0; e.offsetParent; e = e.offsetParent) { posx += e.offsetLeft; posy += e.offsetTop; } } else { posx = e.offsetLeft; posy = e.offsetTop; } if (tooltip_mode === 'link') { document.getElementById('_tooltip_container').style.top=(posy+20) + 'px'; document.getElementById('_tooltip_container').style.left=(posx-20) + 'px'; } else { document.getElementById('_tooltip_container').style.top=(posy+30) + 'px'; document.getElementById('_tooltip_container').style.left=(posx-205) + 'px'; } /* if (e == null) { e = window.event; } if (e.pageX || e.pageY) { posx = e.pageX; posy = e.pageY; } else if (e.clientX || e.clientY) { if (document.documentElement.scrollTop) { posx = e.clientX+document.documentElement.scrollLeft; posy = e.clientY+document.documentElement.scrollTop; } else { posx = e.clientX+document.body.scrollLeft; posy = e.clientY+document.body.scrollTop; } } */ }