/*
WordPress 2.0+ Plugin by Robert Oddy <rob@oddy.net>
http://www.oddy.net
*/

if(typeof Array.prototype.push!="function") {
	Array.prototype.push=ArrayPush;
	function ArrayPush(_1) {
		this[this.length] = _1;
	}
}

function WSR_getElementsByClassName(node, tag_name, class_name) {
	var nodes =(tag_name=="*" && node.all) ? node.all : node.getElementsByTagName(tag_name);
	var data = new Array();

	class_name = class_name.replace(/\-/g,"\\-");

	var find_class = new RegExp("(^|\\s)" + class_name + "(\\s|$)");
	var n;

	for(var i=0;i<nodes.length;i++){
		n = nodes[i];
		if(find_class.test(n.className)) {
			data.push(n);
		}
	}

	return(data);
}

function bindTitles(e) {
	//var entries = WSR_getElementsByClassName(document.getElementById("content"), "div", "post-content");
	var entries = new Array();
	entries.push (document);

	for(var i=0;i<entries.length;i++) {
		var nodes = entries[i].getElementsByTagName('a');

		for(var j=0;j<nodes.length;j++) {
			var lnk = nodes[j];

			// ignore links without any title
			if (lnk.title) {
				lnk.setAttribute("nicetitle",lnk.title);
				lnk.removeAttribute("title");

				addEvent(lnk,"mouseover",attachTitle);
				addEvent(lnk,"mouseout",detachTitle);
			}
		}
	}
}

function addEvent(obj, evType, fn){
	if (obj.addEventListener){
		obj.addEventListener(evType, fn, false);
		return true;
	} else if (obj.attachEvent){
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	} else {
		return false;
	}
}

function getParent(el, tag) {
	if (el == null) return null;
	else if (el.nodeType == 1 && el.tagName.toUpperCase() == tag.toUpperCase())
		return el;
	else
		return getParent(el.parentNode, tag);
}

function attachTitle( oLink ) {
	var lnk;

	if(oLink["srcElement"]) {
		lnk=oLink["srcElement"];
	} else {
		lnk=oLink["target"];
	}

	if (!lnk || !lnk.href) return;

	var title = lnk.getAttribute("nicetitle");

	// set correct title width
	var h=0, t=0;
    if (lnk.href) {
        h = lnk.href.length;
	}
    if (title && title.length) {
		t = title.length;
    }
	
	var w = Math.max(h*6,t*10);
	if (w < 300) w = 300;

	// set the correct title position
	var xpos=findPosition(lnk)[0];
	var ypos=findPosition(lnk)[1];

	var div=document.createElement("div");
	var tnt, pat, tnd, pad;

	// create the title
	div.className = "nicetitle";
	tnt = document.createTextNode(title);
	pat = document.createElement("p");
	pat.className = "titletext";
	pat.appendChild(tnt);
	div.appendChild(pat);

    if (lnk.href) {
        tnd = document.createTextNode(lnk.href);
        pad = document.createElement("p");
        pad.className = "destination";
        pad.appendChild(tnd);
        div.appendChild(pad);
    }

	// allocate all style attributes
    div.style.position = 'absolute';
    div.style.padding  = '4px';
    div.style.width = w + 'px';    
    div.style.left  = (xpos+15) + 'px';
    div.style.top   = (ypos+35) + 'px';
	div.style.background = 'url('+titleImagePath+')';

    if (window.innerWidth && ((xpos+w) > window.innerWidth)) {
        div.style.left = (window.innerWidth - w - 25) + "px";
    }
    if (document.body.scrollWidth && ((xpos+w) > document.body.scrollWidth)) {
        div.style.left = (document.body.scrollWidth - w - 25) + "px";
    }

	// attach the title
	document.getElementsByTagName("body")[0].appendChild(div);
}

function detachTitle( oLink ) {
	entries = WSR_getElementsByClassName(document,"div","nicetitle");

	// detach the title
	for(i=0;i<entries.length;i++) {
		entries[i].parentNode.removeChild(entries[i]);
	}
}

function findPosition( oLink ) {
	var posX, posY;

	if( oLink.offsetParent ) {
		for( posX=0,posY=0; oLink.offsetParent; oLink=oLink.offsetParent ) {
			posX += oLink.offsetLeft;
			posY += oLink.offsetTop;
		}
	} else {
		posX = oLink.x;
		posY = oLink.y;
	}

	return [ posX, posY ];
}

// call the hooks
if(window.addEventListener){
	addEventListener("load",bindTitles,false);
} else {
	attachEvent("onload",bindTitles);
}
