for ARIA state properties
484965
function(name, bool, node) {
        node = node || this;
        if (arguments.length == 1) {
            bool = !node.hasAttribute(name) || node.getAttribute(name) == 'false';
        }
        bool ? node.setAttribute(name, 'true') : node.setAttribute(name, 'false');
    }
116817
function () {
            var param = {
                width : 0,
                activeIconIndex : 0
            }, oSelf = this;
            ariaUtilsArray.forEach(this._iconsLeft, function (value) {
                oSelf._computeIconSize(value, param);
            });
            ariaUtilsArray.forEach(this._iconsRight, function (value) {
                oSelf._computeIconSize(value, param);
            });
            this._iconsWidth = param.width;
        }
998138
function( startMenu ) {
		if ( !startMenu ) {
			startMenu = this.active ? this.active.parent() : this.element;
		}

		startMenu.find( ".ui-menu" )
			.hide()
			.attr( "aria-hidden", "true" )
			.attr( "aria-expanded", "false" );
	}
1026738
function () {
            this.$TextInput._reactToChange.apply(this, arguments);
            var cfg = this._cfg;
            var dropDownIcon = this._getDropdownIcon();
            if (cfg.waiAria && dropDownIcon) {
                if (cfg.disabled) {
                    dropDownIcon.setAttribute("aria-hidden", "true");
                    dropDownIcon.removeAttribute("tabindex");
                } else {
                    dropDownIcon.removeAttribute("aria-hidden");
                    var tabIndex = cfg.tabIndex != null ? this._calculateTabIndex() : "0";
                    dropDownIcon.setAttribute("tabindex", tabIndex);
                }
            }
        }
