addEvent(window, "load", makeNiceTitles); var XHTMLNS = "http://www.w3.org/1999/xhtml"; var CURRENT_NICE_TITLE; var browser = new Browser(); function makeNiceTitles() { if (!document.createElement || !document.getElementsByTagName) return; // add namespace methods to HTML DOM; this makes the script work in both // HTML and XML contexts. if(!document.createElementNS) { document.createElementNS = function(ns,elt) { return document.createElement(elt); } } if( !document.links ) { document.links = document.getElementsByTagName("a"); } for (var ti=document.links.length - 1;ti >= 0 ;ti--) { var lnk = document.links[ti]; if (lnk.title) { lnk.setAttribute("nicetitle",lnk.title); lnk.removeAttribute("title"); addEvent(lnk,"mouseover",showNiceTitle); addEvent(lnk,"mouseout",hideNiceTitle); addEvent(lnk,"focus",showNiceTitle); addEvent(lnk,"blur",hideNiceTitle); } } var instags = document.getElementsByTagName("ins"); if (instags) { for (var ti=instags.length-1;ti >= 0;ti--) { var instag = instags[ti]; if (instag.dateTime) { var strDate = instag.dateTime; var dtIns = new Date(strDate.substring(0,4),parseInt(strDate.substring(4,6)-1),strDate.substring(6,8),strDate.substring(9,11),strDate.substring(11,13),strDate.substring(13,15)); instag.setAttribute("nicetitle","Added on "+dtIns.toString()); addEvent(instag,"mouseover",showNiceTitle); addEvent(instag,"mouseout",hideNiceTitle); addEvent(instag,"focus",showNiceTitle); addEvent(instag,"blur",hideNiceTitle); } } } } function findPosition( oLink ) { if( oLink.offsetParent ) { for( var posX = 0, posY = 0; oLink.offsetParent; oLink = oLink.offsetParent ) { posX += oLink.offsetLeft; posY += oLink.offsetTop; } return [ posX, posY ]; } else { return [ oLink.x, oLink.y ]; } } function showNiceTitle(e) { if (CURRENT_NICE_TITLE) hideNiceTitle(CURRENT_NICE_TITLE); if (!document.getElementsByTagName) return; if (window.event && window.event.srcElement) { lnk = window.event.srcElement } else if (e && e.target) { lnk = e.target } if (!lnk) return; if (lnk.nodeType == 3) { // lnk is a textnode -- ascend parents until we hit a link lnk = getParent(lnk,"A"); } if (!lnk) return; nicetitle = lnk.getAttribute("nicetitle"); author = ''; if (nicetitle.indexOf('|||') > -1){ info_array = nicetitle.split(" ||| "); if (info_array.length == 2){ has_author = true; nicetitle = info_array[0]; author = info_array[1]; is_preformatted = false; } else { is_preformatted = true; } } else { is_preformatted = false; } nicetitle = unescape(nicetitle); var d = document.createElementNS(XHTMLNS,"div"); d.className = "nicetitle"; tnt = document.createTextNode(nicetitle); the_link = '' if (lnk.href) { the_link = lnk.href; if (the_link.length > 50){ the_link = the_link.substr(0,50) + ' ... [more]' } } if (! is_preformatted){ pat = document.createElementNS(XHTMLNS,"p"); pat.className = "titletext"; pat.appendChild(tnt); d.appendChild(pat); if (author){ author_node = document.createTextNode('- ' + author); pad = document.createElementNS(XHTMLNS,"p"); pad.className = "author"; pad.appendChild(author_node); d.appendChild(pad); } if (the_link){ tnd = document.createTextNode(the_link); pad = document.createElementNS(XHTMLNS,"p"); pad.className = "destination"; pad.appendChild(tnd); d.appendChild(pad); } } else { // is_preformatted = true pat = document.createElementNS(XHTMLNS,"p"); // pat.className = "titletext"; // pat.appendChild(tnt); d.appendChild(pat); for (i = 0; i < info_array.length; i++){ a_node = document.createTextNode(info_array[i]); pad = document.createElementNS(XHTMLNS,"p"); pad.className = "nicetitle_filler"; pad.appendChild(a_node); d.appendChild(pad); } } STD_WIDTH = 300; if (the_link) { h = the_link.length; } else { h = nicetitle.length; } if (nicetitle.length) { t = nicetitle.length; } h_pixels = h*6; t_pixels = t*10; if (h_pixels > STD_WIDTH) { w = h_pixels; } else if ((STD_WIDTH>t_pixels) && (t_pixels>h_pixels)) { w = t_pixels; } else if ((STD_WIDTH>t_pixels) && (h_pixels>t_pixels)) { w = h_pixels; } else { w = STD_WIDTH; } d.style.width = w + 'px'; /* mx = lnk.offsetLeft; my = lnk.offsetTop; */ mpos = findPosition(lnk); mx = mpos[0]; my = mpos[1]; //xy = getMousePosition(e); //mx = xy[0]; my = xy[1]; d.style.left = (mx+15) + 'px'; d.style.top = (my+35) + 'px'; if (window.innerWidth && ((mx+w) > window.innerWidth)) { d.style.left = (window.innerWidth - w - 25) + "px"; } if (document.body.scrollWidth && ((mx+w) > document.body.scrollWidth)) { d.style.left = (document.body.scrollWidth - w - 25) + "px"; } document.getElementsByTagName("body")[0].appendChild(d); CURRENT_NICE_TITLE = d; } function hideNiceTitle(e) { if (!document.getElementsByTagName) return; if (CURRENT_NICE_TITLE) { document.getElementsByTagName("body")[0].removeChild(CURRENT_NICE_TITLE); CURRENT_NICE_TITLE = null; } } // Add an eventListener to browsers that can do it somehow. // Originally by the amazing Scott Andrew. function addEvent(obj, evType, fn){ if (obj.addEventListener){ obj.addEventListener(evType, fn, true); return true; } else if (obj.attachEvent){ var r = obj.attachEvent("on"+evType, fn); return r; } else { return false; } } function getParent(el, pTagName) { if (el == null) return null; else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) // Gecko bug, supposed to be uppercase return el; else return getParent(el.parentNode, pTagName); } function getMousePosition(event) { if (browser.isIE) { x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft; y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop; } if (browser.isNS) { x = event.clientX + window.scrollX; y = event.clientY + window.scrollY; } return [x,y]; } // Determine browser and version. function Browser() { // blah, browser detect, but mouse-position stuff doesn't work any other way var ua, s, i; this.isIE = false; this.isNS = false; this.version = null; ua = navigator.userAgent; s = "MSIE"; if ((i = ua.indexOf(s)) >= 0) { this.isIE = true; this.version = parseFloat(ua.substr(i + s.length)); return; } s = "Netscape6/"; if ((i = ua.indexOf(s)) >= 0) { this.isNS = true; this.version = parseFloat(ua.substr(i + s.length)); return; } // Treat any other "Gecko" browser as NS 6.1. s = "Gecko"; if ((i = ua.indexOf(s)) >= 0) { this.isNS = true; this.version = 6.1; return; } }