Tool tip to not move

Hi I'm a big fan. long time lurker first time poster
Currently the position of the tool tip depends on where the cursor first hovers over the image.  Is there a way for the tool tip to appear in the same place no mater where the image is hovered?
below is the js and css
thanks
// SpryTooltip.js - version 0.9 - Spry 1.6.1
(function() { // BeginSpryComponent
if (typeof Spry == "undefined") window.Spry = {}; if (!Spry.Widget) Spry.Widget = {};
Spry.Widget.BrowserSniff = function()
var b = navigator.appName.toString();
var up = navigator.platform.toString();
var ua = navigator.userAgent.toString();
this.mozilla = this.ie = this.opera = this.safari = false;
var re_opera = /Opera.([0-9\.]*)/i;
var re_msie = /MSIE.([0-9\.]*)/i;
var re_gecko = /gecko/i;
var re_safari = /(applewebkit|safari)\/([\d\.]*)/i;
var r = false;
if ( (r = ua.match(re_opera))) {
this.opera = true;
this.version = parseFloat(r[1]);
} else if ( (r = ua.match(re_msie))) {
this.ie = true;
this.version = parseFloat(r[1]);
} else if ( (r = ua.match(re_safari))) {
this.safari = true;
if(parseFloat(r[2]) < 420)
this.version = 2;
else
this.version = 3;
} else if (ua.match(re_gecko)) {
var re_gecko_version = /rv:\s*([0-9\.]+)/i;
r = ua.match(re_gecko_version);
this.mozilla = true;
this.version = parseFloat(r[1]);
this.windows = this.mac = this.linux = false;
this.Platform = ua.match(/windows/i) ? "windows" :
(ua.match(/linux/i) ? "linux" :
(ua.match(/mac/i) ? "mac" :
ua.match(/unix/i)? "unix" : "unknown"));
this[this.Platform] = true;
this.v = this.version;
if (this.safari && this.mac && this.mozilla) {
this.mozilla = false;
Spry.is = new Spry.Widget.BrowserSniff();
Spry.Widget.Tooltip = function(tooltip_element, trigger_selector, options)
options = Spry.Widget.Utils.firstValid(options, {});
this.init(trigger_selector, tooltip_element, options);
if (Spry.Widget.Tooltip.onloadDidFire)
this.attachBehaviors();
Spry.Widget.Tooltip.loadQueue.push(this);
Spry.Widget.Tooltip.prototype.init = function(trigger_element, tooltip_element, options)
var Utils = Spry.Widget.Utils;
this.triggerElements = Utils.getElementsByClassName(trigger_element);
this.tooltipElement = Utils.getElement(tooltip_element);
options.showDelay = parseInt(Utils.firstValid(options.showDelay, 0), 10);
options.hideDelay = parseInt(Utils.firstValid(options.hideDelay, 0), 10);
if (typeof this.triggerElements == 'undefined' || !(this.triggerElements.length > 0))
this.showError('The element(s) "' + trigger_element + '" do not exist in the page');
return false;
if (typeof this.tooltipElement == 'undefined' || !this.tooltipElement)
this.showError('The element "' + tooltip_element + '" do not exists in the page');
return false;
this.listenersAttached = false;
this.hoverClass = "";
this.followMouse = false;
this.offsetX = 15;
this.offsetY = 15;
this.closeOnTooltipLeave = false;
this.useEffect = false;
Utils.setOptions(this, options);
this.animator = null;
for (var i =0; i < this.triggerElements.length; i++)
if (!this.triggerElements[i].className)
this.triggerElements[i].className = '';
if (this.useEffect){
switch (this.useEffect.toString().toLowerCase()){
case 'blind': this.useEffect = 'Blind'; break;
case 'fade': this.useEffect = 'Fade'; break;
default:
this.useEffect = false;
this.visibleTooltip = false;
// Hack for FF 3 - Safari 3: force painting of the element, in order to have the correct display
this.tooltipElement.offsetHeight;
// Optimisation: save browser work if display is already 'none'
if (Spry.Widget.Utils.getStyleProperty(this.tooltipElement, 'display') != 'none')
this.tooltipElement.style.display = 'none';
if (typeof this.offsetX != 'numeric')
this.offsetX = parseInt(this.offsetX, 10);
if (isNaN(this.offsetX))
this.offsetX = 0;
if (typeof this.offsetY != 'numeric')
this.offsetY = parseInt(this.offsetY, 10);
if (isNaN(this.offsetY))
this.offsetY = 0;
this.tooltipElement.style.position = 'absolute';
this.tooltipElement.style.top = '0px';
this.tooltipElement.style.left = '0px';
Spry.Widget.Tooltip.onloadDidFire = false;
Spry.Widget.Tooltip.loadQueue = [];
Spry.Widget.Tooltip.addLoadListener = function(handler)
if (typeof window.addEventListener != 'undefined')
window.addEventListener('load', handler, false);
else if (typeof document.addEventListener != 'undefined')
document.addEventListener('load', handler, false);
else if (typeof window.attachEvent != 'undefined')
window.attachEvent('onload', handler);
Spry.Widget.Tooltip.processLoadQueue = function(handler)
Spry.Widget.Tooltip.onloadDidFire = true;
var q = Spry.Widget.Tooltip.loadQueue;
var qlen = q.length;
for (var i = 0; i < qlen; i++)
if (!q[i].listenersAttached)
q[i].attachBehaviors();
Spry.Widget.Tooltip.addLoadListener(Spry.Widget.Tooltip.processLoadQueue);
Spry.Widget.Tooltip.prototype.addClassName = function(ele, className)
if (!ele || !className)
return;
if (ele.className.indexOf(className) == -1)
ele.className += (ele.className ? " " : "") + className;
Spry.Widget.Tooltip.prototype.removeClassName = function(ele, className)
if (!ele || !className )
return;
ele.className = ele.className.replace(new RegExp("\\s*\\b" + className + "\\b", "g"), "");
Spry.Widget.Tooltip.prototype.showTooltip = function()
if (!this.visibleTooltip)
this.tooltipElement.style.visibility = 'hidden';
this.tooltipElement.style.zIndex = '9999';
this.tooltipElement.style.display = 'block';
Spry.Widget.Utils.putElementAt(this.tooltipElement, this.pos, {x:this.offsetX, y:this.offsetY}, true);
if(Spry.is.ie && Spry.is.version == '6')
this.createIframeLayer(this.tooltipElement);
if (!this.visibleTooltip)
if (this.useEffect)
if (typeof this.showEffect == 'undefined')
this.showEffect = new Spry.Widget.Tooltip[this.useEffect](this.tooltipElement, {from: 0, to: 1});
this.showEffect.start();
else
this.tooltipElement.style.visibility = 'visible';
this.visibleTooltip = true;
Spry.Widget.Tooltip.prototype.hideTooltip = function(quick)
if (this.useEffect && !quick)
if (typeof this.hideEffect == 'undefined')
this.hideEffect = new Spry.Widget.Tooltip[this.useEffect](this.tooltipElement, {from: 1, to: 0});
this.hideEffect.start();
else
if (typeof this.showEffect != 'undefined')
this.showEffect.stop();
this.tooltipElement.style.display = 'none';
if(Spry.is.ie && Spry.is.version == '6')
this.removeIframeLayer(this.tooltipElement);
if (this.hoverClass && !this.hideTimer)
for (var i = 0; i < this.triggerElements.length; i++)
this.removeClassName(this.triggerElements[i], this.hoverClass);
this.visibleTooltip = false;
Spry.Widget.Tooltip.prototype.displayTooltip = function(show) {
if (this.tooltipElement)
if (this.hoverClass){
for (var i = 0; i < this.triggerElements.length; i++)
this.removeClassName(this.triggerElements[i], this.hoverClass);
if (show)
if (this.hideTimer)
clearInterval(this.hideTimer);
delete(this.hideTimer);
if (this.hoverClass)
if (typeof this.triggerHighlight != 'undefined')
this.addClassName(this.triggerHighlight, this.hoverClass);
var self = this;
this.showTimer = setTimeout(function(){self.showTooltip()}, this.showDelay);
else
if (this.showTimer)
clearInterval(this.showTimer);
delete(this.showTimer);
var self = this;
this.hideTimer = setTimeout(function(){self.hideTooltip();}, this.hideDelay);
this.refreshTimeout();
Spry.Widget.Tooltip.prototype.onMouseOverTrigger = function(e)
var target = '';
if (Spry.is.ie)
target = e.srcElement;
else
target = e.target;
var contains = Spry.Widget.Utils.contains;
for (var i = 0; i < this.triggerElements.length; i++)
if (contains(this.triggerElements[i], target))
target = this.triggerElements[i];
break;
if (i == this.triggerElements.length) return;
if (this.visibleTooltip && this.triggerHighlight && this.triggerHighlight == target)
if (this.hideTimer)
clearInterval(this.hideTimer);
delete(this.hideTimer);
if (this.hoverClass)
if (typeof this.triggerHighlight != 'undefined')
this.addClassName(this.triggerHighlight, this.hoverClass);
return;
var pos = Spry.Widget.Utils.getAbsoluteMousePosition(e);
this.pos = {x: pos.x + this.offsetX, y: pos.y + this.offsetY};
this.triggerHighlight = target;
Spry.Widget.Tooltip.closeAll();
this.displayTooltip(true);
Spry.Widget.Tooltip.prototype.onMouseMoveTrigger = function(e)
var pos = Spry.Widget.Utils.getAbsoluteMousePosition(e);
this.pos = {x: pos.x + this.offsetX, y: pos.y + this.offsetY};
if (this.visibleTooltip)
this.showTooltip();
Spry.Widget.Tooltip.prototype.onMouseOutTrigger = function(e)
var target = '';
if (Spry.is.ie)
target = e.toElement;
else
target = e.relatedTarget;
var contains = Spry.Widget.Utils.contains;
for (var i=0; i < this.triggerElements.length; i++)
if (contains(this.triggerElements[i], target))
return;
this.displayTooltip(false);
Spry.Widget.Tooltip.prototype.onMouseOutTooltip = function(e)
var target = '';
if (Spry.is.ie)
target = e.toElement;
else
target = e.relatedTarget;
var contains = Spry.Widget.Utils.contains;
if (contains(this.tooltipElement, target))
return;
this.displayTooltip(false);
Spry.Widget.Tooltip.prototype.onMouseOverTooltip = function(e)
if (this.hideTimer)
clearInterval(this.hideTimer);
delete(this.hideTimer);
if (this.hoverClass)
if (typeof this.triggerHighlight != 'undefined')
this.addClassName(this.triggerHighlight, this.hoverClass);
Spry.Widget.Tooltip.prototype.refreshTimeout = function()
if (Spry.Widget.Tooltip.refreshTimeout != null)
clearTimeout(Spry.Widget.Tooltip.refreshTimeout);
Spry.Widget.Tooltip.refreshTimeout = null;
Spry.Widget.Tooltip.refreshTimeout = setTimeout(Spry.Widget.Tooltip.refreshAll, 100);
Spry.Widget.Tooltip.prototype.destroy = function()
for (var k in this)
try{
if (typeof this.k == 'object' && typeof this.k.destroy == 'function') this.k.destroy();
delete this.k;
}catch(err){}
Spry.Widget.Tooltip.prototype.checkDestroyed = function()
// checks the parent node. If it exists, then the element is still in the DOM
if (!this.tooltipElement || this.tooltipElement.parentNode == null)
return true;
return false;
Spry.Widget.Tooltip.prototype.attachBehaviors = function()
var self = this;
var ev = Spry.Widget.Utils.addEventListener;
for (var i=0; i< this.triggerElements.length; i++)
ev(this.triggerElements[i], 'mouseover', function(e) {self.onMouseOverTrigger(e || event); return true;}, false);
ev(this.triggerElements[i], 'mouseout', function(e) {self.onMouseOutTrigger(e || event); return true;}, false);
if (this.followMouse)
ev(this.triggerElements[i], 'mousemove', function(e) {self.onMouseMoveTrigger(e || event); return true;}, false);
if (this.closeOnTooltipLeave)
ev(this.tooltipElement, 'mouseover', function(e){self.onMouseOverTooltip(e || event); return true;}, false);
ev(this.tooltipElement, 'mouseout', function(e){self.onMouseOutTooltip(e || event); return true;}, false);
this.listenersAttached = true;
// createIframeLayer for Tooltip
// creates an IFRAME underneath a tooltip element so that it will show above form controls and ActiveX
Spry.Widget.Tooltip.prototype.createIframeLayer = function(tooltip)
if (typeof this.iframeLayer == 'undefined')
var layer = document.createElement('iframe');
layer.tabIndex = '-1';
layer.src = 'javascript:"";';
layer.scrolling = 'no';
layer.frameBorder = '0';
layer.className = 'iframeTooltip';
tooltip.parentNode.appendChild(layer);
this.iframeLayer = layer;
this.iframeLayer.style.left = tooltip.offsetLeft + 'px';
this.iframeLayer.style.top = tooltip.offsetTop + 'px';
this.iframeLayer.style.width = tooltip.offsetWidth + 'px';
this.iframeLayer.style.height = tooltip.offsetHeight + 'px';
this.iframeLayer.style.display = 'block';
// removeIframeLayer for Tooltip Element
// removes an IFRAME underneath a tooltip to reveal any form controls and ActiveX
Spry.Widget.Tooltip.prototype.removeIframeLayer =  function(tooltip)
if (this.iframeLayer)
this.iframeLayer.style.display = 'none';
Spry.Widget.Tooltip.prototype.showError = function(msg)
alert('Spry.Widget.Tooltip ERR: ' + msg);
Spry.Widget.Tooltip.refreshAll = function()
var q = Spry.Widget.Tooltip.loadQueue;
var qlen = q.length;
for (var i = 0; i < qlen ; i++)
if (q[i].checkDestroyed())
// the trigger element is no longer in the dom, we should remove the current widget.
q[i].destroy();
q.splice(i, 1);
i--;
qlen = q.length;
Spry.Widget.Tooltip.closeAll = function()
var q = Spry.Widget.Tooltip.loadQueue;
var qlen = q.length;
for (var i = 0; i < qlen ; i++)
if (q[i].visibleTooltip)
q[i].hideTooltip(true);
if (q[i].showTimer)
clearTimeout(q[i].showTimer);
if (q[i].hideTimer)
clearTimeout(q[i].hideTimer);
Spry.Widget.Tooltip.Animator = function(element, opts)
this.timer = null;
this.fps = 60;
this.duration = 500;
this.startTime = 0;
this.transition = Spry.Widget.Tooltip.Animator.defaultTransition;
this.onComplete = null;
if (typeof element == 'undefined') return;
this.element = Spry.Widget.Utils.getElement(element);
Spry.Widget.Utils.setOptions(this, opts, true);
this.interval = this.duration / this.fps;
Spry.Widget.Tooltip.Animator.defaultTransition = function(time, begin, finish, duration) { time /= duration; return begin + ((2 - time) * time * finish); };
Spry.Widget.Tooltip.Animator.prototype.start = function()
var self = this;
this.startTime = (new Date).getTime();
this.beforeStart();
this.timer = setInterval(function() { self.stepAnimation(); }, this.interval);
Spry.Widget.Tooltip.Animator.prototype.stop = function()
if (this.timer)
clearTimeout(this.timer);
this.timer = null;
Spry.Widget.Tooltip.Animator.prototype.stepAnimation = function(){};
Spry.Widget.Tooltip.Animator.prototype.beforeStart = function(){};
Spry.Widget.Tooltip.Animator.prototype.destroy = function()
for (var k in this)
try
delete this.k;
}catch(err){}
Spry.Widget.Tooltip.Fade = function(element, opts)
Spry.Widget.Tooltip.Animator.call(this, element, opts);
if (Spry.is.ie)
this.origOpacity = this.element.style.filter;
else
this.origOpacity = this.element.style.opacity;
Spry.Widget.Tooltip.Fade.prototype = new Spry.Widget.Tooltip.Animator();
Spry.Widget.Tooltip.Fade.prototype.constructor = Spry.Widget.Tooltip.Fade;
Spry.Widget.Tooltip.Fade.prototype.stepAnimation = function()
var curTime = (new Date).getTime();
var elapsedTime = curTime - this.startTime;
var i, obj;
if (elapsedTime >= this.duration)
this.beforeStop();
this.stop();
return;
var ht = this.transition(elapsedTime, this.from, this.to - this.from, this.duration);
if (Spry.is.ie)
var filter = this.element.style.filter.replace(/alpha\s*\(\s*opacity\s*=\s*[0-9\.]{1,3}\)/, '');
this.element.style.filter = filter + 'alpha(opacity=' + parseInt(ht * 100, 10) + ')';
else
this.element.style.opacity = ht;
this.element.style.visibility = 'visible';
this.element.style.display = 'block';
Spry.Widget.Tooltip.Fade.prototype.beforeStop = function()
if (this.from > this.to)
this.element.style.display = 'none';
if (Spry.is.mozilla)
this.element.style.filter = this.origOpacity;
else
this.element.style.opacity = this.origOpacity;
Spry.Widget.Tooltip.Blind = function(element, opts)
this.from = 0;
this.to = 100;
Spry.Widget.Tooltip.Animator.call(this, element, opts);
this.element.style.visibility = 'hidden';
this.element.style.display = 'block';
this.origHeight = parseInt(Spry.Widget.Utils.getStyleProperty(this.element, 'height'),10);
if (isNaN(this.origHeight))
this.origHeight = this.element.offsetHeight;
if (this.to == 0)
this.from = this.origHeight;
else
this.to = this.origHeight;
Spry.Widget.Tooltip.Blind.prototype = new Spry.Widget.Tooltip.Animator();
Spry.Widget.Tooltip.Blind.prototype.constructor = Spry.Widget.Tooltip.Blind;
Spry.Widget.Tooltip.Blind.prototype.beforeStart = function()
this.origOverflow = Spry.Widget.Utils.getStyleProperty(this.element, 'overflow');
this.element.style.overflow = 'hidden';
Spry.Widget.Tooltip.Blind.prototype.stepAnimation = function()
var curTime = (new Date).getTime();
var elapsedTime = curTime - this.startTime;
var i, obj;
if (elapsedTime >= this.duration)
this.beforeStop();
this.stop();
return;
var ht = this.transition(elapsedTime, this.from, this.to - this.from, this.duration);
this.element.style.height = Math.floor(ht) + 'px';
this.element.style.visibility = 'visible';
this.element.style.display = 'block';
Spry.Widget.Tooltip.Blind.prototype.beforeStop = function()
this.element.style.overflow = this.origOverflow;
if (this.from > this.to)
this.element.style.display = 'none';
this.element.style.height = this.origHeight + 'px';
// Spry.Widget.Utils
if (!Spry.Widget.Utils) Spry.Widget.Utils = {};
Spry.Widget.Utils.setOptions = function(obj, optionsObj, ignoreUndefinedProps)
if (!optionsObj)
return;
for (var optionName in optionsObj)
if (ignoreUndefinedProps && optionsObj[optionName] == undefined)
continue;
obj[optionName] = optionsObj[optionName];
Spry.Widget.Utils.getElement = function(ele)
if (ele && typeof ele == "string")
return document.getElementById(ele);
return ele;
Spry.Widget.Utils.getElementsByClassName = function(sel)
if (!sel.length > 0)
return null;
var selectors = sel.split(',');
var el = [];
for (var i =0; i < selectors.length; i++)
var cs = selectors[i];
var chunk = cs.split(' ');
var parents = [];
parents[0] = [];
parents[0][0] = document.body;
for (var j = 0; j < chunk.length; j++)
var tokens = Spry.Widget.Utils.getSelectorTokens(chunk[j]);
for (var k =0; k < parents[j].length; k++)
var childs = parents[j][k].getElementsByTagName('*');
parents[j+1] = [];
for (var l=0; l < childs.length; l++)
if (Spry.Widget.Utils.hasSelector(childs[l], tokens))
parents[j+1].push(childs[l]);
if (parents[j])
for (var k = 0; k < parents[j].length; k++)
el.push(parents[j][k]);
return el;
Spry.Widget.Utils.firstValid = function()
var ret = null;
var a = Spry.Widget.Utils.firstValid;
for(var i=0; i< a.arguments.length; i++)
if (typeof(a.arguments[i]) != 'undefined')
ret = a.arguments[i];
break;
return ret;
Spry.Widget.Utils.getSelectorTokens = function(str)
str = str.replace(/\./g, ' .');
str = str.replace(/\#/g, ' #');
str = str.replace(/^\s+|\s+$/g,"");
return str.split(' ');
Spry.Widget.Utils.hasSelector = function(el, tokens)
for (var i =0; i< tokens.length; i++)
switch (tokens[i].charAt(0))
case '.': if (!el.className || el.className.indexOf(tokens[i].substr(1)) == -1) return false; break;
case '#': if (!el.id || el.id != tokens[i].substr(1)) return false; break;
default: if (el.nodeName.toLowerCase != tokens[i]) return false; break;
return true;
Spry.Widget.Utils.addEventListener = function(element, eventType, handler, capture)
try
if (element.addEventListener)
element.addEventListener(eventType, handler, capture);
else if (element.attachEvent)
element.attachEvent("on" + eventType, handler);
catch (e) {}
Spry.Widget.Utils.getStyleProperty = function(element, prop)
var value;
var camelized = Spry.Widget.Utils.camelize(prop);
try
if (element.style)
value = element.style[camelized];
if (!value)
if (document.defaultView && document.defaultView.getComputedStyle)
var css = document.defaultView.getComputedStyle(element, null);
value = css ? css.getPropertyValue(prop) : null;
else if (element.currentStyle)
value = element.currentStyle[camelized];
catch (e) {}
return value == 'auto' ? null : value;
Spry.Widget.Utils.camelize = function(str)
if (str.indexOf('-') == -1)
return str;
var oStringList = str.split('-');
var isFirstEntry = true;
var camelizedString = '';
for(var i=0; i < oStringList.length; i++)
if(oStringList[i].length>0)
if(isFirstEntry)
camelizedString = oStringList[i];
isFirstEntry = false;
else
var s = oStringList[i];
camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
return camelizedString;
* Spry.Widget.Utils.getPixels
* returns the value of a CSS property as Int, converting medium to 2
* @param {DOMElement} m - elements
* @param {String} s -
Spry.Widget.Utils.getPixels = function (m, s)
var v = Spry.Widget.Utils.getStyleProperty(m, s);
if (v == "medium") {
v = 2;
} else {
v = parseInt(v, 10);
v = isNaN(v)?0:v;
return v;
Spry.Widget.Utils.getAbsoluteMousePosition = function(ev)
var pos = {x:0, y:0};
if (ev.pageX)
pos.x = ev.pageX;
else if (ev.clientX)
pos.x = ev.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
if (isNaN(pos.x)) pos.x = 0;
if (ev.pageY)
pos.y = ev.pageY;
else if (ev.clientY)
pos.y = ev.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
if (isNaN(pos.y)) pos.y = 0;
return pos;
* Spry.Widget.Utils.getBorderBox
* returns a border box object (x,y,width,height) which perfectly covers the el element and its borders
* the x, y are absolute coordinates measured from from the window viewport
* use the box as the second parameter in Spry.Widget.Utils.setBorderBox
* @param {DOMElement or String} el -
* @param {DOMDocument,optional} doc -
Spry.Widget.Utils.getBorderBox = function (el, doc)
doc = doc || document;
if (typeof el == 'string')
el = doc.getElementById(el);
if (!el)
return false;
if (el.parentNode === null || Spry.Widget.Utils.getStyleProperty(el, 'display') == 'none')
//element must be visible to have a box
return false;
var ret = {x:0, y:0, width:0, height:0};
var parent = null;
var box;
if (el.getBoundingClientRect) { // IE
box = el.getBoundingClientRect();
var scrollTop = doc.documentElement.scrollTop || doc.body.scrollTop;
var scrollLeft = doc.documentElement.scrollLeft || doc.body.scrollLeft;
ret.x = box.left + scrollLeft;
ret.y = box.top + scrollTop;
ret.width = box.right - box.left;
ret.height = box.bottom - box.top;
} else if (doc.getBoxObjectFor) { // gecko
box = doc.getBoxObjectFor(el);
ret.x = box.x;
ret.y = box.y;
ret.width = box.width;
ret.height = box.height;
var btw = Spry.Widget.Utils.getPixels(el, "border-top-width");
var blw = Spry.Widget.Utils.getPixels(el, "border-left-width");
ret.x -= blw;
ret.y -= btw;
} else { // safari/opera
ret.x = el.offsetLeft;
ret.y = el.offsetTop;
ret.width = el.offsetWidth;
ret.height = el.offsetHeight;
parent = el.offsetParent;
if (parent != el)
while (parent)
ret.x += parent.offsetLeft;
ret.y += parent.offsetTop;
parent = parent.offsetParent;
var blw = Spry.Widget.Utils.getPixels(el, "border-left-width");
var btw = Spry.Widget.Utils.getPixels(el, "border-top-width");
ret.x -= blw;
ret.y -= btw;
// opera & (safari absolute) incorrectly account for body offsetTop
var ua = navigator.userAgent.toLowerCase();
if (Spry.is.opera || Spry.is.safari && Spry.Widget.Utils.getStyleProperty(el, 'position') == 'absolute')
ret.y -= doc.body.offsetTop;
if (el.parentNode)
parent = el.parentNode;
else
parent = null;
while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML')
ret.x -= (isNaN(parent.scrollLeft) ? 0 : parent.scrollLeft);
ret.y -= (isNaN(parent.scrollTop)  ? 0 : parent.scrollTop);
if (parent.parentNode)
parent = parent.parentNode;
else
parent = null;
return ret;
* Spry.Widget.Utils.setBorderBox
* puts the element el to the location specified by box
* @param {DOMElement} el - the element to be placed
* @param {Object} box - hash containing the x and y coordinates where to put el
Spry.Widget.Utils.setBorderBox = function (el, box) {
var pos = Spry.Widget.Utils.getBorderBox(el, el.ownerDocument);
if (pos === false)
return false;
var delta = {
x:Spry.Widget.Utils.getPixels(el, 'left'),
y:Spry.Widget.Utils.getPixels(el, 'top')
var new_pos = {x:0, y:0, w:0, h:0};
if (typeof box.x == 'number') {
new_pos.x = box.x - pos.x + delta.x;
if (typeof box.y == 'number') {
new_pos.y = box.y - pos.y + delta.y;
if (typeof box.x == 'number') {
el.style.left = new_pos.x + 'px';
if (typeof box.y == 'number') {
el.style.top = new_pos.y + 'px';
return true;
Spry.Widget.Utils.putElementAt = function (source, target, offset, biv)
biv = Spry.Widget.Utils.firstValid(biv, true);
var source_box = Spry.Widget.Utils.getBorderBox(source, source.ownerDocument);
Spry.Widget.Utils.setBorderBox(source, target);
if (biv)
Spry.Widget.Utils.bringIntoView(source);
return true;
* Spry.Widget.Utils.bringIntoView
* set the position of the source element so it is completely visible in the window
* @param {DOMElemenet} source - the element to be
Spry.Widget.Utils.bringIntoView = function (source) {
var box = Spry.Widget.Utils.getBorderBox(source, source.ownerDocument);
if (box === false) {
return false;
var current = {
x:Spry.Widget.Utils.getPixels(source, 'left'),
y:Spry.Widget.Utils.getPixels(source, 'top')
var delta = {x:0, y:0};
var offset_fix = {x:0, y:0};
var strictm = source.ownerDocument.compatMode == "CSS1Compat";
var doc = (Spry.is.ie && strictm || Spry.is.mozilla)?source.ownerDocument.documentElement:source.ownerDocument.body;
offset_fix.x = Spry.Widget.Utils.getPixels(doc, 'border-left-width');
offset_fix.y = Spry.Widget.Utils.getPixels(doc, 'border-top-width');
var st = doc.scrollTop;
var ch = self.innerHeight ? self.innerHeight : doc.clientHeight;
var t = box.y + (Spry.is.ie?-offset_fix.y:offset_fix.y);
var b = box.y + box.height + (Spry.is.ie?-offset_fix.y:offset_fix.y);
if ( b - st > ch) {
delta.y = ch - (b - st);
if (t + delta.y < st) {
delta.y = st-t;
} else if (t < st) {
delta.y = st - t;
if (delta.y != 0) {
source.style.top = (current.y + delta.y) + 'px';
var sl = doc.scrollLeft;
var cw = doc.clientWidth;
var l = box.x + (Spry.is.ie?-offset_fix.x:offset_fix.x);
var r = box.x + box.width + (Spry.is.ie?-offset_fix.x:offset_fix.x);
if ( r - sl > cw) {
delta.x = cw - (r - sl);
if (l + delta.x < sl) {
delta.x = sl-l;
} else if (l < sl) {
delta.x = sl - l;
if (delta.x != 0) {
source.style.left = (current.x + delta.x) + 'px';
Spry.Widget.Utils.contains = function (who, what) {
if (typeof who.contains == 'object') {
return what && who && (who == what || who.contains(what));
} else {
var el = what;
while(el) {
try{
if (el == who) {
return true;
el = el.parentNode;
}catch(a){return false;}
return false;
})(); // EndSpryComponent
@charset "UTF-8";
/* SpryTooltip.css - version 0.2 - Spry 1.6.1 */
/* Copyright (c) 2006. Adobe Systems Incorporated. All rights reserved. */
/* HACK FOR IE: to make sure the tooltips show above form controls, we underlay each tooltip with an iframe */
.iframeTooltip
position: absolute;
z-index: 1010;
filter:alpha(opacity:0.1);
.tooltipContent
font-size: 11px;
font-style: italic;
color: #332c40;
width: 96px;
height: 51px;
background: url(../_images/recipe/bubble2.png) no-repeat;
font-family: "Comic Sans MS", cursive;
margin: 0px;
left: -200px;
top: -200px;
padding-top: 5px;
vertical-align: middle;
position: fixed;

I couldn't get this script to work with my code:
<a id="greensource" href="a"><img src="images/greensource.png" alt="Greensource Initiative" width="193" height="71" border="0" usemap="#Map7" id="sprytrigger6" title="Greensource Initiative" />
<map name="Map7" id="Map7">
<area shape="rect" coords="-22,-15,197,79" href="#" />
</map>
</a>
<div class="tooltipContent" id="green">
<div class="secondback">
<div style="padding: 15px;">
<h1>GREENSOURCE</h1>
<h2>INITIATIVE&#8482;</h2>
<p>Manufactred within Greensource Initiative&#8482; guildelines for use of recycled materials, renewable energy and non-hazardous packaging materials. RoHS Compliant.</p>
<p class="morebutton"><a href="#">LEARN MORE</a></p>
</div>
</div>
</div>
<script type="text/javascript">
<!--
var sprytooltip7 = new Spry.Widget.Tooltip("green", "#greensource");
//-->
</script>
Maybe someone can point out my problem?
CSS:
.tooltipContent
    margin: 0;
    padding: 0;
    background: #FFF url(../images/bottom-gradient.png) repeat-x bottom left;
    font-family: "Myriad Pro", Tahoma, Geneva, sans-serif;
    text-align: left;
    box-shadow: 2px 2px 4px #b6b5b6;
    -webkit-box-shadow: 2px 2px 4px #b6b5b6;
    -moz-box-shadow: 2px 2px 4px #b6b5b6;
    position: fixed;
#green {
    position: absolute;
    border: none;
    top: 200px;
    left: 200px;

Similar Messages

  • Spry tool tip does not work in template or child pages within an editable region. Why not?

    Ok. so I am getting pretty frustrated. I take the time to learn how to use CSS and to create a template page for a Contractor Site (www.ContractorInsurance.net). The idea is to create a page that I can use for different classes of Contractors...right?
    Then I get all happy about being able to insert ToolTip onto pages to help the user. Great!
    LIfe to turn to Sorrow after nearly five hours of searching for a "eeking" answer.
    So what good does it do to have an Editable region to update if we cannot have the flexibility to insert a tool tip on child pages?  Ok so the fast solution is to what... Have a question mark image, insert another apDiv, name it toolTip_Not and provide it with a show=hide behavior?
    RRRRRrrr...
    This really sucks not being able to find a solution within a reasonable amount of time.

    I have tried thank you. However...it is still not working.
    www.ContractorInsurance.net/course_of_construction.php
    The error message is "Making this change would require code that is locked by a template translator"
        Re: Spry tool tip does not work in template or child pages within an editable region. Why not?
        created by altruistic gramps in Spry Framework for Ajax - View the full discussion
    If you have a look at the following simple document with a tooltipTooltip trigger goes here.
    Tooltip content goes here.
    you will notice that a couple of lines have been placed in the HEAD section of the document. When using DW templates, the HEAD section is usually not editable, hence the error mesaage. By default, your template should have an editable region in it just before the closing tag. It looks like this: <!-- TemplateBeginEditable name="head" > <! TemplateEndEditable --> Dreamweaver should be able to find that editable region and insert the
    <script> tag there automatically. Because you don't have an editable region like that in the <head>, open the master template, and paste the code above just before the closing </head>
    tag. Gramps
    Edited to remove personal data

  • TOOL TIP is not working!!

    Hello
    (1)Now i can see the Caption of a object/field as TOOL TIP, fine.
    (2)After i am binding with the associated data source field, I also got the populated value of that object/field as tool tip, fine.
    I mean, not 2 tool tips, at the same second, either (1) ir (2), fine.
    But, both are working for ONLY editable fields, tool tip is not working for "readOnly" fields (i colored these fields with GREY color)!!
    Pls. let me know How can i get a tool tip for all KIND of fields, like, Greyedout fields, "readOnly" fields....all
    Thank you

    You could create an invisible field with the tooltip text you desire, send it to the back, and then on mouseenter of the field you want the tooltip for you just make the tooltip field visible and then make it invisible again on mouseexit.
    on mouseenter:
    this.presence = "visible";
    on mouseexit:
    this.presence = "invisible";
    I've used this method in the past to pop up half page instruction sets.
    djaknow

  • Table Output text tool tip does not update on PPR

    We have a adf table with a Lov and a out put text .
    On changing the LOV, the out put text also change . but, on we mouse over on the tool tip does not changed . any suggestions ?
    below code :
    <af:outputText value="#{row.PlanTitle}" id="ot4" partialTriggers="soc3 si2"/>
    However , if we refresh the table or reload after save , the toop tip also get change . but we need to update the tool tip on change the lov . any suggestion ?
    Jdev : 11.1.1.3.0
    browser : all ,

    Hi,
    taking it from:
    +"However , if we refresh the table or reload after save , the toop tip also get change . but we need to update the tool tip on change the lov . any suggestion ? "+
    The autput text component is part of a table ? If so then the table needs to be refreshed as the values in there are stamped. If I am wrong with my table assumption and the output text is part of a form, try setting clientComponent="true" for the output text field
    Frank

  • Tool Tip style not getting affected

    Hi,
         This is the code i have in my style sheet
    ToolTip {
       backgroundColor: #330099;
       color: #ffffff;
    I have included in my source file.But its not getting affected in the list box tool tip.
    Thanks & Regards,
    Jayagopal P.S

    Use it like this, this works:
    private function setToolTipStyle():void {
         styleManager.getStyleDeclaration("mx.controls.ToolTip").setStyle("fontStyle","bold");    
         styleManager.getStyleDeclaration("mx.controls.ToolTip").setStyle("fontSize","12");
         styleManager.getStyleDeclaration("mx.controls.ToolTip").setStyle("fontFamily","Arial");
         styleManager.getStyleDeclaration("mx.controls.ToolTip").setStyle("color","#ED8805");
         styleManager.getStyleDeclaration("mx.controls.ToolTip").setStyle("backgroundColor","#FCFC FC");
         styleManager.getStyleDeclaration("mx.controls.ToolTip").setStyle("borderStyle","solid");
         styleManager.getStyleDeclaration("mx.controls.ToolTip").setStyle("paddingTop","2");
         styleManager.getStyleDeclaration("mx.controls.ToolTip").setStyle("paddingBottom","2");
    Cheers
    JanTheMan

  • Tooltips (tool tips) do not show in Illustrator 14.0.0 (CS4)

    Hello,
    Today when I launch Illustrator CS4, I'm unable to see the tooltips that appear when the mouse hovers over the tools or any of the buttons on the panels. I'm still able to see the pop-up tooltips on the artboards (e.g., smart guide information).
    I've double checked the preference option to ensure that "show tool tips" is checked.
    I also deleted the preferences file (AIPrefs) in case it was corrupted.
    None of this worked.
    Does anyone know how to make the tool-tips appear again?
    thanks in advance!
    JP

    Hi Scott,
    Thanks for the reply. I'm farily certain that the mouse is not moving from any vibrations (heavy mouse, no detectible vibrations, etc.). If I leave my mouse over a tool and leave my hand off the mouse for a while, no tooltips.
    ... after rebooting my machine (Vista x64), the tooltips seem to have come back on. Like others have mentioned in these threads, it seems to take either about 4 seconds and/or mousing over several tools before the tooltips appear.... so I think this issue has resolved itself after the reboot.
    thanks,
    JP

  • In expert mode, using the mover tool, I can not move one picture into another. Need help as I get error message

    I have two pictures in expert mode in editor. I go to "Move tool", click on picture but I am unable to move and drop in second picture. I do not get the dashed lines around the picture, and if I move cursor to
    move picture, I get the following message " This operation cannot be performed on the locked background layer. Do you want to convert the locked background layer into an editable layer?"  I have no idea
    what I need to check or uncheck to make it work.,  I am following a lesson plan in a "Infinite Skills" training course.  I talked to them, but was unable to come up with a answer.  Help, please I have been
    trying to do this move for over a week.  tks  rdf

    We don't know whether this tutorial was written for Photoshop or Photoshop Elements, more specifically for which version of PSE. There are differences. Be sure to have the layers palette open.
    Try this instead
    Open picture B, the one you wish to select something from to add to another picture.
    Use one of the selection tools, e.g. selection brush, lasso tool, to select the object. You will see an outline ("marching ants") once the selection is complete
    Go to Edit menu>copy to copy the selection to the clipboard
    Open picture A, then go to Edit>paste
    Use the move tool to position object from picture B.
    In the layers palette you should see picture A as the background layer, and object B on a separate layer.
    To unlock the background layer, double click on it in the layers palette. Perhaps your tutorial will  guide you through the process.

  • Rollover Tool Tips are NOT intuitive for error messages

    Just a note for the Adobe guys here:
    I've run into 2-3 occasions so far this morning that I was stymied by seemingly unresponsive DPS apps/services, only to discover the error message was hidden in a tooltip for the field.
    This happened both on the Folio Producer: Organizer (the very underdocumented Export command), and a couple times in viewer builder when I would bang "next" to no avail, only to finally notice a thin red line around a field.
    Not sure what the logic is for this, but that is not the proper usage of tooltips and is a pretty unfriendly experience for the user. Please, flash a big error popup in my face when there's an issue. I'd appreciate it.

    In the process of making a single folio viewer, you need to use the "export" function in Organizer. I went to do so, but the button was grayed out, and the "Export" command is not documented in either the "iPad publishing companion" or the "Uning Adobe DPS" document. Export is mentioned in the online help, but it never mentions that you have to publish the folio before you can export. It was only during a call to tech support that I happened to hover over the button long enough to see the "You must publish the app" warning in the tooltip.
    I now get it that "publishing" the folio is apparently a needed part of your process, but for a single issue viewer app, it never occurred to me that I needed to "publish" it, since Adobe would not be delivering the content.

  • Tool Tip is not aligning with data

    DBA Developer

    Hi Paul,
    The tooltip is a common graphical user interface element. It is used in conjunction with a cursor, usually a pointer. The user hovers the pointer over an item, without clicking it, and a tooltip may appear—a small "hover box" with information about the item
    being hovered over. In Reporting Services, we can also add tooltip in textbox, series of a chart or other items. And based on my test, the tooltip appears as a small hover box under the cursor when we pointer an item which has a tooltip. This is by design.
    If there are any misunderstanding, please elaborate the issue for further investigation. Then we can make further analysis.
    Thanks,
    Katherine Xiong
    If you have any feedback on our support, please click
    here.
    Katherine Xiong
    TechNet Community Support

  • Forcing crop tool to not move image

    In previous version of Photoshop, when you used the crop tool, it did not move your image around on-screen, so why is it doing it now? Is there a way to force the crop tool to act like the previous versions? It is very confusing to try to crop something now with everything moving around on screen.

    Thank you very much, "C". I thought we had to live with this odd behaviour.
    Not everybody might know what cog means. Here are some synonyms:
    http://dict.leo.org/ende/index_de.html#/search=Zahnrad&searchLoc=0&resultOrder=basic&multi wordShowSingle=on
    Nevertheless, the connection between cogs and image processing is still dubious...
    Best regards --Gernot Hoffmann

  • Pai Chart layout and Tool Tip not refreshing

    Hi All
    We have an application where we displaying data on Pai Chart based on Data-Grid row clicked.
    Its an Polling kind of application, where multiple option are there.
    When a data grid row clicked, in the Pai chart we displaying polling votes in percentage.
    Some question has 2 option and some 4 and out of those few are having votes.
    Ex: Question 1 has 2 option ( A, B ) and both got some votes.
          Question 2 has 3 options ( X,Y,Z ) and only " X " got all the votes.
    So when we clicked on data grid row for Q1 the Pai chart shows all the options ( 2 ) in block dividing manner.
    It has also outward tool tip to show the count and percentage.
    And when we clicked on Q2 which has 3 options but got votes for only 1, the Pai chart shows perfectly with 100% and one circle without divide, but the tool tip of Q1 not cleared. It shows tool tips of Q1 as well as Q2.
    And when adjust the Pai Chart Layout, then only it clears unwanted tool tips, but not automatically.
    For better understanding i have attached the screen shot of the problem. please look into that once.
    So any one who faced similar kind of problem or know the solution then please help me.
    Thanks
    Bijaya Kumar

    Hi Mitalee,
    Would you please check the PAM at https://websmp108.sap-ag.de/~sapidb/012002523100018972812014E
    On page 11 it says 64 bit IE11 is not supported; is your IE11 32 bit or 64 bit?

  • Alt-text 'tool tip' not appearing on some images

    We get pdf files created by outside sources that we then need to publish on our webpage.  I add tags to the pdf, then add the alt-text to the images via the Touch Up Text tool.  As well as I can determine, the tag for the alt-text is present in the pdf.  The Read Out Loud function in Acrobat reads the alt-text correctly as does a screen reader.  But the 'tool tip' does not appear on all images.  It seems that the more complex, mulitple layered dwg type images do not display the text, either from the browser, or from Acrobat itself.  Other dwg source images do work, and photgraphic images are ok.
    I have gone back through the pdfs to verify the existence of the figure tag, and that the alt-text is there.
    I have opened the tags dialog, looked at the properties, and added the text to the Title field as well as the alt-text and Actual Text.
    I have converted the images to jpgs, which resolves the issue, but greatly reduces the quality of the image.
    I am using Acrobat Pro 8.1.4 on a Windows XP, sp2 system.
    I am aware that the ADA requirement do not require the 'tool-tip' to function, but when you have many, many pages of images in a pdf using a screen reader or the read out loud function to test is not feasible for testing.  We need to have the tool-tip working, and I have run out of ideas on how to make it work.

    I just figured out that those photos had been set to a blending mode of Multiply
    because an earlier iteration of the design used transparency. But to the eye, they
    look like normal photos, so I didn't realize they were set to Multiply.
    This solved the problem but it's not heartening news. What if my graphic legitimately
    did have a blending mode set? What would my workaround be if I needed to set Alt Text
    for those images?

  • Tool tips not displaying

    I am running AI CS3 on Windows Vista and my tool tips do not display. I have the option selected in my preferences and have restarted the system after install to see if that helped. No luck. Thanks in advance for any help.

    Is caps lock on? If so, turn it off.

  • Removing tool tip texts in pdf?

    Hello there and good day. I have a pdf document in abobe 9, and it has hyperlinks and when I hover over them with the mouse it has the link addy in the tool tip text thing. I was wonder if there was a may to remove it or have that box blank. Thanks!

    Hi Josh,
    I do see the question mark with the tool tip in the test form, but the saved form does not reveal any question marks. The tool tips are not present.
    Thanks,
    Santi

  • How to use long texts in explanation tool tip?

    Hi ,
         Can anyone tell me how to add long text in Explanation tool tip?
    I am able to use short OTR texts in explanation tool tip but not able to use long OTR texts.
    Thanks and regards,
    Vivek Shetty.

    For long text
    method1
    Create TEXT node- general attributes change text type to include text
    then you can input text name/text object/text id/language
    method2
    create PROGRAM LINE node - use FM READ_TEXT to read it to a internal table
    then use LOOP or TABLE node to display it
    For TEXT module(For foreign language)
    Tr-code:smartforms -- choose Text module(not choose form)--create a text module object
    then enter smartform Create TEXT node- general attributes change text type to text module
    input the text module name which created by above
    btw SO10 is just for Scriptform, in smartforms we use text module to replace SO10

Maybe you are looking for