<!--
// Dunstan Orchard
// http://1976design.com/blog/archive/2003/11/10/updates/
//
// Altered from original idea by Simon Willison at:
// http://simon.incutio.com/archive/2002/12/20/blockquoteCitations

function extractBlockquoteInfo()
{
	quotes = document.getElementsByTagName('blockquote');
	for (i = 0; i < quotes.length; i++)
	{
		cite = quotes[i].getAttribute('cite');
		title = quotes[i].getAttribute('title');
		quotes[i].removeAttribute('title');

		if ((cite) && (cite != ''))
		{
			if ( (cite.match('http://', 'i')) || (cite.match('ftp://', 'i')) || (cite.match('person://', 'i')) )
			{
				newlink = document.createElement('a');
				newlink.setAttribute('href', cite);
				newlink.setAttribute('title', 'Go to ' + cite);
				if ((title) && (title != ''))
				{
					newlink.appendChild(document.createTextNode(title));
				}
				else
				{
					newlink.appendChild(document.createTextNode('Quote source'));
				}
				newdiv = document.createElement('div');
				newdiv.className = 'source';
				newdiv.appendChild(document.createTextNode('\u2014 '));
				newdiv.appendChild(newlink);
				quotes[i].appendChild(newdiv);
			}
			else
			{
				newdiv = document.createElement('div');
				newdiv.className = 'source';
				newdiv.appendChild(document.createTextNode('\u2014 ' + cite));
				quotes[i].appendChild(newdiv);
			}
		}
		
		else if ((title) && (title != ''))
		{
			newdiv = document.createElement('div');
			newdiv.className = 'source';
			newdiv.appendChild(document.createTextNode('\u2014 ' + title));
			quotes[i].appendChild(newdiv);
		}
	}
}


// original code by Stuart Langridge 2003-11
// with additions to the code by other good people
// http://www.kryogenix.org/code/browser/nicetitle/
// thank you, sir

// modified by Peter Janes 2003-03-25
// http://peterjanes.ca/blog/archives/2003/03/25/nicetitles-for-ins-and-del
// added in ins and del tags

// modified by Dunstan Orchard 2003-11-18
// http://1976design.com/blog/
// added in accesskey information
// tried ever-so-hard, but couldn't work out how to do what Ethan did

// final genius touch by by Ethan Marcotte 2003-11-18
// http://www.sidesh0w.com/
// worked out how to delay showing the popups to make them more like the browser's own


// set the namespace
var XHTMLNS = 'http://www.w3.org/1999/xhtml';
var CURRENT_NICE_TITLE;

// browser sniff
var browser = new Browser();



// determine browser and version.
function Browser()
	{
	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;
		}
	}



// 2003-11-19 sidesh0w
// set delay vars to emulate normal hover delay
var delay;
var interval = 0.40;



// this function runs on window load
// it runs through all the links on the page as starts listening for actions
function makeNiceTitles()
{
	if (!document.createElement || !document.getElementsByTagName) return;
	if (!document.createElementNS)
	{
		document.createElementNS = function(ns, elt)
		{
			return document.createElement(elt);
		}
	}

	// do regular links
	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.href )
		{
			lnk.setAttribute('title', 'Go to ' + lnk.getAttribute('href'));
			if( lnk.getAttribute('title').length > 40 )
			{
				lnk.setAttribute('title', 
							lnk.getAttribute('title').substring(0,25) 
							+ '...' 
							+ lnk.getAttribute('title').substring(lnk.getAttribute('title').length,lnk.getAttribute('title').length - 12) );
			}
			
		}
		if( !lnk.rel && lnk.href )
		{
			if( lnk.getAttribute('href').indexOf('localhost') == -1 && lnk.getAttribute('href').indexOf('localhost/mma2') == -1 && lnk.getAttribute('href').indexOf('tin-men.net') == -1 )
				lnk.setAttribute('rel', 'external');
		}
	//	if( lnk.getAttribute('rel') == 'external') lnk.setAttribute('target','_blank');
		if (lnk.title)
		{
			lnk.setAttribute('nicetitle', lnk.title);
			lnk.removeAttribute('title');
			addEvent(lnk, 'mouseover', showDelay);
			addEvent(lnk, 'mouseout', hideNiceTitle);
			addEvent(lnk, 'focus', showDelay);
			addEvent(lnk, 'blur', hideNiceTitle);
		}
	}

	// Added 2004-08-11 by Isaac Z. Schlueter - Do span, acronym, dfn, and abbr tags that have titles
	if( !infotags )
	{
		var infotags = new Array(4);
		infotags[0] = document.getElementsByTagName('span');
		infotags[1] = document.getElementsByTagName('acronym');
		infotags[2] = document.getElementsByTagName('abbr');
		infotags[3] = document.getElementsByTagName('dfn');
	}
	for( var i=0; i<infotags.length; i++)
	{
		for(var j=0; j<infotags[i].length; j++)
		{
			var infotag = infotags[i][j];
			if (infotag.title)
			{
				if( i == 0 )
				{
					infotag.setAttribute('nicetitle', '');
				}
				else if( i == 1 )
				{
					infotag.setAttribute('nicetitle', 'Acronym: ');
				}
				else if( i==2 )
				{
					infotag.setAttribute('nicetitle', 'Abbreviation: ');
				}
				else if( i==3 )
				{
					infotag.setAttribute('nicetitle', 'Definition: ');
				}
				infotag.setAttribute('nicetitle', infotag.getAttribute('nicetitle') + infotag.getAttribute('title'));
				infotag.removeAttribute('title');
				addEvent(infotag, 'mouseover', showDelay);
				addEvent(infotag, 'mouseout', hideNiceTitle);
				addEvent(infotag, 'focus', showDelay);
				addEvent(infotag, 'blur', hideNiceTitle);
			}
		}
	}

	// 2003-03-25 Peter Janes
	// do ins and del tags
	var tags = new Array(2);
	tags[0] = document.getElementsByTagName('ins');
	tags[1] = document.getElementsByTagName('del');
	for (var tt=0; tt<tags.length; tt++)
		{
		if (tags[tt])
			{
			for (var ti=0; ti<tags[tt].length; ti++)
				{
				var tag = tags[tt][ti];
				if (tag.dateTime)
					{
					var strDate = tag.dateTime;
					// HTML/ISO8601 date: yyyy-mm-ddThh:mm:ssTZD (Z, -hh:mm, +hh:mm)
					var month = strDate.substring(5,7);
					var day = strDate.substring(8,10);
					if (month[0] == '0')
						{
						month = month[1];
						}
					if (day[0] == '0')
						{
						day = day[1];
						}
					var dtIns = new Date(strDate.substring(0,4), month-1, day, strDate.substring(11,13), strDate.substring(14,16), strDate.substring(17,19));
					tag.setAttribute('nicetitle', (tt == 0 ? 'Added' : 'Deleted') + ' on ' + dtIns.toString());
					// Added by Isaac Z. Schlueter for when title is present.
					if( tag.title )
					{
						tag.setAttribute('nicetitle', tag.title + ' - ' + tag.getAttribute('nicetitle'));
						tag.removeAttribute('title');
					}
					
					addEvent(tag, 'mouseover', showDelay);
					addEvent(tag, 'mouseout', hideNiceTitle);
					addEvent(tag, 'focus', showDelay);
					addEvent(tag, 'blur', hideNiceTitle);
					}
				}
			}
		}
	}



