>JS I suppose. Though it creates a DIV element on demand. The function >in question is RGraph.Tooltip() in RGraph.common.js. OK, I found it. Thank you for showing me. I was thinking of something similar recently. /** * Shows a tooltip next to the mouse pointer * * @param text The tooltip text * @return The tooltip object - a DIV */ RGraph.Tooltip = function (canvas, text, x, y) { /** * Hide any currently shown tooltip */ if (RGraph.tooltip) { RGraph.tooltip.style.display = 'none'; RGraph.tooltip = null; } /** * Show a tool tip */ var obj = document.createElement('DIV'); obj.style.position = 'absolute' obj.style.backgroundColor = '#FFFFE1'; obj.style.border = '1px solid #333'; obj.style.borderRight = '2px solid #333'; // Set the right and bottom borders to be a little thicker - gives the effect of a drop shadow obj.style.borderBottom = '2px solid #333'; // Set the right and bottom borders to be a little thicker - gives the effect of a drop shadow obj.style.display = 'block' obj.style.visibility = 'visible'; obj.style.paddingLeft = '3px'; obj.style.paddingRight = '3px'; obj.style.fontFamily = 'Tahoma'; obj.style.fontSize = '10pt'; obj.innerHTML = text; document.body.insertBefore(obj, canvas); obj.style.left = (canvas.offsetLeft) + x + 3; obj.style.top = (canvas.offsetTop + y) - obj.offsetHeight; /** * Install the function for hiding the tooltip. * * FIXME Not sure how this will affect any existing document.onclick event */ document.body.onclick = function () { RGraph.tooltip.style.display = 'none'; } /** * Keep a reference to the object */ RGraph.tooltip = obj; } Now I wonder why you are creating a new tooltip each time the user clicks on the graph? Why not do it the following way? RGraph.Tooltip = function (canvas, text, x, y) { try { if (RGraph.tooltip) { // if tooltip already drawn RGraph.tooltip.innerHTML = text; RGraph.tooltip.style.left = (canvas.offsetLeft) + x + 3; RGraph.tooltip.style.top = (canvas.offsetTop + y) - RGraph.tooltip.offsetHeight; } else { // create tooltip if not drawn yet var obj = document.createElement('DIV'); obj.style.position = 'absolute' obj.style.backgroundColor = '#FFFFE1'; obj.style.border = '1px solid #333'; obj.style.borderRight = '2px solid #333'; // Set the right and bottom borders to be a little thicker - gives the effect of a drop shadow obj.style.borderBottom = '2px solid #333'; // Set the right and bottom borders to be a little thicker - gives the effect of a drop shadow obj.style.display = 'block' obj.style.visibility = 'visible'; obj.style.paddingLeft = '3px'; obj.style.paddingRight = '3px'; obj.style.fontFamily = 'Tahoma'; obj.style.fontSize = '10pt'; /* //alternatively one could create a tooltip css class since this is presentation obj.className = 'tooltip'; //IE obj.setAttribute('class', 'tooltip'); // W3C DOM */ document.body.insertBefore(obj, canvas); RGraph.tooltip = obj; document.body.onclick = function () { RGraph.tooltip.style.left = '-999'; //older opera fix } return RGraph.Tooltip(canvas, text, x, y); } return RGraph.tooltip; // return tooltip obj as stated in functions comment } catch(e) { return false; } } Secondly CanvasTextFunctions.letters() really is in a class of its own. And why dont you use prototype [1]? [1] http://www.w3schools.com/jsref/jsref_prototype_array.asp //A yeti -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php