<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>extensions/website/controller.html</filename>
    </added>
    <added>
      <filename>extensions/website/docs/ActiveController.html</filename>
    </added>
    <added>
      <filename>extensions/website/event.html</filename>
    </added>
    <added>
      <filename>extensions/website/record.html</filename>
    </added>
    <added>
      <filename>extensions/website/routes.html</filename>
    </added>
    <added>
      <filename>extensions/website/view.html</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -44,7 +44,144 @@
                   &lt;dl class=&quot;details&quot;&gt;&lt;/dl&gt;
                &lt;/td&gt;
             &lt;/tr&gt;
-         &lt;/table&gt;
+         &lt;/table&gt;&lt;a name=&quot;ActiveEvent.Examples&quot;&gt;&lt;/a&gt;&lt;h2&gt;Examples&lt;/h2&gt;
+         &lt;p&gt;ActiveEvent.js
+            ==============
+            
+            ActiveEvent allows you to create observable events, and attach event
+            handlers to any class or object.
+            Setup
+            -----
+            Before you can use ActiveEvent you must call extend a given class or object
+            with ActiveEvent's methods. If you extend a class, both the class itself
+            will become observable, as well as all of it's instances.
+            ActiveEvent.extend(MyClass); //class and all instances are observable
+            ActiveEvent.extend(my_object); //this object becomes observable
+            
+            Creating Events
+            ---------------
+            You can create an event inside any method of your class or object by calling
+            the notify() method with name of the event followed by any arguments to be
+            passed to observers. You can also have an existing method fire an event with
+            the same name as the method using makeObservable().
+            
+            var Message = function(){};
+            Message.prototype.send = function(text){
+            //message sending code here...
+            this.notify('sent',text);
+            };
+            ActiveEvent.extend(Message);
+            
+            //make an existing method observable
+            var observable_hash = new Hash({});
+            ActiveEvent.extend(observable_hash);
+            observable_hash.makeObservable('set');
+            
+            Observing Events
+            ----------------
+            To observe an event call the observe() method with the name of the event you
+            want to observe, and the observer function. The observer function will
+            receive any additional arguments passed to notify(). If observing a class,
+            the instance that triggered the event will always be the first argument
+            passed to the observer. observeOnce() works just like observe() in every
+            way, but is only called once.
+            
+            Message.observe('sent',function(message,text){
+            //responds to all sent messages
+            });
+            
+            var m = new Message();
+            m.observe('sent',function(text){
+            //this will only be called when &quot;m&quot; is sent
+            });
+            
+            observable_hash.observe('set',function(key,value){
+            console.log('observable_hash.set: ' + key + '=' + value);
+            });
+            observable_hash.observeOnce(function(key,value){
+            //this will only be called once
+            });
+            
+            Control Flow
+            ------------
+            When notify() is called, if any of the registered observers for that event
+            return false, no other observers will be called and notify() will return
+            false. Returning null or not calling return will not stop the event.
+            Otherwise notify() will return an array of the
+            collected return values from any registered observer functions. Observers
+            can be unregistered with the stopObserving() method. If no observer is
+            passed, all observers of that object or class with the given event name
+            will be unregistered. If no event name and no observer is passed, all
+            observers of that object or class will be unregistered.
+            Message.prototype.send = function(text){
+            if(this.notify('send',text) === false)
+            return false;
+            //message sending code here...
+            this.notify('sent',text);
+            return true;
+            };
+            
+            var m = new Message();
+            
+            var observer = m.observe('send',function(message,text){
+            if(text === 'test')
+            return false;
+            });
+            
+            m.send('my message'); //returned true
+            m.send('test'); //returned false
+            
+            m.stopObserving('send',observer);
+            
+            m.send('test'); //returned true&lt;/code&gt;&lt;/pre&gt;
+            
+            Object.options
+            --------------
+            If an object has an options property that contains a callable function with
+            the same name as an event triggered with &lt;b&gt;notify()&lt;/b&gt;, it will be
+            treated just like an instance observer. So the falling code is equivalent.
+            var rating_one = new Control.Rating('rating_one',{  
+            afterChange: function(new_value){}    
+            });  
+            
+            var rating_two = new Control.Rating('rating_two');  
+            rating_two.observe('afterChange',function(new_value){});&lt;/code&gt;&lt;/pre&gt;
+            
+            MethodCallObserver
+            ------------------
+            The makeObservable() method permanently modifies the method that will
+            become observable. If you need to temporarily observe a method call without
+            permanently modifying it, use the observeMethod(). Pass the name of the
+            method to observe and the observer function will receive all of the
+            arguments passed to the method. An ActiveEvent.MethodCallObserver object is
+            returned from the call to observeMethod(), which has a stop() method on it.
+            Once stop() is called, the method is returned to it's original state. You
+            can optionally pass another function to observeMethod(), if you do the
+            MethodCallObserver will be automatically stopped when that function
+            finishes executing.
+            
+            var h = new Hash({});
+            ActiveEvent.extend(h);
+            
+            var observer = h.observeMethod('set',function(key,value){
+            console.log(key + '=' + value);
+            });
+            h.set('a','one');
+            h.set('a','two');
+            observer.stop();
+            
+            //console now contains:
+            //&quot;a = one&quot;
+            //&quot;b = two&quot;
+            
+            //the following does the same as above
+            h.observeMethod('set',function(key,value){
+            console.log(key + '=' + value);
+            },function(){
+            h.set('a','one');
+            h.set('b','two');
+            });
+         &lt;/p&gt;
       &lt;/div&gt;
       &lt;div style=&quot;visibility:hidden;display:none&quot;&gt; aptana_docs&lt;/div&gt;
    &lt;/body&gt;</diff>
      <filename>extensions/website/docs/ActiveEvent.html</filename>
    </modified>
    <modified>
      <diff>@@ -12,6 +12,8 @@
    &lt;body&gt;
       &lt;h2&gt;&lt;a href=&quot;ActiveJS.index.html&quot; target=&quot;content&quot;&gt;ActiveJS Reference Index&lt;/a&gt;&lt;/h2&gt;
       &lt;ul id=&quot;black&quot;&gt;
+         &lt;li class=&quot;closed&quot;&gt;&lt;span&gt;&lt;a href=&quot;ActiveController.html&quot; target=&quot;content&quot;&gt;ActiveController&lt;/a&gt;&lt;/span&gt;&lt;ul&gt;&lt;/ul&gt;
+         &lt;/li&gt;
          &lt;li class=&quot;closed&quot;&gt;&lt;span&gt;&lt;a href=&quot;ActiveEvent.html&quot; target=&quot;content&quot;&gt;ActiveEvent&lt;/a&gt;&lt;/span&gt;&lt;ul&gt;
                &lt;li class=&quot;closed&quot;&gt;&lt;span&gt;&lt;a href=&quot;ActiveEvent.html#ActiveEvent.Functions&quot; target=&quot;content&quot;&gt;Functions&lt;/a&gt;&lt;/span&gt;&lt;ul&gt;
                      &lt;li&gt;&lt;span class=&quot;method method-static&quot; title=&quot;After extending a given object, it will inherit the methods described in ActiveEvent.ObservableObject.&quot;&gt;&lt;a href=&quot;ActiveEvent.html?visibility=#ActiveEvent.extend&quot; target=&quot;content&quot;&gt;extend&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;</diff>
      <filename>extensions/website/docs/ActiveJS.index-toc.html</filename>
    </modified>
    <modified>
      <diff>@@ -18,6 +18,12 @@
                &lt;/tr&gt;
                &lt;tr&gt;
                   &lt;td class=&quot;declaration&quot;&gt;
+                     &lt;div class=&quot;name&quot;&gt;&lt;a href=&quot;ActiveController.html&quot;&gt;ActiveController&lt;/a&gt;&lt;/div&gt;
+                     &lt;div class=&quot;description&quot;&gt;&lt;/div&gt;
+                  &lt;/td&gt;
+               &lt;/tr&gt;
+               &lt;tr&gt;
+                  &lt;td class=&quot;declaration&quot;&gt;
                      &lt;div class=&quot;name&quot;&gt;&lt;a href=&quot;ActiveEvent.html&quot;&gt;ActiveEvent&lt;/a&gt;&lt;/div&gt;
                      &lt;div class=&quot;description&quot;&gt;&lt;/div&gt;
                   &lt;/td&gt;</diff>
      <filename>extensions/website/docs/ActiveJS.index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,7 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;no&quot;?&gt;
 &lt;?NLS TYPE=&quot;org.eclipse.help.toc&quot;?&gt;&lt;toc label=&quot;ActiveJS&quot; link_to=&quot;../com.aptana.ide.documentation/toc.xml#reference&quot;&gt;
    &lt;topic label=&quot;ActiveJS&quot; href=&quot;html/reference/api/ActiveJS.index.html&quot;&gt;
