
/**
 * The contents of the JavaScript for calling an object by name
 * and determining its relative page position has been modified
 * from code written and distributed by Peter-Paul Koch at
 * http://www.quirksmode.org/js/findpos.html
 * The function addLoadEvent for non-destructive supplementation
 * of onLoad is adapted from the work of Simon Willison at
 * http://simon.incutio.com/archive/2004/05/26/addLoadEvent
 * The cross browser event standardization code is based on
 * tutorialas appearing at http://www.ditchnet.org/wp/2005/04/02/6/
 * and http://developer.apple.com/internet/webcontent/eventmodels.html
 **/

function ttnPosition(obj,vert) {
	if (typeof(obj) != 'object') return 0; 
	var cp = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			cp += (vert ? obj.offsetTop : obj.offsetLeft);
			obj = obj.offsetParent; }}
	else if (!isNan(obj.x)) {
		cp += (vert ? obj.y : obj.x); }
	return cp; }

function ttnGetObject(name) {
	if (!IsDHTML) return false;
	if (HM_DOM) {
		if (!(this.obj = document.getElementById(name))) return false;
		this.style = document.getElementById(name).style; }
	else if (HM_IE4) {
		if (!(this.obj = document.all[name])) return false;
		this.style = document.all[name].style; }
	else if (HM_NS4 && document.layers[name]) {
		if (!(this.obj = document.layers[name])) return false;
		this.style = document.layers[name]; }
	return true; }

function ttnGetClosure(coderef,argref) {
	if (typeof(coderef) != 'function') {
		return (function() { return false }); }
	if ((typeof(argref) == 'string') || (typeof(argref) == 'number')) {
		return (function() { return coderef(argref) }); }
	if (typeof(argref) == 'object') {
		var args = argref.length;
		var cra = new Array(args);
		for (var i=0;i<args;i++) {
			cra[i] = 'argref['+i+']'; }
		return (function() { eval('coderef('+cra.join()+')') }); }
	return coderef; }

function ttnLoadScript(url,del) {
	var coderef = function() { if (!HM_DOM) return;
		var head = document.getElementsByTagName('head')[0];
		var script = document.createElement('script');
		script.setAttribute('type','text/javascript');
		script.setAttribute('src',url);
		head.appendChild(script); };
	if (isNaN(del)) return coderef;
	if (del == -1) return addLoadEvent(coderef); 
	if (del == 0) return coderef();
	return setTimeout(coderef,del*1000); }

function addLoadEvent(coderef,argref) {
	var oldonload = window.onload;
	var alcode = ttnGetClosure(coderef,argref);
	if (typeof window.onload != 'function') {
		window.onload = alcode; }
	else {
		window.onload = function() {
			if (oldonload) oldonload();
			alcode(); }}}

function getTargetElement(evt) {
	var elem;
	if (evt.target) { elem = (evt.target.nodeType == 3) ? evt.target.parentNode : evt.target; }
	else { elem = evt.srcElement; }
	return elem; }

function EventUtils() {
	throw 'RuntimeException: EventUtils is a static utility class and may not be instantiated'; }

EventUtils.addEventListener = function (target,type,callback,captures) {
	if (typeof(callback) != 'function') return; 
	var listener = function(evt) {
		evt = (evt) ? evt : ((window.event) ? window.event : "");
		if (!evt) return; var elem = getTargetElement(evt); if (!elem) return;
		return callback(evt,elem); }
	if (target.addEventListener) { target.addEventListener(type,listener,captures); }
	else if (target.attachEvent) { target.attachEvent('on'+type,listener,captures); }
	else { target['on'+type] = listener; }}

