/*Class: ClassThe base class object of the <http://mootools.net> framework.Arguments:properties - the collection of properties that apply to the class. Creates a new class, its initialize method will fire upon class instantiation.Example:>var Cat = new Class({>	initialize: function(name){>		this.name = name;>	}>});>var myCat = new Cat('Micia');>alert myCat.name; //alerts 'Micia'*/var Class = function(properties){var klass = function(){for (var p in this){if (this[p]) this[p]._proto_ = this;}if (arguments[0] != 'noinit' && this.initialize) return this.initialize.apply(this, arguments);};klass.extend = this.extend;klass.implement = this.implement;klass.prototype = properties;return klass;};/*Property: emptyReturns an empty function*/Class.empty = function(){};/*Property: createsame as new Class. see <Class>*/Class.create = function(properties){return new Class(properties);};Class.prototype = {/*Property: extendReturns the copy of the Class extended with the passed in properties.Arguments:properties - the properties to add to the base class in this new Class.Example:>var Animal = new Class({>	initialize: function(age){>		this.age = age;>	}>});>var Cat = Animal.extend({>	initialize: function(name, age){>		this.parent(age); //will call the previous initialize;>		this.name = name;>	}>});>var myCat = new Cat('Micia', 20);>alert myCat.name; //alerts 'Micia'>alert myCat.age; //alerts 20*/extend: function(properties){var pr0t0typ3 = new this('noinit');for (var property in properties){var previous = pr0t0typ3[property];var current = properties[property];if (previous && previous != current) current = previous.parentize(current) || current;pr0t0typ3[property] = current;}return new Class(pr0t0typ3);},/*	Property: implementImplements the passed in properties to the base Class prototypes, altering the base class, unlike <Class.extend>.Arguments:properties - the properties to add to the base class.Example:>var Animal = new Class({>	initialize: function(age){>		this.age = age;>	}>});>Animal.implement({>	setName: function(name){>		this.name = name>	}>});>var myAnimal = new Animal(20);>myAnimal.setName('Micia');>alert(myAnimal.name); //alerts 'Micia'*/implement: function(properties){for (var property in properties) this.prototype[property] = properties[property];}};/*Function: Object.NativeWill add a .extend method to the objects passed as a parameter, equivalent to <Class.implement>Arguments:a number of classes/native javascript objects*/Object.Native = function(){for (var i = 0; i < arguments.length; i++) arguments[i].extend = Class.prototype.implement;};new Object.Native(Function, Array, String, Number);Function.extend({parentize: function(current){var previous = this;return function(){this.parent = previous;return current.apply(this, arguments);};}});