# File: js/BaseObject.js

    (function (factory) {
        if (typeof module === 'object' && typeof module.exports === 'object') {
            var v = factory(require, exports); if (v !== undefined) module.exports = v;
        }
        else if (typeof define === 'function' && define.amd) {
            define(["require", "exports", './util/Util'], factory);
        }
    })(function (require, exports) {
        ///<reference path='_declare/jquery.d.ts'/>
        ///<reference path='_declare/handlebars.d.ts'/>
        ///<reference path='_declare/greensock.d.ts'/>
        ///<reference path='_declare/jquery.eventListener.d.ts'/>
        ///<reference path='_declare/log.d.ts'/>
        var Util_1 = require('./util/Util');
        /**
         * The {{#crossLink "BaseObject"}}{{/crossLink}} class is an abstract class that provides common properties and functionality for all StructureJS classes.
         *
         * @class BaseObject
         * @module StructureJS
         * @submodule core
         * @requires Util
         * @constructor
         * @author Robert S. (www.codeBelt.com)
         */
        var BaseObject = (function () {
            function BaseObject() {
                /**
                 * The sjsId (StructureJS ID) is a unique identifier automatically assigned to most StructureJS objects upon instantiation.
                 *
                 * @property sjsId
                 * @type {int}
                 * @default null
                 * @writeOnce
                 * @readOnly
                 * @public
                 */
                this.sjsId = null;
                this.sjsId = Util_1.default.uniqueId();
            }
            /**
             * Returns the fully qualified class name of an object.
             *
             * @method getQualifiedClassName
             * @returns {string} Returns the class name.
             * @public
             * @example
             *     let someClass = new SomeClass();
             *     someClass.getQualifiedClassName();
             *
             *     // SomeClass
             */
            BaseObject.prototype.getQualifiedClassName = function () {
                return Util_1.default.getName(this);
            };
            /**
             * The purpose of the destroy method is to make an object ready for garbage collection. This
             * should be thought of as a one way function. Once destroy is called no further methods should be
             * called on the object or properties accessed. It is the responsibility of those who implement this
             * function to stop all running Timers, all running Sounds, and take any other steps necessary to make an
             * object eligible for garbage collection.
             *
             * By default the destroy method will null out all properties of the class automatically. You should call destroy
             * on other objects before calling the super.
             *
             * @method destroy
             * @return {void}
             * @public
             * @example
             *     destroy() {
             *          this.disable();
             *
             *          this._childInstance.destroy();
             *
             *          super.destroy();
             *     }
             */
            BaseObject.prototype.destroy = function () {
                for (var key in this) {
                    if (this.hasOwnProperty(key)) {
                        this[key] = null;
                    }
                }
            };
            return BaseObject;
        })();
        Object.defineProperty(exports, "__esModule", { value: true });
        exports.default = BaseObject;
    });