var eLib=new Object();
eLib.getTarget=function(e){return e&&e.target?e.target:(window.event)?event.srcElement:null;};
eLib.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():this.cancelBubble=true;};
eLib.preventDefault=function(e){e.preventDefault?e.preventDefault():this.returnValue=false;};
eLib.addListener=function(el,evt,fn,capture){if(el.addEventListener){el.addEventListener(evt,fn,capture);return true;}else if(el.attachEvent){return el.attachEvent('on'+evt,fn);}return true;};
eLib.removeListener=function(el,evt,fn,capture){if(el.removeEventListener){el.removeEventListener(evt,fn,capture);}else if(el.detachEvent){el.detachEvent('on'+evt,fn);}return true;}
//http://www.thefutureoftheweb.com/blog/adddomloadevent
addDOMLoadEvent=(function(){var e=[],t,s,n,i,o,d=document,w=window,r='readyState',c='onreadystatechange',x=function(){n=1;clearInterval(t);while(i=e.shift())i();if(s)s[c]=''};return function(f){if(n)return f();if(!e[0]){d.addEventListener&&d.addEventListener("DOMContentLoaded",x,false);/*@cc_on@*//*@if(@_win32)d.write("<script id=__ie_onload defer src=//0><\/scr"+"ipt>");s=d.getElementById("__ie_onload");s[c]=function(){s[r]=="complete"&&x()};/*@end@*/if(/WebKit/i.test(navigator.userAgent))t=setInterval(function(){/loaded|complete/.test(d[r])&&x()},10);o=w.onload;w.onload=function(){x();o&&o()}}e.push(f)}})();

var TokenizedExps={};
getTokenizedExp=function(token,flags){var x=TokenizedExps[token];if(!x)x=TokenizedExps[token]=new RegExp('(^|\\s)'+token+'($|\\s)',flags);return x;};
hasToken=function(str,token){return getTokenizedExp(token,'').test(str);};

// var trimExp=/^\s+|\s+$/g;
// var spacesExp=/\s\s+/g;
String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,'');};
String.prototype.normalize=function(){return this.trim().replace(/\s\s+/g,' ');};
addClass =function(el,cls){
	if( el != null && cls != null ) {
		removeClass(el,cls);
		if(el.className!=''){
			el.className=el.className+' ';
		}
		el.className=cls;
	}
}
removeClass =function(el,cls){
	if( el != null && cls != null ) {
		el.className=el.className.replace(getTokenizedExp(cls,'g'),' ').normalize();
	}
}
getElementsByClassName =function(classname, node){if(!node){node=document.getElementsByTagName("body")[0];}a=[];re=getTokenizedExp(classname);els=node.getElementsByTagName("*");for(var i=0,j=els.length;i<j;i++){if(re.test(els[i].className)){a.push(els[i]);}}return a;}

/*
externalLinks=function(){var els=document.getElementsByTagName("a");if(els!=null){for(var i=0;i<els.length;i++){if(els[i].getAttribute("rel")=="external"){els[i].target="_blank";}}}}
addDOMLoadEvent(externalLinks);
*/

var FontDetector = function(){
	var h = document.getElementsByTagName("body")[0];
	var d = document.createElement("div");
	var s = document.createElement("span");
	d.appendChild(s);
	d.style.fontFamily = "sans";
	s.style.fontFamily = "sans";
	s.style.fontSize   = "72px";
	s.innerHTML        = "mmmmmmmmmmlil";
	h.appendChild(d);
	var defaultWidth   = s.offsetWidth;
	var defaultHeight  = s.offsetHeight;
	h.removeChild(d);

	function debug(font) {
		h.appendChild(d);
		var f = [];
		f[0] = s.style.fontFamily = font;
		f[1] = s.offsetWidth;
		f[2] = s.offsetHeight;
		h.removeChild(d);
		font = font.toLowerCase();
		if (font == "serif") {
			f[3] = true;
		} else {
			f[3] = (f[1] != defaultWidth || f[2] != defaultHeight);
		}
		return f;
	}
	function test(font){
		f = debug(font);
		return f[3];
	}
	this.detailedTest = debug;
	this.test = test;
}

function detectFont() {
	d = new FontDetector();
	if( d.test('arial narrow') ) {

		var ss = document.styleSheets[0]
		var ssRules = ss.cssRules ? ss.cssRules : ss.rules;
		var targetRule = null;

		for ( i = 0; i < ssRules.length; i++ ){
			if( ssRules[i].selectorText.toLowerCase() == "h3" ){
				targetRule = ssRules[i];
				break;
			}
		}

		if( targetRule != null ) {
			targetRule.style.letterSpacing = '.1em';// now it's pretty
		}

	}
}
addDOMLoadEvent(detectFont);

initLinkBlur =function(){var links=document.getElementsByTagName('a');for(var i=0;links[i];i++){eLib.addListener(links[i],'focus',this.linkBlurListener,true);}};
linkBlurListener =function(e){var el = eLib.getTarget(e);if(el.tagName=='A'){el.blur();}else if(el.tagName=='IMG'&&el.parentNode.tagName=='A'){el.parentNode.blur();}return true;};
addDOMLoadEvent(initLinkBlur);

// Works in concert with UI.java Eaddy encoder
convertEaddy = function() {
	var els = document.getElementsByTagName("span");
	var re = getTokenizedExp("eaddy");
	for( var i=0,j=els.length; i<j; i++ ) {
		try {		
			if( re.test(els[i].className) ) {
				addy = els[i].innerHTML;
				if( addy.trim() != "" ) {
					addy = addy.replace( /<[/]?([^> ]+)[^>]*>/g , "" );
					els[i].innerHTML = '<a href="mailto:' + addy + '">' + addy + '</a>';
				}
			}
		}
		catch( err ){
			// ignore
		}
	}
}
addDOMLoadEvent(convertEaddy);

