/*************************************************************************
This code is from Dynamic Web Coding at dyn-web.com
Copyright 2008 by Sharon Paine
See Terms of Use at www.dyn-web.com/business/terms.php
regarding conditions under which you may use this code.
This notice must be retained in the code as is!
for use with dw_tooltip.js
Version date: Aug 2008 (dw_Event.add instead of addLoadEvent for onload )
*************************************************************************/
// Used when the tooltip content is in HTML elements with tipContent class attached
dw_Tooltip.writeStyleRule = function() {
if ( document.createElement && document.getElementsByTagName &&
( document.addEventListener || document.attachEvent ) ) {
document.write('');
}
}
///////////////////////////////////////////////////////////////////////////////////
// Initialization: init tooltip and set up event delegation
dw_Event.add( window, 'load', dw_Tooltip.init );
dw_Event.add( window, 'load', dw_Tooltip.initHandlers );
// removed in favor of event delegation
function dw_initShowTip() {} // empty fn to avoid errors
// fn's for ajax in head of ajax demo
function dw_TooltipRequest() {}
/////////////////////////////////////////////////////////////////////
// Positioning algorithms
dw_Tooltip.positionWindowCenter = function() {
var x = Math.round( (dw_Viewport.width - dw_Tooltip.tip.offsetWidth)/2 ) + dw_Viewport.scrollX;
var y = Math.round( (dw_Viewport.height - dw_Tooltip.tip.offsetHeight)/2 ) + dw_Viewport.scrollY;
dw_Tooltip.setPosition(x,y);
}
// more later or TBA
/////////////////////////////////////////////////////////////////////
// formatting and display functions
// for style sheet specs: id for stickyTable,
// stickyBar class for tr, div classes: stickyTitle, stickyContent (inside td's)
dw_Tooltip.wrapSticky = function(str, title) {
title = title || '';
var src = dw_Tooltip.defaultProps['closeBoxImage'];
var msg = '
' +
'' + title + ' | ' +
'' +
' |
' +
'' + str + ' |
';
return msg;
}
// optional caption, optional width supported by all these wrapFn's
dw_Tooltip.wrapToWidth = function(obj) {
if (!obj) return ''; var str = obj['str'];
var caption = obj['caption'] || '';
if ( this.sticky && this.defaultProps['showCloseBox'] ) {
str = dw_Tooltip.wrapSticky(str, caption );
} else {
if (caption) { str = '' + obj['caption'] + '
' + str; }
}
if ( obj['w'] ) this.setTipWidth( obj['w'] );
return str;
}
// w, h in obj are width and height of image
dw_Tooltip.wrapImageToWidth = function(obj) {
if (!obj) return ''; dw_getImage( obj['img'] );
var caption = obj['caption'] || ''; var w = obj['w'];
var str = '
';
if ( this.sticky && this.defaultProps['showCloseBox'] ) {
str = dw_Tooltip.wrapSticky(str, caption );
w += 8; // attempt to account for padding etc of inner wrapper
} else {
if (caption) { str = '' + obj['caption'] + '
' + str; }
}
if (w) this.setTipWidth(w);
return str;
}
// Image and text side by side
// w is width to set tipDiv
dw_Tooltip.wrapTextByImage = function(obj) {
if (!obj) return ''; dw_getImage( obj['img'] );
var caption = obj['caption'] || '';
var str = '' +
'' + obj['txt'] + ' | ' +
'' +
' |
';
if ( this.sticky && this.defaultProps['showCloseBox'] ) {
str = dw_Tooltip.wrapSticky(str, caption );
} else {
if (caption) { str = '' + obj['caption'] + '
' + str; }
}
if ( obj['w'] ) this.setTipWidth( obj['w'] );
return str;
}
dw_Tooltip.wrapImageOverText = function(obj) {
if (!obj) return ''; dw_getImage( obj['img'] );
var caption = obj['caption'] || '';
var str = '' + obj['txt'] + '
';
if ( this.sticky && this.defaultProps['showCloseBox'] ) {
str = dw_Tooltip.wrapSticky(str, caption );
} else {
if (caption) { str = '' + obj['caption'] + '
' + str; }
}
if ( obj['w'] ) this.setTipWidth( obj['w'] );
return str;
}
dw_Tooltip.wrapTextOverImage = function(obj) {
if (!obj) return ''; dw_getImage( obj['img'] );
var caption = obj['caption'] || '';
var str = '' + obj['txt'] + '
';
if ( this.sticky && this.defaultProps['showCloseBox'] ) {
str = dw_Tooltip.wrapSticky(str, caption );
} else {
if (caption) { str = '' + obj['caption'] + '
' + str; }
}
if ( obj['w'] ) this.setTipWidth( obj['w'] );
return str;
}
// several functions include option of setting width
dw_Tooltip.setTipWidth = function(w) {
w += dw_backCompatWidth( this.tip ); // in case padding and border set on tipDiv
this.tip.style.width = w + "px";
}
/////////////////////////////////////////////////////////////////////
// a few utility functions
function dw_getImage(src) {
var img = new Image();
img.src = src;
}
// To obtain padding and border for setting width on an element
function dw_backCompatWidth(el) {
var val = 0;
if ( el.currentStyle && !window.opera && (document.compatMode == null || document.compatMode == "BackCompat") ) {
var p = parseInt( dw_getCurrentStyle(el, 'paddingLeft') ) + parseInt( dw_getCurrentStyle(el, 'paddingRight') );
var b = parseInt( dw_getCurrentStyle(el, 'borderLeftWidth') ) + parseInt( dw_getCurrentStyle(el, 'borderRightWidth') )
val = p + b;
}
return val;
}
// prop must be camelCase (e.g., paddingLeft, borderLeftWidth)
function dw_getCurrentStyle(el, prop) {
var val = '';
if (document.defaultView && document.defaultView.getComputedStyle) {
val = document.defaultView.getComputedStyle(el, null)[prop];
} else if (el.currentStyle) {
val = el.currentStyle[prop];
// from jquery, dean edwards, see http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
if ( !/^\d+(px)?$/i.test(val) && /^\d/.test(val) ) {
var style = el.style.left;
var runtimeStyle = el.runtimeStyle.left;
el.runtimeStyle.left = el.currentStyle.left;
el.style.left = val || 0;
val = el.style.pixelLeft + "px";
el.style.left = style;
el.runtimeStyle.left = runtimeStyle;
}
}
return val;
}