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=0; ti < document.links.length; 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=0;ti<instags.length;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");
    
    var d = document.createElementNS (XHTMLNS, "div");
    d.className = "nicetitle";
    tnt = document.createTextNode (nicetitle);
    pat = document.createElementNS (XHTMLNS, "p");
    pat.className = "titletext";
    pat.appendChild (tnt);
    d.appendChild (pat);
    if (lnk.href) {
        tnd = document.createTextNode(lnk.href);
        pad = document.createElementNS(XHTMLNS, "p");
	pad.className = "detination";
        d.appendChild (pad);
    }
    
    STD_WIDTH = 100;

    if (lnk.href) {
        h = lnk.href.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;
    }

    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 + 5) + 'px';
    d.style.left = (mx + -3) + 'px';    
    d.style.top = (my + 20) + 'px';
    if (window.innerWidth && ((mx+w) > window.innerWidth)) {
	//        d.style.left = (window.innerWidth - w - 25) + "px";
        d.style.left = (window.innerWidth - w - 20) + "px";
    }
    if (document.body.scrollWidth && ((mx+w) > document.body.scrollWidth)) {
	//        d.style.left = (document.body.scrollWidth - w - 25) + "px";
        d.style.left = (document.body.scrollWidth - w - 20) + "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;
  }
}





