 import mx.core.IVisualElement;
 import mx.core.mx_internal;
 
+import spark.components.DataGroup;
 import spark.components.SpinnerList;
 import spark.components.supportClasses.GroupBase;
 import spark.core.NavigationUnit;

	{
		var index:int = Math.floor(position.y / rowHeight); // may be larger than numElements to indicate wrapping
		
		var element:ILayoutElement;
		var startIndex:int = index % target.numElements;
        var distance:int = 0;
        var direction:int = autoScrollAscending ? 1 : -1;
		if (startIndex < 0)
            startIndex += target.numElements;
		
		// If the element at index % numElements) is not selectable, find the nearest one that is              
        var iter:LayoutIterator = new LayoutIterator(target, startIndex);
        
        while (Math.abs(distance) <= (target.numElements / 2) + 1)
        {
            // Try searching in one direction
            iter.currentIndex = startIndex + distance * direction;
            element = iter.getCurrentElement();    
            
            if (isElementEnabled(element))
                break;
            
            if (distance != 0)
            {
                // Flip the direction
                direction *= -1;
                
                // Try searching in the other direction
                iter.currentIndex = startIndex + distance * direction;
                element = iter.getCurrentElement();    
                
                if (isElementEnabled(element))
                    break;
                
                // Flip the direction back
                direction *= -1;
            }
            
            distance++;
        }
		
		// If we don't allow wrapping, then cap the max index
		if(!wrapElements)
			index = Math.max(0, Math.min(index, target.numElements - 1));

        // casting as an object
        try
        {
            if (!element || element["_enabled_"] == undefined || element["_enabled_"] == true)
                return true;
        }
        catch (e:Error)
