function findTabbable(oOriginalElement, oConfig) {
		const oScope = oConfig.scope || document.documentElement;
		const bForward = !!oConfig.forward;
		let bStartOver = false;

		const stack = [{
			element: oOriginalElement,
			skipChild: oConfig.skipChild
		}];

		while (stack.length) {
			const oCurrent = stack.pop();
			const oElement = oCurrent.element;
			const bSkipChild = oCurrent.skipChild;

			const oNextElement = bForward ? findNextElement({
					element: oElement,
					scope: oScope,
					skipChild: bSkipChild
				}) : findPreviousElement({
					element: oElement,
					scope: oScope
				});

			if (!oNextElement) {
				return null;
			}

			if (oNextElement === oScope) {
				if (bStartOver) {
					// we meet oScope for the second time and can't find
					// oOriginalElement anymore. Return to avoid endless loop.
					return {
						element: null,
						startOver: true
					};
				} else {
					bStartOver = true;
				}
			}

			if (bStartOver && oNextElement === oOriginalElement) {
				return {
					element: null,
					startOver: true
				};
			}

			if (jQuery.expr.pseudos.sapTabbable(oNextElement)) {
				return {
					element: oNextElement,
					startOver: bStartOver
				};
			} else {
				stack.push({element: oNextElement});
			}
		}

		return null;
	}
Finds the next tabbable element within the specified scope.
@param {Element} oOriginalElement The original element from which to start searching.
@param {Object} oConfig The configuration object for finding the tabbable element.
@param {Element} [oConfig.scope=document.documentElement] The scope within which to search for the tabbable element.
@param {boolean} [oConfig.forward=true] Whether to search forward or backward.
@param {boolean} [oConfig.skipChild=false] Whether to skip child elements.
@returns {Object|null} An object containing the found tabbable element and a flag indicating if the search started over.