﻿// 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 {
                    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 {
                    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);
}
