﻿// register a new namespace
Type.registerNamespace("AjaxTutorial");

// create the Person class and constructor
AjaxTutorial.Person = function(name) 
{
  // initialize person name
  this._name = name;    
  
  // notify person creation
  Sys.Debug.trace("Person created: " + name);  
}

// define the instance members of the person class
AjaxTutorial.Person.prototype = 
{
  // getter function for the name property
  get_name: function() {
    return this._name;
  },

  // setter function for the name property
  set_name: function(value) {
    if(value != this._name) {
      // create eventArgs that contains the old and new values
      var eventArgs = new AjaxTutorial.PersonPropertyChangedEventArgs(
        "name", this._name, value);

      // set the new name and raise the change event
      this._name = value;
      this._raiseEvent("change", eventArgs);
    }
  },

  // returns the events of the class
  get_events: function() {
    if (!this._events) {
      this._events = new Sys.EventHandlerList();
    }
    return this._events;
  },

  // raises an event
  _raiseEvent: function(eventName, eventArgs) {
    // obtain the event handler for the specified event name
    var handler = this.get_events().getHandler(eventName);

    // continue only if there is at least one registered handler
    if (handler) {
      // if no event args have been supplied, create empty EventArgs
      if (!eventArgs) eventArgs = Sys.EventArgs.Empty;

      // call the event handlers
      handler(this, eventArgs);
    }
  }, 

  // register a change event handler
  add_change: function(handler) {
    this.get_events().addHandler("change", handler);
  },

  // unregister a change event handler
  remove_change: function(handler) {
    this.get_events().removeHandler("change", handler);
  }
}

// register the Person class
AjaxTutorial.Person.registerClass("AjaxTutorial.Person");