1363392
function () {
        /**
         * Cache for the supported CSS styles.
         * @type Object
         * @private
         */
        this._styleCache = {};

        /**
         * Cache for properties computed by <em>init</em> for a given user agent.
         * @type Object
         * @private
         */
        this._propertiesCache = {};

        ////////////////////////////////////////////////////////////////////////
        // User agent
        ////////////////////////////////////////////////////////////////////////

        /**
         * The user agent.
         * @type String
         */
        this.ua = "";



        ////////////////////////////////////////////////////////////////////////
        // Browser
        ////////////////////////////////////////////////////////////////////////

        /**
         * Browser name.
         * @type String
         */
        this.name = "";

        /**
         * Browser version.
         * @type String
         */
        this.version = "";

        /**
         * Browser major version.
         * @type Integer
         */
        this.majorVersion = 0;

        /* BACKWARD-COMPATIBILITY-BEGIN (GitHub #1397) */
        /**
         * <b>Deprecated, use <em>aria.core.Browser.name instead</em>.</b>
         *
         * <p>
         * Browser name.
         * </p>
         *
         * @type String
         * @deprecated use aria.core.Browser.name instead
         */
        this.browserType = "";

        /**
         * <b>Deprecated, use <em>aria.core.Browser.version instead</em>.</b>
         *
         * <p>
         * Browser version.
         * </p>
         *
         * @type String
         * @deprecated use aria.core.Browser.version instead
         */
        this.browserVersion = "";
         */

        /**
         * <em>true</em> if the browser is any version of Internet Explorer.
         * @type Boolean
         */
        this.isIE = false;

        /* BACKWARD-COMPATIBILITY-BEGIN (GitHub #1397) */
        /**
         * <b>Deprecated, <em>isIE6</em> is not supported anymore.</b>
         *
         * <em>true</em> if the browser is Internet Explorer 6.
         *
         * @type Boolean
         * @deprecated isIE6 is not supported anymore
         */
        this.isIE6 = false;
         */

        /**
         * <em>true</em> if the browser is Internet Explorer 7.
         * @type Boolean
         */
        this.isIE7 = false;

        /**
         * <em>true</em> if the browser is Internet Explorer 8.
         * @type Boolean
         */
        this.isIE8 = false;

        /**
         * <em>true</em> if the browser is Internet Explorer 9.
         * @type Boolean
         */
        this.isIE9 = false;

        /**
         * <em>true</em> if the browser is Internet Explorer 10.
         * @type Boolean
         */
        this.isIE10 = false;

        /**
         * <em>true</em> if the browser is Internet Explorer 11.
         * @type Boolean
         */
        this.isIE11 = false;

        /**
         * <em>true</em> if the browser is Internet Explorer 10 or less.
         * @type Boolean
         */
        this.isOldIE = false;

        /**
         * <em>true</em> if the browser is Internet Explorer 11 or more.
         * @type Boolean
         */
        this.isModernIE = false;

        /**
         * <em>true</em> if the browser is any version of Firefox.
         * Some reference: http://hacks.mozilla.org/2010/09/final-user-agent-string-for-firefox-4/
         * @type Boolean
         */
        this.isFirefox = false;

        /**
         * <em>true</em> if the browser is any version of Microsoft Edge.
         * Some reference: https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx#edge
         * @type Boolean
         */
        this.isEdge = false;

        /* BACKWARD-COMPATIBILITY-BEGIN (GitHub #1397) */
        /**
         * <b>Deprecated, use <em>aria.core.Browser.isFirefox instead</em>.</b>
         *
         * <p>
         * <em>true</em> if the browser is any version of Firefox.
         * </p>
         *
         * @type Boolean
         * @deprecated use aria.core.Browser.isFirefox instead
         */
        this.isFF = false;
         */

        /**
         * <em>true</em> if the browser is any version of Chrome.
         * @type Boolean
         */
        this.isChrome = false;

        /**
         * <em>true</em> if the browser is any version of Safari.
         * @type Boolean
         */
        this.isSafari = false;

        /**
         * <em>true</em> if the browser is any version of Opera.
         * @type Boolean
         */
        this.isOpera = false;

        /**
         * <em>true</em> if the browser is any version of BlackBerry.
         * @type Boolean
         */
        this.isBlackBerryBrowser = false;

        /**
         * <em>true</em> if the browser is any version of Android.
         * @type Boolean
         */
        this.isAndroidBrowser = false;

        /**
         * <em>true</em> if the browser is any version of Safari Mobile.
         * @type Boolean
         */
        this.isSafariMobile = false;

        /**
         * <em>true</em> if the browser is any version of IE Mobile.
         * @type Boolean
         */
        this.isIEMobile = false;

        /**
         * <em>true</em> if the browser is any version of Opera Mobile.
         * @type Boolean
         */
        this.isOperaMobile = false;

        /**
         * <em>true</em> if the browser is any version of Opera Mini.
         * @type Boolean
         */
        this.isOperaMini = false;

        /**
         * <em>true</em> if the browser is any version of S60.
         * @type Boolean
         */
        this.isS60 = false;

        /**
         * <em>true</em> if the browser is any version of PhantomJS.
         * @type Boolean
         */
        this.isPhantomJS = false;

        /**
         * <em>true</em> if browser is not a known one.
         * @type Boolean
         */
        this.isOtherBrowser = false;



        ////////////////////////////////////////////////////////////////////////
        // Rendering engine
        ////////////////////////////////////////////////////////////////////////

        /**
         * <em>true</em> if the rendering engine is Webkit.
         * @type Boolean
         */
        this.isWebkit = false;

        /**
         * <em>true</em> if the rendering engine is Gecko.
         * @type Boolean
         */
        this.isGecko = false;



        ////////////////////////////////////////////////////////////////////////
        // OS
        ////////////////////////////////////////////////////////////////////////

        /**
         * Name of the operating system on which the browser runs.
         * @type String
         */
        this.osName = "";

        /**
         * Version of the operating system on which the browser runs.
         * @type String
         */
        this.osVersion = "";

        /* BACKWARD-COMPATIBILITY-BEGIN (GitHub #1397) */
        /**
         * <b>Deprecated, use <em>aria.core.Browser.osName instead</em>.</b>
         *
         * <p>
         * MacOS or Windows.
         * </p>
         *
         * @type String
         * @deprecated use aria.core.Browser.osName instead
         */
        this.environment = "";
         */

        /**
         * <em>true</em> if the operating system is Windows.
         * @type Boolean
         */
        this.isWindows = false;

        /**
         * <em>true</em> if the operating system is Mac OS.
         * @type Boolean
         */
        this.isMac = false;

        /**
         * <em>true</em> if operating system is iOS.
         * @type Boolean
         */
        this.isIOS = false;

        /**
         * <em>true</em> if operating system is Android.
         * @type Boolean
         */
        this.isAndroid = false;

        /**
         * <em>true</em> if operating system is Windows.
         * @type Boolean
         */
        this.isWindowsPhone = false;

        /**
         * <em>true</em> if operating system is BlackBerry.
         * @type Boolean
         */
        this.isBlackBerry = false;

        /**
         * <em>true</em> if operating system is Symbian.
         * @type Boolean
         */
        this.isSymbian = false;

        /**
         * <em>true</em> if operating system is not a known one.
         * @type Boolean
         */
        this.isOtherOS = false;

        /* BACKWARD-COMPATIBILITY-BEGIN (GitHub #1397) */
        /**
         * <b>Deprecated, use <em>aria.core.Browser.isOtherOS instead</em>.</b>
         *
         * <p>
         * <em>true</em> if operating system is not a known one.
         * </p>
         *
         * @type Boolean
         * @deprecated use aria.core.Browser.isOtherOS instead
         */
        this.isOtherMobile = false;
         */



        ////////////////////////////////////////////////////////////////////////
        // Mobile browser specific properties
        //
        // Only for Window Phone with IE+9
        ////////////////////////////////////////////////////////////////////////

        // Only for Window Phone with IE+9
        /**
         * <em>true</em> if view type is Mobile.
         * @type Boolean
         */
        this.isMobileView = false;

        /**
         * <em>true</em> if view type is Desktop.
         * @type Boolean
         */
        this.isDesktopView = false;

        /* BACKWARD-COMPATIBILITY-BEGIN (GitHub #1397) */
        /**
         * <b>Deprecated, use <em>aria.core.Browser.isDesktopView instead</em>.</b>
         *
         * <p>
         * <em>true</em> if view type is Desktop.
         * </p>
         *
         * @type Boolean
         * @deprecated use aria.core.Browser.isDesktopView instead
         */
        this.DesktopView = false;
         */



        /* BACKWARD-COMPATIBILITY-BEGIN (GitHub #1397) */
        ////////////////////////////////////////////////////////////////////////
        // Device properties
        ////////////////////////////////////////////////////////////////////////

        // For Mobile Browsers
        /**
         * <b>Deprecated, use <em>aria.utils.Device.isPhone instead</em>.</b>
         *
         * <p>
         * <em>true</em> if the device is of type phone.
         * </p>
         *
         * @type Boolean
         * @deprecated use aria.utils.Device.isPhone instead
         */
        this.isPhone = false;

        /**
         * <b>Deprecated, use <em>aria.utils.Device.isTablet instead</em>.</b>
         *
         * <p>
         * <em>true</em> if the device is of type tablet.
         * </p>
         *
         * @type Boolean
         * @deprecated use aria.utils.Device.isTablet instead
         */
        this.isTablet = false;

        /**
         * <b>Deprecated, use <em>aria.utils.Device.deviceName instead</em>.</b>
         *
         * <p>
         * Name of the device, combining the vendor and the model.
         * </p>
         *
         * @type String
         * @deprecated use aria.utils.Device.deviceName instead
         */
        this.deviceName = "";
         */



        ////////////////////////////////////////////////////////////////////////
        // Initialization
        ////////////////////////////////////////////////////////////////////////

        /* BACKWARD-COMPATIBILITY-BEGIN (GitHub #1397) */
        var properties = [
            "isIE6",
            "environment",
            {
                name: "isFF",
                synonym: "isFirefox"
            },
            {
                name: "browserType",
                synonym: "name"
            },
            {
                name: "browserVersion",
                synonym: "version"
            },

            {
                name: "isOtherMobile",
                synonym: "isOtherOS"
            },

            {
                name: "DesktopView",
                synonym: "isDesktopView"
            },

            {
                name: "isPhone",
                alternative: "aria.utils.Device.isPhone"
            },
            {
                name: "isTablet",
                alternative: "aria.utils.Device.isTablet"
            },
            {
                name: "deviceName",
                alternative: "aria.utils.Device.deviceName"
            },
            {
                name: "toString",
                type: "method"
            }
        ];

        var deprecatedProperties = [];
        var isString = ariaUtilsType.isString;
        ariaUtilsArray.forEach(properties, function(property) {
            // ------------------------------------------------ property factory

            if (isString(property)) {
                property = {name: property};
            }

            // ------------------------------------------------------------ name

            var name = property.name;

            // ------------------------------------------------------------ type

            var type = property.type;

            if (type == null) {
                type = "attribute";
            }

            property.type = type;

            // ----------------------------------------------- underlying method

            if (type == "method") {
                var underlyingContainer = this;
                var underlyingName = name;
                var underlying = underlyingContainer[underlyingName];

                property.underlying = underlying;
            }

            // --------------------------------------------------------- synonym

            var possibleAlternative;

            var synonym = property.synonym;

            possibleAlternative = synonym;

            // ----------------------------------------------------- alternative

            var alternative = property.alternative;

            if (alternative == null && possibleAlternative != null) {
                alternative = possibleAlternative;
            }

            property.alternative = alternative;

            // --------------------------------------------------- extrapolation

            var loggingMessage;
            var loggingMessageArguments = [name];

            if (alternative != null) {
                loggingMessage = type == "attribute" ? "DEPRECATED_REPLACED_PROPERTY" : "DEPRECATED_REPLACED_METHOD";
                loggingMessageArguments.push(alternative);
            } else {
                loggingMessage = type == "attribute" ? "DEPRECATED_REMOVED_PROPERTY" : "DEPRECATED_REMOVED_METHOD";
            }

            property.loggingMessage = this[loggingMessage];
            property.loggingMessageArguments = loggingMessageArguments;

            // ---------------------------------------------------------- result

            deprecatedProperties.push(property);
        }, this);

        this._deprecatedProperties = deprecatedProperties;
        this.__deprecateProperties();
         */

        this.init();
    }
