function DHTMLToolTip(){ // Configuration settings this.AmazonImageServer = "images.amazon.com"; // Server where Amazon images will come from this.DefaultBackgroundColor = "#fff"; // Default background color of tool tips this.OffsetXPoint = -60; // X offset of tooltips this.OffsetYPoint = 20; // Y offset of tooltips // Method declarations this.AttachDocumentOnMouseMove = AttachDocumentOnMouseMove; this.AttachLinkOnMouseOut = AttachLinkOnMouseOut; this.AttachLinkOnMouseOver = AttachLinkOnMouseOver; this.AttachWindowOnLoad = AttachWindowOnLoad; this.CreateToolTipDiv = CreateToolTipDiv; this.GetAmazonImageSource = GetAmazonImageSource; this.GetBody = GetBody; this.GetPositioningElement = GetPositioningElement; this.GetToolTipObject = GetToolTipObject; this.HideTip = HideTip; this.Initialize = Initialize; this.IsToolTipCompatibleBrowser = IsToolTipCompatibleBrowser; this.PositionTip = PositionTip; this.RewriteAmazonLinksWithTooltips = RewriteAmazonLinksWithTooltips; this.ShowAmazonImgTooltip = ShowAmazonImgTooltip; this.ShowTip = ShowTip; // Environment and variables this.EnableTip = false; this.Initialized = false; this.IsIE = false; this.IsNS6 = false; this.ToolTipObject = null; this.ToolTipObjectID = "DDRIVE_dhtmltooltip"; // Adds the tooltip pane with requisite styling; // Update styling here as needed. function CreateToolTipDiv(){ var div = document.createElement("div"); div.id = DHTMLToolTipProvider.ToolTipObjectID; div.style.position = 'absolute'; div.style.width = '150px'; div.style.border = '3px double black'; div.style.padding = '2px;'; div.style.backgroundColor = DHTMLToolTipProvider.DefaultBackgroundColor; div.style.visibility = 'hidden'; div.style.zindex = '100'; div.style.filter = 'progid:DXImageTransform.Microsoft.Shadow(color=gray,direction=135)'; DHTMLToolTipProvider.GetBody().appendChild(div); return div; } // Attaches an event handler to document.onmousemove function AttachDocumentOnMouseMove(func){ var oldonmm = document.onmousemove; if (typeof document.onmousemove != 'function'){ document.onmousemove = func; } else { document.onmousemove = function(){ oldonmm(); func(); } } } // Attaches an event handler to link.onmouseover function AttachLinkOnMouseOver(thelink, func){ var oldonmo = thelink.onmouseover; if (typeof thelink.onmouseover != 'function'){ thelink.onmouseover = func; } else { thelink.onmouseover = function(){ oldonmo(); func(); } } } // Attaches an event handler to link.onmouseout function AttachLinkOnMouseOut(thelink, func){ var oldonmo = thelink.onmouseout; if (typeof thelink.onmouseout != 'function'){ thelink.onmouseout = func; } else { thelink.onmouseout = function(){ oldonmo(); func(); } } } // Attaches an event handler to window.onload function AttachWindowOnLoad(func){ var oldonload = window.onload; if (typeof window.onload != 'function'){ window.onload = func; } else { window.onload = function(){ oldonload(); func(); } } } // Parses an Amazon referral URL and gets the associated image URL (empty string if N/A) function GetAmazonImageSource(amazonUrl){ var amazonImgSrc = ""; var AmazonLinkMatches = amazonUrl.match(/^http:\/\/www\.amazon\.[^\/]+\/exec\/obidos\/ASIN\/([\w\d]{10})\/[-\w\d]+$/i); if(AmazonLinkMatches && AmazonLinkMatches.length > 1){ amazonImgSrc = "http://" + DHTMLToolTipProvider.AmazonImageServer + "/images/P/" + AmazonLinkMatches[1] + ".01.MZZZZZZZ.jpg" } return amazonImgSrc; } // Gets the body element of the document function GetBody(){ return document.body ? document.body : document.documentElement; } // Gets the element that positions should be calculated from function GetPositioningElement(){ return document.documentElement ? document.documentElement : document.body } // Retrieves the tool tip object from the document function GetToolTipObject(){ if(DHTMLToolTipProvider.IsToolTipCompatibleBrowser()){ return document.all ? document.all[DHTMLToolTipProvider.ToolTipObjectID] : document.getElementById ? document.getElementById(DHTMLToolTipProvider.ToolTipObjectID) : ""; } return null; } // Hides the tooltip pane function HideTip(e){ if(DHTMLToolTipProvider.IsToolTipCompatibleBrowser()){ DHTMLToolTipProvider.EnableTip = false; DHTMLToolTipProvider.ToolTipObject.style.visibility = "hidden"; DHTMLToolTipProvider.ToolTipObject.style.left = "-1000px"; DHTMLToolTipProvider.ToolTipObject.style.backgroundColor = DHTMLToolTipProvider.DefaultBackgroundColor; DHTMLToolTipProvider.ToolTipObject.style.width = ''; } } // Initializes the tool tip provider function Initialize(){ if(DHTMLToolTipProvider.Initialized){ return; } if(document.all){ DHTMLToolTipProvider.IsIE = true; } else if(document.getElementById){ DHTMLToolTipProvider.IsNS6 = true; } DHTMLToolTipProvider.CreateToolTipDiv(); DHTMLToolTipProvider.ToolTipObject = DHTMLToolTipProvider.GetToolTipObject(); DHTMLToolTipProvider.RewriteAmazonLinksWithTooltips(); DHTMLToolTipProvider.AttachDocumentOnMouseMove(DHTMLToolTipProvider.PositionTip); DHTMLToolTipProvider.Initialized = true; } // Determines if the current browser can display the tool tip. function IsToolTipCompatibleBrowser(){ if(DHTMLToolTipProvider.IsIE || DHTMLToolTipProvider.IsNS6){ return true; } return false; } // Positions the tooltip pane function PositionTip(e){ if(DHTMLToolTipProvider.IsToolTipCompatibleBrowser() && DHTMLToolTipProvider.EnableTip){ var curX = (DHTMLToolTipProvider.IsNS6) ? e.pageX : event.clientX + DHTMLToolTipProvider.GetPositioningElement().scrollLeft; var curY = (DHTMLToolTipProvider.IsNS6) ? e.pageY : event.clientY + DHTMLToolTipProvider.GetPositioningElement().scrollTop; //Find out how close the mouse is to the corner of the window var rightedge = DHTMLToolTipProvider.IsIE && !window.opera ? DHTMLToolTipProvider.GetPositioningElement().clientWidth - event.clientX-DHTMLToolTipProvider.OffsetXPoint : window.innerWidth - e.clientX - DHTMLToolTipProvider.OffsetXPoint - 20; var bottomedge = DHTMLToolTipProvider.IsIE && !window.opera ? DHTMLToolTipProvider.GetPositioningElement().clientHeight - event.clientY-DHTMLToolTipProvider.OffsetYPoint : window.innerHeight - e.clientY - DHTMLToolTipProvider.OffsetYPoint - 20; var leftedge = (DHTMLToolTipProvider.OffsetXPoint < 0) ? DHTMLToolTipProvider.OffsetXPoint * (-1) : -1000; //if the horizontal distance isn't enough to accomodate the width of the context menu if (rightedge < DHTMLToolTipProvider.ToolTipObject.offsetWidth){ //move the horizontal position of the menu to the left by it's width DHTMLToolTipProvider.ToolTipObject.style.left = DHTMLToolTipProvider.IsIE ? DHTMLToolTipProvider.GetPositioningElement().scrollLeft + event.clientX - DHTMLToolTipProvider.ToolTipObject.offsetWidth + "px" : window.pageXOffset + e.clientX-DHTMLToolTipProvider.ToolTipObject.offsetWidth + "px"; } else if (curX < leftedge){ DHTMLToolTipProvider.ToolTipObject.style.left = "5px"; } else{ //position the horizontal position of the menu where the mouse is positioned DHTMLToolTipProvider.ToolTipObject.style.left = curX + DHTMLToolTipProvider.OffsetXPoint + "px"; } //same concept with the vertical position if (bottomedge < DHTMLToolTipProvider.ToolTipObject.offsetHeight){ DHTMLToolTipProvider.ToolTipObject.style.top = DHTMLToolTipProvider.IsIE ? DHTMLToolTipProvider.GetPositioningElement().scrollTop + event.clientY - DHTMLToolTipProvider.ToolTipObject.offsetHeight - DHTMLToolTipProvider.OffsetYPoint + "px" : window.pageYOffset + e.clientY - DHTMLToolTipProvider.ToolTipObject.offsetHeight - DHTMLToolTipProvider.OffsetYPoint + "px"; } else{ DHTMLToolTipProvider.ToolTipObject.style.top = curY + DHTMLToolTipProvider.OffsetYPoint + "px"; } DHTMLToolTipProvider.ToolTipObject.style.visibility = "visible"; } } // Rewrites the links in the document to provide image tooltips for Amazon referral links function RewriteAmazonLinksWithTooltips(){ for(i = 0; i < document.links.length; i++){ var amazonImgSrc = DHTMLToolTipProvider.GetAmazonImageSource(document.links[i].href); if(amazonImgSrc != ""){ DHTMLToolTipProvider.AttachLinkOnMouseOver(document.links[i], DHTMLToolTipProvider.ShowAmazonImgTooltip); DHTMLToolTipProvider.AttachLinkOnMouseOut(document.links[i], DHTMLToolTipProvider.HideTip); // Preload all images var imgLoad = new Image(); imgLoad.src = amazonImgSrc; } } } // Shows a tooltip with an Amazon product image in it function ShowAmazonImgTooltip(e){ if (!e) var e = window.event; // Get the event target var targ; if (e.target) targ = e.target; else if (e.srcElement) targ = e.srcElement; if (targ.nodeType == 3) // defeat Safari bug targ = targ.parentNode; // We have to act on a link, so go up through the DOM tree until we get one var docElement = DHTMLToolTipProvider.GetBody(); while(targ != docElement && targ.nodeName.toLowerCase() != "a"){ targ = targ.parentNode; } // We never got a link if(targ == docElement){ return false; } // We got a link; show the tooltip var imgurl, thecolor, thewidth; if (DHTMLToolTipProvider.IsToolTipCompatibleBrowser()){ var amazonImgSrc = DHTMLToolTipProvider.GetAmazonImageSource(targ.href); if(amazonImgSrc != ""){ var img = new Image(); img.src = amazonImgSrc; DHTMLToolTipProvider.ToolTipObject.innerHTML = ''; DHTMLToolTipProvider.ToolTipObject.style.width = img.width + "px"; DHTMLToolTipProvider.EnableTip = true; return false; } } } // Shows a tooltip function ShowTip(thetext, thecolor, thewidth){ if(DHTMLToolTipProvider.IsToolTipCompatibleBrowser()){ if(typeof thewidth != "undefined"){ DHTMLToolTipProvider.ToolTipObject.style.width = thewidth + "px"; } else{ DHTMLToolTipProvider.ToolTipObject.style.width = ""; } if (typeof thecolor != "undefined" && thecolor != ""){ DHTMLToolTipProvider.ToolTipObject.style.backgroundColor = thecolor; } DHTMLToolTipProvider.ToolTipObject.innerHTML = thetext; DHTMLToolTipProvider.EnableTip = true; return false; } } } var DHTMLToolTipProvider = new DHTMLToolTip(); DHTMLToolTipProvider.AttachWindowOnLoad(DHTMLToolTipProvider.Initialize);