   ###    
   initialize: ->
 
+
+  ###
+  A *class* method to force initialization of the data associated with a class.
+  A class will be implicitly initialized if an attempt is made to instantiate
+  it. However, if a tool wants to statically inspect a class without
+  instantiating it, this method can be called to ensure the class is properly
+  set up. Invoking this method more than once does no harm.
+
+  The class members set up in this method are:
+  .className: the name of the class
+  .classes: all CSS class names applied to new instances of that control class
+  ###
+  @initialize: ->
+    unless @::hasOwnProperty "className"
+      # Get class name from function in modern browser, otherwise parse constructor.
+      @::className = @name ? /function\s+([^\( ]*)/.exec( @toString() )[1]
+    unless @::hasOwnProperty "classes"
+      superclass = @superclass()
+      superclass.initialize() # Initialize superclass first.
+      @::classes = @::className + " " + superclass::classes
 
   ###
   Rendering a control lets each class in the control class' hierarchy,

# Explicitly define Control as a window member if we have a window.
# The check is in case we're running in a headless state, e.g., Node.
window?.Control = Control


      # Property value implicitly handed to content() property.
      properties = content: properties

    @initialize()

    $controls
      # Save a reference to the controls' class.
      .controlClass( @ )
      # Apply all class names in the class hierarchy as style names.
      # This lets the element pick up styles defined by those classes.
      .addClass( @::classes )
      # Render controls as DOM elements.
      .render()
      # Pass in the target's old contents ( if any ).
