﻿/********************************************************************************************************
*  EventRegistrar - Advanced element's event registration helper class

Usage on page:

    (include EventRegistrar class definition script bellow)
        
    ...
        
    // create helper object
    var _eventRegistrar = new EventRegistrar();

    // define event handler using predefined event risers, event types and actions for event handler
    function EventProcessor(event) {
        var eventRiserElementId = null;

        if (window.event == null) {
            eventRiserElementId = event.target.id;
        } else {
            eventRiserElementId = window.event.srcElement.id;
        }

        if (eventRiserElementId == null) {
            return;
        }

        for (i = 0; i < _eventRegistrar.EventLookupTable.length; i++) {
            if (eventRiserElementId == _eventRegistrar.EventLookupTable[i][0]) {
                // do something with predefined defined action
                // e.g. alert(_eventRegistrar.EventLookupTable[i][2]);
                // or eval(_eventRegistrar.EventLookupTable[i][2]);
            }
        }
    }
        
    ...
            
    // define event listeners for elements by id, their event types and actions for event handler
    _eventRegistrar.EventLookupTable.push(['someButton', 'click', 'someFunctionCall(x, y, z);']);
    _eventRegistrar.EventLookupTable.push(['someAnchor', 'mouseover', 'var x = 3; alert(x);']);
    	
    ...
    	
    // bind defined event handler to helper object
    _eventRegistrar.BindEventListeners(EventProcessor);
    
********************************************************************************************************/

// constructor
function EventRegistrar() {
    this.EventLookupTable = new Array();
}

// properties
EventRegistrar.EventLookupTable = null;

// methods
EventRegistrar.prototype = {
    AddEventListener: function(elementId, eventType, eventHandler) {
        var result = true;

        var element = window.document.getElementById(elementId);
        if (element == null)
            return false;
            
        if (element.addEventListener) {
            element.addEventListener(eventType, eventHandler, false);
        } else if (element.attachEvent) {
            result = element.attachEvent("on" + eventType, eventHandler);
        } else {
            element["on" + eventType] = eventHandler;
        }

        return result;
    },
    BindEventListeners: function(eventHandler) {
        for (i = 0; i < this.EventLookupTable.length; i++) {
            this.AddEventListener(this.EventLookupTable[i][0], this.EventLookupTable[i][1], eventHandler);
        }
    }
}
//  EventRegistrar - end
