/* vim: set expandtab sw=4 ts=4 sts=4: */ /** * Displays the Tooltips (hints), if we have some * 2005-01-20 added by Michael Keck (mkkeck) * * @version $Id: tooltip.js 11348 2008-06-25 17:01:31Z lem9 $ */ /** * */ var ttXpos = 0, ttYpos = 0; var ttXadd = 10, ttYadd = -10; var ttDisplay = 0, ttHoldIt = 0; // Check if browser does support dynamic content and dhtml if (document.getElementById) { // DOM-compatible browsers var ttDOM = 1; } else { // the old Netscape 4 var ttNS4 = (document.layers) ? 1 : 0; // browser wich uses document.all var ttIE4 = (document.all) ? 1 : 0; } var myTooltipContainer = null; /** * initialize tooltip */ function PMA_TT_init() { // get all 'light bubbles' on page var tooltip_icons = window.parent.getElementsByClassName('footnotemarker', document, 'sup'); var tooltip_count = tooltip_icons.length; if (tooltip_count < 1) { // no 'bubbles' found return; } // insert tooltip container myTooltipContainer = document.createElement("div"); myTooltipContainer.id = 'TooltipContainer'; window.parent.addEvent(myTooltipContainer, 'mouseover', holdTooltip); window.parent.addEvent(myTooltipContainer, 'mouseout', swapTooltip); document.body.appendChild(myTooltipContainer); // capture mouse-events for (i = 0; i < tooltip_count; i++) { window.parent.addEvent(tooltip_icons[i], 'mousemove', mouseMove); window.parent.addEvent(tooltip_icons[i], 'mouseover', pmaTooltip); window.parent.addEvent(tooltip_icons[i], 'mouseout', swapTooltip); } } /** * init the tooltip and write the text into it * * @param string theText tooltip content */ function PMA_TT_setText(theText) { if (ttDOM || ttIE4) { // document.getEelementById || document.all myTooltipContainer.innerHTML = ""; // we should empty it first myTooltipContainer.innerHTML = theText; } else if (ttNS4) { // document.layers var layerNS4 = myTooltipContainer.document; layerNS4.write(theText); layerNS4.close(); } } /** * @var integer */ var ttTimerID = 0; /** * swap the Tooltip // show and hide * * @param boolean stat view status */ function swapTooltip(stat) { if (ttHoldIt != 1) { if (stat == 'true') { showTooltip(true); } else if (ttDisplay) { ttTimerID = setTimeout("showTooltip(false);", 500); } else { showTooltip(true); } } else { if (ttTimerID) { clearTimeout(ttTimerID); ttTimerID = 0; } showTooltip(true); } } /** * show / hide the Tooltip * * @param boolean stat view status */ function showTooltip(stat) { if (stat == false) { if (ttNS4) myTooltipContainer.visibility = "hide"; else myTooltipContainer.style.visibility = "hidden"; ttDisplay = 0; } else { if (ttNS4) myTooltipContainer.visibility = "show"; else myTooltipContainer.style.visibility = "visible"; ttDisplay = 1; } } /** * hold it, if we create or move the mouse over the tooltip */ function holdTooltip() { ttHoldIt = 1; swapTooltip('true'); ttHoldIt = 0; } /** * move the tooltip to mouse position * * @param integer posX horiz. position * @param integer posY vert. position */ function moveTooltip(posX, posY) { if (ttDOM || ttIE4) { myTooltipContainer.style.left = posX + "px"; myTooltipContainer.style.top = posY + "px"; } else if (ttNS4) { myTooltipContainer.left = posX; myTooltipContainer.top = posY; } } /** * build the tooltip * usally called from eventhandler * * @param string theText tooltip content */ function pmaTooltip(e) { var theText = document.getElementById('footnote_' + this.innerHTML).innerHTML; var plusX = 0, plusY = 0, docX = 0, docY = 0; var divHeight = myTooltipContainer.clientHeight; var divWidth = myTooltipContainer.clientWidth; if (navigator.appName.indexOf("Explorer") != -1) { // IE ... if (document.documentElement && document.documentElement.scrollTop) { plusX = document.documentElement.scrollLeft; plusY = document.documentElement.scrollTop; docX = document.documentElement.offsetWidth + plusX; docY = document.documentElement.offsetHeight + plusY; } else { plusX = document.body.scrollLeft; plusY = document.body.scrollTop; docX = document.body.offsetWidth + plusX; docY = document.body.offsetHeight + plusY; } } else { docX = document.body.clientWidth; docY = document.body.clientHeight; } ttXpos = ttXpos + plusX; ttYpos = ttYpos + plusY; if ((ttXpos + divWidth) > docX) ttXpos = ttXpos - (divWidth + (ttXadd * 2)); if ((ttYpos + divHeight) > docY) ttYpos = ttYpos - (divHeight + (ttYadd * 2)); PMA_TT_setText(theText); moveTooltip((ttXpos + ttXadd), (ttYpos + ttYadd)); holdTooltip(); } /** * register mouse moves * * @param event e */ function mouseMove(e) { if ( typeof( event ) != 'undefined' ) { ttXpos = event.x; ttYpos = event.y; } else { ttXpos = e.pageX; ttYpos = e.pageY; } moveTooltip((ttXpos + ttXadd), (ttYpos + ttYadd)); }