1170050
function(value) {

			var container = this.get('element'),
				text = Lang.substitute(this.get(ARIA_TEXT_TEMPLATE),{
					value:value,
					minValue:this.get(MIN_VALUE),
					maxValue:this.get(MAX_VALUE)
				});
			container.setAttribute('aria-valuenow',value);
			container.setAttribute('aria-valuetext',text);
		}
402406
function () {
            var cfg = this._cfg;
            return ariaCoreBrowser.isIE11 && cfg.waiAria && cfg.disabled && this._isChecked() && cfg._inputType === "checkbox";
        }
630068
function () {
            if (this._cfg.waiAria) {
                var field = this.getTextInputField();
                field.removeAttribute("aria-owns");

                var dropDownIcon = this._getDropdownIcon();
                if (dropDownIcon) {
                    dropDownIcon.setAttribute("aria-expanded", "false");
                }
           }
            this.$DropDownListTrait._afterDropdownClose.apply(this, arguments);
        }
445010
function (callback) {
            var debug = this.isDebug();
            if (debug != Aria.debug) {
                // always usefull as a shortcut
                Aria.debug = debug;
                this.$raiseEvent("debugChanged");
            }
            if (aria.core.ResMgr) {
                // the resource manager may not be already loaded
                require("../ResMgr").changeLocale(this.getLanguage(), callback);
            } else {
                this.$callback(callback);
            }
        }
