; /** * Creates the top namespace of the company, and provides an OO approach to objects. * Enhances John Resig's Class pattern with `augment()` method for structured mixins. * @author Xedin Unknown */ // Based on John Resig's Class pattern (function () { Xdn = top.Xdn || {}; var initializing = false, fnTest = /xyz/.test(function () { xyz; }) ? /\b_super\b/ : /.*/; Xdn.Class = function () { }; Xdn.Class.extend = function (prop) { var _super = this.prototype; initializing = true; var prototype = new this(); initializing = false; for (var name in prop) { prototype[name] = typeof prop[name] == "function" && typeof _super[name] == "function" && fnTest.test(prop[name]) ? (function (name, fn) { return function () { var tmp = this._super; this._super = _super[name]; var ret = fn.apply(this, arguments); this._super = tmp; return ret; }; })(name, prop[name]) : prop[name]; } function Class() { if (!initializing && this.init) { this.init.apply(this, arguments); } } Class.prototype = prototype; Class.prototype.constructor = Class; Class.extend = arguments.callee; return Class; }; })(); ; // A customization of the Class pattern. Allows structured Mixins (function (Class) { Class.augment = function (destination, source) { for (var prop in source) { if (!source.hasOwnProperty(prop)) continue; destination.prototype[prop] = typeof (destination.prototype[prop]) !== 'undefined' ? (function (prop) { var fn = destination.prototype[prop]; return function () { // Save any _super variable that already existed var tmp = this._super; this._super = source[prop]; fn.apply(this, arguments); // Restore _super this._super = tmp; }; })(prop) : source[prop]; } return destination; }; })(Xdn.Class);