// object declarations
function EventArray() {
	this.EventArray = new Array();
	this.Add = _AddEvent;
	this.Delete = _DeleteEvent;
	this.Count = _EventCount;
	this.Item = _ReturnEvent;
	this.AttachEvents = _AttachEvents;
	
	function _AddEvent(objEvent) {
		this.EventArray[this.EventArray.length] = objEvent;
	}
	
	function _DeleteEvent(varIndex) {
		if (this.EventArray.length == 0) {
			alert ("There are no objects in this collection.");
			return;
		}
		var varNewEventArray = new Array();
		var varCounter = 0;
		for (i = 0; i < varIndex; i++) {
			varNewEventArray[varCounter] = this.EventArray[i];
			varCounter += 1;
		}
		for (i = varIndex + 1; i < this.EventArray.length; i++) {
			varNewEventArray[varCounter] = this.EventArray[i];
			varCounter += 1;
		}
		this.EventArray = varNewEventArray;
	}
	
	function _EventCount() {
		return this.EventArray.length;
	}
	
	function _ReturnEvent(varIndex) {
		if (varIndex > (this.EventArray.length - 1)) {
			alert ("The requested object does not exist in the collection.");
			return;
		}
		return this.EventArray[varIndex];
	}
	
	function _AttachEvents() {
		try {
			for (i = 0; i < this.EventArray.length; i++) {
				_AttachEventByElement(this.EventArray[i].Element, this.EventArray[i].Event, this.EventArray[i].Function);
			}
		}
		catch (e) {
			//alert ("function AttachEvents : " + e.message);
		}
	}
	
	function _AttachEventByElement(varElement, varEvent, varFunction) {
		try {
			if (ReturnIE()) {
				if (varElement == "document") {
					document.detachEvent("on" + varEvent, varFunction);
					document.attachEvent("on" + varEvent, varFunction);
				}
				else if (varElement == "window") {
					window.detachEvent("on" + varEvent, varFunction);
					window.attachEvent("on" + varEvent, varFunction);
				}
				else {
					document.getElementById(varElement).detachEvent("on" + varEvent, varFunction);
					document.getElementById(varElement).attachEvent("on" + varEvent, varFunction);
				}
			}
			else {
			    if (varElement == "document") {
					document.removeEventListener("on" + varEvent, varFunction);
					document.addEventListener("on" + varEvent, varFunction);
				}
				else if (varElement == "window") {
					window.removeEventListener("on" + varEvent, varFunction);
					window.addEventListener("on" + varEvent, varFunction);
				}
				else {
					document.getElementById(varElement).removeEventListener(varEvent, varFunction, false);
					document.getElementById(varElement).addEventListener(varEvent, varFunction, false);
				}
			}
			//alert (varElement + " attached");
		}
		catch (e) {
			//alert ("function AttachEventByElement : " + e.message);
		}
	}
}

function EventDetail(varID, varTagName, varType, varInnerText, varDisabled, varClientX, varClientY, objElement) {
	this.ID = varID;
	this.TagName = varTagName;
	if (varType != null) {
		this.Type = varType.toUpperCase();
	}
	this.InnerText = varInnerText;
	if ((varDisabled == undefined) || (varDisabled == null)) {
		this.Disabled = false;
	}
	else {
		this.Disabled = varDisabled;
	}
	this.ClientX = varClientX;
	this.ClientY = varClientY;
	this.Element = objElement;
}

function Event(varElement, varEvent, varFunction) {
	this.Element = varElement;
	this.Event = varEvent;
	this.Function = varFunction;
}

// utility functionality
function ReturnIE() {
	var varBrowser = navigator.appName + " " + navigator.appVersion;
	var varIE = false;
	if (varBrowser.substring(0, 9) == "Microsoft") {
		return (true);
	}
	else {
		return (false);
	}
}

function CancelEvent(evt) {
	if (evt != null) {
		if (evt.preventDefault) {
			evt.preventDefault();
		}
		evt.returnValue = false;
	}
	else {
		return (false);
	}
}

function ReturnEventDetail(evt) {
	var objSrcElement = null;
	var varInnerText = "";
	var varClientX = 0;
	var varClientY = 0;
	var varType = "";
	if (ReturnIE()) {
		objSrcElement = window.event.srcElement;
		varInnerText = objSrcElement.innerText;
		varClientX = window.event.clientX;
		varClientY = window.event.clientY;
	}
	else {
		objSrcElement = evt.target;
		varInnerText = objSrcElement.text
		varClientX = evt.pageX;
		varClientY = evt.pageY;
	}
	if (objSrcElement.type) {
		varType = objSrcElement.type;
	}
	return new EventDetail(objSrcElement.id, objSrcElement.tagName, varType, varInnerText, objSrcElement.disabled, varClientX, varClientY, objSrcElement);
}

function SubmitKey(evt) {
	var varKeyCode = null;
	if (ReturnIE()) {
		varKeyCode = window.event.keyCode;
	}
	else {
		varKeyCode = evt.keyCode;
	}
	if (varKeyCode == 13) {
		return CancelEvent(evt);
	}
	return (true);
}

function ReturnParent(varElement, varTagName) {
	var varParentElement = varElement.parentNode;
	var varFound = false;
	while (!(varFound)) {
		if (varParentElement.tagName.toUpperCase() == varTagName) {
			varFound = true;
			break;
		}
		varParentElement = varParentElement.parentNode;
	}
	
	return varParentElement;
}

function ReturnOffset(varElement, varDirection) {
	var varParentElement = varElement.parentNode;
	var varFound = false;
	var varOffset = 0;
	while (!(varFound)) {
		if (varParentElement.tagName.toUpperCase() == "BODY") {
			varFound = true;
			break;
		}
		if (varParentElement.tagName.toUpperCase() != "TR") {
			if (varDirection.toUpperCase() == "LEFT") {
				varOffset += varParentElement.offsetLeft;
			}
			else if (varDirection.toUpperCase() == "TOP") {
				varOffset += varParentElement.offsetTop;
			}
		}
		varParentElement = varParentElement.parentNode;
	}
	
	return (varOffset);
}

function ReturnOffsetLeft(varElement) {
	return (ReturnOffset(varElement, "left"));
}

function ReturnOffsetTop(varElement) {
	return (ReturnOffset(varElement, "top"));
}