456690
function () {
            var domElt = this.getDom();
            var curIndex = 0;
            if (this._cfg.waiAria) {
                this._focusElt = aria.utils.Dom.getDomElementChild(domElt, curIndex);
                curIndex++;
            } else {
                this._focusElt = domElt;
            }
            var frameDom = aria.utils.Dom.getDomElementChild(domElt, curIndex);

            if (frameDom) {
                this._frame.linkToDom(frameDom);
            }

            this.$Container._init.call(this);
        }
657044
function doAria(element, key, value) {
    if ($.type(value) === 'undefined') {
        return element.getAttribute('aria-' + key);
    }

    if (value === true) {
        value = 'true';
    } else if (value === false) {
        value = 'false';
    }

    element.setAttribute('aria-' + key, value);
}
196766
function (settings) {
        var self = this;

        self._super(settings);
        settings = self.settings;

        self.classes.add('combobox');
        self.subinput = true;
        self.ariaTarget = 'inp'; // TODO: Figure out a better way

        settings.menu = settings.menu || settings.values;

        if (settings.menu) {
          settings.icon = 'caret';
        }

        self.on('click', function (e) {
          var elm = e.target, root = self.getEl();

          if (!$.contains(root, elm) && elm != root) {
            return;
          }

          while (elm && elm != root) {
            if (elm.id && elm.id.indexOf('-open') != -1) {
              self.fire('action');

              if (settings.menu) {
                self.showMenu();

                if (e.aria) {
                  self.menu.items()[0].focus();
                }
              }
            }

            elm = elm.parentNode;
          }
        });

        // TODO: Rework this
        self.on('keydown', function (e) {
          var rootControl;

          if (e.keyCode == 13 && e.target.nodeName === 'INPUT') {
            e.preventDefault();

            // Find root control that we can do toJSON on
            self.parents().reverse().each(function (ctrl) {
              if (ctrl.toJSON) {
                rootControl = ctrl;
                return false;
              }
            });

            // Fire event on current text box with the serialized data of the whole form
            self.fire('submit', { data: rootControl.toJSON() });
          }
        });

        self.on('keyup', function (e) {
          if (e.target.nodeName == "INPUT") {
            var oldValue = self.state.get('value');
            var newValue = e.target.value;

            if (newValue !== oldValue) {
              self.state.set('value', newValue);
              self.fire('autocomplete', e);
            }
          }
        });

        self.on('mouseover', function (e) {
          var tooltip = self.tooltip().moveTo(-0xFFFF);

          if (self.statusLevel() && e.target.className.indexOf(self.classPrefix + 'status') !== -1) {
            var statusMessage = self.statusMessage() || 'Ok';
            var rel = tooltip.text(statusMessage).show().testMoveRel(e.target, ['bc-tc', 'bc-tl', 'bc-tr']);

            tooltip.classes.toggle('tooltip-n', rel == 'bc-tc');
            tooltip.classes.toggle('tooltip-nw', rel == 'bc-tl');
            tooltip.classes.toggle('tooltip-ne', rel == 'bc-tr');

            tooltip.moveRel(e.target, rel);
          }
        });
      }