+      &lt;topic label=&quot;ActiveController&quot; href=&quot;html/reference/api/ActiveController.html&quot;/&gt;
       &lt;topic label=&quot;ActiveEvent&quot; href=&quot;html/reference/api/ActiveEvent.html&quot;&gt;
          &lt;topic label=&quot;Functions&quot;
                 href=&quot;html/reference/api/ActiveEvent.html#ActiveEvent.Functions&quot;&gt;</diff>
      <filename>extensions/website/docs/ActiveJS.toc.xml</filename>
    </modified>
    <modified>
      <diff>@@ -98,10 +98,14 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        Comment.belongsTo('User', { counter: 'comment_count' //comment count must be a column in User }); var c = Comment.find(5);
-                        //each Comment instance will gain the following 3 methods c.getUser() c.buildUser() c.createUser()
-                        
+                     &lt;dd&gt;    Comment.belongsTo('User',{
+                        counter: 'comment_count' //comment count must be a column in User
+                        });
+                        var c = Comment.find(5);
+                        //each Comment instance will gain the following 3 methods
+                        c.getUser()
+                        c.buildUser()
+                        c.createUser()
                      &lt;/dd&gt;
                   &lt;/dl&gt;
                &lt;/td&gt;
@@ -186,9 +190,11 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        var u = User.create( { name: 'alice', password: 'pass' }); u.id //will now contain the id of the user
-                        
+                     &lt;dd&gt;    var u = User.create({
+                        name: 'alice',
+                        password: 'pass'
+                        });
+                        u.id //will now contain the id of the user
                      &lt;/dd&gt;
                   &lt;/dl&gt;
                &lt;/td&gt;
@@ -253,13 +259,31 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        var user = User.find(5); //finds a single record var user = User.find( { first: true, where: { id: 5 } }); var user = User.find(
-                        { first: true, where: [ 'id = ?',5 ] }); var users = User.find(); //finds all var users = User.find( { where: 'name = &quot;alice&quot;
-                        AND password = &quot;' + md5('pass') + '&quot;', order: 'id DESC' }); //using the where syntax below, the parameters will be properly
-                        escaped var users = User.find( { where: { name: 'alice', password: md5('pass') } order: 'id DESC' }); var users = User.find('SELECT
-                        * FROM users ORDER id DESC');
-                        
+                     &lt;dd&gt;    var user = User.find(5); //finds a single record
+                        var user = User.find({
+                        first: true,
+                        where: {
+                        id: 5
+                        }
+                        });
+                        var user = User.find({
+                        first: true,
+                        where: ['id = ?',5]
+                        });
+                        var users = User.find(); //finds all
+                        var users = User.find({
+                        where: 'name = &quot;alice&quot; AND password = &quot;' + md5('pass') + '&quot;',
+                        order: 'id DESC'
+                        });
+                        //using the where syntax below, the parameters will be properly escaped
+                        var users = User.find({
+                        where: {
+                        name: 'alice',
+                        password: md5('pass')
+                        }
+                        order: 'id DESC'
+                        });
+                        var users = User.find('SELECT * FROM users ORDER id DESC');
                      &lt;/dd&gt;
                   &lt;/dl&gt;
                &lt;/td&gt;
@@ -313,11 +337,16 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        User.hasMany('comments', { dependent: true }); var u = User.find(5); //each User instance will gain the following 5 methods
-                        u.createComment() u.buildComment() u.destroyComment() u.getCommentList() //takes the same options as find() u.getCommentCount()
-                        //takes the same options as count()
-                        
+                     &lt;dd&gt;    User.hasMany('comments',{
+                        dependent: true
+                        });
+                        var u = User.find(5);
+                        //each User instance will gain the following 5 methods
+                        u.createComment()
+                        u.buildComment()
+                        u.destroyComment()
+                        u.getCommentList() //takes the same options as find()
+                        u.getCommentCount() //takes the same options as count()
                      &lt;/dd&gt;
                   &lt;/dl&gt;
                &lt;/td&gt;
@@ -351,10 +380,12 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        User.hasOne(CreditCard); var u = User.find(5); //each User instance will gain the following 3 methods u.getCreditCard() u.buildCreditCard()
+                     &lt;dd&gt;    User.hasOne(CreditCard);
+                        var u = User.find(5);
+                        //each User instance will gain the following 3 methods
+                        u.getCreditCard()
+                        u.buildCreditCard()
                         u.createCreditCard()
-                        
                      &lt;/dd&gt;
                   &lt;/dl&gt;
                &lt;/td&gt;
@@ -475,9 +506,9 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        var one = Comment.find(1); var two = Comment.find(2); var result_set = Comment.resultSetFromArray( [ one,two ] );
-                        
+                     &lt;dd&gt;    var one = Comment.find(1);
+                        var two = Comment.find(2);
+                        var result_set = Comment.resultSetFromArray([one,two]);
                      &lt;/dd&gt;
                   &lt;/dl&gt;
                &lt;/td&gt;
@@ -542,10 +573,11 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        Account.transaction(function() { var from = Account.find(2); var to = Account.find(3); to.despoit(from.withdraw(100.00));
+                     &lt;dd&gt;    Account.transaction(function(){
+                        var from = Account.find(2);
+                        var to = Account.find(3);
+                        to.despoit(from.withdraw(100.00));
                         });
-                        
                      &lt;/dd&gt;
                   &lt;/dl&gt;
                &lt;/td&gt;
@@ -581,10 +613,14 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        Article.update(3, { title: 'New Title' }); //or pass an array of ids and an array of attributes Article.update( [ 5,7 ] ,
-                        [ { title : 'Title for 5'}, { title : 'Title for 7'} ] );
-                        
+                     &lt;dd&gt;    Article.update(3,{
+                        title: 'New Title'
+                        });
+                        //or pass an array of ids and an array of attributes
+                        Article.update([5,7],[
+                        {title: 'Title for 5'},
+                        {title: 'Title for 7'}
+                        ]);
                      &lt;/dd&gt;
                   &lt;/dl&gt;
                &lt;/td&gt;</diff>
      <filename>extensions/website/docs/ActiveRecord.Class.html</filename>
    </modified>
    <modified>
      <diff>@@ -82,7 +82,49 @@
                   &lt;dl class=&quot;details&quot;&gt;&lt;/dl&gt;
                &lt;/td&gt;
             &lt;/tr&gt;
-         &lt;/table&gt;
+         &lt;/table&gt;&lt;a name=&quot;ActiveRecord.Migrations.Examples&quot;&gt;&lt;/a&gt;&lt;h2&gt;Examples&lt;/h2&gt;
+         &lt;p&gt;Migrations
+            ----------
+            
+            Migrations are a method of versioining the database schema used by your
+            application. All of your migrations must be defined in an object assigned
+            to ActiveRecord.Migrations.migrations. The keys need not be numerically
+            sequential, but must be numeric (i.e. 1,2,3 or 100,200,300).
+            
+            Each migration object must have an up() and down() method which will
+            recieve an ActiveRecord.Migrations.Schema object. createTable() and
+            addColumn() both use the same syntax as define() to specify default
+            values and field types.
+            
+            ActiveRecord.Migrations.migrations = {
+            1: {
+            up: function(schema){
+            schema.createTable('one',{
+            a: '',
+            b: {
+            type: 'TEXT',
+            value: 'default'
+            }
+            });
+            },
+            down: function(schema){
+            schema.dropTable('one');
+            }
+            },
+            2: {
+            up: function(schema){
+            schema.addColumn('one','c');
+            },
+            down: function(schema){
+            schema.dropColumn('one','c');
+            }
+            }
+            };
+            
+            ActiveRecord.Migrations.migrate(); //will migrate to the highest available (2 in this case)
+            ActiveRecord.Migrations.migrate(0); //migrates down below 1, effectively erasing the schema
+            ActiveRecord.Migrations.migrate(1); //migrates to version 1
+         &lt;/p&gt;
       &lt;/div&gt;
       &lt;div style=&quot;visibility:hidden;display:none&quot;&gt; aptana_docs&lt;/div&gt;
    &lt;/body&gt;</diff>
      <filename>extensions/website/docs/ActiveRecord.Migrations.html</filename>
    </modified>
    <modified>
      <diff>@@ -206,11 +206,11 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        ActiveRecord.connect(ActiveRecord.Adapters.JaxerSQLite,'path_to_database_file'); ActiveRecord.adapter === ActiveRecord.Adapters.JaxerSQLite;
-                        ActiveRecord.connection.executeSQL('SELECT * FROM sqlite_master'); //or you can have ActiveRecord try to auto detect the enviornment
+                     &lt;dd&gt;    ActiveRecord.connect(ActiveRecord.Adapters.JaxerSQLite,'path_to_database_file');
+                        ActiveRecord.adapter === ActiveRecord.Adapters.JaxerSQLite;
+                        ActiveRecord.connection.executeSQL('SELECT * FROM sqlite_master');
+                        //or you can have ActiveRecord try to auto detect the enviornment
                         ActiveRecord.connect();
-                        
                      &lt;/dd&gt;
                   &lt;/dl&gt;
                &lt;/td&gt;
@@ -256,9 +256,8 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        var User = ActiveRecord.create('users'); var u = User.find(5);
-                        
+                     &lt;dd&gt;    var User = ActiveRecord.create('users');
+                        var u = User.find(5);
                      &lt;/dd&gt;
                   &lt;/dl&gt;
                &lt;/td&gt;
@@ -308,10 +307,20 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        var User = ActiveRecord.define('users', { name: '', password: '', comment_count: 0, profile: { type: 'text', value: '' },
-                        serializable_field: { } }); var u = User.create( { name: 'alice', serializable_field: { a : '1', b: '2'} });
-                        
+                     &lt;dd&gt;    var User = ActiveRecord.define('users',{
+                        name: '',
+                        password: '',
+                        comment_count: 0,
+                        profile: {
+                        type: 'text',
+                        value: ''
+                        },
+                        serializable_field: {}
+                        });
+                        var u = User.create({
+                        name: 'alice',
+                        serializable_field: {a: '1', b: '2'}
+                        });
                      &lt;/dd&gt;
                   &lt;/dl&gt;
                &lt;/td&gt;
@@ -377,10 +386,7 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        ActiveRecord.execute('DELETE FROM users WHERE user_id = ?',5);
-                        
-                     &lt;/dd&gt;
+                     &lt;dd&gt;    ActiveRecord.execute('DELETE FROM users WHERE user_id = ?',5);&lt;/dd&gt;
                   &lt;/dl&gt;
                &lt;/td&gt;
             &lt;/tr&gt;
@@ -416,7 +422,358 @@
                   &lt;dl class=&quot;details&quot;&gt;&lt;/dl&gt;
                &lt;/td&gt;
             &lt;/tr&gt;
-         &lt;/table&gt;
+         &lt;/table&gt;&lt;a name=&quot;ActiveRecord.Examples&quot;&gt;&lt;/a&gt;&lt;h2&gt;Examples&lt;/h2&gt;
+         &lt;p&gt;ActiveRecord.js
+            ===============
+            
+            ActiveRecord.js is a cross browser, cross platform, stand-alone object
+            relational mapper. It shares a very similar vocabulary to the Ruby
+            ActiveRecord implementation, but uses JavaScript idioms and best
+            practices -- it is not a direct port. It can operate using an in memory
+            hash table, or with a SQL back end on the Jaxer platform (SQLite and
+            MySQL), Adobe's AIR (SQLite) and Google Gears (SQLite). Support
+            for the HTML 5 SQL storage spec is planned.
+            
+            Setup
+            -----
+            To begin using ActiveRecord.js, you will need to include the
+            activerecord.js file and establish a connection. If you do not specify
+            a connection type, one will be automatically chosen.
+            
+            ActiveRecord.connect();
+            
+            You can also specify a specific type of adapter. Jaxer requires
+            pre-configuring of the database for the entire application, and Gears
+            automatically configures the database, so simply passing the type of
+            connection is enough. In all of the SQLite implementations you can
+            optionally specify a database name (browser) or path (Jaxer):
+            
+            ActiveRecord.connect(ActiveRecord.Adapters.InMemory); //in JS memory
+            ActiveRecord.connect(ActiveRecord.Adapters.JaxerMySQL); //Jaxer MySQL
+            ActiveRecord.connect(ActiveRecord.Adapters.JaxerSQLite); //Jaxer SQLite
+            ActiveRecord.connect(ActiveRecord.Adapters.AIR); //Adobe AIR
+            ActiveRecord.connect(ActiveRecord.Adapters.Gears,'my_database'); //Gears or HTML5, name is optional
+            
+            Once connected you can always execute SQL statements directly:
+            
+            ActiveRecord.execute('CREATE TABLE IF NOT EXISTS posts (id INTEGER PRIMARY KEY, user_id, title, text)');
+            
+            Logging (to either the Jaxer log or browser console) can be turned on by setting:
+            
+            ActiveRecord.logging = true;
+            
+            InMemory Adapter
+            ----------------
+            If you are using a browser or platform that does not have access to a SQL
+            database, you can use the InMemory adapter which will store your objects
+            in memory. All features (including find by SQL) will still work, but you
+            will not be able to use the Migration features, since there is no table
+            schema. Since your objects will not persist, the second parameter to
+            establish a connection is a hash with the data you would like to use
+            in this format: {table_name: {id: row}}. The InMemory adapter will also
+            trigger three observable events that allow you to write an AJAX
+            persistence layer.
+            
+            ActiveRecord.connect(ActiveRecord.Adapters.InMemory,{
+            table_one: {
+            1: {row_data},
+            2: {row_data}
+            },
+            table_two: {
+            1: {row_data},
+            2: {row_data}
+            }
+            });
+            
+            ActiveRecord.connection.observe('created',function(table_name,id,data){});
+            ActiveRecord.connection.observe('updated',function(table_name,id,data){});
+            ActiveRecord.connection.observe('destroyed',function(table_name,id){});
+            
+            Defining Your Model
+            -------------------
+            ActiveRecord classes are created using the ActiveRecord.create method which
+            takes three arguments: the name of the table that the class will reference,
+            a field definition hash, and optionally a hash of instance methods that
+            will be added to the class. If the table does not exist it will be
+            automically created.
+            var User = ActiveRecord.create('users',{
+            username: '',
+            password: '',
+            post_count: 0,
+            profile: {
+            type: 'TEXT',
+            value: ''
+            }
+            },{
+            getProfileWordCount: function(){
+            return this.get('profile').split(/\s+/).length;
+            }
+            });
+            
+            Class &amp; Instance Methods
+            ------------------------
+            JavaScript does not have true static methods or classes, but in this case any
+            method of the User variable above is refered to as a class method, and any
+            method of a particular user (that the User class would find) is refered to as
+            an instance method. The most important class methods are create() and find():
+            
+            var jessica = User.create({
+            username: 'Jessica',
+            password: 'rabbit'
+            });
+            
+            Add new class or instance methods to all ActiveRecord models in the following
+            way:
+            
+            ActiveRecord.ClassMethods.myClassMethod = function(){
+            //this === model class
+            };
+            ActiveRecord.InstanceMethods.myInstanceMethod = function(){
+            // this === model instance
+            };
+            
+            Getters &amp; Setters
+            -----------------
+            It is extremely important to note that all of the attributes/columns of the user
+            are accessible directly for reading (for convenience), but cannot be written
+            directly. You **must** use the set() method to set an attribute, you **should**
+            use the get() method to access all attributes, but you **must** use the get()
+            method if your attribute/column is a method of the object or a JavaScript
+            reserved keyword ('save,'initialize','default', etc).
+            
+            jessica.username // 'Jessica'
+            jessica.get('username'); // 'Jessica'
+            jessica.username = 'new username';
+            jessica.get('username'); // 'Jessica'
+            jessica.set('username','new username');
+            jessica.get('username'); // 'new username'
+            
+            When Data is Persisted
+            ----------------------
+            Data is only persisted to the database in three cases: when you explicitly call
+            save() on a record, when you call create() on a record, or create a child record
+            through a relationship (the method will contain the word &quot;create&quot; in this case),
+            or when you call updateAttribute() on a record. In the case of the latter, only
+            the attribute you update will be saved, the rest of the record will not be
+            persisted to the database, even if changes have been made. Calling save() may
+            add an &quot;id&quot; property to the record if it does not exist, but if there are no
+            errors, it's state will otherwise be unchanged. You can call refresh() on any
+            record to ensure it is not out of synch with your database at any time.
+            
+            Finding Records
+            ---------------
+            If you created the User class using the define() method you automatically have
+            free &quot;finder&quot; methods:
+            
+            User.findByUsername('Jessica');
+            User.findAllByPassword(''); //finds all with blank passwords
+            
+            Otherwise you can use the base find() method, which takes a hash of options,
+            a numeric id or a complete SQL string:
+            
+            var posts = Post.find({
+            all: true,
+            order: 'id DESC',
+            limit: 10
+            });
+            
+            Synchronization
+            ---------------
+            It is sometimes useful to keep records that have already been found in synch
+            with the database. Each found record has a synchronize() method that will keep
+            the values of that record in synch with the database. If you pass the parameter
+            synchronize: true to find(), all objects will have their values synchronized,
+            and in addition the result set itself will update as objects are destroyed or
+            created. Both features are relatively expensive operations, and are not
+            automatically garbage collected/stopped when the record or result set goes
+            out of scope, so you will need to explicitly stop both record and result set
+            synchronization.
+            
+            var aaron = User.findByName('aaron');
+            aaron.synchronize();
+            
+            var aaron_clone = User.findByName('aaron');
+            aaron_clone.set('name','Aaron!');
+            aaron_clone.save();
+            
+            aaron.get('name') === 'Aaron!';
+            aaron.stop(); //record will no longer be synchronized
+            
+            var users = User.find({
+            all: true,
+            synchronize: true
+            });
+            //users contains aaron
+            aaron.destroy();
+            //users will no longer contain aaron
+            users.stop(); //result set will no longer be synchronized
+            
+            Calculations (count, min, max, etc) can also be synchronized. As a second
+            parameter to the calculation function, pass a hash with a synchronize
+            property that contains a function. That function will be called when the
+            result of the calculation changes. Instead of returning the value of the
+            calculation the initial call to the calculation function will return a
+            function that will stop the synchronization.
+            var current_count;
+            var stop = User.count({
+            synchronize: function(updated_count){
+            current_count = updated_count;
+            }
+            });
+            var new_user = User.create({params}); //current_count incremented
+            new_user.destroy();  //current_count decremented
+            stop();
+            User.create({params}); //current_count unchanged
+            Lifecycle
+            ---------
+            There are 8 currently supported lifecycle events which allow granular control
+            over your data, and are convenient to build user interface components and
+            interactions around on the client side:
+            
+            - afterFind
+            - afterInitialize
+            - beforeSave
+            - afterSave
+            - beforeCreate
+            - afterCreate
+            - beforeDestroy
+            - afterDestroy
+            
+            beforeSave and afterSave are called when both creating (inserting) and saving
+            (updating) a record. You can observe events on all instances of a class, or
+            just a particular instnace:
+            
+            User.observe('afterCreate',function(user){
+            console.log('User with id of ' + user.id + ' was created.');
+            });
+            
+            var u = User.find(5);
+            u.observe('afterDestroy',function(){
+            //this particular user was destroyed
+            });
+            
+            In the example above, each user that is created will be passed to the first
+            callback. You can also call stopObserving() to remove a given observer, and
+            use the observeOnce() method (same arguments as observe()) method if needed.
+            Alternately, each event name is also a convience method and the following
+            example is functionally equivelent to the prior example:
+            
+            User.afterCreate(function(user){
+            console.log('User with id of ' + user.id + ' was created.');
+            });
+            
+            var u = User.find(5);
+            u.afterDestroy(function(){
+            //this particular user was destroyed
+            });
+            
+            You can stop the creation, saving or destruction of a record by returning
+            false inside any observers of the beforeCreate, beforeSave and
+            beforeDestroy events respectively:
+            
+            User.beforeDestroy(function(user){
+            if(!allow_deletion_checkbox.checked){
+            return false; //record will not be destroyed
+            }
+            });
+            Returning null, or returning nothing is equivelent to returning true in
+            this context and will not stop the event.
+            
+            To observe a given event on all models, you can do the following: 
+            
+            ActiveRecord.observe('created',function(model_class,model_instance){});
+            
+            afterFind works differently than all of the other events. It is only available
+            to the model class, not the instances, and is called only when a result set is
+            found. A find first, or find by id call will not trigger the event.
+            
+            User.observe('afterFind',function(users,params){
+            //params contains the params used to find the array of users
+            });
+            
+            Validation
+            ----------
+            Validation is performed on each model instance when create() or save() is
+            called. Validation can be applied either by using pre defined validations
+            (validatesPresenceOf, validatesLengthOf, more will be implemented soon), or by
+            defining a valid() method in the class definition. (or by both). If a record is
+            not valid, save() will return false. create() will always return the record,
+            but in either case you can call getErrors() on the record to determine if
+            there are any errors present.
+            
+            User = ActiveRecord.define('users',{
+            username: '',
+            password: ''
+            },{
+            valid: function(){
+            if(User.findByUsername(this.username)){
+            this.addError('The username ' + this.username + ' is already taken.');
+            }
+            }
+            });
+            
+            User.validatesPresenceOf('password');
+            
+            var user = User.build({
+            'username': 'Jessica'
+            });
+            
+            user.save(); //false
+            var errors = user.getErrors(); //contains a list of the errors that occured
+            user.set('password','rabbit');
+            user.save(); //true
+            
+            Relationships
+            -------------
+            Relationships are declared with one of three class methods that are available
+            to all models:
+            
+            - belongsTo
+            - hasMany
+            - hasOne
+            
+            The related model name can be specified in a number of ways, assuming that you
+            have a Comment model already declared, any of the following would work:
+            
+            User.hasMany(Comment)
+            User.hasMany('Comment')
+            User.hasMany('comment')
+            User.hasMany('comments')
+            
+            Each relationship adds various instance methods to each instance of that
+            model. This differs significantly from the Rails &quot;magical array&quot; style of
+            handling relationship logic:
+            
+            Rails:
+            
+            u = User.find(5)
+            u.comments.length
+            u.comments.create :title =&gt; 'comment title'
+            
+            ActiveRecord.js:
+            
+            var u = User.find(5);
+            u.getCommentList().length;
+            u.createComment({title: 'comment title'});
+            
+            You can name the relationship (and thus the generate methods) by passing
+            a name parameter:
+            
+            TreeNode.belongsTo(TreeNode,{name: 'parent'});
+            TreeNode.hasMany(TreeNode,{name: 'child'});
+            //instance now have, getParent(), getChildList(), methods
+            
+            Missing Features
+            ----------------
+            ActiveRecord.js will not support all of the advanced features of the Ruby
+            ActiveRecord implementation, but several key features are currently missing
+            and will be added soon:
+            
+            - complete set of default validations from ActiveRecord::Validations::ClassMethods
+            - ActsAsList
+            - ActsAsTree
+            - hasMany :through (which will likely be the only supported many to many relationship)
+         &lt;/p&gt;
       &lt;/div&gt;
       &lt;div style=&quot;visibility:hidden;display:none&quot;&gt; aptana_docs&lt;/div&gt;
    &lt;/body&gt;</diff>
      <filename>extensions/website/docs/ActiveRecord.html</filename>
    </modified>
    <modified>
      <diff>@@ -126,9 +126,9 @@
                &lt;td valign=&quot;top&quot; colspan=&quot;2&quot;&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        routes.addRoute('route_name','/route/path', { params } );&lt;br/&gt; routes.addRoute('/route/path', { params } );&lt;br/&gt; routes.addRoute('/route/path');
-                        
+                     &lt;dd&gt;routes.addRoute('route_name','/route/path',{params});&lt;br/&gt;
+                        routes.addRoute('/route/path',{params});&lt;br/&gt;
+                        routes.addRoute('/route/path');
                      &lt;/dd&gt;
                      &lt;dt&gt;Throws&lt;/dt&gt;
                      &lt;dd&gt;
@@ -181,10 +181,9 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        var routes = new ActiveRoutes( [ [ 'post','/blog/post/:id', { object : 'blog',method: 'post'}]]); routes.dispatch('/blog/post/5');
-                        //by default calls Blog.post( { object : 'blog',method: 'post',id: 5});
-                        
+                     &lt;dd&gt;    var routes = new ActiveRoutes([['post','/blog/post/:id',{object:'blog',method: 'post'}]]);
+                        routes.dispatch('/blog/post/5');
+                        //by default calls Blog.post({object:'blog',method: 'post',id: 5});
                      &lt;/dd&gt;
                      &lt;dt&gt;Throws&lt;/dt&gt;
                      &lt;dd&gt;
@@ -240,9 +239,8 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        var route = routes.match('/blog/post/5');&lt;br/&gt; route == { object : 'blog',method: 'post', id: 5};
-                        
+                     &lt;dd&gt;var route = routes.match('/blog/post/5');&lt;br/&gt;
+                        route == {object: 'blog',method: 'post', id: 5};
                      &lt;/dd&gt;
                   &lt;/dl&gt;
                &lt;/td&gt;
@@ -292,10 +290,8 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        var routes = new ActiveRoutes( [ [ 'post','/blog/post/:id', { object : 'blog',method: 'post'}]]);&lt;br/&gt; routes.urlFor( { object
-                        : 'blog',method: 'post', id: 5}) == '/blog/post/5';
-                        
+                     &lt;dd&gt;var routes = new ActiveRoutes([['post','/blog/post/:id',{object:'blog',method: 'post'}]]);&lt;br/&gt;
+                        routes.urlFor({object: 'blog',method: 'post', id: 5}) == '/blog/post/5';
                      &lt;/dd&gt;
                      &lt;dt&gt;Throws&lt;/dt&gt;
                      &lt;dd&gt;
@@ -307,43 +303,117 @@
                &lt;/td&gt;
             &lt;/tr&gt;
          &lt;/table&gt;&lt;a name=&quot;ActiveRoutes.Examples&quot;&gt;&lt;/a&gt;&lt;h2&gt;Examples&lt;/h2&gt;
-         &lt;p&gt;
-            ActiveRoutes maps URI strings to method calls, and visa versa. It shares a similar syntax to Rails Routing, but is framework
-            agnostic and can map calls to any type of object. Server side it can be used to map requests for a given URL to a method that
-            will render a page, client side it can be used to provide deep linking and back button / history support for your Ajax application.
-            Options ------- You can pass a hash of options as the third parameter to the ActiveRoutes constructor. This hash can contain
-            the following keys: - base: default '', the default path / url prefix to be used in a generated url - classSuffix: default
-            '' if it was &quot;Controller&quot;, calling &quot;/blog/post/5&quot; would call BlogController.post instead of Blog.post - dispatcher: default
-            ActiveRoutes.prototype.defaultDispatcher, the dispatcher function to be called when dispatch() is called and a route is found
-            - camelizeObjectName: default true, if true, trying to call &quot;blog_controller&quot; through routes will call &quot;BlogController&quot; -
-            camelizeMethodName: default true, if true, trying to call &quot;my_method_name&quot; through routes will call &quot;myMethodName&quot; - camelizeGeneratedMethods:
-            default true, will export generated methods into the scope as &quot;articleUrl&quot; instead of &quot;article_url&quot; Declaring Routes ----------------
-            Wether declared in the constructor, or with addRoute(), routes can have up to three parameters, and can be declared in any
-            of the follow ways: - &quot;name&quot;, &quot;path&quot;, { params } - &quot;path&quot;, { params } - &quot;path&quot; The path portion of a route is a URI string.
-            Parameters that will be passed to the method called are represented with a colon. Names are optional, but the path and the
-            params together must declare &quot;object&quot; and &quot;method&quot; parameters. The following are all valid routes: var routes = new ActiveRoutes(
-            [ [ 'root','/', { object : 'Pages',method:'index'}], [ 'contact','/contact', { object : 'Pages',method:'contact'}], [ 'blog','/blog',
-            { object : 'Blog',method:'index'}], [ 'post','/blog/post/:id', { object : 'Blog',method:'post'}], [ '/pages/*', { object :
-            'Pages',method:'page'}], [ '/:object/:method' ] ] ,Application); Catch All Routes ---------------- If you want to route all
-            requests below a certain path to a given method, place an asterisk in your route. When a matching path is dispatched to that
-            route the path components will be available in an array called &quot;path&quot;. route_set.addRoute('/wiki/*', { object : 'WikiController',method:'page'})
-            route_set.dispatch('/wiki/a/b/c'); //calls: WikiController.page( { object : 'WikiController',method:'page',path:['a','b','c']})
-            Route Requirements ------------------ Each route can take a special &quot;requirements&quot; parameter that will not be passed in the
-            params passed to the called method. Each requirement can be a regular expression or a function, which the value of the parameter
-            will be checked against. Each value checked by a regular expression or function is always a string. route_set.addRoute('/article/:article_id/:comment_id,
-            { article_id: /^\d+$/, comment_id: function(comment_id) { return comment_id.match(/^\d+$/); } }); Scope ----- You can specify
-            what scope an ActiveRoutes instance will look in to call the specified objects and methods. This defaults to window but can
-            be specified as the second parameter to the constructor. Generating URLs --------------- The method urlFor() is available
-            on every route set, and can generate a URL from an object. Using the routes declared in the example above: routes.urlFor(
-            { object : 'Blog',method:'post',id:5}) == '/blog/post/5'; If named routes are given, corresponding methods are generated in
-            the passed scope to resolve these urls. Application.postUrl( { id : 5}) == '/blog/post/5'; To get the params to generate a
-            url, a similar method is generated: Application.postParams( { id : 5}) == {object:'Blog',method:'post',id:5}; To call a named
-            route directly without round-tripping to a string and back to params use: Application.callPost( { id : 5}); Dispatching -----------
-            To call a given method from a URL string, use the dispatch() method. routes.dispatch('/'); //will call Pages.index() routes.dispatch('/blog/post/5');
-            //will call Blog.post( { id : 5}); History ------- Most server side JavaScript implementations will not preserve objects between
-            requests, so the history is not of use. Client side, after each dispatch, the route and parameters are recorded. The history
-            itself is accessible with the &quot;history&quot; property, and is traversable with the next() and back() methods.
+         &lt;p&gt;ActiveRoutes.js
+            ===============
+            
+            ActiveRoutes maps URI strings to method calls, and visa versa. It shares a
+            similar syntax to Rails Routing, but is framework agnostic and can map
+            calls to any type of object. Server side it can be used to map requests for
+            a given URL to a method that will render a page, client side it can be used
+            to provide deep linking and back button / history support for your Ajax
+            application.
+            
+            Declaring Routes
+            ----------------
+            Wether declared in the constructor, or with addRoute(), routes can have up
+            to three parameters, and can be declared in any of the follow ways:
+            
+            - &quot;name&quot;, &quot;path&quot;, {params}
+            - &quot;path&quot;, {params}
+            - &quot;path&quot;
+            
+            The path portion of a route is a URI string. Parameters that will be passed
+            to the method called are represented with a colon. Names are optional, but
+            the path and the params together must declare &quot;object&quot; and &quot;method&quot;
+            parameters. The following are all valid routes:
+            
+            var routes = new ActiveRoutes([
+            ['root','/',{object:'Pages',method:'index'}],
+            ['contact','/contact',{object:'Pages',method:'contact'}],
+            ['blog','/blog',{object:'Blog',method:'index'}],
+            ['post','/blog/post/:id',{object:'Blog',method:'post'}],
+            ['/pages/*',{object:'Pages',method:'page'}],
+            ['/:object/:method']
+            ],Application);
+            
+            Options
+            -------
+            You can pass a hash of options as the third parameter to the ActiveRoutes
+            constructor. This hash can contain the following keys:
+            
+            - base: default '', the default path / url prefix to be used in a generated url
+            - classSuffix: default '' if it was &quot;Controller&quot;, calling &quot;/blog/post/5&quot; would call BlogController.post instead of Blog.post
+            - dispatcher: default ActiveRoutes.prototype.defaultDispatcher, the dispatcher function to be called when dispatch() is called
+            and a route is found
+            - camelizeObjectName: default true, if true, trying to call &quot;blog_controller&quot; through routes will call &quot;BlogController&quot;
+            - camelizeMethodName: default true, if true, trying to call &quot;my_method_name&quot; through routes will call &quot;myMethodName&quot;
+            - camelizeGeneratedMethods: default true, will export generated methods into the scope as &quot;articleUrl&quot; instead of &quot;article_url&quot;
+            
+            Catch All Routes
+            ----------------
+            If you want to route all requests below a certain path to a given method,
+            place an asterisk in your route. When a matching path is dispatched to
+            that route the path components will be available in an array called &quot;path&quot;.
+            
+            route_set.addRoute('/wiki/*',{object:'WikiController',method:'page'})
+            route_set.dispatch('/wiki/a/b/c');
+            //calls: WikiController.page({object:'WikiController',method:'page',path:['a','b','c']})
+            
+            Route Requirements
+            ------------------
+            Each route can take a special &quot;requirements&quot; parameter that will not be
+            passed in the params passed to the called method. Each requirement
+            can be a regular expression or a function, which the value of the
+            parameter will be checked against. Each value checked by a regular
+            expression or function is always a string.
+            
+            route_set.addRoute('/article/:article_id/:comment_id',{
+            article_id: /^\d+$/,
+            comment_id: function(comment_id){
+            return comment_id.match(/^\d+$/);
+            }
+            });
+            
+            Scope
+            -----
+            You can specify what scope an ActiveRoutes instance will look in to call
+            the specified objects and methods. This defaults to window but can be
+            specified as the second parameter to the constructor.
+            
+            Generating URLs
+            ---------------
+            The method urlFor() is available on every route set, and can generate a
+            URL from an object. Using the routes declared in the example above:
+            
+            routes.urlFor({object:'Blog',method:'post',id:5}) == '/blog/post/5';
+            
+            If named routes are given, corresponding methods are generated in the
+            passed scope to resolve these urls.
+            
+            Application.postUrl({id: 5}) == '/blog/post/5';
+            
+            To get the params to generate a url, a similar method is generated:
+            
+            Application.postParams({id: 5}) == {object:'Blog',method:'post',id:5};
+            
+            To call a named route directly without round-tripping to a string and
+            back to params use:
+            
+            Application.callPost({id: 5});
+            Dispatching
+            -----------
+            To call a given method from a URL string, use the dispatch() method.
+            
+            routes.dispatch('/'); //will call Pages.index()
+            routes.dispatch('/blog/post/5'); //will call Blog.post({id: 5});
             
+            History
+            -------
+            Most server side JavaScript implementations will not preserve objects
+            between requests, so the history is not of use. Client side, after each
+            dispatch, the route and parameters are recorded. The history itself is
+            accessible with the &quot;history&quot; property, and is traversable with the
+            next() and back() methods.
          &lt;/p&gt;
       &lt;/div&gt;
       &lt;div style=&quot;visibility:hidden;display:none&quot;&gt; aptana_docs&lt;/div&gt;</diff>
      <filename>extensions/website/docs/ActiveRoutes.html</filename>
    </modified>
    <modified>
      <diff>@@ -279,10 +279,7 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        ActiveSupport.dateFormat('yyyy-mm-dd HH:MM:ss');
-                        
-                     &lt;/dd&gt;
+                     &lt;dd&gt;    ActiveSupport.dateFormat('yyyy-mm-dd HH:MM:ss');&lt;/dd&gt;
                   &lt;/dl&gt;
                &lt;/td&gt;
             &lt;/tr&gt;
@@ -718,11 +715,16 @@
                   &lt;/p&gt;
                   &lt;dl class=&quot;details&quot;&gt;
                      &lt;dt&gt;Examples&lt;/dt&gt;
-                     &lt;dd&gt;
-                        String.prototype.capitalize = String.prototype.capitalize.wrap( function(proceed, eachWord) { if (eachWord &amp;&amp; this.include(&quot;
-                        &quot;)) { // capitalize each word in the string return this.split(&quot; &quot;).invoke(&quot;capitalize&quot;).join(&quot; &quot;); } else { // proceed using
-                        the original function return proceed(); } });
-                        
+                     &lt;dd&gt;    String.prototype.capitalize = String.prototype.capitalize.wrap( 
+                        function(proceed, eachWord) { 
+                        if (eachWord &amp;&amp; this.include(&quot; &quot;)) {
+                        // capitalize each word in the string
+                        return this.split(&quot; &quot;).invoke(&quot;capitalize&quot;).join(&quot; &quot;);
+                        } else {
+                        // proceed using the original function
+                        return proceed(); 
+                        }
+                        });
                      &lt;/dd&gt;
                   &lt;/dl&gt;
                &lt;/td&gt;</diff>
      <filename>extensions/website/docs/ActiveSupport.html</filename>
    </modified>
    <modified>
      <diff>@@ -49,7 +49,11 @@
                   &lt;dl class=&quot;details&quot;&gt;&lt;/dl&gt;
                &lt;/td&gt;
             &lt;/tr&gt;
-         &lt;/table&gt;
+         &lt;/table&gt;&lt;a name=&quot;ActiveView.Examples&quot;&gt;&lt;/a&gt;&lt;h2&gt;Examples&lt;/h2&gt;
+         &lt;p&gt;ActiveView.js
+            ===============
+            Tutorial coming soon.
+         &lt;/p&gt;
       &lt;/div&gt;
       &lt;div style=&quot;visibility:hidden;display:none&quot;&gt; aptana_docs&lt;/div&gt;
    &lt;/body&gt;</diff>
      <filename>extensions/website/docs/ActiveView.html</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,151 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;yes&quot;?&gt;
 &lt;javascript&gt;
+    &lt;class type=&quot;ActiveController&quot; superclass=&quot;Object&quot;&gt;
+        &lt;examples&gt;
+            &lt;example&gt;&lt;![CDATA[ActiveController.js
+===============
+Tutorial coming soon.]]&gt;&lt;/example&gt;
+        &lt;/examples&gt;
+    &lt;/class&gt;
     &lt;class type=&quot;ActiveEvent&quot; superclass=&quot;Object&quot;&gt;
+        &lt;examples&gt;
+            &lt;example&gt;&lt;![CDATA[ActiveEvent.js
+==============
+
+ActiveEvent allows you to create observable events, and attach event
+handlers to any class or object.
+Setup
+-----
+Before you can use ActiveEvent you must call extend a given class or object
+with ActiveEvent's methods. If you extend a class, both the class itself
+will become observable, as well as all of it's instances.
+    ActiveEvent.extend(MyClass); //class and all instances are observable
+    ActiveEvent.extend(my_object); //this object becomes observable
+
+Creating Events
+---------------
+You can create an event inside any method of your class or object by calling
+the notify() method with name of the event followed by any arguments to be
+passed to observers. You can also have an existing method fire an event with
+the same name as the method using makeObservable().
+
+    var Message = function(){};
+    Message.prototype.send = function(text){
+        //message sending code here...
+        this.notify('sent',text);
+    };
+    ActiveEvent.extend(Message);
+
+    //make an existing method observable
+    var observable_hash = new Hash({});
+    ActiveEvent.extend(observable_hash);
+    observable_hash.makeObservable('set');
+
+Observing Events
+----------------
+To observe an event call the observe() method with the name of the event you
+want to observe, and the observer function. The observer function will
+receive any additional arguments passed to notify(). If observing a class,
+the instance that triggered the event will always be the first argument
+passed to the observer. observeOnce() works just like observe() in every
+way, but is only called once.
+
+    Message.observe('sent',function(message,text){
+        //responds to all sent messages
+    });
+
+    var m = new Message();
+    m.observe('sent',function(text){
+        //this will only be called when &quot;m&quot; is sent
+    });
+
+    observable_hash.observe('set',function(key,value){
+        console.log('observable_hash.set: ' + key + '=' + value);
+    });
+    observable_hash.observeOnce(function(key,value){
+        //this will only be called once
+    });
+
+Control Flow
+------------
+When notify() is called, if any of the registered observers for that event
+return false, no other observers will be called and notify() will return
+false. Returning null or not calling return will not stop the event.
+Otherwise notify() will return an array of the
+collected return values from any registered observer functions. Observers
+can be unregistered with the stopObserving() method. If no observer is
+passed, all observers of that object or class with the given event name
+will be unregistered. If no event name and no observer is passed, all
+observers of that object or class will be unregistered.
+    Message.prototype.send = function(text){
+        if(this.notify('send',text) === false)
+            return false;
+        //message sending code here...
+        this.notify('sent',text);
+        return true;
+    };
+
+    var m = new Message();
+    
+    var observer = m.observe('send',function(message,text){
+        if(text === 'test')
+            return false;
+    });
+    
+    m.send('my message'); //returned true
+    m.send('test'); //returned false
+    
+    m.stopObserving('send',observer);
+    
+    m.send('test'); //returned true&lt;/code&gt;&lt;/pre&gt;
+
+Object.options
+--------------
+If an object has an options property that contains a callable function with
+the same name as an event triggered with &lt;b&gt;notify()&lt;/b&gt;, it will be
+treated just like an instance observer. So the falling code is equivalent.
+    var rating_one = new Control.Rating('rating_one',{  
+        afterChange: function(new_value){}    
+    });  
+    
+    var rating_two = new Control.Rating('rating_two');  
+    rating_two.observe('afterChange',function(new_value){});&lt;/code&gt;&lt;/pre&gt;
+
+MethodCallObserver
+------------------
+The makeObservable() method permanently modifies the method that will
+become observable. If you need to temporarily observe a method call without
+permanently modifying it, use the observeMethod(). Pass the name of the
+method to observe and the observer function will receive all of the
+arguments passed to the method. An ActiveEvent.MethodCallObserver object is
+returned from the call to observeMethod(), which has a stop() method on it.
+Once stop() is called, the method is returned to it's original state. You
+can optionally pass another function to observeMethod(), if you do the
+MethodCallObserver will be automatically stopped when that function
+finishes executing.
+
+    var h = new Hash({});
+    ActiveEvent.extend(h);
+    
+    var observer = h.observeMethod('set',function(key,value){
+        console.log(key + '=' + value);
+    });
+    h.set('a','one');
+    h.set('a','two');
+    observer.stop();
+    
+    //console now contains:
+    //&quot;a = one&quot;
+    //&quot;b = two&quot;
+    
+    //the following does the same as above
+    h.observeMethod('set',function(key,value){
+        console.log(key + '=' + value);
+    },function(){
+        h.set('a','one');
+        h.set('b','two');
+    });]]&gt;&lt;/example&gt;
+        &lt;/examples&gt;
         &lt;methods&gt;
             &lt;method name=&quot;extend&quot; scope=&quot;static&quot;&gt;
                 &lt;description&gt;After extending a given object, it will inherit the methods described in ActiveEvent.ObservableObject.&lt;/description&gt;
@@ -72,6 +217,358 @@
         &lt;/methods&gt;
     &lt;/class&gt;
     &lt;class type=&quot;ActiveRecord&quot; superclass=&quot;Object&quot;&gt;
+        &lt;examples&gt;
+            &lt;example&gt;&lt;![CDATA[ActiveRecord.js
+===============
+
+ActiveRecord.js is a cross browser, cross platform, stand-alone object
+relational mapper. It shares a very similar vocabulary to the Ruby
+ActiveRecord implementation, but uses JavaScript idioms and best
+practices -- it is not a direct port. It can operate using an in memory
+hash table, or with a SQL back end on the Jaxer platform (SQLite and
+MySQL), Adobe's AIR (SQLite) and Google Gears (SQLite). Support
+for the HTML 5 SQL storage spec is planned.
+
+Setup
+-----
+To begin using ActiveRecord.js, you will need to include the
+activerecord.js file and establish a connection. If you do not specify
+a connection type, one will be automatically chosen.
+
+    ActiveRecord.connect();
+
+You can also specify a specific type of adapter. Jaxer requires
+pre-configuring of the database for the entire application, and Gears
+automatically configures the database, so simply passing the type of
+connection is enough. In all of the SQLite implementations you can
+optionally specify a database name (browser) or path (Jaxer):
+
+    ActiveRecord.connect(ActiveRecord.Adapters.InMemory); //in JS memory
+    ActiveRecord.connect(ActiveRecord.Adapters.JaxerMySQL); //Jaxer MySQL
+    ActiveRecord.connect(ActiveRecord.Adapters.JaxerSQLite); //Jaxer SQLite
+    ActiveRecord.connect(ActiveRecord.Adapters.AIR); //Adobe AIR
+    ActiveRecord.connect(ActiveRecord.Adapters.Gears,'my_database'); //Gears or HTML5, name is optional
+    
+Once connected you can always execute SQL statements directly:
+
+    ActiveRecord.execute('CREATE TABLE IF NOT EXISTS posts (id INTEGER PRIMARY KEY, user_id, title, text)');
+    
+Logging (to either the Jaxer log or browser console) can be turned on by setting:
+
+    ActiveRecord.logging = true;
+
+InMemory Adapter
+----------------
+If you are using a browser or platform that does not have access to a SQL
+database, you can use the InMemory adapter which will store your objects
+in memory. All features (including find by SQL) will still work, but you
+will not be able to use the Migration features, since there is no table
+schema. Since your objects will not persist, the second parameter to
+establish a connection is a hash with the data you would like to use
+in this format: {table_name: {id: row}}. The InMemory adapter will also
+trigger three observable events that allow you to write an AJAX
+persistence layer.
+
+    ActiveRecord.connect(ActiveRecord.Adapters.InMemory,{
+        table_one: {
+            1: {row_data},
+            2: {row_data}
+        },
+        table_two: {
+            1: {row_data},
+            2: {row_data}
+        }
+    });
+
+    ActiveRecord.connection.observe('created',function(table_name,id,data){});
+    ActiveRecord.connection.observe('updated',function(table_name,id,data){});
+    ActiveRecord.connection.observe('destroyed',function(table_name,id){});
+    
+Defining Your Model
+-------------------
+ActiveRecord classes are created using the ActiveRecord.create method which
+takes three arguments: the name of the table that the class will reference,
+a field definition hash, and optionally a hash of instance methods that
+will be added to the class. If the table does not exist it will be
+automically created.
+    var User = ActiveRecord.create('users',{
+        username: '',
+        password: '',
+        post_count: 0,
+        profile: {
+            type: 'TEXT',
+            value: ''
+        }
+    },{
+        getProfileWordCount: function(){
+            return this.get('profile').split(/\s+/).length;
+        }
+    });
+
+Class &amp; Instance Methods
+------------------------
+JavaScript does not have true static methods or classes, but in this case any
+method of the User variable above is refered to as a class method, and any
+method of a particular user (that the User class would find) is refered to as
+an instance method. The most important class methods are create() and find():
+
+    var jessica = User.create({
+        username: 'Jessica',
+        password: 'rabbit'
+    });
+
+Add new class or instance methods to all ActiveRecord models in the following
+way:
+
+    ActiveRecord.ClassMethods.myClassMethod = function(){
+        //this === model class
+    };
+    ActiveRecord.InstanceMethods.myInstanceMethod = function(){
+        // this === model instance
+    };
+
+Getters &amp; Setters
+-----------------
+It is extremely important to note that all of the attributes/columns of the user
+are accessible directly for reading (for convenience), but cannot be written
+directly. You **must** use the set() method to set an attribute, you **should**
+use the get() method to access all attributes, but you **must** use the get()
+method if your attribute/column is a method of the object or a JavaScript
+reserved keyword ('save,'initialize','default', etc).
+
+    jessica.username // 'Jessica'
+    jessica.get('username'); // 'Jessica'
+    jessica.username = 'new username';
+    jessica.get('username'); // 'Jessica'
+    jessica.set('username','new username');
+    jessica.get('username'); // 'new username'
+
+When Data is Persisted
+----------------------
+Data is only persisted to the database in three cases: when you explicitly call
+save() on a record, when you call create() on a record, or create a child record
+through a relationship (the method will contain the word &quot;create&quot; in this case),
+or when you call updateAttribute() on a record. In the case of the latter, only
+the attribute you update will be saved, the rest of the record will not be
+persisted to the database, even if changes have been made. Calling save() may
+add an &quot;id&quot; property to the record if it does not exist, but if there are no
+errors, it's state will otherwise be unchanged. You can call refresh() on any
+record to ensure it is not out of synch with your database at any time.
+
+Finding Records
+---------------
+If you created the User class using the define() method you automatically have
+free &quot;finder&quot; methods:
+
+    User.findByUsername('Jessica');
+    User.findAllByPassword(''); //finds all with blank passwords
+
+Otherwise you can use the base find() method, which takes a hash of options,
+a numeric id or a complete SQL string:
+
+    var posts = Post.find({
+        all: true,
+        order: 'id DESC',
+        limit: 10
+    });
+
+Synchronization
+---------------
+It is sometimes useful to keep records that have already been found in synch
+with the database. Each found record has a synchronize() method that will keep
+the values of that record in synch with the database. If you pass the parameter
+synchronize: true to find(), all objects will have their values synchronized,
+and in addition the result set itself will update as objects are destroyed or
+created. Both features are relatively expensive operations, and are not
+automatically garbage collected/stopped when the record or result set goes
+out of scope, so you will need to explicitly stop both record and result set
+synchronization.
+
+    var aaron = User.findByName('aaron');
+    aaron.synchronize();
+
+    var aaron_clone = User.findByName('aaron');
+    aaron_clone.set('name','Aaron!');
+    aaron_clone.save();
+
+    aaron.get('name') === 'Aaron!';
+    aaron.stop(); //record will no longer be synchronized
+
+    var users = User.find({
+        all: true,
+        synchronize: true
+    });
+    //users contains aaron
+    aaron.destroy();
+    //users will no longer contain aaron
+    users.stop(); //result set will no longer be synchronized
+
+Calculations (count, min, max, etc) can also be synchronized. As a second
+parameter to the calculation function, pass a hash with a synchronize
+property that contains a function. That function will be called when the
+result of the calculation changes. Instead of returning the value of the
+calculation the initial call to the calculation function will return a
+function that will stop the synchronization.
+    var current_count;
+    var stop = User.count({
+        synchronize: function(updated_count){
+            current_count = updated_count;
+        }
+    });
+    var new_user = User.create({params}); //current_count incremented
+    new_user.destroy();  //current_count decremented
+    stop();
+    User.create({params}); //current_count unchanged
+Lifecycle
+---------
+There are 8 currently supported lifecycle events which allow granular control
+over your data, and are convenient to build user interface components and
+interactions around on the client side:
+
+- afterFind
+- afterInitialize
+- beforeSave
+- afterSave
+- beforeCreate
+- afterCreate
+- beforeDestroy
+- afterDestroy
+
+beforeSave and afterSave are called when both creating (inserting) and saving
+(updating) a record. You can observe events on all instances of a class, or
+just a particular instnace:
+
+    User.observe('afterCreate',function(user){
+        console.log('User with id of ' + user.id + ' was created.');
+    });
+
+    var u = User.find(5);
+    u.observe('afterDestroy',function(){
+        //this particular user was destroyed
+    });
+
+In the example above, each user that is created will be passed to the first
+callback. You can also call stopObserving() to remove a given observer, and
+use the observeOnce() method (same arguments as observe()) method if needed.
+Alternately, each event name is also a convience method and the following
+example is functionally equivelent to the prior example:
+
+    User.afterCreate(function(user){
+        console.log('User with id of ' + user.id + ' was created.');
+    });
+
+    var u = User.find(5);
+    u.afterDestroy(function(){
+        //this particular user was destroyed
+    });
+
+You can stop the creation, saving or destruction of a record by returning
+false inside any observers of the beforeCreate, beforeSave and
+beforeDestroy events respectively:
+
+    User.beforeDestroy(function(user){
+        if(!allow_deletion_checkbox.checked){
+            return false; //record will not be destroyed
+        }
+    });
+Returning null, or returning nothing is equivelent to returning true in
+this context and will not stop the event.
+    
+To observe a given event on all models, you can do the following: 
+
+    ActiveRecord.observe('created',function(model_class,model_instance){});
+    
+afterFind works differently than all of the other events. It is only available
+to the model class, not the instances, and is called only when a result set is
+found. A find first, or find by id call will not trigger the event.
+
+    User.observe('afterFind',function(users,params){
+        //params contains the params used to find the array of users
+    });
+    
+Validation
+----------
+Validation is performed on each model instance when create() or save() is
+called. Validation can be applied either by using pre defined validations
+(validatesPresenceOf, validatesLengthOf, more will be implemented soon), or by
+defining a valid() method in the class definition. (or by both). If a record is
+not valid, save() will return false. create() will always return the record,
+but in either case you can call getErrors() on the record to determine if
+there are any errors present.
+
+    User = ActiveRecord.define('users',{
+        username: '',
+        password: ''
+    },{
+        valid: function(){
+            if(User.findByUsername(this.username)){
+                this.addError('The username ' + this.username + ' is already taken.');
+            }
+        }
+    });
+
+    User.validatesPresenceOf('password');
+
+    var user = User.build({
+        'username': 'Jessica'
+    });
+
+    user.save(); //false
+    var errors = user.getErrors(); //contains a list of the errors that occured
+    user.set('password','rabbit');
+    user.save(); //true
+    
+Relationships
+-------------
+Relationships are declared with one of three class methods that are available
+ to all models:
+
+- belongsTo
+- hasMany
+- hasOne
+
+The related model name can be specified in a number of ways, assuming that you
+have a Comment model already declared, any of the following would work:
+
+    User.hasMany(Comment)
+    User.hasMany('Comment')
+    User.hasMany('comment')
+    User.hasMany('comments')
+
+Each relationship adds various instance methods to each instance of that
+model. This differs significantly from the Rails &quot;magical array&quot; style of
+handling relationship logic:
+
+Rails:
+
+    u = User.find(5)
+    u.comments.length
+    u.comments.create :title =&gt; 'comment title'
+
+ActiveRecord.js:
+
+    var u = User.find(5);
+    u.getCommentList().length;
+    u.createComment({title: 'comment title'});
+
+You can name the relationship (and thus the generate methods) by passing
+a name parameter:
+
+    TreeNode.belongsTo(TreeNode,{name: 'parent'});
+    TreeNode.hasMany(TreeNode,{name: 'child'});
+    //instance now have, getParent(), getChildList(), methods
+
+Missing Features
+----------------
+ActiveRecord.js will not support all of the advanced features of the Ruby
+ActiveRecord implementation, but several key features are currently missing
+and will be added soon:
+
+- complete set of default validations from ActiveRecord::Validations::ClassMethods
+- ActsAsList
+- ActsAsTree
+- hasMany :through (which will likely be the only supported many to many relationship)]]&gt;&lt;/example&gt;
+        &lt;/examples&gt;
         &lt;properties&gt;
             &lt;property name=&quot;adapter&quot; access=&quot;read-write&quot; scope=&quot;static&quot; type=&quot;mixed&quot;&gt;
                 &lt;description&gt;null if no connection is active, or the class that created the connection.&lt;/description&gt;
@@ -102,9 +599,11 @@
             &lt;method name=&quot;connect&quot; scope=&quot;static&quot;&gt;
                 &lt;description&gt;Must be called before using ActiveRecord. If the adapter requires arguments, those must be passed in after the type of adapter.&lt;/description&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        ActiveRecord.connect(ActiveRecord.Adapters.JaxerSQLite,&amp;apos;path_to_database_file&amp;apos;); ActiveRecord.adapter === ActiveRecord.Adapters.JaxerSQLite; ActiveRecord.connection.executeSQL(&amp;apos;SELECT * FROM sqlite_master&amp;apos;); //or you can have ActiveRecord try to auto detect the enviornment ActiveRecord.connect();
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[    ActiveRecord.connect(ActiveRecord.Adapters.JaxerSQLite,'path_to_database_file');
+    ActiveRecord.adapter === ActiveRecord.Adapters.JaxerSQLite;
+    ActiveRecord.connection.executeSQL('SELECT * FROM sqlite_master');
+    //or you can have ActiveRecord try to auto detect the enviornment
+    ActiveRecord.connect();]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;adapter&quot; usage=&quot;required&quot; type=&quot;Object&quot;/&gt;
@@ -114,9 +613,8 @@
             &lt;method name=&quot;create&quot; scope=&quot;static&quot;&gt;
                 &lt;description&gt;Creates an ActiveRecord class, returning the class and storing it inside ActiveRecord.Models [ model_name ] . model_name is a singularized, capitalized form of table name.&lt;/description&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        var User = ActiveRecord.create(&amp;apos;users&amp;apos;); var u = User.find(5);
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[    var User = ActiveRecord.create('users');
+    var u = User.find(5);]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;table_name&quot; usage=&quot;required&quot; type=&quot;String&quot;/&gt;
@@ -132,9 +630,20 @@
             &lt;method name=&quot;define&quot; scope=&quot;static&quot;&gt;
                 &lt;description&gt;If the table for your ActiveRecord does not exist, this will define the ActiveRecord and automatically create the table.&lt;/description&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        var User = ActiveRecord.define(&amp;apos;users&amp;apos;, { name: &amp;apos;&amp;apos;, password: &amp;apos;&amp;apos;, comment_count: 0, profile: { type: &amp;apos;text&amp;apos;, value: &amp;apos;&amp;apos; }, serializable_field: { } }); var u = User.create( { name: &amp;apos;alice&amp;apos;, serializable_field: { a : &amp;apos;1&amp;apos;, b: &amp;apos;2&amp;apos;} });
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[    var User = ActiveRecord.define('users',{
+        name: '',
+        password: '',
+        comment_count: 0,
+        profile: {
+            type: 'text',
+            value: ''
+        },
+        serializable_field: {}
+    });
+    var u = User.create({
+        name: 'alice',
+        serializable_field: {a: '1', b: '2'}
+    });]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;table_name&quot; usage=&quot;required&quot; type=&quot;String&quot;/&gt;
@@ -167,9 +676,7 @@
             &lt;method name=&quot;execute&quot; scope=&quot;static&quot;&gt;
                 &lt;description&gt;Execute a SQL statement on the active connection. If the statement requires arguments they must be passed in after the SQL statement.&lt;/description&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        ActiveRecord.execute(&amp;apos;DELETE FROM users WHERE user_id = ?&amp;apos;,5);
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[    ActiveRecord.execute('DELETE FROM users WHERE user_id = ?',5);]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;sql&quot; usage=&quot;required&quot; type=&quot;String&quot;/&gt;
@@ -227,9 +734,14 @@
             &lt;method name=&quot;belongsTo&quot; scope=&quot;static&quot;&gt;
                 &lt;description&gt;Sepcifies a 1&amp;lt;-1 relationship between models. The foreign key will reside in the declaring object.&lt;/description&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        Comment.belongsTo(&amp;apos;User&amp;apos;, { counter: &amp;apos;comment_count&amp;apos; //comment count must be a column in User }); var c = Comment.find(5); //each Comment instance will gain the following 3 methods c.getUser() c.buildUser() c.createUser()
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[    Comment.belongsTo('User',{
+        counter: 'comment_count' //comment count must be a column in User
+    });
+    var c = Comment.find(5);
+    //each Comment instance will gain the following 3 methods
+    c.getUser()
+    c.buildUser()
+    c.createUser()]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;related_model_name&quot; usage=&quot;required&quot; type=&quot;String&quot;&gt;
@@ -260,9 +772,11 @@
             &lt;/method&gt;
             &lt;method name=&quot;create&quot; scope=&quot;static&quot;&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        var u = User.create( { name: &amp;apos;alice&amp;apos;, password: &amp;apos;pass&amp;apos; }); u.id //will now contain the id of the user
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[    var u = User.create({
+        name: 'alice',
+        password: 'pass'
+    });
+    u.id //will now contain the id of the user]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;data&quot; usage=&quot;required&quot; type=&quot;Object&quot;/&gt;
@@ -283,9 +797,31 @@
             &lt;method name=&quot;find&quot; scope=&quot;static&quot;&gt;
                 &lt;description&gt;Find a given record, or multiple records matching the passed conditions.&lt;/description&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        var user = User.find(5); //finds a single record var user = User.find( { first: true, where: { id: 5 } }); var user = User.find( { first: true, where: [ &amp;apos;id = ?&amp;apos;,5 ] }); var users = User.find(); //finds all var users = User.find( { where: &amp;apos;name = &amp;quot;alice&amp;quot; AND password = &amp;quot;&amp;apos; + md5(&amp;apos;pass&amp;apos;) + &amp;apos;&amp;quot;&amp;apos;, order: &amp;apos;id DESC&amp;apos; }); //using the where syntax below, the parameters will be properly escaped var users = User.find( { where: { name: &amp;apos;alice&amp;apos;, password: md5(&amp;apos;pass&amp;apos;) } order: &amp;apos;id DESC&amp;apos; }); var users = User.find(&amp;apos;SELECT * FROM users ORDER id DESC&amp;apos;);
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[    var user = User.find(5); //finds a single record
+    var user = User.find({
+        first: true,
+        where: {
+            id: 5
+        }
+    });
+    var user = User.find({
+        first: true,
+        where: ['id = ?',5]
+    });
+    var users = User.find(); //finds all
+    var users = User.find({
+        where: 'name = &quot;alice&quot; AND password = &quot;' + md5('pass') + '&quot;',
+        order: 'id DESC'
+    });
+    //using the where syntax below, the parameters will be properly escaped
+    var users = User.find({
+        where: {
+            name: 'alice',
+            password: md5('pass')
+        }
+        order: 'id DESC'
+    });
+    var users = User.find('SELECT * FROM users ORDER id DESC');]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;params&quot; usage=&quot;required&quot; type=&quot;mixed&quot;&gt;
@@ -307,9 +843,16 @@
             &lt;method name=&quot;hasMany&quot; scope=&quot;static&quot;&gt;
                 &lt;description&gt;Sepcifies a 1-&amp;gt;N relationship between models. The foreign key will reside in the child (related) object.&lt;/description&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        User.hasMany(&amp;apos;comments&amp;apos;, { dependent: true }); var u = User.find(5); //each User instance will gain the following 5 methods u.createComment() u.buildComment() u.destroyComment() u.getCommentList() //takes the same options as find() u.getCommentCount() //takes the same options as count()
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[    User.hasMany('comments',{
+        dependent: true
+    });
+    var u = User.find(5);
+    //each User instance will gain the following 5 methods
+    u.createComment()
+    u.buildComment()
+    u.destroyComment()
+    u.getCommentList() //takes the same options as find()
+    u.getCommentCount() //takes the same options as count()]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;related_model_name&quot; usage=&quot;required&quot; type=&quot;String&quot;&gt;
@@ -323,9 +866,12 @@
             &lt;method name=&quot;hasOne&quot; scope=&quot;static&quot;&gt;
                 &lt;description&gt;Sepcifies a 1-&amp;gt;1 relationship between models. The foreign key will reside in the related object.&lt;/description&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        User.hasOne(CreditCard); var u = User.find(5); //each User instance will gain the following 3 methods u.getCreditCard() u.buildCreditCard() u.createCreditCard()
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[    User.hasOne(CreditCard);
+    var u = User.find(5);
+    //each User instance will gain the following 3 methods
+    u.getCreditCard()
+    u.buildCreditCard()
+    u.createCreditCard()]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;related_model_name&quot; usage=&quot;required&quot; type=&quot;String&quot;&gt;
@@ -365,9 +911,9 @@
             &lt;method name=&quot;resultSetFromArray&quot; scope=&quot;static&quot;&gt;
                 &lt;description&gt;Extends a vanilla array with ActiveRecord.ResultSet methods allowing for the construction of custom result set objects from arrays where result sets are expected. This will modify the array that is passed in and return the same array object.&lt;/description&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        var one = Comment.find(1); var two = Comment.find(2); var result_set = Comment.resultSetFromArray( [ one,two ] );
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[    var one = Comment.find(1);
+    var two = Comment.find(2);
+    var result_set = Comment.resultSetFromArray([one,two]);]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;result_set&quot; usage=&quot;required&quot; type=&quot;Array&quot;/&gt;
@@ -389,9 +935,11 @@
             &lt;/method&gt;
             &lt;method name=&quot;transaction&quot; scope=&quot;static&quot;&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        Account.transaction(function() { var from = Account.find(2); var to = Account.find(3); to.despoit(from.withdraw(100.00)); });
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[    Account.transaction(function(){
+        var from = Account.find(2);
+        var to = Account.find(3);
+        to.despoit(from.withdraw(100.00));
+    });]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;proceed&quot; usage=&quot;required&quot; type=&quot;Function&quot;&gt;
@@ -404,9 +952,14 @@
             &lt;/method&gt;
             &lt;method name=&quot;update&quot; scope=&quot;static&quot;&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        Article.update(3, { title: &amp;apos;New Title&amp;apos; }); //or pass an array of ids and an array of attributes Article.update( [ 5,7 ] , [ { title : &amp;apos;Title for 5&amp;apos;}, { title : &amp;apos;Title for 7&amp;apos;} ] );
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[    Article.update(3,{
+        title: 'New Title'
+    });
+    //or pass an array of ids and an array of attributes
+    Article.update([5,7],[
+        {title: 'Title for 5'},
+        {title: 'Title for 7'}
+    ]);]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;id&quot; usage=&quot;required&quot; type=&quot;Number&quot;/&gt;
@@ -579,6 +1132,49 @@
         &lt;/methods&gt;
     &lt;/class&gt;
     &lt;class type=&quot;ActiveRecord.Migrations&quot; superclass=&quot;Object&quot;&gt;
+        &lt;examples&gt;
+            &lt;example&gt;&lt;![CDATA[Migrations
+----------
+
+Migrations are a method of versioining the database schema used by your
+application. All of your migrations must be defined in an object assigned
+to ActiveRecord.Migrations.migrations. The keys need not be numerically
+sequential, but must be numeric (i.e. 1,2,3 or 100,200,300).
+
+Each migration object must have an up() and down() method which will
+recieve an ActiveRecord.Migrations.Schema object. createTable() and
+addColumn() both use the same syntax as define() to specify default
+values and field types.
+
+    ActiveRecord.Migrations.migrations = {
+        1: {
+            up: function(schema){
+                schema.createTable('one',{
+                    a: '',
+                    b: {
+                        type: 'TEXT',
+                        value: 'default'
+                    }
+                });
+            },
+            down: function(schema){
+                schema.dropTable('one');
+            }
+        },
+        2: {
+            up: function(schema){
+                schema.addColumn('one','c');
+            },
+            down: function(schema){
+                schema.dropColumn('one','c');
+            }
+        }
+    };
+    
+    ActiveRecord.Migrations.migrate(); //will migrate to the highest available (2 in this case)
+    ActiveRecord.Migrations.migrate(0); //migrates down below 1, effectively erasing the schema
+    ActiveRecord.Migrations.migrate(1); //migrates to version 1]]&gt;&lt;/example&gt;
+        &lt;/examples&gt;
         &lt;methods&gt;
             &lt;method name=&quot;current&quot; scope=&quot;static&quot;&gt;
                 &lt;description&gt;Returns the current schema version number.&lt;/description&gt;
@@ -667,9 +1263,116 @@
     &lt;/class&gt;
     &lt;class type=&quot;ActiveRoutes&quot; superclass=&quot;Object&quot;&gt;
         &lt;examples&gt;
-            &lt;example&gt;
-                ActiveRoutes maps URI strings to method calls, and visa versa. It shares a similar syntax to Rails Routing, but is framework agnostic and can map calls to any type of object. Server side it can be used to map requests for a given URL to a method that will render a page, client side it can be used to provide deep linking and back button / history support for your Ajax application. Options ------- You can pass a hash of options as the third parameter to the ActiveRoutes constructor. This hash can contain the following keys: - base: default &amp;apos;&amp;apos;, the default path / url prefix to be used in a generated url - classSuffix: default &amp;apos;&amp;apos; if it was &amp;quot;Controller&amp;quot;, calling &amp;quot;/blog/post/5&amp;quot; would call BlogController.post instead of Blog.post - dispatcher: default ActiveRoutes.prototype.defaultDispatcher, the dispatcher function to be called when dispatch() is called and a route is found - camelizeObjectName: default true, if true, trying to call &amp;quot;blog_controller&amp;quot; through routes will call &amp;quot;BlogController&amp;quot; - camelizeMethodName: default true, if true, trying to call &amp;quot;my_method_name&amp;quot; through routes will call &amp;quot;myMethodName&amp;quot; - camelizeGeneratedMethods: default true, will export generated methods into the scope as &amp;quot;articleUrl&amp;quot; instead of &amp;quot;article_url&amp;quot; Declaring Routes ---------------- Wether declared in the constructor, or with addRoute(), routes can have up to three parameters, and can be declared in any of the follow ways: - &amp;quot;name&amp;quot;, &amp;quot;path&amp;quot;, { params } - &amp;quot;path&amp;quot;, { params } - &amp;quot;path&amp;quot; The path portion of a route is a URI string. Parameters that will be passed to the method called are represented with a colon. Names are optional, but the path and the params together must declare &amp;quot;object&amp;quot; and &amp;quot;method&amp;quot; parameters. The following are all valid routes: var routes = new ActiveRoutes( [ [ &amp;apos;root&amp;apos;,&amp;apos;/&amp;apos;, { object : &amp;apos;Pages&amp;apos;,method:&amp;apos;index&amp;apos;}], [ &amp;apos;contact&amp;apos;,&amp;apos;/contact&amp;apos;, { object : &amp;apos;Pages&amp;apos;,method:&amp;apos;contact&amp;apos;}], [ &amp;apos;blog&amp;apos;,&amp;apos;/blog&amp;apos;, { object : &amp;apos;Blog&amp;apos;,method:&amp;apos;index&amp;apos;}], [ &amp;apos;post&amp;apos;,&amp;apos;/blog/post/:id&amp;apos;, { object : &amp;apos;Blog&amp;apos;,method:&amp;apos;post&amp;apos;}], [ &amp;apos;/pages/*&amp;apos;, { object : &amp;apos;Pages&amp;apos;,method:&amp;apos;page&amp;apos;}], [ &amp;apos;/:object/:method&amp;apos; ] ] ,Application); Catch All Routes ---------------- If you want to route all requests below a certain path to a given method, place an asterisk in your route. When a matching path is dispatched to that route the path components will be available in an array called &amp;quot;path&amp;quot;. route_set.addRoute(&amp;apos;/wiki/*&amp;apos;, { object : &amp;apos;WikiController&amp;apos;,method:&amp;apos;page&amp;apos;}) route_set.dispatch(&amp;apos;/wiki/a/b/c&amp;apos;); //calls: WikiController.page( { object : &amp;apos;WikiController&amp;apos;,method:&amp;apos;page&amp;apos;,path:[&amp;apos;a&amp;apos;,&amp;apos;b&amp;apos;,&amp;apos;c&amp;apos;]}) Route Requirements ------------------ Each route can take a special &amp;quot;requirements&amp;quot; parameter that will not be passed in the params passed to the called method. Each requirement can be a regular expression or a function, which the value of the parameter will be checked against. Each value checked by a regular expression or function is always a string. route_set.addRoute(&amp;apos;/article/:article_id/:comment_id, { article_id: /^\d+$/, comment_id: function(comment_id) { return comment_id.match(/^\d+$/); } }); Scope ----- You can specify what scope an ActiveRoutes instance will look in to call the specified objects and methods. This defaults to window but can be specified as the second parameter to the constructor. Generating URLs --------------- The method urlFor() is available on every route set, and can generate a URL from an object. Using the routes declared in the example above: routes.urlFor( { object : &amp;apos;Blog&amp;apos;,method:&amp;apos;post&amp;apos;,id:5}) == &amp;apos;/blog/post/5&amp;apos;; If named routes are given, corresponding methods are generated in the passed scope to resolve these urls. Application.postUrl( { id : 5}) == &amp;apos;/blog/post/5&amp;apos;; To get the params to generate a url, a similar method is generated: Application.postParams( { id : 5}) == {object:&amp;apos;Blog&amp;apos;,method:&amp;apos;post&amp;apos;,id:5}; To call a named route directly without round-tripping to a string and back to params use: Application.callPost( { id : 5}); Dispatching ----------- To call a given method from a URL string, use the dispatch() method. routes.dispatch(&amp;apos;/&amp;apos;); //will call Pages.index() routes.dispatch(&amp;apos;/blog/post/5&amp;apos;); //will call Blog.post( { id : 5}); History ------- Most server side JavaScript implementations will not preserve objects between requests, so the history is not of use. Client side, after each dispatch, the route and parameters are recorded. The history itself is accessible with the &amp;quot;history&amp;quot; property, and is traversable with the next() and back() methods.
-            &lt;/example&gt;
+            &lt;example&gt;&lt;![CDATA[ActiveRoutes.js
+===============
+
+ActiveRoutes maps URI strings to method calls, and visa versa. It shares a
+similar syntax to Rails Routing, but is framework agnostic and can map
+calls to any type of object. Server side it can be used to map requests for
+a given URL to a method that will render a page, client side it can be used
+to provide deep linking and back button / history support for your Ajax
+application.
+
+Declaring Routes
+----------------
+Wether declared in the constructor, or with addRoute(), routes can have up
+to three parameters, and can be declared in any of the follow ways:
+
+- &quot;name&quot;, &quot;path&quot;, {params}
+- &quot;path&quot;, {params}
+- &quot;path&quot;
+
+The path portion of a route is a URI string. Parameters that will be passed
+to the method called are represented with a colon. Names are optional, but
+the path and the params together must declare &quot;object&quot; and &quot;method&quot;
+parameters. The following are all valid routes:
+
+    var routes = new ActiveRoutes([
+      ['root','/',{object:'Pages',method:'index'}],
+      ['contact','/contact',{object:'Pages',method:'contact'}],
+      ['blog','/blog',{object:'Blog',method:'index'}],
+      ['post','/blog/post/:id',{object:'Blog',method:'post'}],
+      ['/pages/*',{object:'Pages',method:'page'}],
+      ['/:object/:method']
+    ],Application);
+
+Options
+-------
+You can pass a hash of options as the third parameter to the ActiveRoutes
+constructor. This hash can contain the following keys:
+
+- base: default '', the default path / url prefix to be used in a generated url
+- classSuffix: default '' if it was &quot;Controller&quot;, calling &quot;/blog/post/5&quot; would call BlogController.post instead of Blog.post
+- dispatcher: default ActiveRoutes.prototype.defaultDispatcher, the dispatcher function to be called when dispatch() is called and a route is found
+- camelizeObjectName: default true, if true, trying to call &quot;blog_controller&quot; through routes will call &quot;BlogController&quot;
+- camelizeMethodName: default true, if true, trying to call &quot;my_method_name&quot; through routes will call &quot;myMethodName&quot;
+- camelizeGeneratedMethods: default true, will export generated methods into the scope as &quot;articleUrl&quot; instead of &quot;article_url&quot;
+
+Catch All Routes
+----------------
+If you want to route all requests below a certain path to a given method,
+place an asterisk in your route. When a matching path is dispatched to
+that route the path components will be available in an array called &quot;path&quot;.
+
+    route_set.addRoute('/wiki/*',{object:'WikiController',method:'page'})
+    route_set.dispatch('/wiki/a/b/c');
+    //calls: WikiController.page({object:'WikiController',method:'page',path:['a','b','c']})
+
+Route Requirements
+------------------
+Each route can take a special &quot;requirements&quot; parameter that will not be
+passed in the params passed to the called method. Each requirement
+can be a regular expression or a function, which the value of the
+parameter will be checked against. Each value checked by a regular
+expression or function is always a string.
+
+    route_set.addRoute('/article/:article_id/:comment_id',{
+        article_id: /^\d+$/,
+        comment_id: function(comment_id){
+            return comment_id.match(/^\d+$/);
+        }
+    });
+
+Scope
+-----
+You can specify what scope an ActiveRoutes instance will look in to call
+the specified objects and methods. This defaults to window but can be
+specified as the second parameter to the constructor.
+
+Generating URLs
+---------------
+The method urlFor() is available on every route set, and can generate a
+URL from an object. Using the routes declared in the example above:
+
+    routes.urlFor({object:'Blog',method:'post',id:5}) == '/blog/post/5';
+
+If named routes are given, corresponding methods are generated in the
+passed scope to resolve these urls.
+
+    Application.postUrl({id: 5}) == '/blog/post/5';
+
+To get the params to generate a url, a similar method is generated:
+
+    Application.postParams({id: 5}) == {object:'Blog',method:'post',id:5};
+
+To call a named route directly without round-tripping to a string and
+back to params use:
+
+    Application.callPost({id: 5});
+Dispatching
+-----------
+To call a given method from a URL string, use the dispatch() method.
+
+    routes.dispatch('/'); //will call Pages.index()
+    routes.dispatch('/blog/post/5'); //will call Blog.post({id: 5});
+
+History
+-------
+Most server side JavaScript implementations will not preserve objects
+between requests, so the history is not of use. Client side, after each
+dispatch, the route and parameters are recorded. The history itself is
+accessible with the &quot;history&quot; property, and is traversable with the
+next() and back() methods.]]&gt;&lt;/example&gt;
         &lt;/examples&gt;
         &lt;constructors&gt;
             &lt;constructor scope=&quot;instance&quot;&gt;
@@ -696,9 +1399,9 @@
             &lt;method name=&quot;addRoute&quot; scope=&quot;instance&quot;&gt;
                 &lt;description&gt;Add a new route to the route set. When adding routes via the constructor routes will be pushed onto the array, if called after the route set is initialized, the route will be unshifted onto the route set (and will have the highest priority).&lt;/description&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        routes.addRoute(&amp;apos;route_name&amp;apos;,&amp;apos;/route/path&amp;apos;, { params } );&amp;lt;br/&amp;gt; routes.addRoute(&amp;apos;/route/path&amp;apos;, { params } );&amp;lt;br/&amp;gt; routes.addRoute(&amp;apos;/route/path&amp;apos;);
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[routes.addRoute('route_name','/route/path',{params});&lt;br/&gt;
+routes.addRoute('/route/path',{params});&lt;br/&gt;
+routes.addRoute('/route/path');]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;exceptions&gt;
                     &lt;exception type=&quot;ActiveRoutes.Errors.NoMethodInRoute&quot;/&gt;
@@ -715,9 +1418,9 @@
             &lt;method name=&quot;dispatch&quot; scope=&quot;instance&quot;&gt;
                 &lt;description&gt;Will match() the given path and call the dispatcher if one is found.&lt;/description&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        var routes = new ActiveRoutes( [ [ &amp;apos;post&amp;apos;,&amp;apos;/blog/post/:id&amp;apos;, { object : &amp;apos;blog&amp;apos;,method: &amp;apos;post&amp;apos;}]]); routes.dispatch(&amp;apos;/blog/post/5&amp;apos;); //by default calls Blog.post( { object : &amp;apos;blog&amp;apos;,method: &amp;apos;post&amp;apos;,id: 5});
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[    var routes = new ActiveRoutes([['post','/blog/post/:id',{object:'blog',method: 'post'}]]);
+    routes.dispatch('/blog/post/5');
+    //by default calls Blog.post({object:'blog',method: 'post',id: 5});]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;path&quot; usage=&quot;required&quot; type=&quot;String&quot;/&gt;
@@ -736,9 +1439,8 @@
             &lt;/method&gt;
             &lt;method name=&quot;match&quot; scope=&quot;instance&quot;&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        var route = routes.match(&amp;apos;/blog/post/5&amp;apos;);&amp;lt;br/&amp;gt; route == { object : &amp;apos;blog&amp;apos;,method: &amp;apos;post&amp;apos;, id: 5};
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[var route = routes.match('/blog/post/5');&lt;br/&gt;
+route == {object: 'blog',method: 'post', id: 5};]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;path&quot; usage=&quot;required&quot; type=&quot;String&quot;/&gt;
@@ -757,9 +1459,8 @@
             &lt;/method&gt;
             &lt;method name=&quot;urlFor&quot; scope=&quot;instance&quot;&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        var routes = new ActiveRoutes( [ [ &amp;apos;post&amp;apos;,&amp;apos;/blog/post/:id&amp;apos;, { object : &amp;apos;blog&amp;apos;,method: &amp;apos;post&amp;apos;}]]);&amp;lt;br/&amp;gt; routes.urlFor( { object : &amp;apos;blog&amp;apos;,method: &amp;apos;post&amp;apos;, id: 5}) == &amp;apos;/blog/post/5&amp;apos;;
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[var routes = new ActiveRoutes([['post','/blog/post/:id',{object:'blog',method: 'post'}]]);&lt;br/&gt;
+routes.urlFor({object: 'blog',method: 'post', id: 5}) == '/blog/post/5';]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;params&quot; usage=&quot;optional&quot; type=&quot;Object&quot;/&gt;
@@ -843,9 +1544,7 @@
             &lt;method name=&quot;dateFormat&quot; scope=&quot;static&quot;&gt;
                 &lt;description&gt;See: http://blog.stevenlevithan.com/archives/date-time-format If convert_to_local_time is true the Date object will be assume to be GMT and be converted from GMT to the local time. Local time will be the local time of the server if running server side, or local time of the client side if running in the browser.&lt;/description&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        ActiveSupport.dateFormat(&amp;apos;yyyy-mm-dd HH:MM:ss&amp;apos;);
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[    ActiveSupport.dateFormat('yyyy-mm-dd HH:MM:ss');]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;date&quot; usage=&quot;required&quot; type=&quot;Date&quot;/&gt;
@@ -985,9 +1684,16 @@
             &lt;method name=&quot;wrap&quot; scope=&quot;static&quot;&gt;
                 &lt;description&gt;Returns a function wrapped around the original function.&lt;/description&gt;
                 &lt;examples&gt;
-                    &lt;example&gt;
-                        String.prototype.capitalize = String.prototype.capitalize.wrap( function(proceed, eachWord) { if (eachWord &amp;amp;&amp;amp; this.include(&amp;quot; &amp;quot;)) { // capitalize each word in the string return this.split(&amp;quot; &amp;quot;).invoke(&amp;quot;capitalize&amp;quot;).join(&amp;quot; &amp;quot;); } else { // proceed using the original function return proceed(); } });
-                    &lt;/example&gt;
+                    &lt;example&gt;&lt;![CDATA[    String.prototype.capitalize = String.prototype.capitalize.wrap( 
+    function(proceed, eachWord) { 
+        if (eachWord &amp;&amp; this.include(&quot; &quot;)) {
+            // capitalize each word in the string
+            return this.split(&quot; &quot;).invoke(&quot;capitalize&quot;).join(&quot; &quot;);
+        } else {
+            // proceed using the original function
+            return proceed(); 
+        }
+    });]]&gt;&lt;/example&gt;
                 &lt;/examples&gt;
                 &lt;parameters&gt;
                     &lt;parameter name=&quot;func&quot; usage=&quot;required&quot; type=&quot;Function&quot;/&gt;
@@ -1067,6 +1773,11 @@
         &lt;/methods&gt;
     &lt;/class&gt;
     &lt;class type=&quot;ActiveView&quot; superclass=&quot;Object&quot;&gt;
+        &lt;examples&gt;
+            &lt;example&gt;&lt;![CDATA[ActiveView.js
+===============
+Tutorial coming soon.]]&gt;&lt;/example&gt;
+        &lt;/examples&gt;
         &lt;methods&gt;
             &lt;method name=&quot;render&quot; scope=&quot;static&quot;&gt;
                 &lt;description&gt;This method is not usually called directly but is utilized by data bindings and ActiveControllers. This method is normalizes or renders a variety of inputs. Strings or Element objects are returned untouched, ActiveView instances will have their DOM container returned, ActiveView classes will be rendered and the DOM container returned. If a function is passed in it will be called with the passed scope. That function should return a string or Element.&lt;/description&gt;</diff>
      <filename>extensions/website/docs/docs.xml</filename>
    </modified>
    <modified>
      <diff>@@ -11,17 +11,17 @@
   &lt;body&gt;
     &lt;div id=&quot;container&quot;&gt;
       &lt;div id=&quot;navigation&quot;&gt;
-        &lt;a href=&quot;/&quot;&gt;&lt;h1 id=&quot;logo&quot;&gt;&lt;span&gt;ActiveJS&lt;/span&gt;&lt;/h1&gt;&lt;/a&gt;
+        &lt;a href=&quot;index.html&quot;&gt;&lt;h1 id=&quot;logo&quot;&gt;&lt;span&gt;ActiveJS&lt;/span&gt;&lt;/h1&gt;&lt;/a&gt;
         &lt;ul id=&quot;components&quot;&gt;
-          &lt;li&gt;&lt;a href=&quot;/record.html&quot;&gt;Record&lt;/a&gt;&lt;/li&gt;
-          &lt;li&gt;&lt;a href=&quot;/controller.html&quot;&gt;Controller&lt;/a&gt;&lt;/li&gt;
-          &lt;li&gt;&lt;a href=&quot;/view.html&quot;&gt;View&lt;/a&gt;&lt;/li&gt;
-          &lt;li&gt;&lt;a href=&quot;/routes.html&quot;&gt;Routes&lt;/a&gt;&lt;/li&gt;
-          &lt;li&gt;&lt;a href=&quot;/event.html&quot;&gt;Event&lt;/a&gt;&lt;/li&gt;
+          &lt;li&gt;&lt;a href=&quot;record.html&quot;&gt;Record&lt;/a&gt;&lt;/li&gt;
+          &lt;li&gt;&lt;a href=&quot;controller.html&quot;&gt;Controller&lt;/a&gt;&lt;/li&gt;
+          &lt;li&gt;&lt;a href=&quot;view.html&quot;&gt;View&lt;/a&gt;&lt;/li&gt;
+          &lt;li&gt;&lt;a href=&quot;routes.html&quot;&gt;Routes&lt;/a&gt;&lt;/li&gt;
+          &lt;li&gt;&lt;a href=&quot;event.html&quot;&gt;Event&lt;/a&gt;&lt;/li&gt;
         &lt;/ul&gt;
         &lt;ul id=&quot;resources&quot;&gt;
           &lt;li&gt;&lt;a href=&quot;http://github.com/aptana/activejs/wikis&quot;&gt;Wiki&lt;/a&gt;&lt;/li&gt;
-          &lt;li&gt;&lt;a href=&quot;/docs&quot;&gt;API&lt;/a&gt;&lt;/li&gt;
+          &lt;li&gt;&lt;a href=&quot;docs&quot;&gt;API&lt;/a&gt;&lt;/li&gt;
           &lt;li&gt;&lt;a href=&quot;http://github.com/aptana/activejs/tree/master&quot;&gt;Source&lt;/a&gt;&lt;/li&gt;
           &lt;li&gt;&lt;a href=&quot;http://aptana.lighthouseapp.com/projects/22012-activejs/overview&quot;&gt;Tracker&lt;/a&gt;&lt;/li&gt;
           &lt;li&gt;&lt;a href=&quot;http://groups.google.com/group/activejs/&quot;&gt;Group&lt;/a&gt;&lt;/li&gt;
@@ -44,6 +44,10 @@
       &lt;p&gt;ActiveRecord.js is a single file, MIT licensed, relies on no external JavaScript libraries, supports automatic table creation, data validation, data synchronization, relationships between models, life cycle callbacks and can use an in memory hash table to store objects if no SQL database is available.&lt;/p&gt;
       &lt;!-- /CONTENT --&gt;
       &lt;script&gt;
+        var code_snippets = document.getElementsByTagName('code');
+        for(var i = 0; i &lt; code_snippets.length; ++i){
+          code_snippets[i].className = 'javascript';
+        }
         dp.sh.HighlightAll('javascript',false,false,false,true,false);
       &lt;/script&gt;
       &lt;p id=&quot;copyright&quot;&gt;ActiveJS is a trademark of Aptana, Inc. &amp;copy;2009 &lt;a href=&quot;http://aptana.com/&quot;&gt;Aptana Inc.&lt;/a&gt;&lt;/p&gt;</diff>
      <filename>extensions/website/index.html</filename>
    </modified>
    <modified>
      <diff>@@ -107,7 +107,7 @@ ul#resources li {
 /* Body
 -----------------*/
 h1 {
-  font-size:15px;
+  font-size:16px;
   color:#333;
   margin:24px 0 20px 8px;
 }
@@ -139,7 +139,9 @@ h2 {
 
 #copyright {
   text-align:right;
-  margin:50px 5px 25px 0;
+  margin:25px 5px 25px 5px;
+  padding-top:5px;
+  border-top:1px solid #ccc;
 }
 
 /* Logos
@@ -173,6 +175,13 @@ pre.highlighted {
   width:750px;
   border-left:3px solid #ccc;
   border-right:3px solid #ccc;
+  background-color:#000;
+}
+
+.dp-highlighter {
+  background-color:#000;
+  -webkit-border-radius:3px;
+  -moz-border-radius:3px;
 }
 
 code,
@@ -187,7 +196,6 @@ code,
 .dp-highlighter ol {
   margin:0 5px;
   padding:10px 15px;
-  background-color:#000;
   list-style:none;
 }
 </diff>
      <filename>extensions/website/stylesheets/screen.css</filename>
    </modified>
    <modified>
      <diff>@@ -1185,6 +1185,10 @@ ActiveSupport = {
 /**
  * @namespace {ActiveEvent}
  * @example
+ * 
+ * ActiveEvent.js
+ * ==============
+ * 
  * ActiveEvent allows you to create observable events, and attach event
  * handlers to any class or object.
  *
@@ -1301,28 +1305,28 @@ ActiveSupport = {
  * can optionally pass another function to observeMethod(), if you do the
  * MethodCallObserver will be automatically stopped when that function
  * finishes executing.
- *
- *   var h = new Hash({});
- *   ActiveEvent.extend(h);
- *   
- *   var observer = h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   });
- *   h.set('a','one');
- *   h.set('a','two');
- *   observer.stop();
- *   
- *   //console now contains:
- *   //&quot;a = one&quot;
- *   //&quot;b = two&quot;
- *   
- *   //the following does the same as above
- *   h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   },function(){
- *       h.set('a','one');
- *       h.set('b','two');
- *   });
+ * 
+ *     var h = new Hash({});
+ *     ActiveEvent.extend(h);
+ *     
+ *     var observer = h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     });
+ *     h.set('a','one');
+ *     h.set('a','two');
+ *     observer.stop();
+ *     
+ *     //console now contains:
+ *     //&quot;a = one&quot;
+ *     //&quot;b = two&quot;
+ *     
+ *     //the following does the same as above
+ *     h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     },function(){
+ *         h.set('a','one');
+ *         h.set('b','two');
+ *     });
  */
 var ActiveEvent = null;
 
@@ -1634,6 +1638,10 @@ var ActiveRoutes = null;
  * @param {Object} [options]
  * @return {ActiveRoutes}
  * @example
+ *
+ * ActiveRoutes.js
+ * ===============
+ * 
  * ActiveRoutes maps URI strings to method calls, and visa versa. It shares a
  * similar syntax to Rails Routing, but is framework agnostic and can map
  * calls to any type of object. Server side it can be used to map requests for
@@ -1641,18 +1649,6 @@ var ActiveRoutes = null;
  * to provide deep linking and back button / history support for your Ajax
  * application.
  * 
- * Options
- * -------
- * You can pass a hash of options as the third parameter to the ActiveRoutes
- * constructor. This hash can contain the following keys:
- * 
- * - base: default '', the default path / url prefix to be used in a generated url
- * - classSuffix: default '' if it was &quot;Controller&quot;, calling &quot;/blog/post/5&quot; would call BlogController.post instead of Blog.post
- * - dispatcher: default ActiveRoutes.prototype.defaultDispatcher, the dispatcher function to be called when dispatch() is called and a route is found
- * - camelizeObjectName: default true, if true, trying to call &quot;blog_controller&quot; through routes will call &quot;BlogController&quot;
- * - camelizeMethodName: default true, if true, trying to call &quot;my_method_name&quot; through routes will call &quot;myMethodName&quot;
- * - camelizeGeneratedMethods: default true, will export generated methods into the scope as &quot;articleUrl&quot; instead of &quot;article_url&quot;
- *
  * Declaring Routes
  * ----------------
  * Wether declared in the constructor, or with addRoute(), routes can have up
@@ -1676,6 +1672,18 @@ var ActiveRoutes = null;
  *       ['/:object/:method']
  *     ],Application);
  * 
+ * Options
+ * -------
+ * You can pass a hash of options as the third parameter to the ActiveRoutes
+ * constructor. This hash can contain the following keys:
+ * 
+ * - base: default '', the default path / url prefix to be used in a generated url
+ * - classSuffix: default '' if it was &quot;Controller&quot;, calling &quot;/blog/post/5&quot; would call BlogController.post instead of Blog.post
+ * - dispatcher: default ActiveRoutes.prototype.defaultDispatcher, the dispatcher function to be called when dispatch() is called and a route is found
+ * - camelizeObjectName: default true, if true, trying to call &quot;blog_controller&quot; through routes will call &quot;BlogController&quot;
+ * - camelizeMethodName: default true, if true, trying to call &quot;my_method_name&quot; through routes will call &quot;myMethodName&quot;
+ * - camelizeGeneratedMethods: default true, will export generated methods into the scope as &quot;articleUrl&quot; instead of &quot;article_url&quot;
+ * 
  * Catch All Routes
  * ----------------
  * If you want to route all requests below a certain path to a given method,
@@ -1694,7 +1702,7 @@ var ActiveRoutes = null;
  * parameter will be checked against. Each value checked by a regular
  * expression or function is always a string.
  * 
- *     route_set.addRoute('/article/:article_id/:comment_id,{
+ *     route_set.addRoute('/article/:article_id/:comment_id',{
  *         article_id: /^\d+$/,
  *         comment_id: function(comment_id){
  *             return comment_id.match(/^\d+$/);
@@ -2378,6 +2386,9 @@ var ActiveRecord = null;
  * @namespace {ActiveRecord}
  * @example
  * 
+ * ActiveRecord.js
+ * ===============
+ * 
  * ActiveRecord.js is a cross browser, cross platform, stand-alone object
  * relational mapper. It shares a very similar vocabulary to the Ruby
  * ActiveRecord implementation, but uses JavaScript idioms and best
@@ -2711,7 +2722,7 @@ var ActiveRecord = null;
  *     var u = User.find(5);
  *     u.getCommentList().length;
  *     u.createComment({title: 'comment title'});
- *
+ * 
  * You can name the relationship (and thus the generate methods) by passing
  * a name parameter:
  * 
@@ -2729,7 +2740,8 @@ var ActiveRecord = null;
  * - ActsAsList
  * - ActsAsTree
  * - hasMany :through (which will likely be the only supported many to many relationship)
-*/
+ * 
+ */
 ActiveRecord = {
     /**
      * Defaults to false.
@@ -5795,11 +5807,15 @@ ActiveRecord.ClassMethods.belongsTo = function belongsTo(related_model_name, opt
 /**
  * @namespace {ActiveRecord.Migrations}
  * @example
+ * 
+ * Migrations
+ * ----------
+ * 
  * Migrations are a method of versioining the database schema used by your
  * application. All of your migrations must be defined in an object assigned
  * to ActiveRecord.Migrations.migrations. The keys need not be numerically
  * sequential, but must be numeric (i.e. 1,2,3 or 100,200,300).
- *
+ * 
  * Each migration object must have an up() and down() method which will
  * recieve an ActiveRecord.Migrations.Schema object. createTable() and
  * addColumn() both use the same syntax as define() to specify default
@@ -5834,7 +5850,6 @@ ActiveRecord.ClassMethods.belongsTo = function belongsTo(related_model_name, opt
  *     ActiveRecord.Migrations.migrate(0); //migrates down below 1, effectively erasing the schema
  *     ActiveRecord.Migrations.migrate(1); //migrates to version 1
  */
-
 var Migrations = {
     fieldTypesWithDefaultValues: {
         'tinyint': 0,
@@ -6515,7 +6530,15 @@ ActiveRecord.Adapters.AIR.connect = function connect(path)
 var ActiveView = null;
 
 (function(){
-
+ 
+/**
+ * @namespace {ActiveView}
+ * @example
+ * 
+ * ActiveView.js
+ * ===============
+ * Tutorial coming soon.
+ */
 ActiveView = {};
 
 ActiveView.logging = false;
@@ -7034,6 +7057,14 @@ var ActiveController = null;
 
 (function(){
 
+/**
+ * @namespace {ActiveController}
+ * @example
+ * 
+ * ActiveController.js
+ * ===============
+ * Tutorial coming soon.
+ */
 ActiveController = {};
 
 ActiveController.logging = false;</diff>
      <filename>latest/active.air.js</filename>
    </modified>
    <modified>
      <diff>@@ -1185,6 +1185,10 @@ ActiveSupport = {
 /**
  * @namespace {ActiveEvent}
  * @example
+ * 
+ * ActiveEvent.js
+ * ==============
+ * 
  * ActiveEvent allows you to create observable events, and attach event
  * handlers to any class or object.
  *
@@ -1301,28 +1305,28 @@ ActiveSupport = {
  * can optionally pass another function to observeMethod(), if you do the
  * MethodCallObserver will be automatically stopped when that function
  * finishes executing.
- *
- *   var h = new Hash({});
- *   ActiveEvent.extend(h);
- *   
- *   var observer = h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   });
- *   h.set('a','one');
- *   h.set('a','two');
- *   observer.stop();
- *   
- *   //console now contains:
- *   //&quot;a = one&quot;
- *   //&quot;b = two&quot;
- *   
- *   //the following does the same as above
- *   h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   },function(){
- *       h.set('a','one');
- *       h.set('b','two');
- *   });
+ * 
+ *     var h = new Hash({});
+ *     ActiveEvent.extend(h);
+ *     
+ *     var observer = h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     });
+ *     h.set('a','one');
+ *     h.set('a','two');
+ *     observer.stop();
+ *     
+ *     //console now contains:
+ *     //&quot;a = one&quot;
+ *     //&quot;b = two&quot;
+ *     
+ *     //the following does the same as above
+ *     h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     },function(){
+ *         h.set('a','one');
+ *         h.set('b','two');
+ *     });
  */
 var ActiveEvent = null;
 
@@ -1634,6 +1638,10 @@ var ActiveRoutes = null;
  * @param {Object} [options]
  * @return {ActiveRoutes}
  * @example
+ *
+ * ActiveRoutes.js
+ * ===============
+ * 
  * ActiveRoutes maps URI strings to method calls, and visa versa. It shares a
  * similar syntax to Rails Routing, but is framework agnostic and can map
  * calls to any type of object. Server side it can be used to map requests for
@@ -1641,18 +1649,6 @@ var ActiveRoutes = null;
  * to provide deep linking and back button / history support for your Ajax
  * application.
  * 
- * Options
- * -------
- * You can pass a hash of options as the third parameter to the ActiveRoutes
- * constructor. This hash can contain the following keys:
- * 
- * - base: default '', the default path / url prefix to be used in a generated url
- * - classSuffix: default '' if it was &quot;Controller&quot;, calling &quot;/blog/post/5&quot; would call BlogController.post instead of Blog.post
- * - dispatcher: default ActiveRoutes.prototype.defaultDispatcher, the dispatcher function to be called when dispatch() is called and a route is found
- * - camelizeObjectName: default true, if true, trying to call &quot;blog_controller&quot; through routes will call &quot;BlogController&quot;
- * - camelizeMethodName: default true, if true, trying to call &quot;my_method_name&quot; through routes will call &quot;myMethodName&quot;
- * - camelizeGeneratedMethods: default true, will export generated methods into the scope as &quot;articleUrl&quot; instead of &quot;article_url&quot;
- *
  * Declaring Routes
  * ----------------
  * Wether declared in the constructor, or with addRoute(), routes can have up
@@ -1676,6 +1672,18 @@ var ActiveRoutes = null;
  *       ['/:object/:method']
  *     ],Application);
  * 
+ * Options
+ * -------
+ * You can pass a hash of options as the third parameter to the ActiveRoutes
+ * constructor. This hash can contain the following keys:
+ * 
+ * - base: default '', the default path / url prefix to be used in a generated url
+ * - classSuffix: default '' if it was &quot;Controller&quot;, calling &quot;/blog/post/5&quot; would call BlogController.post instead of Blog.post
+ * - dispatcher: default ActiveRoutes.prototype.defaultDispatcher, the dispatcher function to be called when dispatch() is called and a route is found
+ * - camelizeObjectName: default true, if true, trying to call &quot;blog_controller&quot; through routes will call &quot;BlogController&quot;
+ * - camelizeMethodName: default true, if true, trying to call &quot;my_method_name&quot; through routes will call &quot;myMethodName&quot;
+ * - camelizeGeneratedMethods: default true, will export generated methods into the scope as &quot;articleUrl&quot; instead of &quot;article_url&quot;
+ * 
  * Catch All Routes
  * ----------------
  * If you want to route all requests below a certain path to a given method,
@@ -1694,7 +1702,7 @@ var ActiveRoutes = null;
  * parameter will be checked against. Each value checked by a regular
  * expression or function is always a string.
  * 
- *     route_set.addRoute('/article/:article_id/:comment_id,{
+ *     route_set.addRoute('/article/:article_id/:comment_id',{
  *         article_id: /^\d+$/,
  *         comment_id: function(comment_id){
  *             return comment_id.match(/^\d+$/);
@@ -2378,6 +2386,9 @@ var ActiveRecord = null;
  * @namespace {ActiveRecord}
  * @example
  * 
+ * ActiveRecord.js
+ * ===============
+ * 
  * ActiveRecord.js is a cross browser, cross platform, stand-alone object
  * relational mapper. It shares a very similar vocabulary to the Ruby
  * ActiveRecord implementation, but uses JavaScript idioms and best
@@ -2711,7 +2722,7 @@ var ActiveRecord = null;
  *     var u = User.find(5);
  *     u.getCommentList().length;
  *     u.createComment({title: 'comment title'});
- *
+ * 
  * You can name the relationship (and thus the generate methods) by passing
  * a name parameter:
  * 
@@ -2729,7 +2740,8 @@ var ActiveRecord = null;
  * - ActsAsList
  * - ActsAsTree
  * - hasMany :through (which will likely be the only supported many to many relationship)
-*/
+ * 
+ */
 ActiveRecord = {
     /**
      * Defaults to false.
@@ -5795,11 +5807,15 @@ ActiveRecord.ClassMethods.belongsTo = function belongsTo(related_model_name, opt
 /**
  * @namespace {ActiveRecord.Migrations}
  * @example
+ * 
+ * Migrations
+ * ----------
+ * 
  * Migrations are a method of versioining the database schema used by your
  * application. All of your migrations must be defined in an object assigned
  * to ActiveRecord.Migrations.migrations. The keys need not be numerically
  * sequential, but must be numeric (i.e. 1,2,3 or 100,200,300).
- *
+ * 
  * Each migration object must have an up() and down() method which will
  * recieve an ActiveRecord.Migrations.Schema object. createTable() and
  * addColumn() both use the same syntax as define() to specify default
@@ -5834,7 +5850,6 @@ ActiveRecord.ClassMethods.belongsTo = function belongsTo(related_model_name, opt
  *     ActiveRecord.Migrations.migrate(0); //migrates down below 1, effectively erasing the schema
  *     ActiveRecord.Migrations.migrate(1); //migrates to version 1
  */
-
 var Migrations = {
     fieldTypesWithDefaultValues: {
         'tinyint': 0,
@@ -6632,7 +6647,15 @@ ActiveRecord.Adapters.JaxerMySQL.connect = function connect(options)
 var ActiveView = null;
 
 (function(){
-
+ 
+/**
+ * @namespace {ActiveView}
+ * @example
+ * 
+ * ActiveView.js
+ * ===============
+ * Tutorial coming soon.
+ */
 ActiveView = {};
 
 ActiveView.logging = false;
@@ -7151,6 +7174,14 @@ var ActiveController = null;
 
 (function(){
 
+/**
+ * @namespace {ActiveController}
+ * @example
+ * 
+ * ActiveController.js
+ * ===============
+ * Tutorial coming soon.
+ */
 ActiveController = {};
 
 ActiveController.logging = false;</diff>
      <filename>latest/active.jaxer.js</filename>
    </modified>
    <modified>
      <diff>@@ -1185,6 +1185,10 @@ ActiveSupport = {
 /**
  * @namespace {ActiveEvent}
  * @example
+ * 
+ * ActiveEvent.js
+ * ==============
+ * 
  * ActiveEvent allows you to create observable events, and attach event
  * handlers to any class or object.
  *
@@ -1301,28 +1305,28 @@ ActiveSupport = {
  * can optionally pass another function to observeMethod(), if you do the
  * MethodCallObserver will be automatically stopped when that function
  * finishes executing.
- *
- *   var h = new Hash({});
- *   ActiveEvent.extend(h);
- *   
- *   var observer = h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   });
- *   h.set('a','one');
- *   h.set('a','two');
- *   observer.stop();
- *   
- *   //console now contains:
- *   //&quot;a = one&quot;
- *   //&quot;b = two&quot;
- *   
- *   //the following does the same as above
- *   h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   },function(){
- *       h.set('a','one');
- *       h.set('b','two');
- *   });
+ * 
+ *     var h = new Hash({});
+ *     ActiveEvent.extend(h);
+ *     
+ *     var observer = h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     });
+ *     h.set('a','one');
+ *     h.set('a','two');
+ *     observer.stop();
+ *     
+ *     //console now contains:
+ *     //&quot;a = one&quot;
+ *     //&quot;b = two&quot;
+ *     
+ *     //the following does the same as above
+ *     h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     },function(){
+ *         h.set('a','one');
+ *         h.set('b','two');
+ *     });
  */
 var ActiveEvent = null;
 
@@ -1634,6 +1638,10 @@ var ActiveRoutes = null;
  * @param {Object} [options]
  * @return {ActiveRoutes}
  * @example
+ *
+ * ActiveRoutes.js
+ * ===============
+ * 
  * ActiveRoutes maps URI strings to method calls, and visa versa. It shares a
  * similar syntax to Rails Routing, but is framework agnostic and can map
  * calls to any type of object. Server side it can be used to map requests for
@@ -1641,18 +1649,6 @@ var ActiveRoutes = null;
  * to provide deep linking and back button / history support for your Ajax
  * application.
  * 
- * Options
- * -------
- * You can pass a hash of options as the third parameter to the ActiveRoutes
- * constructor. This hash can contain the following keys:
- * 
- * - base: default '', the default path / url prefix to be used in a generated url
- * - classSuffix: default '' if it was &quot;Controller&quot;, calling &quot;/blog/post/5&quot; would call BlogController.post instead of Blog.post
- * - dispatcher: default ActiveRoutes.prototype.defaultDispatcher, the dispatcher function to be called when dispatch() is called and a route is found
- * - camelizeObjectName: default true, if true, trying to call &quot;blog_controller&quot; through routes will call &quot;BlogController&quot;
- * - camelizeMethodName: default true, if true, trying to call &quot;my_method_name&quot; through routes will call &quot;myMethodName&quot;
- * - camelizeGeneratedMethods: default true, will export generated methods into the scope as &quot;articleUrl&quot; instead of &quot;article_url&quot;
- *
  * Declaring Routes
  * ----------------
  * Wether declared in the constructor, or with addRoute(), routes can have up
@@ -1676,6 +1672,18 @@ var ActiveRoutes = null;
  *       ['/:object/:method']
  *     ],Application);
  * 
+ * Options
+ * -------
+ * You can pass a hash of options as the third parameter to the ActiveRoutes
+ * constructor. This hash can contain the following keys:
+ * 
+ * - base: default '', the default path / url prefix to be used in a generated url
+ * - classSuffix: default '' if it was &quot;Controller&quot;, calling &quot;/blog/post/5&quot; would call BlogController.post instead of Blog.post
+ * - dispatcher: default ActiveRoutes.prototype.defaultDispatcher, the dispatcher function to be called when dispatch() is called and a route is found
+ * - camelizeObjectName: default true, if true, trying to call &quot;blog_controller&quot; through routes will call &quot;BlogController&quot;
+ * - camelizeMethodName: default true, if true, trying to call &quot;my_method_name&quot; through routes will call &quot;myMethodName&quot;
+ * - camelizeGeneratedMethods: default true, will export generated methods into the scope as &quot;articleUrl&quot; instead of &quot;article_url&quot;
+ * 
  * Catch All Routes
  * ----------------
  * If you want to route all requests below a certain path to a given method,
@@ -1694,7 +1702,7 @@ var ActiveRoutes = null;
  * parameter will be checked against. Each value checked by a regular
  * expression or function is always a string.
  * 
- *     route_set.addRoute('/article/:article_id/:comment_id,{
+ *     route_set.addRoute('/article/:article_id/:comment_id',{
  *         article_id: /^\d+$/,
  *         comment_id: function(comment_id){
  *             return comment_id.match(/^\d+$/);
@@ -2378,6 +2386,9 @@ var ActiveRecord = null;
  * @namespace {ActiveRecord}
  * @example
  * 
+ * ActiveRecord.js
+ * ===============
+ * 
  * ActiveRecord.js is a cross browser, cross platform, stand-alone object
  * relational mapper. It shares a very similar vocabulary to the Ruby
  * ActiveRecord implementation, but uses JavaScript idioms and best
@@ -2711,7 +2722,7 @@ var ActiveRecord = null;
  *     var u = User.find(5);
  *     u.getCommentList().length;
  *     u.createComment({title: 'comment title'});
- *
+ * 
  * You can name the relationship (and thus the generate methods) by passing
  * a name parameter:
  * 
@@ -2729,7 +2740,8 @@ var ActiveRecord = null;
  * - ActsAsList
  * - ActsAsTree
  * - hasMany :through (which will likely be the only supported many to many relationship)
-*/
+ * 
+ */
 ActiveRecord = {
     /**
      * Defaults to false.
@@ -5795,11 +5807,15 @@ ActiveRecord.ClassMethods.belongsTo = function belongsTo(related_model_name, opt
 /**
  * @namespace {ActiveRecord.Migrations}
  * @example
+ * 
+ * Migrations
+ * ----------
+ * 
  * Migrations are a method of versioining the database schema used by your
  * application. All of your migrations must be defined in an object assigned
  * to ActiveRecord.Migrations.migrations. The keys need not be numerically
  * sequential, but must be numeric (i.e. 1,2,3 or 100,200,300).
- *
+ * 
  * Each migration object must have an up() and down() method which will
  * recieve an ActiveRecord.Migrations.Schema object. createTable() and
  * addColumn() both use the same syntax as define() to specify default
@@ -5834,7 +5850,6 @@ ActiveRecord.ClassMethods.belongsTo = function belongsTo(related_model_name, opt
  *     ActiveRecord.Migrations.migrate(0); //migrates down below 1, effectively erasing the schema
  *     ActiveRecord.Migrations.migrate(1); //migrates to version 1
  */
-
 var Migrations = {
     fieldTypesWithDefaultValues: {
         'tinyint': 0,
@@ -6594,7 +6609,15 @@ ActiveRecord.Adapters.Gears.connect = function connect(name, version, display_na
 var ActiveView = null;
 
 (function(){
-
+ 
+/**
+ * @namespace {ActiveView}
+ * @example
+ * 
+ * ActiveView.js
+ * ===============
+ * Tutorial coming soon.
+ */
 ActiveView = {};
 
 ActiveView.logging = false;
@@ -7113,6 +7136,14 @@ var ActiveController = null;
 
 (function(){
 
+/**
+ * @namespace {ActiveController}
+ * @example
+ * 
+ * ActiveController.js
+ * ===============
+ * Tutorial coming soon.
+ */
 ActiveController = {};
 
 ActiveController.logging = false;</diff>
      <filename>latest/active.js</filename>
    </modified>
    <modified>
      <diff>@@ -1185,6 +1185,10 @@ ActiveSupport = {
 /**
  * @namespace {ActiveEvent}
  * @example
+ * 
+ * ActiveEvent.js
+ * ==============
+ * 
  * ActiveEvent allows you to create observable events, and attach event
  * handlers to any class or object.
  *
@@ -1301,28 +1305,28 @@ ActiveSupport = {
  * can optionally pass another function to observeMethod(), if you do the
  * MethodCallObserver will be automatically stopped when that function
  * finishes executing.
- *
- *   var h = new Hash({});
- *   ActiveEvent.extend(h);
- *   
- *   var observer = h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   });
- *   h.set('a','one');
- *   h.set('a','two');
- *   observer.stop();
- *   
- *   //console now contains:
- *   //&quot;a = one&quot;
- *   //&quot;b = two&quot;
- *   
- *   //the following does the same as above
- *   h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   },function(){
- *       h.set('a','one');
- *       h.set('b','two');
- *   });
+ * 
+ *     var h = new Hash({});
+ *     ActiveEvent.extend(h);
+ *     
+ *     var observer = h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     });
+ *     h.set('a','one');
+ *     h.set('a','two');
+ *     observer.stop();
+ *     
+ *     //console now contains:
+ *     //&quot;a = one&quot;
+ *     //&quot;b = two&quot;
+ *     
+ *     //the following does the same as above
+ *     h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     },function(){
+ *         h.set('a','one');
+ *         h.set('b','two');
+ *     });
  */
 var ActiveEvent = null;
 </diff>
      <filename>latest/active_event.js</filename>
    </modified>
    <modified>
      <diff>@@ -1185,6 +1185,10 @@ ActiveSupport = {
 /**
  * @namespace {ActiveEvent}
  * @example
+ * 
+ * ActiveEvent.js
+ * ==============
+ * 
  * ActiveEvent allows you to create observable events, and attach event
  * handlers to any class or object.
  *
@@ -1301,28 +1305,28 @@ ActiveSupport = {
  * can optionally pass another function to observeMethod(), if you do the
  * MethodCallObserver will be automatically stopped when that function
  * finishes executing.
- *
- *   var h = new Hash({});
- *   ActiveEvent.extend(h);
- *   
- *   var observer = h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   });
- *   h.set('a','one');
- *   h.set('a','two');
- *   observer.stop();
- *   
- *   //console now contains:
- *   //&quot;a = one&quot;
- *   //&quot;b = two&quot;
- *   
- *   //the following does the same as above
- *   h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   },function(){
- *       h.set('a','one');
- *       h.set('b','two');
- *   });
+ * 
+ *     var h = new Hash({});
+ *     ActiveEvent.extend(h);
+ *     
+ *     var observer = h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     });
+ *     h.set('a','one');
+ *     h.set('a','two');
+ *     observer.stop();
+ *     
+ *     //console now contains:
+ *     //&quot;a = one&quot;
+ *     //&quot;b = two&quot;
+ *     
+ *     //the following does the same as above
+ *     h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     },function(){
+ *         h.set('a','one');
+ *         h.set('b','two');
+ *     });
  */
 var ActiveEvent = null;
 
@@ -1630,6 +1634,9 @@ var ActiveRecord = null;
  * @namespace {ActiveRecord}
  * @example
  * 
+ * ActiveRecord.js
+ * ===============
+ * 
  * ActiveRecord.js is a cross browser, cross platform, stand-alone object
  * relational mapper. It shares a very similar vocabulary to the Ruby
  * ActiveRecord implementation, but uses JavaScript idioms and best
@@ -1963,7 +1970,7 @@ var ActiveRecord = null;
  *     var u = User.find(5);
  *     u.getCommentList().length;
  *     u.createComment({title: 'comment title'});
- *
+ * 
  * You can name the relationship (and thus the generate methods) by passing
  * a name parameter:
  * 
@@ -1981,7 +1988,8 @@ var ActiveRecord = null;
  * - ActsAsList
  * - ActsAsTree
  * - hasMany :through (which will likely be the only supported many to many relationship)
-*/
+ * 
+ */
 ActiveRecord = {
     /**
      * Defaults to false.
@@ -5047,11 +5055,15 @@ ActiveRecord.ClassMethods.belongsTo = function belongsTo(related_model_name, opt
 /**
  * @namespace {ActiveRecord.Migrations}
  * @example
+ * 
+ * Migrations
+ * ----------
+ * 
  * Migrations are a method of versioining the database schema used by your
  * application. All of your migrations must be defined in an object assigned
  * to ActiveRecord.Migrations.migrations. The keys need not be numerically
  * sequential, but must be numeric (i.e. 1,2,3 or 100,200,300).
- *
+ * 
  * Each migration object must have an up() and down() method which will
  * recieve an ActiveRecord.Migrations.Schema object. createTable() and
  * addColumn() both use the same syntax as define() to specify default
@@ -5086,7 +5098,6 @@ ActiveRecord.ClassMethods.belongsTo = function belongsTo(related_model_name, opt
  *     ActiveRecord.Migrations.migrate(0); //migrates down below 1, effectively erasing the schema
  *     ActiveRecord.Migrations.migrate(1); //migrates to version 1
  */
-
 var Migrations = {
     fieldTypesWithDefaultValues: {
         'tinyint': 0,</diff>
      <filename>latest/active_record.air.js</filename>
    </modified>
    <modified>
      <diff>@@ -1185,6 +1185,10 @@ ActiveSupport = {
 /**
  * @namespace {ActiveEvent}
  * @example
+ * 
+ * ActiveEvent.js
+ * ==============
+ * 
  * ActiveEvent allows you to create observable events, and attach event
  * handlers to any class or object.
  *
@@ -1301,28 +1305,28 @@ ActiveSupport = {
  * can optionally pass another function to observeMethod(), if you do the
  * MethodCallObserver will be automatically stopped when that function
  * finishes executing.
- *
- *   var h = new Hash({});
- *   ActiveEvent.extend(h);
- *   
- *   var observer = h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   });
- *   h.set('a','one');
- *   h.set('a','two');
- *   observer.stop();
- *   
- *   //console now contains:
- *   //&quot;a = one&quot;
- *   //&quot;b = two&quot;
- *   
- *   //the following does the same as above
- *   h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   },function(){
- *       h.set('a','one');
- *       h.set('b','two');
- *   });
+ * 
+ *     var h = new Hash({});
+ *     ActiveEvent.extend(h);
+ *     
+ *     var observer = h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     });
+ *     h.set('a','one');
+ *     h.set('a','two');
+ *     observer.stop();
+ *     
+ *     //console now contains:
+ *     //&quot;a = one&quot;
+ *     //&quot;b = two&quot;
+ *     
+ *     //the following does the same as above
+ *     h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     },function(){
+ *         h.set('a','one');
+ *         h.set('b','two');
+ *     });
  */
 var ActiveEvent = null;
 
@@ -1630,6 +1634,9 @@ var ActiveRecord = null;
  * @namespace {ActiveRecord}
  * @example
  * 
+ * ActiveRecord.js
+ * ===============
+ * 
  * ActiveRecord.js is a cross browser, cross platform, stand-alone object
  * relational mapper. It shares a very similar vocabulary to the Ruby
  * ActiveRecord implementation, but uses JavaScript idioms and best
@@ -1963,7 +1970,7 @@ var ActiveRecord = null;
  *     var u = User.find(5);
  *     u.getCommentList().length;
  *     u.createComment({title: 'comment title'});
- *
+ * 
  * You can name the relationship (and thus the generate methods) by passing
  * a name parameter:
  * 
@@ -1981,7 +1988,8 @@ var ActiveRecord = null;
  * - ActsAsList
  * - ActsAsTree
  * - hasMany :through (which will likely be the only supported many to many relationship)
-*/
+ * 
+ */
 ActiveRecord = {
     /**
      * Defaults to false.
@@ -5047,11 +5055,15 @@ ActiveRecord.ClassMethods.belongsTo = function belongsTo(related_model_name, opt
 /**
  * @namespace {ActiveRecord.Migrations}
  * @example
+ * 
+ * Migrations
+ * ----------
+ * 
  * Migrations are a method of versioining the database schema used by your
  * application. All of your migrations must be defined in an object assigned
  * to ActiveRecord.Migrations.migrations. The keys need not be numerically
  * sequential, but must be numeric (i.e. 1,2,3 or 100,200,300).
- *
+ * 
  * Each migration object must have an up() and down() method which will
  * recieve an ActiveRecord.Migrations.Schema object. createTable() and
  * addColumn() both use the same syntax as define() to specify default
@@ -5086,7 +5098,6 @@ ActiveRecord.ClassMethods.belongsTo = function belongsTo(related_model_name, opt
  *     ActiveRecord.Migrations.migrate(0); //migrates down below 1, effectively erasing the schema
  *     ActiveRecord.Migrations.migrate(1); //migrates to version 1
  */
-
 var Migrations = {
     fieldTypesWithDefaultValues: {
         'tinyint': 0,</diff>
      <filename>latest/active_record.jaxer.js</filename>
    </modified>
    <modified>
      <diff>@@ -1185,6 +1185,10 @@ ActiveSupport = {
 /**
  * @namespace {ActiveEvent}
  * @example
+ * 
+ * ActiveEvent.js
+ * ==============
+ * 
  * ActiveEvent allows you to create observable events, and attach event
  * handlers to any class or object.
  *
@@ -1301,28 +1305,28 @@ ActiveSupport = {
  * can optionally pass another function to observeMethod(), if you do the
  * MethodCallObserver will be automatically stopped when that function
  * finishes executing.
- *
- *   var h = new Hash({});
- *   ActiveEvent.extend(h);
- *   
- *   var observer = h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   });
- *   h.set('a','one');
- *   h.set('a','two');
- *   observer.stop();
- *   
- *   //console now contains:
- *   //&quot;a = one&quot;
- *   //&quot;b = two&quot;
- *   
- *   //the following does the same as above
- *   h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   },function(){
- *       h.set('a','one');
- *       h.set('b','two');
- *   });
+ * 
+ *     var h = new Hash({});
+ *     ActiveEvent.extend(h);
+ *     
+ *     var observer = h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     });
+ *     h.set('a','one');
+ *     h.set('a','two');
+ *     observer.stop();
+ *     
+ *     //console now contains:
+ *     //&quot;a = one&quot;
+ *     //&quot;b = two&quot;
+ *     
+ *     //the following does the same as above
+ *     h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     },function(){
+ *         h.set('a','one');
+ *         h.set('b','two');
+ *     });
  */
 var ActiveEvent = null;
 
@@ -1630,6 +1634,9 @@ var ActiveRecord = null;
  * @namespace {ActiveRecord}
  * @example
  * 
+ * ActiveRecord.js
+ * ===============
+ * 
  * ActiveRecord.js is a cross browser, cross platform, stand-alone object
  * relational mapper. It shares a very similar vocabulary to the Ruby
  * ActiveRecord implementation, but uses JavaScript idioms and best
@@ -1963,7 +1970,7 @@ var ActiveRecord = null;
  *     var u = User.find(5);
  *     u.getCommentList().length;
  *     u.createComment({title: 'comment title'});
- *
+ * 
  * You can name the relationship (and thus the generate methods) by passing
  * a name parameter:
  * 
@@ -1981,7 +1988,8 @@ var ActiveRecord = null;
  * - ActsAsList
  * - ActsAsTree
  * - hasMany :through (which will likely be the only supported many to many relationship)
-*/
+ * 
+ */
 ActiveRecord = {
     /**
      * Defaults to false.
@@ -5047,11 +5055,15 @@ ActiveRecord.ClassMethods.belongsTo = function belongsTo(related_model_name, opt
 /**
  * @namespace {ActiveRecord.Migrations}
  * @example
+ * 
+ * Migrations
+ * ----------
+ * 
  * Migrations are a method of versioining the database schema used by your
  * application. All of your migrations must be defined in an object assigned
  * to ActiveRecord.Migrations.migrations. The keys need not be numerically
  * sequential, but must be numeric (i.e. 1,2,3 or 100,200,300).
- *
+ * 
  * Each migration object must have an up() and down() method which will
  * recieve an ActiveRecord.Migrations.Schema object. createTable() and
  * addColumn() both use the same syntax as define() to specify default
@@ -5086,7 +5098,6 @@ ActiveRecord.ClassMethods.belongsTo = function belongsTo(related_model_name, opt
  *     ActiveRecord.Migrations.migrate(0); //migrates down below 1, effectively erasing the schema
  *     ActiveRecord.Migrations.migrate(1); //migrates to version 1
  */
-
 var Migrations = {
     fieldTypesWithDefaultValues: {
         'tinyint': 0,</diff>
      <filename>latest/active_record.js</filename>
    </modified>
    <modified>
      <diff>@@ -1185,6 +1185,10 @@ ActiveSupport = {
 /**
  * @namespace {ActiveEvent}
  * @example
+ * 
+ * ActiveEvent.js
+ * ==============
+ * 
  * ActiveEvent allows you to create observable events, and attach event
  * handlers to any class or object.
  *
@@ -1301,28 +1305,28 @@ ActiveSupport = {
  * can optionally pass another function to observeMethod(), if you do the
  * MethodCallObserver will be automatically stopped when that function
  * finishes executing.
- *
- *   var h = new Hash({});
- *   ActiveEvent.extend(h);
- *   
- *   var observer = h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   });
- *   h.set('a','one');
- *   h.set('a','two');
- *   observer.stop();
- *   
- *   //console now contains:
- *   //&quot;a = one&quot;
- *   //&quot;b = two&quot;
- *   
- *   //the following does the same as above
- *   h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   },function(){
- *       h.set('a','one');
- *       h.set('b','two');
- *   });
+ * 
+ *     var h = new Hash({});
+ *     ActiveEvent.extend(h);
+ *     
+ *     var observer = h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     });
+ *     h.set('a','one');
+ *     h.set('a','two');
+ *     observer.stop();
+ *     
+ *     //console now contains:
+ *     //&quot;a = one&quot;
+ *     //&quot;b = two&quot;
+ *     
+ *     //the following does the same as above
+ *     h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     },function(){
+ *         h.set('a','one');
+ *         h.set('b','two');
+ *     });
  */
 var ActiveEvent = null;
 
@@ -1634,6 +1638,10 @@ var ActiveRoutes = null;
  * @param {Object} [options]
  * @return {ActiveRoutes}
  * @example
+ *
+ * ActiveRoutes.js
+ * ===============
+ * 
  * ActiveRoutes maps URI strings to method calls, and visa versa. It shares a
  * similar syntax to Rails Routing, but is framework agnostic and can map
  * calls to any type of object. Server side it can be used to map requests for
@@ -1641,18 +1649,6 @@ var ActiveRoutes = null;
  * to provide deep linking and back button / history support for your Ajax
  * application.
  * 
- * Options
- * -------
- * You can pass a hash of options as the third parameter to the ActiveRoutes
- * constructor. This hash can contain the following keys:
- * 
- * - base: default '', the default path / url prefix to be used in a generated url
- * - classSuffix: default '' if it was &quot;Controller&quot;, calling &quot;/blog/post/5&quot; would call BlogController.post instead of Blog.post
- * - dispatcher: default ActiveRoutes.prototype.defaultDispatcher, the dispatcher function to be called when dispatch() is called and a route is found
- * - camelizeObjectName: default true, if true, trying to call &quot;blog_controller&quot; through routes will call &quot;BlogController&quot;
- * - camelizeMethodName: default true, if true, trying to call &quot;my_method_name&quot; through routes will call &quot;myMethodName&quot;
- * - camelizeGeneratedMethods: default true, will export generated methods into the scope as &quot;articleUrl&quot; instead of &quot;article_url&quot;
- *
  * Declaring Routes
  * ----------------
  * Wether declared in the constructor, or with addRoute(), routes can have up
@@ -1676,6 +1672,18 @@ var ActiveRoutes = null;
  *       ['/:object/:method']
  *     ],Application);
  * 
+ * Options
+ * -------
+ * You can pass a hash of options as the third parameter to the ActiveRoutes
+ * constructor. This hash can contain the following keys:
+ * 
+ * - base: default '', the default path / url prefix to be used in a generated url
+ * - classSuffix: default '' if it was &quot;Controller&quot;, calling &quot;/blog/post/5&quot; would call BlogController.post instead of Blog.post
+ * - dispatcher: default ActiveRoutes.prototype.defaultDispatcher, the dispatcher function to be called when dispatch() is called and a route is found
+ * - camelizeObjectName: default true, if true, trying to call &quot;blog_controller&quot; through routes will call &quot;BlogController&quot;
+ * - camelizeMethodName: default true, if true, trying to call &quot;my_method_name&quot; through routes will call &quot;myMethodName&quot;
+ * - camelizeGeneratedMethods: default true, will export generated methods into the scope as &quot;articleUrl&quot; instead of &quot;article_url&quot;
+ * 
  * Catch All Routes
  * ----------------
  * If you want to route all requests below a certain path to a given method,
@@ -1694,7 +1702,7 @@ var ActiveRoutes = null;
  * parameter will be checked against. Each value checked by a regular
  * expression or function is always a string.
  * 
- *     route_set.addRoute('/article/:article_id/:comment_id,{
+ *     route_set.addRoute('/article/:article_id/:comment_id',{
  *         article_id: /^\d+$/,
  *         comment_id: function(comment_id){
  *             return comment_id.match(/^\d+$/);</diff>
      <filename>latest/active_routes.js</filename>
    </modified>
    <modified>
      <diff>@@ -25,6 +25,14 @@
  * 
  * ***** END LICENSE BLOCK ***** */
 
+/**
+ * @namespace {ActiveController}
+ * @example
+ * 
+ * ActiveController.js
+ * ===============
+ * Tutorial coming soon.
+ */
 ActiveController = {};
 
 ActiveController.logging = false;</diff>
      <filename>src/active_controller/main.js</filename>
    </modified>
    <modified>
      <diff>@@ -31,6 +31,10 @@
 /**
  * @namespace {ActiveEvent}
  * @example
+ * 
+ * ActiveEvent.js
+ * ==============
+ * 
  * ActiveEvent allows you to create observable events, and attach event
  * handlers to any class or object.
  *
@@ -147,28 +151,28 @@
  * can optionally pass another function to observeMethod(), if you do the
  * MethodCallObserver will be automatically stopped when that function
  * finishes executing.
- *
- *   var h = new Hash({});
- *   ActiveEvent.extend(h);
- *   
- *   var observer = h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   });
- *   h.set('a','one');
- *   h.set('a','two');
- *   observer.stop();
- *   
- *   //console now contains:
- *   //&quot;a = one&quot;
- *   //&quot;b = two&quot;
- *   
- *   //the following does the same as above
- *   h.observeMethod('set',function(key,value){
- *       console.log(key + '=' + value);
- *   },function(){
- *       h.set('a','one');
- *       h.set('b','two');
- *   });
+ * 
+ *     var h = new Hash({});
+ *     ActiveEvent.extend(h);
+ *     
+ *     var observer = h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     });
+ *     h.set('a','one');
+ *     h.set('a','two');
+ *     observer.stop();
+ *     
+ *     //console now contains:
+ *     //&quot;a = one&quot;
+ *     //&quot;b = two&quot;
+ *     
+ *     //the following does the same as above
+ *     h.observeMethod('set',function(key,value){
+ *         console.log(key + '=' + value);
+ *     },function(){
+ *         h.set('a','one');
+ *         h.set('b','two');
+ *     });
  */
 var ActiveEvent = null;
 </diff>
      <filename>src/active_event.js</filename>
    </modified>
    <modified>
      <diff>@@ -29,6 +29,9 @@
  * @namespace {ActiveRecord}
  * @example
  * 
+ * ActiveRecord.js
+ * ===============
+ * 
  * ActiveRecord.js is a cross browser, cross platform, stand-alone object
  * relational mapper. It shares a very similar vocabulary to the Ruby
  * ActiveRecord implementation, but uses JavaScript idioms and best
@@ -362,7 +365,7 @@
  *     var u = User.find(5);
  *     u.getCommentList().length;
  *     u.createComment({title: 'comment title'});
- *
+ * 
  * You can name the relationship (and thus the generate methods) by passing
  * a name parameter:
  * 
@@ -380,7 +383,8 @@
  * - ActsAsList
  * - ActsAsTree
  * - hasMany :through (which will likely be the only supported many to many relationship)
-*/
+ * 
+ */
 ActiveRecord = {
     /**
      * Defaults to false.</diff>
      <filename>src/active_record/main.js</filename>
    </modified>
    <modified>
      <diff>@@ -28,11 +28,15 @@
 /**
  * @namespace {ActiveRecord.Migrations}
  * @example
+ * 
+ * Migrations
+ * ----------
+ * 
  * Migrations are a method of versioining the database schema used by your
  * application. All of your migrations must be defined in an object assigned
  * to ActiveRecord.Migrations.migrations. The keys need not be numerically
  * sequential, but must be numeric (i.e. 1,2,3 or 100,200,300).
- *
+ * 
  * Each migration object must have an up() and down() method which will
  * recieve an ActiveRecord.Migrations.Schema object. createTable() and
  * addColumn() both use the same syntax as define() to specify default
@@ -67,7 +71,6 @@
  *     ActiveRecord.Migrations.migrate(0); //migrates down below 1, effectively erasing the schema
  *     ActiveRecord.Migrations.migrate(1); //migrates to version 1
  */
-
 var Migrations = {
     fieldTypesWithDefaultValues: {
         'tinyint': 0,</diff>
      <filename>src/active_record/migrations.js</filename>
    </modified>
    <modified>
      <diff>@@ -33,6 +33,10 @@
  * @param {Object} [options]
  * @return {ActiveRoutes}
  * @example
+ *
+ * ActiveRoutes.js
+ * ===============
+ * 
  * ActiveRoutes maps URI strings to method calls, and visa versa. It shares a
  * similar syntax to Rails Routing, but is framework agnostic and can map
  * calls to any type of object. Server side it can be used to map requests for
@@ -40,18 +44,6 @@
  * to provide deep linking and back button / history support for your Ajax
  * application.
  * 
- * Options
- * -------
- * You can pass a hash of options as the third parameter to the ActiveRoutes
- * constructor. This hash can contain the following keys:
- * 
- * - base: default '', the default path / url prefix to be used in a generated url
- * - classSuffix: default '' if it was &quot;Controller&quot;, calling &quot;/blog/post/5&quot; would call BlogController.post instead of Blog.post
- * - dispatcher: default ActiveRoutes.prototype.defaultDispatcher, the dispatcher function to be called when dispatch() is called and a route is found
- * - camelizeObjectName: default true, if true, trying to call &quot;blog_controller&quot; through routes will call &quot;BlogController&quot;
- * - camelizeMethodName: default true, if true, trying to call &quot;my_method_name&quot; through routes will call &quot;myMethodName&quot;
- * - camelizeGeneratedMethods: default true, will export generated methods into the scope as &quot;articleUrl&quot; instead of &quot;article_url&quot;
- *
  * Declaring Routes
  * ----------------
  * Wether declared in the constructor, or with addRoute(), routes can have up
@@ -75,6 +67,18 @@
  *       ['/:object/:method']
  *     ],Application);
  * 
+ * Options
+ * -------
+ * You can pass a hash of options as the third parameter to the ActiveRoutes
+ * constructor. This hash can contain the following keys:
+ * 
+ * - base: default '', the default path / url prefix to be used in a generated url
+ * - classSuffix: default '' if it was &quot;Controller&quot;, calling &quot;/blog/post/5&quot; would call BlogController.post instead of Blog.post
+ * - dispatcher: default ActiveRoutes.prototype.defaultDispatcher, the dispatcher function to be called when dispatch() is called and a route is found
+ * - camelizeObjectName: default true, if true, trying to call &quot;blog_controller&quot; through routes will call &quot;BlogController&quot;
+ * - camelizeMethodName: default true, if true, trying to call &quot;my_method_name&quot; through routes will call &quot;myMethodName&quot;
+ * - camelizeGeneratedMethods: default true, will export generated methods into the scope as &quot;articleUrl&quot; instead of &quot;article_url&quot;
+ * 
  * Catch All Routes
  * ----------------
  * If you want to route all requests below a certain path to a given method,
@@ -93,7 +97,7 @@
  * parameter will be checked against. Each value checked by a regular
  * expression or function is always a string.
  * 
- *     route_set.addRoute('/article/:article_id/:comment_id,{
+ *     route_set.addRoute('/article/:article_id/:comment_id',{
  *         article_id: /^\d+$/,
  *         comment_id: function(comment_id){
  *             return comment_id.match(/^\d+$/);</diff>
      <filename>src/active_routes/main.js</filename>
    </modified>
    <modified>
      <diff>@@ -24,7 +24,15 @@
  * OTHER DEALINGS IN THE SOFTWARE.
  * 
  * ***** END LICENSE BLOCK ***** */
-
+ 
+/**
+ * @namespace {ActiveView}
+ * @example
+ * 
+ * ActiveView.js
+ * ===============
+ * Tutorial coming soon.
+ */
 ActiveView = {};
 
 ActiveView.logging = false;</diff>
      <filename>src/active_view/main.js</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>extensions/website/.DS_Store</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>6c9ef7a94d28e71f395ef67e2b920a93872a39ce</id>
    </parent>
    <parent>
      <id>347cec1fa0efd8c3972d3dc2565d3185d0c29c7e</id>
    </parent>
  </parents>
  <author>
    <name>syntacticx</name>
    <email>ryan@syntacticx.com</email>
  </author>
  <url>http://github.com/aptana/activejs/commit/ca416aef34ad52610321ffd058d60255eebe158a</url>
  <id>ca416aef34ad52610321ffd058d60255eebe158a</id>
  <committed-date>2009-03-20T18:57:43-07:00</committed-date>
  <authored-date>2009-03-20T18:57:43-07:00</authored-date>
  <message>Merge branch 'master' into mbrubeck/master</message>
  <tree>a7dd772b648c712d5e7085d732eac2cad2adc0bb</tree>
  <committer>
    <name>syntacticx</name>
    <email>ryan@syntacticx.com</email>
  </committer>
</commit>
