﻿/// <reference name="MicrosoftAjax.js"/>
/* Event Helper
 * --------------------------------------------------
 * Usage
 * --------------------------------------------------
 * How To use
 * --------------------------------------------------
 * Type.registerNamespace("Samples");
 * 
 * Samples.Customer = function() {
 *     initialize: function() {
 *          this._raiseEvent("customerInitialized");
 *     }
 * }
 * Samples.Customer.createEvent("customerInitialized");
 * Samples.Customer.registerClass("Samples.Customer");
 * -------------------------------------------------- */

Type.prototype._createAddHandler = function(eventName) {
    return function(handler) {
        this.get_events().addHandler(eventName, handler);
    }
}

Type.prototype._createRemoveHandler = function(eventName) {
    return function(handler) {
        this.get_events().removeHandler(eventName, handler);
    }
}

Type.prototype.createEvent = function(eventName) {
    var addHandler = this._createAddHandler(eventName);
    var removeHandler = this._createRemoveHandler(eventName);

    this.prototype['add_' + eventName] = addHandler;
    this.prototype['remove_' + eventName] = removeHandler;

    if (!this.__events) {
        if (!this.inheritsFrom(Sys.Component)) {
            this.prototype.get_events = function() {
                if (!this._events) {
                    this._events = new Sys.EventHandlerList();
                }

                return this._events;
            }
        }

        this.prototype._raiseEvent = function(eventName, eventArgs) {
            var handler = this.get_events().getHandler(eventName);

            if (handler) {
                if (!eventArgs) {
                    eventArgs = Sys.EventArgs.Empty;
                }

                handler(this, eventArgs);
            }
        }

        this.__events = true;
    }
}
 