/**************************************************************************************************/
/***
/***	TERNSTYLE (TM) EVENT LISTENING JAVASCRIPT DOCUMENT
/***	-----------------------------------------------------------------------
/***	Written by Matthew Praetzel. Copyright (c) 2007 Matthew Praetzel.
/***	-----------------------------------------------------------------------
/***	All Rights Reserved. Any use of these functions & scripts without written consent is prohibited.
/***
/**************************************************************************************************/

/*-----------------------
	ternVENTS ™
-----------------------*/
var ternVENTS = {
	ternVents : [],ff : function () { return false; },
	setEvent :
	function (e) {
		return !(e) ? window.event : e;
	},
	eventSource :
	function (e) {
		var th = this,i,e = !(e) ? th.setEvent(e) : e;
		if(e.srcElement) {
			i = e.srcElement;
		}
		else {
			i = e.target;
		}
		if(i.nodeType == 3) {
			i = i.parentNode;
		}
		return i;
	},
	mousePosition : 
	function (e) {
		var m = [],e = !(e) ? this.setEvent(e) : e;
		if(e.pageX) {
			m[0] = e.pageX;
			m[1] = e.pageY;
		}
		else if (e.clientX) {
			m[0] = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
			m[1] = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
		}
		else {
			m = false;
		}
		return m;
	},
	addEvent :
	function (i,f,e,b) {
		var th = this,l,es = th.ternVents,i = th.isArray(i) ? i : [i],e = e == false ? th.ff : e,b = b ? b : false;
		for(var a=0;a<i.length;a++) {
			var t = th.getNode(i[a]);
			if((t.nodeName || t == window) && !th.eventRegistered(t,f,e,b)) {
				if(document.attachEvent) {
					t.attachEvent("on"+e,f);
				}
				else {
					t.addEventListener(e,f,b);
				}
				l = th.ternVents.length;
				th.ternVents[l] = new Array();
				th.ternVents[l]["item"] = t;
				th.ternVents[l]["event"] = e;
				th.ternVents[l]["bubbling"] = b;
				th.ternVents[l]["function"] = f;
				t.events = t.events || new function() {  };
				t.events[e] = f;
			}
		}
	},
	removeEvent :
	function (i,f,e,b) {
		var th = this,i = th.getNode(i),r = th.eventRegistered(i,f,e,b);
		if(r !== false) {
			if(document.attachEvent) {
				i.detachEvent("on"+e,f);
			}
			else {
				i.removeEventListener(e,f,b);
			}
			th.ternVents.splice(r,1);
			i.events[e] = null;
		}
	},
	removeAllEvents :
	function () {
		var th = this == window ? ternVENTS : this,a = th.ternVents,l = a.length;
		for(var i=0;i<l;i++) {
			th.removeEvent(a[0]["item"],a[0]["function"],a[0]["event"],a[0]["bubbling"]);
		}
	},
	removeAllItemEvents :
	function (i) {
		var th = this,i = th.isArray(i) ? i : [th.getNode(i)],a = th.ternVents;
		for(var c=0;c<i.length;c++) {
			if(i[c]) {
				for(var b=0;b<a.length;b++) {
					if(i[c] == a[b]["item"]) {
						th.removeEvent(a[b]["item"],a[b]["function"],a[b]["event"],a[b]["bubbling"]);
						b = b-1;
					}
				}
			}
		}
	},
	eventRegistered :
	function (i,f,e,b) {
		var th = this,a = th.ternVents,i = th.getNode(i);
		for(var c=0;c<a.length;c++) {
			if(a[c]["item"] == i && a[c]["event"] == e && a[c]["bubbling"] == b && a[c]["function"] == f) {
				return c;
			}
		}
		return false;
	},
	getNode :
	function (i) {
		if(typeof(i) == "string" && document.getElementById(i)) {
			return document.getElementById(i);
		}
		else {
			return i;
		}
	},
	isObject :
	function (o) {
		var th = this;
		if((typeof o == "object" && !!o) || th.isFunction(o)) {
			return true;
		}
		return false;
	},
	isFunction : 
	function (f) {
		return typeof f == "function";
	},
	isArray : 
	function (a) {
		var th = this;
		if(th.isObject(a) && typeof(a) != "string" && a.length > 0) {
			if((a.nodeName && a.nodeName.toLowerCase() != "select") || !a.type) {
				if((a.nodeName && a.nodeName.toLowerCase() != "form") || !a.nodeName) {
					return true;
				}
			}
		}
		else {
			return false;
		}
	}
}
window.onunload = ternVENTS.removeAllEvents;
