 import flash.accessibility.Accessibility;
 import flash.accessibility.AccessibilityImplementation;
 import flash.accessibility.AccessibilityProperties;
+import flash.display.DisplayObjectContainer;
 import flash.events.Event;
+import mx.containers.Form;
+import mx.containers.FormHeading;
+import mx.containers.FormItem;
+import mx.controls.Label;
+import mx.core.Container;
 import mx.core.UIComponent;
 import mx.core.mx_internal;
+import mx.managers.SystemManager;
 
 use namespace mx_internal;
 

	}
	
	/**
	 *  Utility method determines state of the accessible component.
	 */
	protected function getState(childID:uint):uint
	{
		var accState:uint = STATE_SYSTEM_NORMAL;
		
		if (!UIComponent(master).enabled)
			accState |= STATE_SYSTEM_UNAVAILABLE;
		else
		{
			accState |= STATE_SYSTEM_FOCUSABLE

	{
	}	

    /**
     *  Method for supporting Form Accessibility.
     *  @review
     */
    public static function getFormName(component:UIComponent):String
    {
        var formName:String = "";
        
        // Return nothing if we are a container 
        if (component is Container)
            return formName;

        // keeping this DisplayObjectContainer since parent returns
        // that as root is not a UIComponent.
        var par:DisplayObjectContainer = component.parent; 
        // continue looking up the parent chain
        // until root (or application) or FormItem is found.
        while (par && !(par is FormItem) &&
               !(par is SystemManager) && par != component.root)
        {
            par = par.parent;
        }

        if (par && par is FormItem)
            formName = updateFormItemString(FormItem(par));

        return formName;
    }
    
    /**
     *  @private
     *  Method for supporting Form Accessibility.
     */
    private static function updateFormItemString(formItem:FormItem):String
    {
        var formName:String = "";
        
        const itemLabel:Label = formItem.itemLabel;
        const accProp:AccessibilityProperties = (itemLabel ? itemLabel.accessibilityProperties : null);
        if (accProp && accProp.silent)
            return accProp.name;

        var form:UIComponent = UIComponent(formItem.parent);

        // If we are located within a Form, then look for the first FormHeading
        // that is a sibling that is above us in the parent's child hierarchy
        if (form is Form)
        {
            var formItemIndex:int = form.getChildIndex(formItem);
            for (var i:int = formItemIndex; i >= 0; i--)
            {
                var child:UIComponent = UIComponent(form.getChildAt(i));
                if (child is FormHeading)
                {
                    formName = FormHeading(child).label + " ";
                    break;
                }
            }
        }

        // Add in text if we are a required field
        if (formItem.required)
            formName += "Required Field ";

        // Add in the label from the formItem
        if (formItem.label != "")
            formName += formItem.label + " ";

        if (accProp && !accProp.silent)
        {
            accProp.silent = true;
            accProp.name = formName;
        }

        return formName;
    }

	//--------------------------------------------------------------------------
	//
	//  Constructor