// by Scott Andrew
// add an eventlistener to browsers that can do it somehow.
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 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 getParent(el, pTagName)
	{
	if (el == null)
		{
		return null;
		}
	// gecko bug, supposed to be uppercase
	else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())
		{
		return el;
		}
	else
		{
		return getParent(el.parentNode, pTagName);
		}
	}



// 2003-11-19 sidesh0w
// trailerpark wrapper function
function showDelay(e)
{
	if (window.event && window.event.srcElement)
	{
		lnk = window.event.srcElement
	}
	else if (e && e.target)
	{
		lnk = e.target
	}
	if (!lnk) return;

	// lnk is a textnode or an elementnode that's not ins/del
	if (lnk.nodeType == 3 || (lnk.nodeType == 1 && lnk.tagName.toLowerCase() != 'ins' && lnk.tagName.toLowerCase() != 'del' 
		&& lnk.tagName.toLowerCase() != 'span' && lnk.tagName.toLowerCase() != 'acronym' && lnk.tagName.toLowerCase() != 'abbr'
		&& lnk.tagName.toLowerCase() != 'dfn'))
	{
		// ascend parents until we hit a link
		lnk = getParent(lnk, 'a');
	}
	
	delay = setTimeout("showNiceTitle(lnk)", interval * 1000);
}



// build and show the nice titles
function showNiceTitle(link)
{
	if (CURRENT_NICE_TITLE) hideNiceTitle(CURRENT_NICE_TITLE);
	if (!document.getElementsByTagName) return;

	nicetitle = lnk.getAttribute('nicetitle');
	
	var d = document.createElementNS(XHTMLNS, 'div');
	d.className = 'nicetitle';
	var tnt = document.createTextNode(nicetitle);
	var pat = document.createElementNS(XHTMLNS, 'p');
	pat.className = 'titletext';
	pat.appendChild(tnt);

	// 2003-11-18 Dunstan Orchard
	// added in accesskey info
	if (lnk.accessKey)
	{
		var axs = document.createTextNode(' [' + lnk.accessKey + ']');
		var axsk = document.createElementNS(XHTMLNS, 'span');
		axsk.className = 'accesskey';
		axsk.appendChild(axs);
		pat.appendChild(axsk);
	}
	// 2004-09-09 Isaac Z. Schlueter
	// Added relation info
	if (lnk.rel)
	{
		var rel = document.createTextNode(' [' + lnk.getAttribute('rel') + ']');
		var relk = document.createElementNS(XHTMLNS,'span');
		relk.className='rel';
		relk.appendChild(rel);
		pat.appendChild(relk);
	}
	
	d.appendChild(pat);

	if (lnk.href)
	{
		if( lnk.href.length > 50 )
		{
			tnd = document.createTextNode(lnk.href.substr(0,50) + '...' );
		}
		else
		{
			tnd = document.createTextNode(lnk.href);
		}
		pad = document.createElementNS(XHTMLNS, 'p');
		pad.className = 'destination';
		pad.appendChild(tnd);
		d.appendChild(pad);
	}
    
	STD_WIDTH = 300;

	if (lnk.href)
	{
		if( lnk.href.length <= 50 ) h = lnk.href.length
		else h = 53;
	}
	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';    

	mpos = findPosition(lnk);
	mx = mpos[0];
	my = mpos[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)
	{
	// 2003-11-19 sidesh0w
	// clearTimeout 
	if (delay) clearTimeout(delay);
	if (!document.getElementsByTagName) return;
	if (CURRENT_NICE_TITLE)
		{
		document.getElementsByTagName('body')[0].removeChild(CURRENT_NICE_TITLE);
		CURRENT_NICE_TITLE = null;
		}
	}



window.onload = function(e) {
	extractBlockquoteInfo();
	makeNiceTitles();
}


// -->


