function addEvent(obj, evType, fn, useCapture) {
	if(obj.addEventListener) {
		obj.addEventListener(evType, fn, useCapture);
		return true;
	}else if(obj.attachEvent) {
		var r = obj.attachEvent('on'+evType, fn);
		return r;
	}else{
		return false;
	}
}
var xb =
{
	evtHash: [],
	ieGetUniqueID: function(_elem)
	{
		if (_elem === window) { return 'theWindow'; }
		else if (_elem === document) { return 'theDocument'; }
		else { return _elem.uniqueID; }
	},
	addEvent: function(_elem, _evtName, _fn, _useCapture)
	{
		if (typeof _elem.addEventListener != 'undefined')
		{ _elem.addEventListener(_evtName, _fn, _useCapture); }
		else if (typeof _elem.attachEvent != 'undefined')
		{
			var key = '{FNKEY::obj_' + xb.ieGetUniqueID(_elem) +
					'::evt_' + _evtName + '::fn_' + _fn + '}';
			var f = xb.evtHash[key];
			if (typeof f != 'undefined')
				{ return; }
			f = function()
			{
				_fn.call(_elem);
			};
			xb.evtHash[key] = f;
			_elem.attachEvent('on' + _evtName, f);
			// attach unload event to the window to clean up possibly IE memory leaks
			window.attachEvent('onunload', function()
			{
				_elem.detachEvent('on' + _evtName, f);
			});
			key = null;
			//f = null;  /* DON'T null this out, or we won't be able to detach it */
		}
		else
			{ _elem['on' + _evtName] = _fn; }
	},
	removeEvent: function(_elem, _evtName, _fn, _useCapture)
	{
		if (typeof _elem.removeEventListener != 'undefined')
			{ _elem.removeEventListener(_evtName, _fn, _useCapture); }
		else if (typeof _elem.detachEvent != 'undefined')
		{
			var key = '{FNKEY::obj_' + xb.ieGetUniqueID(_elem) +
					'::evt' + _evtName + '::fn_' + _fn + '}';
			var f = xb.evtHash[key];
			if (typeof f != 'undefined')
			{
				_elem.detachEvent('on' + _evtName, f);
				delete xb.evtHash[key];
			}
			key = null;
			//f = null; /* DON'T null this out, or we won't be able to detach it */
		}
	}
};
function removeEvent(obj, evType, fn, useCapture) {
	if(obj.removeEventListener) {
		obj.removeEventListener(evType, fn, useCapture);
		return true;
	}else if(obj.detachEvent) {
		var r = obj.detachEvent('on'+evType, fn);
		return r;
	}else{
		return false;
	}
}
function getElementsByClassName(tagName, clsName) { 
	var arr = new Array(); 
	var elems = document.getElementsByTagName(tagName);
	for (i = 0; ( elem = elems[i] ); i++ ) {
		if(elem.className == clsName ) arr[arr.length] = elem;
	}
	return arr;
}
function htmlentities(s){
	var div = document.createElement('div');
	var text = document.createTextNode(s);
	div.appendChild(text);
	return div.innerHTML;
}
function newElement(where,what,newclass) {
	var newElm = document.createElement(what);
	newElm.className = newclass;
	where.appendChild(newElm);
}
function addFocus() {
	if(typeof idtofocus == 'undefined') {
		return false;
	}else{
		var thefocus = document.getElementById(idtofocus);
		thefocus.focus();
	}
}
function externalUrls() {
	if(document.getElementsByTagName) {
		var links = document.getElementsByTagName('a');
		for(var i = 0; i < links.length; i++) {
			if(links[i].href.indexOf('http://still-scripts.com/') == -1) {
				links[i].target = "_blank";
			}
		}
	}
}
function addSpecialGraphics() {
	var h2Ref = document.getElementsByTagName('h2');
	if(h2Ref[0]) {
		var graphSpan = document.createElement('span');
		graphSpan.id = 'cheadgraphic';
		h2Ref[0].appendChild(graphSpan);
		var graphSpan = document.createElement('span');
		graphSpan.id = 'cheadgraphicleft';
		h2Ref[0].appendChild(graphSpan);
	}
	var footerRef = document.getElementById('footer');
	if(footerRef) {
		var graphSpan = document.createElement('span');
		graphSpan.id = 'footerborderleft';
		footerRef.appendChild(graphSpan);
	}
}

addEvent(window, 'load', addFocus, false);
addEvent(window, 'load', addSpecialGraphics, false);
addEvent(window, 'load', externalUrls, false);