﻿// JScript File
/*
Image w/ description tooltip- By Dynamic Web Coding (www.dyn-web.com)
Copyright 2002 by Sharon Paine
Visit http://www.dynamicdrive.com for this script

03/10/06 - SDW - Modified to allow use from within InnovaStudio content editor
  This file needs to be included in the page used to display the content
  and the doTooltip function has been modified to accept the data that was being
  stored in the array. The 2nd parameter can now be 'none' or '' if no image is 
  to be displayed. The path to the images is set to Content/Images.
*/

/* IMPORTANT: Put script after tooltip div or 
put tooltip div just before </BODY>. */

var dom = (document.getElementById) ? true : false;
var ns5 = ((navigator.userAgent.indexOf("Gecko")>-1) && dom) ? true: false;
var ie5 = ((navigator.userAgent.indexOf("MSIE")>-1) && dom) ? true : false;
var ns4 = (document.layers && !dom) ? true : false;
var ie4 = (document.all && !dom) ? true : false;
var nodyn = (!ns5 && !ns4 && !ie4 && !ie5) ? true : false;

// resize fix for ns4
var origWidth, origHeight;
if (ns4) {
  origWidth = window.innerWidth; origHeight = window.innerHeight;
  window.onresize = function() { if (window.innerWidth != origWidth || window.innerHeight != origHeight) history.go(0); }
}

// avoid error of passing event object in older browsers
if (nodyn) { event = "nope" }

/////////////////////// CUSTOMIZE HERE ////////////////////
// settings for tooltip 
// Do you want tip to move when mouse moves over link?
var tipFollowMouse= false; 
// Be sure to set tipWidth wide enough for widest image
var tipWidth= 160; 
var offX= 20; // how far from mouse to show tip
var offY= 12; 
var tipFontFamily= "Verdana, arial, helvetica, sans-serif";
var tipFontSize= "8pt";
// set default text color and background color for tooltip here
// individual tooltips can have their own (set in messages arrays)
// but don't have to
var tipFontColor= "#82796A";    // "#000000"; 
var tipBgColor= "#FFFFFF";      // "#DDECFF"; 
var tipBorderColor= "#DBDBDB";  // "#000080";
var tipBorderWidth= 3;
var tipBorderStyle= "ridge";
var tipPadding= 4;

/** this information is now being passed when the tooltip is called
// tooltip content goes here (image, description, optional bgColor, optional textcolor)
var messages = new Array();
// multi-dimensional arrays containing: 
// image and text for tooltip
// optional: bgColor and color to be sent to tooltip

messages[0] = new Array('red_balloon.gif','Here is a red balloon on a white background',"#FFFFFF");
messages[1] = new Array('duck2.gif','Here is a duck on a light blue background.',"#DDECFF");
messages[2] = new Array('test.gif','Test description','black','white');
**/
//////////////////// END OF CUSTOMIZATION AREA ///////////////////

/*
// preload images that are to appear in tooltip
// from arrays above
if (document.images) {
var theImgs = new Array();
for (var i=0; i<messages.length; i++) {
theImgs[i] = new Image();
theImgs[i].src = messages[i][0];
}
}
*/

// to layout image and text, 2-row table, image centered in top cell
// these go in var tip in doTooltip function
// startStr goes before image, midStr goes between image and text
var startStr = '<table width="' + tipWidth + '"><tr><td align="center" width="100%"><img src="';
var midStr = '" border="0"></td></tr><tr><td valign="top">';
var endStr = '</td></tr></table>';

//** 03/10/06 - SDW - Added following 
//** 03/14/06 - SDW - Replaced following
/*
var strTableStart = '<table width="' + tipWidth + '" >';
var strRowImgStart = '<tr><td align="center" width="100%"><img src="';
var strRowImgEnd = '" border="0"></td></tr>';
var strRowMsgStart = '<tr><td valign="top">';
var strRowMsgEnd = '</td></tr>';
var strTableEnd = '</table>';
*/
var strTableStart = '';
var strRowImgStart = '<img src="';
var strRowImgEnd = '" border="0"><br />';
var strRowMsgStart = '';
var strRowMsgEnd = '';
var strTableEnd = '';

////////////////////////////////////////////////////////////
// initTip - initialization for tooltip.
// Global variables for tooltip. 
// Set styles for all but ns4. 
// Set up mousemove capture if tipFollowMouse set true.
////////////////////////////////////////////////////////////
var tooltip, tipcss;
function initTip() {
if (nodyn) return;
tooltip = (ns4)? document.tipDiv.document: (ie4)? document.all['tipDiv']: (ie5||ns5)? document.getElementById('tipDiv'): null;
tipcss = (ns4)? document.tipDiv: tooltip.style;
if (ie4||ie5||ns5) { // ns4 would lose all this on rewrites
//** 03/14/06 - SDW - Removed following to allow dynamic sizing in FireFox
//tipcss.width = tipWidth+"px";
tipcss.fontFamily = tipFontFamily;
tipcss.fontSize = tipFontSize;
tipcss.color = tipFontColor;
tipcss.backgroundColor = tipBgColor;
tipcss.borderColor = tipBorderColor;
tipcss.borderWidth = tipBorderWidth+"px";
tipcss.padding = tipPadding+"px";
tipcss.borderStyle = tipBorderStyle;
}
if (tooltip&&tipFollowMouse) {
if (ns4) document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = trackMouse;
}
}

window.onload = initTip;