1136088
function (value) {
                var document = Aria.$window.document;
                if (value) {
                    // add event listeners if AriaSkin is available
                    // (required as it uses widgets)
                    // TODO: investigate to plug with event delegation
                    // when ready
                    if (aria.widgets && aria.widgets.AriaSkin) {
                        this._enabled = true;
                        eventUtils.addListener(document, "contextmenu", {
                            fn : this._onContextMenu,
                            scope : this
                        });
                        if (ariaCoreBrowser.isSafari) {
                            // PTR 04547842: Safari does not support the
                            // ctrlKey property on contextmenu event
                            // register the mouseup event to get this
                            // information
                            eventUtils.addListener(document, "mouseup", {
                                fn : this._onSafariMouseUp,
                                scope : this
                            });
                        }
                    }
                } else {
                    this._enabled = false;
                    // remove event listeners
                    eventUtils.removeListener(document, "contextmenu", {
                        fn : this._onContextMenu
                    });
                    if (ariaCoreBrowser.isSafari) {
                        eventUtils.removeListener(document, "mouseup", {
                            fn : this._onSafariMouseUp
                        });
                    }
                }
            }
1001040
function(ctx) {
				// Set classes for current status
				var $ariaElem,
					node = ctx.node,
					tree = ctx.tree,
					opts = ctx.options,
					//			nodeContainer = node[tree.nodeContainerAttrName],
					hasChildren = node.hasChildren(),
					isLastSib = node.isLastSibling(),
					aria = opts.aria,
					cn = opts._classNames,
					cnList = [],
					statusElem = node[tree.statusClassPropName];

				if (!statusElem || tree._enableUpdate === false) {
					// if this function is called for an unrendered node, ignore it (will be updated on nect render anyway)
					return;
				}
				if (aria) {
					$ariaElem = $(node.tr || node.li);
				}
				// Build a list of class names that we will add to the node <span>
				cnList.push(cn.node);
				if (tree.activeNode === node) {
					cnList.push(cn.active);
					// 		$(">span.fancytree-title", statusElem).attr("tabindex", "0");
					// 		tree.$container.removeAttr("tabindex");
					// }else{
					// 		$(">span.fancytree-title", statusElem).removeAttr("tabindex");
					// 		tree.$container.attr("tabindex", "0");
				}
				if (tree.focusNode === node) {
					cnList.push(cn.focused);
				}
				if (node.expanded) {
					cnList.push(cn.expanded);
				}
				if (aria) {
					if (hasChildren !== false) {
						$ariaElem.attr("aria-expanded", Boolean(node.expanded));
					} else {
						$ariaElem.removeAttr("aria-expanded");
					}
				}
				if (node.folder) {
					cnList.push(cn.folder);
				}
				if (hasChildren !== false) {
					cnList.push(cn.hasChildren);
				}
				// TODO: required?
				if (isLastSib) {
					cnList.push(cn.lastsib);
				}
				if (node.lazy && node.children == null) {
					cnList.push(cn.lazy);
				}
				if (node.partload) {
					cnList.push(cn.partload);
				}
				if (node.partsel) {
					cnList.push(cn.partsel);
				}
				if (FT.evalOption("unselectable", node, node, opts, false)) {
					cnList.push(cn.unselectable);
				}
				if (node._isLoading) {
					cnList.push(cn.loading);
				}
				if (node._error) {
					cnList.push(cn.error);
				}
				if (node.statusNodeType) {
					cnList.push(cn.statusNodePrefix + node.statusNodeType);
				}
				if (node.selected) {
					cnList.push(cn.selected);
					if (aria) {
						$ariaElem.attr("aria-selected", true);
					}
				} else if (aria) {
					$ariaElem.attr("aria-selected", false);
				}
				if (node.extraClasses) {
					cnList.push(node.extraClasses);
				}
				// IE6 doesn't correctly evaluate multiple class names,
				// so we create combined class names that can be used in the CSS
				if (hasChildren === false) {
					cnList.push(
						cn.combinedExpanderPrefix + "n" + (isLastSib ? "l" : "")
					);
				} else {
					cnList.push(
						cn.combinedExpanderPrefix +
							(node.expanded ? "e" : "c") +
							(node.lazy && node.children == null ? "d" : "") +
							(isLastSib ? "l" : "")
					);
				}
				cnList.push(
					cn.combinedIconPrefix +
						(node.expanded ? "e" : "c") +
						(node.folder ? "f" : "")
				);
				// node.span.className = cnList.join(" ");
				statusElem.className = cnList.join(" ");

				// TODO: we should not set this in the <span> tag also, if we set it here:
				// Maybe most (all) of the classes should be set in LI instead of SPAN?
				if (node.li) {
					// #719: we have to consider that there may be already other classes:
					$(node.li).toggleClass(cn.lastsib, isLastSib);
				}
			}
