1 addEvent(window, "load", makeNiceTitles);
\r
3 var XHTMLNS = "http://www.w3.org/1999/xhtml";
\r
4 var CURRENT_NICE_TITLE;
\r
5 var browser = new Browser();
\r
7 function makeNiceTitles() {
\r
8 if (!document.createElement || !document.getElementsByTagName) return;
\r
9 // add namespace methods to HTML DOM; this makes the script work in both
\r
10 // HTML and XML contexts.
\r
11 if(!document.createElementNS)
\r
13 document.createElementNS = function(ns,elt) {
\r
14 return document.createElement(elt);
\r
18 if( !document.links )
\r
20 document.links = document.getElementsByTagName("a");
\r
22 for (var ti=0;ti<document.links.length;ti++) {
\r
23 var lnk = document.links[ti];
\r
25 lnk.setAttribute("nicetitle",lnk.title);
\r
26 lnk.removeAttribute("title");
\r
27 addEvent(lnk,"mouseover",showNiceTitle);
\r
28 addEvent(lnk,"mouseout",hideNiceTitle);
\r
29 addEvent(lnk,"focus",showNiceTitle);
\r
30 addEvent(lnk,"blur",hideNiceTitle);
\r
33 var instags = document.getElementsByTagName("ins");
\r
35 for (var ti=0;ti<instags.length;ti++) {
\r
36 var instag = instags[ti];
\r
37 if (instag.dateTime) {
\r
38 var strDate = instag.dateTime;
\r
39 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));
\r
40 instag.setAttribute("nicetitle","Added on "+dtIns.toString());
\r
41 addEvent(instag,"mouseover",showNiceTitle);
\r
42 addEvent(instag,"mouseout",hideNiceTitle);
\r
43 addEvent(instag,"focus",showNiceTitle);
\r
44 addEvent(instag,"blur",hideNiceTitle);
\r
50 function findPosition( oLink ) {
\r
51 if( oLink.offsetParent ) {
\r
52 for( var posX = 0, posY = 0; oLink.offsetParent; oLink = oLink.offsetParent ) {
\r
53 posX += oLink.offsetLeft;
\r
54 posY += oLink.offsetTop;
\r
56 return [ posX, posY ];
\r
58 return [ oLink.x, oLink.y ];
\r
62 function showNiceTitle(e) {
\r
63 if (CURRENT_NICE_TITLE) hideNiceTitle(CURRENT_NICE_TITLE);
\r
64 if (!document.getElementsByTagName) return;
\r
65 if (window.event && window.event.srcElement) {
\r
66 lnk = window.event.srcElement
\r
67 } else if (e && e.target) {
\r
71 if (lnk.nodeName.toUpperCase() != 'A') {
\r
72 // lnk is not actually the link -- ascend parents until we hit a link
\r
73 lnk = getParent(lnk,"A");
\r
76 nicetitle = lnk.getAttribute("nicetitle");
\r
78 var d = document.createElementNS(XHTMLNS,"div");
\r
79 d.className = "nicetitle";
\r
80 tnt = document.createTextNode(nicetitle);
\r
81 pat = document.createElementNS(XHTMLNS,"p");
\r
82 pat.className = "titletext";
\r
83 pat.appendChild(tnt);
\r
86 tnd = document.createTextNode(lnk.href);
\r
87 pad = document.createElementNS(XHTMLNS,"p");
\r
88 pad.className = "destination";
\r
89 pad.appendChild(tnd);
\r
95 h = lnk.href.length;
\r
96 } else { h = nicetitle.length; }
\r
97 if (nicetitle.length) {
\r
98 t = nicetitle.length;
\r
100 h_pixels = h*6; t_pixels = t*10;
\r
102 if (h_pixels > STD_WIDTH) {
\r
104 } else if ((STD_WIDTH>t_pixels) && (t_pixels>h_pixels)) {
\r
106 } else if ((STD_WIDTH>t_pixels) && (h_pixels>t_pixels)) {
\r
112 d.style.width = w + 'px';
\r
115 mx = lnk.offsetLeft;
\r
116 my = lnk.offsetTop;
\r
118 mpos = findPosition(lnk);
\r
121 //xy = getMousePosition(e);
\r
122 //mx = xy[0]; my = xy[1];
\r
124 d.style.left = (mx+15) + 'px';
\r
125 d.style.top = (my+35) + 'px';
\r
126 if (window.innerWidth && ((mx+w) > window.innerWidth)) {
\r
127 d.style.left = (window.innerWidth - w - 25) + "px";
\r
129 if (document.body.scrollWidth && ((mx+w) > document.body.scrollWidth)) {
\r
130 d.style.left = (document.body.scrollWidth - w - 25) + "px";
\r
133 document.getElementsByTagName("body")[0].appendChild(d);
\r
135 CURRENT_NICE_TITLE = d;
\r
138 function hideNiceTitle(e) {
\r
139 if (!document.getElementsByTagName) return;
\r
140 if (CURRENT_NICE_TITLE) {
\r
141 document.getElementsByTagName("body")[0].removeChild(CURRENT_NICE_TITLE);
\r
142 CURRENT_NICE_TITLE = null;
\r
146 // Add an eventListener to browsers that can do it somehow.
\r
147 // Originally by the amazing Scott Andrew.
\r
148 function addEvent(obj, evType, fn){
\r
149 if (obj.addEventListener){
\r
150 obj.addEventListener(evType, fn, false);
\r
152 } else if (obj.attachEvent){
\r
153 var r = obj.attachEvent("on"+evType, fn);
\r
160 function getParent(el, pTagName) {
\r
161 if (el == null) return null;
\r
162 else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) // Gecko bug, supposed to be uppercase
\r
165 return getParent(el.parentNode, pTagName);
\r
168 function getMousePosition(event) {
\r
169 if (browser.isIE) {
\r
170 x = window.event.clientX + document.documentElement.scrollLeft
\r
171 + document.body.scrollLeft;
\r
172 y = window.event.clientY + document.documentElement.scrollTop
\r
173 + document.body.scrollTop;
\r
175 if (browser.isNS) {
\r
176 x = event.clientX + window.scrollX;
\r
177 y = event.clientY + window.scrollY;
\r
182 // Determine browser and version.
\r
184 function Browser() {
\r
185 // blah, browser detect, but mouse-position stuff doesn't work any other way
\r
190 this.version = null;
\r
192 ua = navigator.userAgent;
\r
195 if ((i = ua.indexOf(s)) >= 0) {
\r
197 this.version = parseFloat(ua.substr(i + s.length));
\r
202 if ((i = ua.indexOf(s)) >= 0) {
\r
204 this.version = parseFloat(ua.substr(i + s.length));
\r
208 // Treat any other "Gecko" browser as NS 6.1.
\r
211 if ((i = ua.indexOf(s)) >= 0) {
\r
213 this.version = 6.1;
\r