/////////////////////////////////////////////////
// doTooltip function
// Assembles content for tooltip and writes 
// it to tipDiv
/////////////////////////////////////////////////
var t1,t2; // for setTimeouts
var tipOn = false; // check if over tooltip link
function doTooltip(evt,strImgNm,strMsg,curBgColor) {

// 03/10/06 - SDW - Replaced array index with strImgNm, strMsg, and curBgColor parameters, added following statement
var strImgPath = "Content/ImageLib/" ;

if (!tooltip) return;
if (t1) clearTimeout(t1); if (t2) clearTimeout(t2);
tipOn = true;
// set colors if included in messages array
/*
if (messages[num][2]) var curBgColor = messages[num][2];
else curBgColor = tipBgColor;
*/
if (!curBgColor) curBgColor=tipBgColor;

/*
if (messages[num][3]) var curFontColor = messages[num][3];
else curFontColor = tipFontColor;
*/
curFontColor = tipFontColor;
if (ns4) {
  // var tip = '<table bgcolor="' + tipBorderColor + '" width="' + tipWidth + '" cellspacing="0" cellpadding="' + tipBorderWidth + '" border="0"><tr><td><table bgcolor="' + curBgColor + '" width="100%" cellspacing="0" cellpadding="' + tipPadding + '" border="0"><tr><td>'+ startStr + strImgPath + strImgNm + midStr + '<span style="font-family:' + tipFontFamily + '; font-size:' + tipFontSize + '; color:' + curFontColor + ';">' + strMsg + '</span>' + endStr + '</td></tr></table></td></tr></table>';
  var tip = '' ;
  tip = tip + '<table bgcolor="' + tipBorderColor + '" width="' + tipWidth + '" cellspacing="0" cellpadding="' + tipBorderWidth + '" border="0">';
  if (strImgNm.toLowerCase()!='none' && strImgNm.toLowerCase()!='') {
    tip = tip + '<tr><td><table bgcolor="' + curBgColor + '" width="100%" cellspacing="0" cellpadding="' + tipPadding + '" border="0"><tr><td>'+ startStr + strImgPath + strImgNm + strRowImgEnd ;
  }
  tip = tip + strRowMsgStart + '<span style="font-family:' + tipFontFamily + '; font-size:' + tipFontSize + '; color:' + curFontColor + ';">' + strMsg + '</span></td></tr></table></td></tr>';
  tip = tip + strTableEnd ;
  tooltip.write(tip);
  tooltip.close();
} else if (ie4||ie5||ns5) {
  // var tip = startStr + strImgPath + strImgNm + midStr + '<span style="font-family:' + tipFontFamily + '; font-size:' + tipFontSize + '; color:' + curFontColor + ';">' + strMsg + '</span>' + endStr;
  var tip = '' ;
  tip = tip + strTableStart ;
  if (strImgNm.toLowerCase()!='none' && strImgNm.toLowerCase()!='') {
    tip = tip + strRowImgStart + strImgPath + strImgNm + strRowImgEnd ;
  }
  tip = tip + strRowMsgStart + '<span style="font-family:' + tipFontFamily + '; font-size:' + tipFontSize + '; color:' + curFontColor + ';">' + strMsg + '</span>' + strRowMsgEnd ;
  tip = tip + strTableEnd ;
  tipcss.backgroundColor = curBgColor;
  tooltip.innerHTML = tip;
}

if (!tipFollowMouse) positionTip(evt);
else t1=setTimeout("tipcss.visibility='visible'",100);
}

var mouseX, mouseY;
function trackMouse(evt) {
mouseX = (ns4||ns5)? evt.pageX: window.event.clientX + document.body.scrollLeft;
mouseY = (ns4||ns5)? evt.pageY: window.event.clientY + document.body.scrollTop;
if (tipOn) positionTip(evt);
}

/////////////////////////////////////////////////////////////
// positionTip function
// If tipFollowMouse set false, so trackMouse function
// not being used, get position of mouseover event.
// Calculations use mouseover event position, 
// offset amounts and tooltip width to position
// tooltip within window.
/////////////////////////////////////////////////////////////
function positionTip(evt) {
  if (!tipFollowMouse) {
    mouseX = (ns4||ns5)? evt.pageX: window.event.clientX + document.body.scrollLeft;
    mouseY = (ns4||ns5)? evt.pageY: window.event.clientY + document.body.scrollTop;
  }

  // tooltip width and height
  var tpWd = (ns4)? tooltip.width: (ie4||ie5)? tooltip.clientWidth: tooltip.offsetWidth;
  var tpHt = (ns4)? tooltip.height: (ie4||ie5)? tooltip.clientHeight: tooltip.offsetHeight;
  // document area in view (subtract scrollbar width for ns)
  var winWd = (ns4||ns5)? window.innerWidth-20+window.pageXOffset: document.body.clientWidth+document.body.scrollLeft;
  var winHt = (ns4||ns5)? window.innerHeight-20+window.pageYOffset: document.body.clientHeight+document.body.scrollTop;
  // check mouse position against tip and window dimensions
  // and position the tooltip 
  if ((mouseX+offX+tpWd)>winWd) 
    tipcss.left = (ns4)? mouseX-(tpWd+offX): mouseX-(tpWd+offX)+"px";
  else tipcss.left = (ns4)? mouseX+offX: mouseX+offX+"px";

//alert(winHt-(tpHt+offY));
  if ((mouseY+offY+tpHt)>winHt) {
    //** 03/10/06 - SDW - Added following if... Existing code placed in else block.
    if (winHt-(tpHt+offY) < 0){
      tipcss.top = (ns4)? 0: 0+"px";
    } else {
      tipcss.top = (ns4)? winHt-(tpHt+offY): winHt-(tpHt+offY)+"px";
    }
  } else {
    tipcss.top = (ns4)? mouseY+offY: mouseY+offY+"px";
  }

  if (!tipFollowMouse) t1=setTimeout("tipcss.visibility='visible'",100);
}

function hideTip() {
if (!tooltip) return;
t2=setTimeout("tipcss.visibility='hidden'",100);
tipOn = false;
}