784629
function () {
            var bindings = this._cfg.bind;
            var binding = bindings.disabled;
            if (binding) {
                var newValue = this._transform(binding.transform, binding.inside[binding.to], "toWidget");
                if (ariaUtilsType.isBoolean(newValue)) {
                    this._domElt.disabled = newValue;
                } else {
                    ariaUtilsJson.setValue(binding.inside, binding.to, this._domElt.disabled);
                }
            }
        }
24254
function (p) {
                var parent = ariaHtmlControllersSuggestions.prototype;
                for (var key in parent) {
                    if (parent.hasOwnProperty(key) && !p.hasOwnProperty(key)) {
                        p[key] = parent[key];
                    }
                }
            }
43257
function () {
        /* BACKWARD-COMPATIBILITY-BEGIN (GitHub #1397) */
        /**
         * <b>Deprecated, use aria.core.Browser.ua instead.</b>
         *
         * <p>
         * The user agent string.
         * </p>
         *
         * @type String
         * @deprecated use aria.core.Browser.ua instead
         */
        this.ua = null;
         */

        /**
         * Previous orientation value to check if event should be raised (value changed or not).
         * @type Boolean
         * @private
         */
        this._previousIsPortrait = this.isPortrait(true);

        /* BACKWARD-COMPATIBILITY-BEGIN (GitHub #1397) */
        this._deprecatedProperties = []; // for init to process well
         */

        /* BACKWARD-COMPATIBILITY-BEGIN (GitHub #1397) */
        var properties = [
            {
                name: "ua",
                alternative: "aria.core.Browser.ua"
            },

            {
                name: "isMobile",
                type: "method",
                underlying: "isPhone"
            },
            {
                name: "isPhoneGap",
                type: "method",
                underlying: {
                    name: "isPhoneGap",
                    container: ariaCoreBrowser,
                    containerName: "aria.core.Browser"
                }
            },
            {
                name: "is2DTransformCapable",
                type: "method",
                underlying: {
                    name: "is2DTransformCapable",
                    container: ariaCoreBrowser,
                    containerName: "aria.core.Browser"
                }
            },
            {
                name: "is3DTransformCapable",
                type: "method",
                underlying: {
                    name: "is3DTransformCapable",
                    container: ariaCoreBrowser,
                    containerName: "aria.core.Browser"
                }
            }
        ];

        var deprecatedProperties = [];
        var isString = ariaUtilsType.isString;
        ariaUtilsArray.forEach(properties, function(property) {
            // ------------------------------------------------ property factory

            if (ariaUtilsType.isString(property)) {
                property = {name: property};
            }

            // ------------------------------------------------------------ name

            var name = property.name;

            // ------------------------------------------------------------ type

            var type = property.type;

            if (type == null) {
                type = "attribute";
            }

            property.type = type;

            // ----------------------------------------------- underlying method

            var possibleAlternative;

            if (type == "method") {
                var underlying = property.underlying;

                if (isString(underlying)) {
                    underlying = {name: underlying};
                }

                var underlyingName = underlying.name;

                var underlyingContainer = underlying.container;
                if (underlyingContainer == null) {
                    underlyingContainer = this;
                }
                underlying.container = underlyingContainer;

                var underlyingContainerName = underlying.containerName;

                // -------------------------------------------------------------

                possibleAlternative = "";
                if (underlyingContainerName != null) {
                    possibleAlternative += underlyingContainerName + ".";
                }
                possibleAlternative += underlyingName;

                underlying = function() {
                    return underlyingContainer[underlyingName].apply(underlyingContainer, arguments);
                };

                property.underlying = underlying;
            }

            // ----------------------------------------------------- alternative

            var alternative = property.alternative;

            if (alternative == null && possibleAlternative != null) {
                alternative = possibleAlternative;
            }

            property.alternative = alternative;

            // --------------------------------------------------- extrapolation

            var loggingMessage;
            var loggingMessageArguments = [name];

            if (alternative != null) {
                loggingMessage = type == "attribute" ? "DEPRECATED_REPLACED_PROPERTY" : "DEPRECATED_REPLACED_METHOD";
                loggingMessageArguments.push(alternative);
            } else {
                loggingMessage = type == "attribute" ? "DEPRECATED_REMOVED_PROPERTY" : "DEPRECATED_REMOVED_METHOD";
            }

            property.loggingMessage = this[loggingMessage];
            property.loggingMessageArguments = loggingMessageArguments;

            // ---------------------------------------------------------- result

            deprecatedProperties.push(property);
        }, this);

        this._deprecatedProperties = deprecatedProperties;
        this.__deprecateProperties();
         */

        this.init();
    }