addEvent(window, "load", makeNiceTitles);
addEvent(document, "mousemove", fixpos);
window.document.onmousemove = fixpos;

function fixpos(){
	//mx = eval(event.clientX) + 15;
	//my = eval(event.clientY) + 15;
	
	    xy = getMousePosition(this);
	    mx = xy[0]+15;
	    my = xy[1]+15;
	
	if(mx>document.body.clientWidth/2){
		mx-=300;
	}
	
	var divs = document.getElementsByTagName("div");
	for(var i=0;i<divs.length;i++){
		if(divs[i].className=="nicetitle"){
			ptr = divs[i];
			ptr.style.top = '' + my + 'px';
			ptr.style.left = '' + mx + 'px';
			//window.status="x:" + ptr.style.left + " y:" + ptr.style.top;
		}
	}
}

var CURRENT_NICE_TITLE;
var browser = new Browser();

function makeNiceTitles() {
    if (!document.links || !document.createElement) return;
    for (var ti=0;ti<document.links.length;ti++) {
        var lnk = document.links[ti];
        if (lnk.title) {
        
        	var mytitle = new String(lnk.title);
        	//mytitle = mytitle.replace(/</gi,"linebreak");
        
            //lnk.setAttribute("nicetitle",lnk.title);
            lnk.setAttribute("nicetitle",mytitle);
            lnk.removeAttribute("title");
            addEvent(lnk,"mouseover",showNiceTitle);
            addEvent(lnk,"mouseout",hideNiceTitle);
            addEvent(lnk,"mousemove",fixpos);
            //addEvent(lnk,"focus",showNiceTitle);
            //addEvent(lnk,"blur",hideNiceTitle);
	    //addEvent(lnk, "mousedown", hideNiceTitle);
        }
    }
}

function showNiceTitle(e) {

    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");
    }
    
    //es //////////////
    lnk=lnk.parentNode;
    
    ///////////////////
    
    nicetitle = new String(lnk.getAttribute("nicetitle"));
    
    if (!lnk) return;
    
    var d = document.createElement("div");
    d.className = "nicetitle";
    tnt = document.createTextNode(nicetitle);
    pat = document.createElement("p");
    tnd = document.createTextNode(lnk.href);
    pad = document.createElement("p");
    pat.className = "titletext";
    pad.className = "destination";
    pat.appendChild(tnt);
    pad.appendChild(tnd);
    d.appendChild(pat);
    //d.appendChild(pad);
    
    STD_WIDTH = 300;
    h = lnk.href.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';
    
    var myHTML = new String(d.innerHTML);
    //myHTML = myHTML.replace(/&lt;br \/&gt;&lt;br \/&gt;/gi,"<br /><br />");
    //myHTML = myHTML.replace(/&lt;br \/&gt;/gi,"<br />");
    //myHTML = myHTML.replace(/&lt;br \/&gt;/gi,"<br />");
    myHTML = myHTML.replace(/&lt;/gi,"<");
    myHTML = myHTML.replace(/&gt;/gi,">");
    d.innerHTML = myHTML;
    //alert(myHTML);

    //mx = lnk.offsetLeft;
    //my = lnk.offsetTop;
    
    //xy = getMousePosition(e);
    xy = getMousePosition(e);
    mx = xy[0]+15;
    my = xy[1]+15;
    
    //d.style.left = (mx+15) + 'px';
    //d.style.top = (my+15) + 'px';
    
	//mx = eval(event.clientX) + 15;
	//my = eval(event.clientY) + 15;

	if(mx>document.body.clientWidth/2){
		mx-=300;
	}    
    
    d.style.left = (mx) + 'px';
    d.style.top = (my) + 'px';

    /*if (document.body && document.body.offsetWidth && ((mx+w) > document.body.offsetWidth)) {
        d.style.left = (document.body.offsetWidth - w - 20) + "px";
    }*/
    
    document.getElementsByTagName("body")[0].appendChild(d);
    
    CURRENT_NICE_TITLE = d;
    
    //alert("x:" + xy[0] + "y:" + xy[1] + "   dx:" + d.style.left + " dy:" + d.style.top);
    
}

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;
  }
}

