<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE spec SYSTEM "xmlspec.dtd">
<spec status="final" w3c-doctype="wgnote">
	<header>
		<title>Flash Techniques</title>
		<w3c-designation>WCAG20-FLASH-TECHS</w3c-designation>
		<w3c-doctype>W3C Working Group Note</w3c-doctype>
		<pubdate>
			<day>3</day>
			<month>January</month>
			<year>2012</year>
		</pubdate>
		<publoc>
			<loc href="http://www.w3.org/WAI/GL/WCAG20/WD-WCAG20-FLASH-TECHS-20060331/">http://www.w3.org/WAI/GL/WCAG20/WD-WCAG20-FLASH-TECHS-20060331/</loc>
		</publoc>
		<latestloc>
			<loc href="http://www.w3.org/WAI/GL/WCAG20/WD-WCAG20-FLASH-TECHS/">http://www.w3.org/WAI/GL/WCAG20/WD-WCAG20-FLASH-TECHS/</loc>
		</latestloc>
		<prevlocs>
			<loc href="http://www.w3.org/WAI/GL/WCAG20/WD-WCAG20-FLASH-TECHS-20100107/">http://www.w3.org/WAI/GL/WCAG20/WD-WCAG20-FLASH-TECHS-20100107/</loc>
		</prevlocs>
		<authlist>
			<author>
				<name>Andrew Kirkpatrick, Adobe</name>
			</author>
			<author>
				<name>Michael Cooper, W3C</name>
			</author>
		</authlist>
		<status>
			<p>
				<emph>This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the <loc href="http://www.w3.org/TR/">W3C technical reports index</loc> at http://www.w3.org/TR/.</emph>
			</p>
			<p>This version of CSS techniques has not significantly changed since the 19 November 2004 Working Draft. The <loc href="/WAI/GL/">Web Content  Accessibility Guidelines Working Group</loc> (WCAG WG) has focused on addressing issues related to Guidelines and Success Criteria. This publication  demonstrates how the different documents may link to each other. As the focus of the WCAG WG returns to techniques and test suites, the structure and presentation of the techniques documents will likely change to  reflect the relationships between Guidelines, Techniques, and testing documents. In future revisions, we expect to distinguish between techniques required for conformance versus those that are optional. Please refer to "<loc href="http://trace.wisc.edu/bugzilla_wcag/condensedreports/css_issues.php">Issue tracking for WCAG 2.0 Techniques for CSS</loc>" for a list of open issues related to this Working Draft. The "<loc href="/WAI/GL/WCAG20/css-tech-change-history.html">History of Changes to CSS Techniques for WCAG 2.0 Working Drafts</loc>" is also available.
			</p>
			<p>Please send comments about this document to <loc href="mailto:public-comments-wcag20@w3.org">public-comments-wcag20@w3.org</loc>. The <loc href="http://lists.w3.org/Archives/Public/public-comments-wcag20/">archives for the public comments list</loc> are publicly available.   <loc href="http://lists.w3.org/Archives/Public/w3c-wai-gl">Archives of the WCAG WG mailing list</loc> are also publicly available.</p>
			<p>Publication as a Working Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.  The WCAG WG intends to publish this as a Working Group Note at the time that WCAG 2.0 becomes a Recommendation.</p>
			<!-- do not need patent section since these are not on the Rec track -->
			<p>This document has been produced as part of the W3C <loc href="http://www.w3.org/WAI/">Web Accessibility Initiative</loc> (WAI). The goals of the WCAG WG are discussed in the <loc href="http://www.w3.org/WAI/GL/new-charter-2000.html">Working Group charter</loc>. The WCAG WG is part of the <loc href="http://www.w3.org/WAI/Technical/Activity">WAI Technical Activity</loc>.</p>
		</status>
		<abstract>
			<p>This document provides information to Web content developers who wish to satisfy the Success Criteria of "Web Content Accessibility Guidelines 2.0" <bibref ref="WCAG20"/> (currently a W3C Working Draft).   The techniques in this document are specific to Flash content <bibref ref="FLASH"/>.  Use of the illustrative techniques provided in this document may make it more likely for Web content to demonstrate conformance to WCAG 2.0 Success Criteria (by passing the relevant tests in the WCAG 2.0 test suite - <emph>to be developed</emph>) than if these illustrative techniques are not used.</p>
			<p>There may be other techniques besides those provided in this document that may be used to demonstrate conformance to WCAG 2.0; in that case, it is encouraged to submit those techniques to the WCAG WG for consideration for inclusion in this document, so that the set of techniques  maintained by the WCAG WG is as comprehensive as possible. Deprecated examples illustrate techniques that the Working Group no longer recommends, but may be applicable in some cases. </p>
			<p>This document is part of a series of documents published by the W3C
Web Accessibility Initiative (WAI) to support WCAG 2.0.</p>
		</abstract>
		<langusage>
			<language id="en-US"/>
		</langusage>
		<revisiondesc>
			<p/>
		</revisiondesc>
	</header>
	<body>
		<!-- techniques -->
		<div1 id="flash">
			<head>Flash Techniques</head>
			<div2 id="flash_notes">
				<head>Flash Technology Notes</head>
				<p>Adobe Flash Player is a cross-platform browser plug-in. Authors  creating content for display by the Flash Player may choose to do so for   a variety of factors,  including video support, authoring preference, vector-based graphics   capabilities, or to take  advantage of available components. The motivation of the author  notwithstanding, it is equally important to ensure that content playing   in the Flash Player meets  the accessibility criteria in WCAG 2.0 as it is for other web content. </p>
				<div3 id="flash_ua_support">
					<head>User Agent Support for Flash</head>
					<p>The Flash Player  provides a combination of built-in support for accessibility and   capabilities that authors and  authoring tools can take advantage of in order to enable support for   accessible content.  Flash authors may use any of a few tools for authoring accessible Flash   content,  including but not limited to: </p>
					<ulist>
						<item>
							<p> Flash MX, MX2004, 8, CS3, CS4, CS5 </p>
						</item>
						<item>
							<p> Flex 1.5 and newer </p>
						</item>
						<item>
							<p> Flex Builder 2, Flex Builder 3, Flash Builder 4 </p>
						</item>
						<item>
							<p> Flash Catalyst 4 </p>
						</item>
						<item>
							<p> Other tools, including Adobe Presenter and Adobe Captivate </p>
						</item>
					</ulist>
					<p>For blind, low-vision, and other assistive technology users the Flash   Player  introduced support for an accessibility API in 2001 with Flash Player 6.   Flash  accessibility support for assistive technology relies on the Microsoft   Active  Accessibility (MSAA) interface and a Flash Player-specific interface to   properly  convey information about Flash content for assistive technologies.   Support for  assistive technologies is provided for users viewing content using   combinations of: </p>
					<ulist>
						<item>
							<p> Microsoft Internet Explorer 6 or later, in combination with   Flash Player 6 or newer on Windows. </p>
						</item>
						<item>
							<p> Mozilla Firefox 3 or later, in combination with Flash Player 9   or later on Windows. </p>
						</item>
					</ulist>
					<p>Assistive technology support for MSAA is provided in several   assistive technologies,  including but not limited to: </p>
					<ulist>
						<item>
							<p> JAWS (4.5 and newer) </p>
						</item>
						<item>
							<p> Window-Eyes (4.2 and newer) </p>
						</item>
						<item>
							<p> NVDA </p>
						</item>
						<item>
							<p> ZoomText (8 and newer) </p>
						</item>
					</ulist>
				</div3>
				<div3 id="flash_accessibility_support">
					<head>Flash Accessibility Support</head>
					<p>Flash Player also supports keyboard access for users who are unable   to use a mouse.  Keyboard support is best within the ActiveX version of the player used   in Internet Explorer,  but techniques to provide support within Mozilla Firefox are also   available. Flash authors can  control the tab order of content within published Flash content, as is   demonstrated in the WCAG  2.0 techniques for Flash. </p>
					<p>Flash player is often used to display video, and it provides   support for text tracks which can be  used to provide closed captions or subtitles in any language, and it   also supports multiple tracks  of audio, thereby enabling support for video description, and it supports multiple video tracks, enabling the delivery of sign language interpretation for audio-visual   content. </p>
					<p>The Flash Player does not currently support high-contrast mode or   text resizing via the  Windows operating system. However, Flash authors may take advantage of   Flash's support  for Cascading Stylesheets (CSS), other built-in style support, or   Flash's display filter features to  offer alternative views of a Flash-based interface with larger text,   alternative fonts, or alternative  or high-contrast color schemes. </p>
					<p>Flash accessibility support for assistive technology relies on use in Windows operating systems, using Internet Explorer 6 or later (with Flash Player 6 or later) or Mozilla Firefox 3 or later (with Flash Player 9 or later).</p>
					<p>Adobe continues to improve accessibility support in Flash Player.   In March 2010 Adobe  announced plans to add support for IAccessible2 and support for   accessibility APIs for both Mac  and Linux platforms. </p>
					<p>For additional general information about the Flash Player, visit   the <loc href="http://www.adobe.com/products/flashplayer/faq.html">Flash   Player FAQ</loc>. </p>
				</div3>
				<div3 id="flash_conformance_considerations">
					<head> Special   Considerations for WCAG 2.0 Compliance </head>
					<ulist>
						<item>
							<p>
								<loc href="navigation-mechanisms-title" linktype="guideline">2.4.2 Page Titled</loc> - In order to meet 2.4.2, Flash content must   be embedded within an HTML page that has a page title in the HTML title   element. See <loc href="H25" linktype="html">H25</loc>.</p>
						</item>
						<item>
							<p>
								<loc href="meaning-doc-lang-id" linktype="guideline">3.1.1 Language of Page</loc> - The language of Flash content is   established by the lang attribute of the containing object element in   HTML, not within the Flash SWF file itself. Authors may include more   than one Flash SWF in a single web page, each with a different language   indicated in the object element's lang attribute. See <specref ref="FLASH13"/>.</p>
						</item>
						<item>
							<p>
								<loc href="meaning-other-lang-id" linktype="guideline">3.1.2 Language of Parts</loc> - Since the language of Flash content   is not established within the Flash SWF file, it is not currently   possible to indicate changes of language within a single SWF file. </p>
						</item>
					</ulist>
				</div3>
			</div2>
			<technique id="FLASH1">
				<short-name>Setting the name property for a non-text object</short-name>
				<applicability>
					<ulist id="flash.applicability.general">
						<item>
							<p>Adobe Flash Professional version MX and higher </p>
						</item>
						<item>
							<p>Adobe Flex</p>
						</item>
					</ulist>
				</applicability>
				<applies-to>
					<success-criterion idref="text-equiv-all"/>
				</applies-to>
				<ua-issues>
					<ua-issue id="flash.ua-issue.general">
						<p>See <specref ref="flash_ua_support"/> for general information on user agent support.</p>
					</ua-issue>
				</ua-issues>
				<description>
					<p>The objective of this technique is to show how non-text objects in Flash can be marked so that they can be read by assistive technology.</p>
					<p>The Flash Player supports text alternatives to non-text objects using the name property in the accessiblity object, which can be defined in ActionScript or within Flash authoring tools.</p>
					<p>When an object contains words that are important to understanding the content, the name property should include those words. This will allow the name property to play the same function on the page as the object. Note that it does not necessarily describe the visual characteristics of the object itself but must convey the same meaning as the object. </p>
				</description>
				<examples>
					<eg-group>
						<head>Applying a textual alternative for a symbol (graphic, button or movieclip)</head>
						<description>
							<p>The Flash Professional authoring tool's Accessibility panel lets  authors provide accessibility information to assistive technology and  set accessibility options for individual Flash objects or entire Flash  applications. </p>
							<olist>
								<item>
									<p>For a text alternative to be applied to a non-text object, it must be saved as a symbol in the movie's library. <emph>Note:</emph> Flash does not support text alternatives for graphic symbols. Instead,  the graphic must be converted to or stored in a movie clip or button  symbol.</p>
								</item>
								<item>
									<p>Bring up the accessibility panel by selecting "Window &gt;  Other Panels &gt; Accessibility" in the application menu, or through  the shortcut ALT + F11. Ensure that the 'Make object accessible'  checkbox is checked.</p>
								</item>
								<item>
									<p>Select the non-text instance on the movie stage, the fields in the accessibility panel become editable.</p>
								</item>
								<item>
									<p>Enter a meaningful text alternative in the 'name' field, properly describing the purpose of the symbol.</p>
								</item>
							</olist>
							<p>
								<image>
									<img source="working-examples/FLASH1/acc_name_scrn.jpg" width="541" height="218"/>
									<alt>The accessibility panel in the Flash authoring environment.</alt>
								</image>
							</p>
						</description>
					</eg-group>
					<eg-group>
						<head>Applying textual alternatives programmatically in ActionScript 2.0</head>
						<description>
							<p>To manage an object's text equivalent programmatically using  ActionScript 2, the _accProps object must be used. This references an  object containing accessibility related properties set for the object.  The code example below shows a simple example of how the _accProps  object is used to set an objects name in ActionScript. </p>
						</description>
						<code xml:space="preserve"><![CDATA[// 'print_btn' is an instance placed on the movie's main timeline
_root.print_btn._accProps = new Object();
_root.print_btn._accProps.name = "Print";]]></code>
					</eg-group>
					<eg-group>
						<head>Applying textual alternatives programmatically in ActionScript 3.0</head>
						<description>
							<p>To manage an object's text equivalents programmatically using  ActionScript 3, the AccessibilityProperties object and name property  must be used. The code example below shows a simple example of how the  name property is used to set an objects name in ActionScript. </p>
						</description>
						<code xml:space="preserve"><![CDATA[// 'print_btn' is an instance placed on the movie's main timeline
print_btn.accessibilityProperties = new AccessibilityProperties();
print_btn.accessibilityProperties.name = "Print";]]></code>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="G94"/>
				</related-techniques>
				<tests>
					<procedure>
						<olist>
							<item>
								<p>Publish the SWF file</p>
							</item>
							<item>
								<p>Open the SWF file in Internet Explorer 6 or higher (using  Flash Player 6 or higher), or Firefox 3 or higher (using Flash Player 9  or higher)</p>
							</item>
							<item>
								<p>Use a tool which is capable of showing an object's name text alternative, such as ACTF aDesigner 1.0 to open the Flash movie.</p>
							</item>
							<item>
								<p>In the GUI summary panel, loop over each object which is  contained by the Flash movie and ensure the object that was provided a  name has a proper name attribute appearing in the tool's display.</p>
							</item>
							<item>
								<p>Authors may also test with a screen reader, by reading the  Flash content and listening to hear that the equivalent text is read  when tabbing to the non-text object (if it is tabbable) or hearing the  alternative text read when reading the content line-by-line.</p>
							</item>
							<item>
								<p>All non-text objects have text equivalents that can serve  the same purpose and convey the same information as the non-text object</p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<p>Check #6 is true. </p>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Setting_the_name_property_for_a_non-text_object_in_Flash"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH2">
				<short-name>Setting the description property for a non-text object in Flash</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="text-equiv-all"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to provide a long text  alternative that serves the same purpose and presents the same  information as the original non-text content when a short text  alternative is not sufficient. </p>
					<p>The Flash Player supports long text alternatives to non-text  objects, which can be defined in ActionScript or within Flash authoring  tools using the Description property, as indicated in the examples  below. </p>
				</description>
				<examples>
					<eg-group>
						<head>Applying a Description for a symbol (graphic, button or movieclip)</head>
						<description>
							<p>The Flash Professional authoring tool's Accessibility panel lets  authors provide accessibility information to assistive technology and  set accessibility options for individual Flash objects or entire Flash  applications. </p>
							<olist>
								<item>
									<p> For a text alternative to be applied to a non-text object, it must be saved as a symbol in the movie's library. <emph role="strong">Note:</emph> Flash does not support text alternatives for graphic symbols. Instead,  the graphic must be converted to or stored in a movie clip or button  symbol. </p>
								</item>
								<item>
									<p> Bring up the accessibility panel by selecting "Window &gt;  Other Panels &gt; Accessibility" in the application menu, or through  the shortcut ALT + F11. Ensure that the 'Make object accessible'  checkbox is checked. </p>
								</item>
								<item>
									<p> Select the non-text instance on the movie stage, the fields in the accessibility panel become editable. </p>
								</item>
								<item>
									<p> Enter a description describing the non-text object's contents  concisely. For example, a diagram could have a 'name' identifying what  information the diagram conveys, while the 'Description' field lists  this information in full detail. Alternatively, for an animation which  is part of an instructional movie about car repairs the name could be:  'how to replace a flat tire', while the long description describes each  step of the process in greater detail. </p>
								</item>
							</olist>
							<p>
								<emph role="strong">Important:</emph> Only use the 'Description' field if a short text  alternative is not sufficient to describe the objects purpose.  Otherwise, leave the 'Description' field empty. </p>
							<p>
								<image>
									<img source="working-examples/FLASH2/acc_name_scrn.jpg" width="541" height="218"/>
									<alt>The accessibility panel in the Flash authoring environment.</alt>
								</image>
							</p>
							<!--<ednote>
								<edtext>I suggest this should be a separate image from FLASH1, showing the description field filled out.</edtext>
							</ednote>-->
						</description>
					</eg-group>
					<eg-group>
						<head>Applying Description programmatically in ActionScript 2.0 </head>
						<description>
							<p>To manage an object's text equivalents programmatically using  ActionScript, the _accProps opbject must be used. This references an  object containing accessibility related properties set for the object.  The code example below shows a simple example of how the _accProps  object is used to set an objects name and description in ActionScript. </p>
							<p>A chart showing sales for October has a short text alternative  of "October sales chart". The long description would provide more  information, as shown in the code below. </p>
						</description>
						<code xml:space="preserve"><![CDATA[// 'chart_mc' is an instance placed on the movie's main timeline
_root.chart_mc._accProps = new Object();
_root.chart_mc._accProps.name = "October Sales Chart";
_root.chart_mc._accProps.description = "Bar Chart showing sales for October.\
  There are 6 salespersons.Maria is highest with 349 units.Frances is next\
  with 301.Then comes Juan with 256, Sue with 250, Li with 200 and Max\
  with 195.The primary use of the chart is to show leaders, so the description\
  is in sales order.";]]></code>
					</eg-group>
					<eg-group>
						<head>Applying Description programmatically in ActionScript 3.0</head>
						<description>
							<p>To manage an object's text equivalents programmatically using  ActionScript, the AccessibilityProperties object must be used. The code  example below shows a simple example of how the AccessibilityProperties  object used to set an objects name and description in ActionScript. </p>
							<p>A chart showing sales for October has a short text alternative  of "October sales chart". The long description would provide more  information, as shown in the code below. </p>
						</description>
						<code xml:space="preserve"><![CDATA[// 'chart_mc' is an instance placed on the movie's main timeline
chart_mc.accessibilityProperties = new AccessibilityProperties();
chart_mc.accessibilityProperties.name = "October Sales Chart";
chart_mc.accessibilityProperties.description = "Bar Chart showing sales for October.\
  There are 6 salespersons.Maria is highest with 349 units.Frances is next\
  with 301.Then comes Juan with 256, Sue with 250, Li with 200 and Max\
  with 195.The primary use of the chart is to show leaders, so the description\
  is in sales order.";]]></code>
					</eg-group>
				</examples>
				<resources>
					<see-also>
						<ulist>
							<item>
								<p>
									<loc href="http://www.adobe.com/accessibility.htmlproducts/flash/text.html">Adobe Flash Documentation for Text Equivalents</loc>
								</p>
							</item>
							<item>
								<p>
									<loc href="http://www.eclipse.org/actf/downloads/tools/aDesigner/">aDesigner</loc>
								</p>
							</item>
							<item>
								<p>
									<loc href="http://msdn.microsoft.com/en-us/library/ms695716.aspx">MS Active Accessibility 2.0 inspection tools</loc>
								</p>
							</item>
						</ulist>
					</see-also>
				</resources>
				<related-techniques>
					<relatedtech idref="FLASH1"/>
					<relatedtech idref="G94"/>
				</related-techniques>
				<tests>
					<procedure>
						<olist>
							<item>
								<p> Publish the SWF file </p>
							</item>
							<item>
								<p> Open the SWF file in Internet Explorer 6 or higher (using  Flash Player 6 or higher), or Firefox 3 or higher (using Flash Player 9  or higher) </p>
							</item>
							<item>
								<p> Use a tool which is capable of showing an object's long description, such as ACTF aDesigner 1.0 to open the Flash movie. </p>
							</item>
							<item>
								<p> In the GUI summary panel, loop over each object which is  contained by the Flash movie and ensure the object that was provided a  description has a proper description value appearing in the tool's  display. </p>
							</item>
							<item>
								<p> Authors may also test with a screen reader, by reading the  Flash content and listening to hear that the description is read when  tabbing to the non-text object (if it is tabbable) or hearing the  alternative text read when reading the content line-by-line. </p>
							</item>
							<item>
								<p> All non-text objects have text equivalents that can serve  the same purpose and convey the same information as the non-text  object. </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<p>#6 is true.</p>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Setting_the_description_property_for_a_non-text_object_in_Flash"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH3">
				<short-name>Marking objects in Flash so that they can be ignored by AT</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="text-equiv-all"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The purpose of this technique is to show how images can be marked so that they can be ignored by Assistive Technology. </p>
					<p>The Flash Player supports the ability for authors to control  which graphics appear to assistive technologies using the silent  property of the accessibility object, as indicated in the examples  below. </p>
				</description>
				<examples>
					<eg-group>
						<head>Hiding a graphic in the Flash Professional authoring tool</head>
						<description>
							<p>The Flash Professional authoring tool's Accessibility panel lets  authors provide accessibility information to assistive technology and  set accessibility options for individual Flash objects or entire Flash  applications. </p>
							<olist>
								<item>
									<p> To apply changes to accessibility properties for a graphic, it must be saved as a symbol in the movie's library. <emph role="strong">Note:</emph> Flash does not support text alternatives for graphic symbols. Instead,  the graphic must be converted to or stored in a movie clip or button  symbol. </p>
								</item>
								<item>
									<p> Bring up the accessibility panel by selecting "Window &gt;  Other Panels &gt; Accessibility" in the application menu, or through  the shortcut ALT + F11. </p>
								</item>
								<item>
									<p> Select the graphic object </p>
								</item>
								<item>
									<p> If the 'Make object accessible' checkbox in the accessibility  control panel is checked, uncheck this option to remove the graphic  from the accessiblity information conveyed to assistive technologies. </p>
								</item>
							</olist>
						</description>
					</eg-group>
					<eg-group>
						<head>Applying textual alternatives programmatically in ActionScript 2.0</head>
						<description>
							<p>To manage an object's text equivalents programmatically using  ActionScript, the _accProps property must be used. This references an  object containing accessibility related properties set for the object.  The code example below shows a simple example of how the _accProps  property is used to remove an object from the accessibility information  for the movie using ActionScript. </p>
						</description>
						<code xml:space="preserve"><![CDATA[// 'decorative_mc' is an instance placed on the movie's main timeline
_root.decorative_mc._accProps = new Object();
_root.decorative_mc._accProps.silent = true; ]]></code>
					</eg-group>
				</examples>
				<resources>
					<see-also>
						<ulist>
							<item>
								<p>
									<loc href="http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00001235.html">Flash CS3 Documention _accProps property</loc>
								</p>
							</item>
							<item>
								<p>
									<loc href="http://www.eclipse.org/actf/downloads/tools/aDesigner/">aDesigner</loc>
								</p>
							</item>
							<item>
								<p>
									<loc href="http://www.softpedia.com/get/Programming/SDK-DDK/Active-Accessibility-SDK.shtml">MS Active Accessibility 2.0 inspection tools</loc>
								</p>
							</item>
						</ulist>
					</see-also>
				</resources>
				<related-techniques>
					<relatedtech idref="G94"/>
				</related-techniques>
				<tests>
					<procedure>
						<olist>
							<item>
								<p> Publish the SWF file </p>
							</item>
							<item>
								<p> Open the SWF file in Internet Explorer 6 or higher (using  Flash Player 6 or higher), or Firefox 3 or higher (using Flash Player 9  or higher) </p>
							</item>
							<item>
								<p> Use a tool which is capable of showing an object's accessibility information, such as ACTF aDesigner 1.0 to open the Flash movie. </p>
							</item>
							<item>
								<p> In the GUI summary panel, loop over each object which is  contained by the Flash movie and ensure the object that was designed to  be hidden does not appear in the tool's display. </p>
							</item>
							<item>
								<p> Authors may also test with a screen reader, by reading the  Flash content and listening to hear that object is not mentioned when  the page is read. </p>
							</item>
							<item>
								<p> Non-text objects that are coded to be hidden from assistive technologies are not available to assistive technology. </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<p>Check #6 is true. </p>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Marking_objects_in_Flash_so_that_they_can_be_ignored_by_AT"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH4">
				<short-name>Providing submit buttons in Flash</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="consistent-behavior-unpredictable-change" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to use submit buttons to allow  users to take actions that cause changes of context rather than  allowing changes in context to occur when the value or state of a  non-submit button control is modified. The intended use of a submit  button in this technique is to generate an HTTP request that submits  data entered in a form or to perform an action that triggers a change  in context, so it is an appropriate control to use to initiate this  change. </p>
				</description>
				<examples>
					<eg-group>
						<head>ActionScript 3 combobox with submit button</head>
						<description>
							<p>This is a basic ActionScript 3 example of a combobox component with  a submit button to redirect the user to a different resource. </p>
						</description>
						<code xml:space="preserve"><![CDATA[import fl.accessibility.ComboBoxAccImpl;
import flash.net.navigateToURL;
import flash.net.URLRequest;
ComboBoxAccImpl.enableAccessibility();
state_submit.addEventListener(MouseEvent.CLICK, submitHandler);
function submitHandler(e) {
  var url: URLRequest = new URLRequest("http://www.wikipedia.org/wiki/" + 
    state_combo.selectedLabel);
  navigateToURL(url, "_self");
}]]></code>
					</eg-group>
					<eg-group>
						<head>ActionScript 2 combobox with submit button</head>
						<description>
							<p>This is a basic ActionScript 2 example of a combobox component with  a submit button to redirect the user to a different resource - the same  example as in example 1 except in ActionScript 2: </p>
						</description>
						<code xml:space="preserve"><![CDATA[import fl.accessibility.ComboBoxAccImpl;
ComboBoxAccImpl.enableAccessibility();
state_submit.addEventListener("click", submitHandler);
function submitHandler(e) {
  getURL("http://www.wikipedia.org/wiki/" + state_combo.selectedLabel, "_self");
}]]></code>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="G80"/>
				</related-techniques>
				<tests>
					<procedure>
						<olist>
							<item>
								<p> Find all interactive control instances (that are not submit  buttons) in the flash movie that can initiate a change of context, e.g.  a combobox, radio button or checkbox. </p>
							</item>
							<item>
								<p> For each instance, confirm that the event handler(s)  responsible for the change of context are not associated with the  controls themselves, but with a separate button instead. </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<p> #2 is true </p>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Providing_submit_buttons_in_Flash"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH5">
				<short-name>Combining adjacent image and text buttons for the same resource</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="text-equiv-all"/>
					<success-criterion idref="navigation-mechanisms-refs" relationship="sufficient"/>
					<success-criterion idref="navigation-mechanisms-link" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to avoid unnecessary duplication  that occurs when adjacent text and iconic versions of a button are  contained in a Flash movie. </p>
					<p>Many kinds of buttons have both a text and iconic button  adjacent to each other. Often the text and the icon button are rendered  in separate buttons, in part to create a slight visual separation from  each other. Although the sighted user can see this slight visual  separation, a blind or low vision user may not be able to recognize the  separation, and be confused by the redundant buttons. To avoid this,  some authors omit specifying the accessible name for the image, but  this would fail Success Criterion 1.1.1 because the text alternative  would not serve the same purpose as the graphical button. The preferred  method to address this is to put the text and image together in one  button symbol instance, and provide a single accessible name for the  button to eliminate duplication of text. </p>
				</description>
				<examples>
					<p>The following examples are for a situation where a button instance  comprised of both an image and text is on the stage. The combined  button in this example uses the instance name 'flashLink1'. </p>
					<p>To create the combined button in Flash Professional: </p>
					<olist>
						<item>
							<p> Add a graphic object and text to the stage </p>
						</item>
						<item>
							<p> Select both objects </p>
						</item>
						<item>
							<p> Select 'New Symbol' from the Insert menu or hit Ctrl+F8 to create a new button object </p>
						</item>
						<item>
							<p> Click on the button object on the stage and enter an instance name in the properties panel. </p>
						</item>
						<item>
							<p> Continue under example 1, 2, or 3 below. </p>
						</item>
					</olist>
					<p>
						<image>
							<img source="working-examples/FLASH5/adjacentbtns.jpg" height="221" width="411"/>
							<alt>screen shot showing the combined button with an instance name 'flashLink1'</alt>
						</image>
					</p>
					<eg-group>
						<head>Using the accessibility panel to specify the accessible name</head>
						<description>
							<p>The accessibility panel is used to specify the accessible name (which in this case is the same as the visual text).</p>
							<p>
								<image>
									<img source="working-examples/FLASH5/findoutmore.jpg" height="152" width="530"/>
									<alt>screen shot showing use of the accessibility control panel to provide a name for the combined button</alt>
								</image>
							</p>
						</description>
					</eg-group>
					<eg-group>
						<head/>
						<description>
							<p>ActionScript 3 can be used instead of the accessibility control  panel to define the accessibility name for the combined button, as  follows: </p>
						</description>
						<code xml:space="preserve"><![CDATA[// 'flashLink1' is an instance placed on the movie's main timeline
flashLink1.accessibilityProperties = new AccessibilityProperties();
flashLink1.accessibilityProperties.name = "Learn more about Flash";]]></code>
						<description>
							<p>ActionScript 2 can be used instead of the accessibility control  panel to define the accessibility name for the combined button, as  follows </p>
						</description>
						<code xml:space="preserve"><![CDATA[// 'flashLink1' is an instance placed on the movie's main timeline
flashLink1._accProps = new Object();
flashLink1._accProps.name = "Learn more about Flash";]]></code>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="G94"/>
					<relatedtech idref="G53"/>
				</related-techniques>
				<tests>
					<procedure>
						<olist>
							<item>
								<p> Publish the SWF file </p>
							</item>
							<item>
								<p> Open the SWF file in Internet Explorer 6 or higher (using  Flash Player 6 or higher), or Firefox 3 or higher (using Flash Player 9  or higher) </p>
							</item>
							<item>
								<p> Use a tool which is capable of showing an object's name text alternative, such as ACTF aDesigner 1.0 to open the Flash movie. </p>
							</item>
							<item>
								<p> If you are using ACTF aDesigner 1.0, use the GUI Summary panel to  check each image button in the Flash movie and ensure that there is no  separate, redundant text control adjacent to the image that performs  the same action. </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<p>#4 is true. </p>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Combining_adjacent_image_and_text_buttons_for_the_same_resource"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH6">
				<short-name>Creating accessible hotspots using invisible buttons</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="text-equiv-all"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to provide text alternatives that serve the same purpose as the clickable hotspots of an image. Each hotspot serves as a clickable region for a part of the image which can trigger an action (such as opening a web page corresponding to the hotspot). The hotspots are implemented as invisible Flash buttons, which are each given an accessible name that describes the hotspot's target. </p>
				</description>
				<examples>
					<eg-group>
						<head>Graphic with accessible clickable regions</head>
						<description>
							<olist>
								<item>
									<p> Add the original graphic that needs to have clickable hotspots to the stage. </p>
								</item>
								<item>
									<p> For each hotspot, do the following:</p>
									<olist>
										<item>
											<p> Create a new button symbol by choosing "New Symbol" from the  Flash Professional 'Insert' menu or by using the Ctrl + F8 shortcut. </p>
										</item>
										<item>
											<p> Inside the button symbol, create a shape that matches the clickable surface. </p>
										</item>
										<item>
											<p> Place the newly created button on top of the original graphic. </p>
										</item>
										<item>
											<p> Open the button's properties panel, and choose "Alpha" from  the "Style" dropdown list under "Color Effect". Change the value of the  "Alpha" slider that appears to zero so that the button becomes  invisible. </p>
										</item>
										<item>
											<p> Using the accessibility panel, specify a value for the "tabindex" field to give the button a logical position in the tab order. </p>
										</item>
										<item>
											<p> Using the accessibility panel, specify an accessible name that describes the purpose of the hotspot. </p>
										</item>
									</olist>
								</item>
							</olist>
							<p>
								<image>
									<img source="working-examples/FLASH6/flash_hotspot_graphic.png" height="181" width="274"/>
									<alt>adding the graphic to the Flash authoring stage</alt>
								</image>
							</p>
							<p>
								<image>
									<img source="working-examples/FLASH6/flash_hotspot_invisible.png" height="297" width="429"/>
									<alt>making a button invisible using the properties panel</alt>
								</image>
							</p>
							<p>
								<image>
									<img source="working-examples/FLASH6/flash_hotspot_accessibleName.png" height="303" width="384"/>
									<alt>setting the button's name using the accessibility panel</alt>
								</image>
							</p>
						</description>
						<description>
							<p>The result can be seen in the <loc href="invisible_buttons_as_image_map_regions.html" linktype="examples">working example of creating accessible hotspots using invisible buttons</loc>. The <loc href="invisible_buttons_as_image_map_regions.fla" linktype="examples">source of creating accessible hotspots using invisible buttons</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="G91"/>
					<!--relatedtech idref="@@">http://trace.wisc.edu/wcag_wiki/index.php?title=Supplementing_button_labels_with_additional_text</relatedtech-->
				</related-techniques>
				<tests>
					<procedure>
						<p>Find all images with hotspots. For each hotspot, confirm that: </p>
						<olist>
							<item>
								<p> The hotspot is implemented as an invisible button </p>
							</item>
							<item>
								<p> The hotspot is provided with an accessible name, either through the accessibility panel or through ActionScript </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> #1 and #2 are true </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Creating_accessible_hotspots_using_invisible_buttons"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH7">
				<short-name>Using scripting to change control labels</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="navigation-mechanisms-refs" relationship="sufficient"/>
					<success-criterion idref="navigation-mechanisms-link" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The purpose of this technique is to allow users to choose to have  additional information added to the label of a button or other control  so that it can be understood out of context. </p>
					<p>Some users prefer to have control labels that are  self-contained, where there is no need to explore the context of the  control. Other users find including the context information in each  button to be repetitive and to reduce their ability to use a site.  Among users of assistive technology, the feedback to the working group  on which is preferable has been divided. This technique allows users to  pick the approach that works best for them. </p>
					<p>A control is provided near the beginning of the page that will  expand the labels for controls on the page so that no  additional context is needed to understand the purpose of those  controls. It must always be possible to understand purpose of the  control directly from its label. </p>
					<p>This technique expands the control labels only for the current  page view. It is also possible, and in some cases would be advisable,  to save this preference in a cookie or server-side user profile, so  that users would only have to make the selection once per site. </p>
				</description>
				<examples>
					<eg-group>
						<head>Using ActionScript to add contextual information  directly to the label of a button</head>
						<description>
							<p>This example uses ActionScript to add contextual information  directly to the label of a button. When the "Expand Button Labels"  button is toggled, each button on the page has its label property  modified. </p>
						</description>
						<code xml:space="preserve"><![CDATA[import fl.accessibility.ButtonAccImpl;
ButtonAccImpl.enableAccessibility();
btn1.addEventListener(MouseEvent.CLICK, clickHandler);

function clickHandler(e) {
  btn2.label = btn1.selected? "PDF version of 2010 brochure": "PDF";
  btn2.width = btn1.selected? 200: 100;
  btn3.label = btn1.selected? "Text version of 2010 brochure": "Text";
  btn3.width = btn1.selected? 200: 100;
  btn4.label = btn1.selected? "Word version of 2010 brochure": "Word";
  btn4.width = btn1.selected? 200: 100;
}]]></code>
						<description>
							<p>The result can be seen in the <loc href="change_button_label.html" linktype="examples">working example of adding contextual information to a button label</loc>. The <loc href="change_button_label.fla" linktype="examples">source of adding contextual information to a button label</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="SCR30"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>When a Flash Movie contains content with context dependent labels,  confirm that a separate toggle control is provided that allows the user  to expand the labels so that they are no longer context dependent. </p>
					</procedure>
					<expected-results>
						<p>The above is true. </p>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Using_scripting_to_change_control_labels"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH8">
				<short-name>Adding a group name to the accessible name of a form control</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="content-structure-separation-programmatic" relationship="sufficient"/>
					<success-criterion idref="minimize-error-cues" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to provide a semantic grouping for   related form controls. This allows users to understand the relationship   of the controls and interact with the form more quickly and   effectively. </p>
					<p>In Flash, when related form controls are grouped, this grouping   can be indicated by adding the group's name to each form control's   accessible name. </p>
					<p>Grouping controls is most important for related radio buttons and   checkboxes. A set of radio buttons or checkboxes is related when they   all submit values for a single named field. They work in the same way as   selection lists, allowing the user to choose from a set of options,   except selection lists are single controls while radio buttons and   checkboxes are multiple controls. Because they are multiple controls, it   is particularly important that they be grouped semantically so they can   be more easily treated as a single control. Often, user agents will   present the value of the legend before the label of each control, to   remind users that they are part of the same group. </p>
					<p>It can also be useful to group other sets of controls that are   not as tightly related as sets of radio buttons and checkboxes. For   instance, several fields that collect a user's address might be grouped   together with a legend of "Address". </p>
				</description>
				<examples>
					<eg-group>
						<head>Adding a group name to the accessible name of radio buttons</head>
						<description>
							<p>This example shows how the group name for radio buttons in a group   can be made accessible by adding it to each button's accessible name: </p>
							<olist>
								<item>
									<p> Add radio button components to the stage: </p>
								</item>
								<item>
									<p> Enter each button's label using its "label" property </p>
								</item>
								<item>
									<p> Add the visual group label to the left or above the buttons   added in step 1 </p>
								</item>
								<item>
									<p> Select each radio button. In the Accessibility Panel, add the   group name to the "Name" field; </p>
								</item>
							</olist>
							<p>Flash will concatenate the group name with each button's individual   name, such as "gender male". </p>
							<p>This approach is illustrated in the screenshot below: </p>
							<p>
								<image>
									<img source="working-examples/FLASH8/groupname.png" height="236" width="584"/>
									<alt>Using the accessibility panel to add a group name to a form control</alt>
								</image>
							</p>
							<note>
								<p>To make the radio buttons in this example accessible, the   following two lines need to be added to the movie's script: <code xml:space="preserve"><![CDATA[import fl.accessibility.RadioButtonAccImpl;
RadioButtonAccImpl.enableAccessibility();]]></code>
								</p>
							</note>
							<p>For an illustration of this approach, see the <loc href="radio_button_group_as3.html" linktype="examples">working version of Adding a group name to the accessible name of radio buttons</loc>. The <loc href="radio_button_group_as3.fla" linktype="examples">source of Adding a group name to the accessible name of radio buttons</loc> is available.</p>
						</description>
					</eg-group>
					<eg-group>
						<head>Programmatically adding a group name with the accessible name of radio buttons</head>
						<description>
							<p>The code example below shows a basic proof of concept of a class that   automatically places a set of form controls inside a fieldset like   rectangle, including a legend. For each added control an AccessibilityProperties   object is created, and its name property is set to a   combination of the legend text and the actual form control label. </p>
						</description>
						<code xml:space="preserve"><![CDATA[
package wcagSamples {
  import flash.display. *;
  import flash.text. *;
  import fl.controls. *
  import flash.accessibility. *;
  import fl.accessibility. *;
  
  
  /**
  *  Basic example that demonstrates how to simulate a fieldset, as provided
  *  in HTML. The FieldSet class takes a group of controls and places them 
  *  inside a fieldset rectangle with the legend text at the top. For each form 
  *  control, the legend text is prepended to the control's accessible name
  *
  *  Note: This is only a proof of concept, not a fully functional class
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
  *
  */
  public class FieldSet extends Sprite {
    private var legend: String;
    private var bBox: Shape;
    private var currentY: int = 20;
    
    public static var LABEL_OFFSET_X: int = 20;
    public static var CONTROL_OFFSET_X: int = 110;
    
    /**
    *  CONSTRUCTOR
    *  Legend specifies the FieldSet's legend text, items is an array 
    *  describing the controls to be added to the FieldSet
    */
    
    public function FieldSet(legend: String, items: Array) {
      // enable accessibility for components used in this example
      RadioButtonAccImpl.enableAccessibility();
      CheckBoxAccImpl.enableAccessibility();
      
      //create FieldSet rectangle and legend
      legend = legend;
      bBox = new Shape();
      bBox.graphics.lineStyle(1);
      bBox.graphics.drawRect(10, 10, 300, 250);
      bBox.graphics.beginFill(0x0000FF, 1);
      addChild(bBox);
      
      var fieldSetLegend: TextField = new TextField();
      fieldSetLegend.text = legend;
      fieldSetLegend.x = 20;
      fieldSetLegend.y = 3;
      fieldSetLegend.background = true;
      fieldSetLegend.backgroundColor = 0xFFFFFF;
      fieldSetLegend.border = true;
      fieldSetLegend.borderColor = 0x000000;
      fieldSetLegend.autoSize = TextFieldAutoSize.LEFT;
      addChild(fieldSetLegend);
      
      // add controls
      for (var i = 0; i < items.length; i++) {
        processItem(items[i]);
      }
    }
    
    /**
    * Adds the control to the Fieldset and sets its accessible name. A 
    * control is represented as an array, containing the following values:
    * [0] : A string describing the component type 
    *   (can be "TextInput", TextArea", Checkbox" or "RadioGroup").
    * [1] : The label used to identify the control
    * [2] : If [0] is "RadioGroup", then [2] needs to contain an array of the 
    *    labels for each individual radio button. if [0] is "CheckBox", then 
    *    [1] can either be empty or a question (e.g. "Do you smoke?"), and 
    *    [2] the CheckBox label (e.g. "Yes").
    *
    */
    function processItem(item: Array) {
      if (item.length < 2)
      return;
      currentY += 30;
      var newControl;
      //create visual label
      var lbl: Label;
      lbl = new Label();
      lbl.text = item[1] + ": ";
      lbl.x = FieldSet.LABEL_OFFSET_X;
      lbl.y = currentY;
      lbl.width = FieldSet.CONTROL_OFFSET_X;
      lbl.autoSize = TextFieldAutoSize.RIGHT;
      lbl.wordWrap = true;
      addChild(lbl);
      
      switch (item[0]) {
        case "TextInput":
        case "TextArea":
        newControl = item[0] == "TextInput"? new TextInput(): new TextArea();
        newControl.x = FieldSet.CONTROL_OFFSET_X;
        //concatenate accessible name, combining legend and label
        setAccName(newControl, legend + " " + item[1]);
        break;
        case "CheckBox":
        newControl = new CheckBox();
        newControl.label = item[2];
        newControl.x = FieldSet.CONTROL_OFFSET_X;
        setAccName(newControl, legend + " " + item[1] + " " + item[2]);
        break;
        case "RadioGroup":
        if (item[2] && item[2].length > 0) {
          var radioGroup: RadioButtonGroup = new RadioButtonGroup(item[0]);
          var newBtn: RadioButton;;
          for (var i = 0; i < item[2].length; i++) {
            newBtn = new RadioButton();
            // concatenate the legend, the group label, and the button label
            setAccName(newBtn, legend + " " + item[1] + " " + item[2][i]);
            newBtn.label = item[2][i];
            newBtn.group = radioGroup;
            newBtn.x = FieldSet.CONTROL_OFFSET_X;
            newBtn.y = currentY;
            addChild(newBtn);
            if (i < item[2].length - 1)
            currentY += 30;
          }
        }
        break;
      }
      
      if (newControl) {
        newControl.y = currentY;
        addChild(newControl);
      }
    }
    
    /**
    * Creates an AccessibilityProperties object for an object and sets its name property
    */
    public function setAccName(obj, accName) {
      var accProps: AccessibilityProperties = new AccessibilityProperties();
      accProps.name = accName;
      obj.accessibilityProperties = accProps;
    }
  }
}]]></code>
						<description>
							<p>This example class can be initialized as follows: </p>
						</description>
						<code xml:space="preserve"><![CDATA[var myFieldSet = new FieldSet("Personal Details",  // the legend 
  [["TextInput", "Name"],                          // text field
  ["RadioGroup", "Gender", ["Male", "Female"]],    // radio button group
  ["CheckBox", "Do you smoke", "yes"],             // checkbox
  ["TextArea", "Comments"],                        // text area
]);
addChild(myFieldSet);
]]></code>
						<description>
							<p>For an illustration of this approach, see the <loc href="grouped_form_controls.html" linktype="examples">working version of Programmatically adding a group name with the accessible name of radio buttons</loc>. The <loc href="grouped_form_controls.zip" linktype="examples">source of Programmatically adding a group name with the accessible name of radio buttons</loc> is available.</p>
							<note>
								<p>Adobe Flex allows you to perform this type of behavior by   using the &lt;form&gt;, &lt;formitem&gt; and &lt;formheading&gt;   elements </p>
							</note>
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="FLASH25"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>When a Flash Movie contains grouped form controls, confirm that   either : </p>
						<ulist>
							<item>
								<p> The group's name is included in the Accessibility Panel's   "name" field for each control. </p>
							</item>
							<item>
								<p> Each control has an AccessibilityProperties.name property,   which contains both the group's name and the control's label text </p>
							</item>
						</ulist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> One of the above is true </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Adding_a_group_name_to_the_accessible_name_of_a_form_control"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH9">
				<short-name>Applying captions to prerecorded synchronized media</short-name>
				<applicability>
					<p>Adobe Flash-based Content </p>
					<ulist>
						<item>
							<p> Adobe Flash CS3 and later </p>
						</item>
					</ulist>
				</applicability>
				<applies-to>
					<success-criterion idref="media-equiv-captions" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to provide an option for people   who have hearing impairments or otherwise have trouble hearing the sound   and dialogue in synchronized media to be able to choose to view   captions as an alternative to audio information. With this technique all   of the dialogue and important sounds are provided as text in a fashion   that allows the text to be hidden unless the user requests it. As a   result they are visible only when needed. This can be achieved using the   FLVPlayback and FLVPlaybackCaptioning   components.  Note: when using FLVPlayback skins the closed   caption button is accessible by default, but if implementing custom   skins authors need to test to verify that the button is accessible. </p>
				</description>
				<examples>
					<eg-group>
						<head>Adding a timed text caption file to Flash</head>
						<description>
							<olist>
								<item>
									<p> Use an external tool (such as Magpie or a simple text editor)   to create a timed Text captions xml file. Stop and play the video   content, and for each relevant part of audio information (including   speech, important background noises and event sounds) include the start   and end time code as well as the textual alternative. Tools like Magpie   have advanced features to make this process easier, whereas a text   editor requires you to read the timecodes from your media player and   include them in the XML as illustrated in the sample captions document   below </p>
								</item>
								<item>
									<p> In Flash, create a new instance of the FLVPlayback component   on your stage, and set its contentPath value to your flv video file   using the 'Component inspector' or 'Parameters' panel. </p>
								</item>
								<item>
									<p> Set the 'Skin' parameter to use a skin which includes the CC   (closed captions) button. </p>
								</item>
								<item>
									<p> From the components list also create an instance of the   FLVPlayback captioning component. In the 'Component inspector' panel set   its 'Source' parameter to the name of your timed text xml file. The   captions will automatically placed at the bottom of the player's frame. </p>
								</item>
							</olist>
						</description>
						<code xml:space="preserve"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<tt xml:lang="en" xmlns="http://www.w3.org/2006/04/ttaf1"
  xmlns:tts="http://www.w3.org/2006/04/ttaf1#styling">
  <head>
    <styling>
      <style id="defaultSpeaker" tts:backgroundColor="black"
        tts:color="white" tts:fontFamily="SansSerif" tts:fontSize="12"
        tts:fontStyle="normal" tts:fontWeight="normal"
        tts:textAlign="left" tts:textDecoration="none"/>
      <style id="defaultCaption" tts:backgroundColor="black"
        tts:color="white" tts:fontFamily="Arial" tts:fontSize="12"
        tts:fontStyle="normal" tts:fontWeight="normal"
        tts:textAlign="center" tts:textDecoration="none"/>
    </styling>
  </head>
  <body id="thebody" style="defaultCaption">
    <div xml:lang="en">
      <p begin="0:00:00.20" end="0:00:02.20">If there were nothing in
        our universe</p>
      <p begin="0:00:02.20" end="0:00:05.65">the fabric of space-time
        would be flat.</p>
      <p begin="0:00:05.65" end="0:00:08.88">But add a mass, and
        dimples form within it.</p>
      <p begin="0:00:16.61" end="0:00:19.84">Smaller objects that
        approach that large mass</p>
      <p begin="0:00:19.84" end="0:00:23.41">will follow the curve in
        space-time around it.</p>
      <p begin="0:00:32.64" end="0:00:36.84">Our nearest star, the
        sun, has formed such a dimple</p>
      <p begin="0:00:36.84" end="0:00:38.00">and our tiny planet
        Earth</p>
      <p begin="0:00:38.00" end="0:00:41.50">goes along for the ride
        in the curve of its dimple</p>
      <p begin="0:00:41.50" end="0:00:43.80">staying in orbit around
        the sun.</p>
      <p begin="0:00:45.67" end="0:01:55.00"/>
    </div>
  </body>
</tt>
]]></code>
						<description>
							<p>This is demonstrated in <loc href="adding_captions_to_Flash_video_as3.html" linktype="examples">working example of Adding a timed text caption file to Flash</loc>. The <loc href="adding_captions_to_Flash_video_as3.zip" linktype="examples">working example of Adding a timed text caption file to Flash</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<resources>
					<see-also>
						<p>
							<loc href="http://ncam.wgbh.org/invent_build/web_multimedia/tools-guidelines">http://ncam.wgbh.org/invent_build/web_multimedia/tools-guidelines</loc>
						</p>
					</see-also>
					<see-also>
						<p>
							<loc href="http://www.buraks.com/captionate/">http://www.buraks.com/captionate/</loc>
						</p>
					</see-also>
					<see-also>
						<p>
							<loc href="http://www.w3.org/AudioVideo/TT/">http://www.w3.org/AudioVideo/TT/</loc>
						</p>
					</see-also>
				</resources>
				<related-techniques>
					<relatedtech idref="G87"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>Watch all video content displayed by your Flash movie. Ensure that: </p>
						<olist>
							<item>
								<p> Captions are available for all audio content, either turned on   by default or as a user preference. </p>
							</item>
							<item>
								<p> The captions properly describe all audio information contained   in the video. </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> #1 and #2 are true </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Applying_captions_to_prerecorded_synchronized_media"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH10">
				<short-name>Indicating required form controls in Flash</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="minimize-error-cues" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to provide a clear indication that   a specific form control in a Web application or form is required for   successful data submission. The word "required" is added to the form   control's accessible name, and a visual indicator is placed next to the   label. </p>
				</description>
				<examples>
					<eg-group>
						<head>Adding the word "required" to the control's accessible name</head>
						<description>
							<p>This example shows how to use the Accessibility panel to indicate a   field as being 'required' to users: </p>
							<olist>
								<item>
									<p> Visually, place asterisk character or some other indication   adjacent to the form control's label. </p>
								</item>
								<item>
									<p> Use the accessibility panel to combine the word "required"   with the control's label in the "Name" field. </p>
								</item>
							</olist>
							<p>This approach is illustrated in the screenshot below: </p>
							<p>
								<image>
									<img source="working-examples/FLASH10/required_flash_control.png" height="312" width="546"/>
									<alt>Using the accessibility panel to indicate a form control as being   required</alt>
								</image>
							</p>
							<p>This is demonstrated in the <loc href="required_form_fields_as2.html" linktype="examples">working example of Adding the word "required" to the control's accessible name</loc>. The <loc href="required_form_fields_as2.fla" linktype="examples">source of Adding the word "required" to the control's accessible name</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<tests>
					<procedure>
						<p>For each required form control within a Flash movie, confirm that: </p>
						<ulist>
							<item>
								<p> The required state is indicated visually </p>
							</item>
							<item>
								<p> The required state is indicated textually using the 'Name'   field in the accessibility panel </p>
							</item>
						</ulist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> Each of the above is true </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Indicating_required_form_controls_in_Flash"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH11">
				<short-name>Providing a longer text description of an object</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="text-equiv-all"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to a provide longer, more detailed   textual information for an image than would be suitable for the image's   accessible name. An accessible button is provided adjacent to the image   that displays a new panel containing the image's long description text. </p>
				</description>
				<examples>
					<eg-group>
						<head>Making a hidden description visible on request</head>
						<description>
							<p>In this example, an image containing statistical data is shown. The   image is provided a short textual alternative ("Graph of percentage of   total U.S. noninsitutionalized population age 16-64 declaring one or   more disabilities"). Below the image, the user can click a button that   will overlay a long textual description of the statistical information   itself. When the button is clicked, the following actions are taken: </p>
							<ulist>
								<item>
									<p> The MovieClip containing the long text description is made   visible, and its AccessibilityProperties.silent property is   set to false to make it visible to assistive technology. Its contents   are placed in the tab order. </p>
								</item>
								<item>
									<p> The original image and button are temporarily hidden from   assistive technology and the tab order. </p>
								</item>
							</ulist>
							<p>The image and descriptive text were taken from an <loc href="http://webaim.org/techniques/images/longdesc">HTML example for long image descriptions on WebAIM.org</loc>
							</p>
							<p>The results for this technique are shown in the <loc href="long_description_for_image_as3.html" linktype="examples">working version of Making a hidden description visible on request</loc>. The <loc href="long_description_for_image_as3.fla" linktype="examples">source of Making a hidden description visible on request</loc> is available.</p>
						</description>
						<code xml:space="preserve"><![CDATA[import flash.accessibility. *;
import fl.accessibility.ButtonAccImpl;
import flash.system.Capabilities;

ButtonAccImpl.enableAccessibility();

//set accessibility properties
graph_mc.accessibilityProperties = new AccessibilityProperties();
graph_mc.accessibilityProperties.name = "Graph of percentage of total U.S. \ 
  noninsitutionalized population age 16-64 declaring one or more disabilities";
longDescBtn.accessibilityProperties = new AccessibilityProperties();
longDesc_mc.accessibilityProperties = new AccessibilityProperties();
longDesc_mc.accessibilityProperties.forceSimple = false;
hideLongDesc();

//set click handlers for button
longDescBtn.addEventListener("click", function () {
  showLongDesc()
});
longDesc_mc.longDescCloseBtn.addEventListener("click", function () {
  hideLongDesc()
});

function showLongDesc() {
  // hide the original content from screen readers
  graph_mc.accessibilityProperties.silent = true;
  graph_mc.tabEnabled = false;
  graph_mc.alpha = 0.2;
  longDescBtn.enabled = false;
  longDescBtn.accessibilityProperties.silent = true;
  longDesc_mc.accessibilityProperties.silent = false;
  // make the long description panel visible, both visually and to screen readers
  longDesc_mc.visible = true;
  longDesc_mc.tabEnabled = true;
  longDesc_mc.longDescTitle.stage.focus = longDesc_mc.longDescTitle;
  if (Capabilities.hasAccessibility)
  Accessibility.updateProperties();
}

function hideLongDesc() {
  //do the opposite to what showLongDesc does
  graph_mc.accessibilityProperties.silent = false;
  graph_mc.tabEnabled = true;
  graph_mc.alpha = 1;
  longDescBtn.enabled = true;
  longDescBtn.accessibilityProperties.silent = false;
  longDesc_mc.visible = false;
  longDesc_mc.accessibilityProperties.silent = true;
  longDesc_mc.tabEnabled = false;
  longDescBtn.stage.focus = longDescBtn;
  if (Capabilities.hasAccessibility)
  Accessibility.updateProperties();
}
]]></code>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="G73"/>
					<relatedtech idref="G74"/>
					<relatedtech idref="G92"/>
					<relatedtech idref="G94"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>When a Flash movie contains images that require long descriptions,   confirm that a longer description is made available through a separate   button. </p>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> The above is true </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Providing_a_longer_text_description_of_an_object"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH12">
				<short-name>Providing client-side validation and adding error text via the accessible description</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="minimize-error-identified" relationship="sufficient"/>
					<success-criterion idref="minimize-error-suggestions" relationship="sufficient"/>
					<!--<success-criterion idref="minimize-error-reversible"/>-->
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to validate user input as values   are entered for each field, by means of client-side scripting. If errors   are found, a description is added to the controls that have invalid   data. Visually, the description will be placed adjacent to the control.   Additionally, the error message text is added to the control's   accessible description so that it is readable by assistive technology   when the control receives focus. </p>
					<!--<ednote>
						<edtext>In the wiki this technique was indicated as applying to SC 3.3.4. However, don't see how that fits and removed that.</edtext>
					</ednote>-->
				</description>
				<examples>
					<eg-group>
						<head>Validating a text field</head>
						<description>
							<p>In this example, a sample form is shown with two text fields ('name'   and 'zip code'). Both fields are required. When the form's submit button   is pressed, the values of the text fields will be validated. If a   textfield contains an invalid value, an <obj>_accProps</obj> object is   created for the textfield, and its <prop>description</prop> property is   set the error message. </p>
							<note>
								<p>Instead of using the accessible description, the error text   can also be added to the accessible name (<prop>_accProps.name</prop>),   which is supported by a wider range of assistive technology than the <prop>_accProps.description</prop>   property. </p>
							</note>
							<p>ActionScript 2.0 Code</p>
						</description>
						<code xml:space="preserve"><![CDATA[import flash.accessibility. *;
import mx.accessibilty.ButtonAccImpl;
import mx.controls.Alert;
import mx.accessibility.AlertAccImpl;

AlertAccImpl.enableAccessibility();
ButtonAccImpl.enableAccessibility;

resetTextFieldAccNames();
Accessibility.updateProperties();

submit_btn.addEventListener("click", handleClick);
function handleClick(e) {
  //reset values
  resetTextFieldAccNames();
  resetTextFieldAccDescriptions();
  resetErrorLabels();
  //perform validation
  var errors =[];
  if (name_txt.text == '')
    errors.push([name_txt, "You must enter your name", name_error_lbl]);
  if (zipcode_txt.text == '')
    errors.push([zipcode_txt, "You must enter your zip code", zipcode_error_lbl]);
  else if (zipcode_txt.text.length != 5 || isNaN(zipcode_txt.text))
    errors.push([zipcode_txt, "Zip code must be 5 digits", zipcode_error_lbl]);
  
  //add validation error messages, if any
  var field, errorMsg, errorLabel;
  if (errors.length > 0) {
    //loop over encountered errors
    for (var i = 0; i < errors.length; i++) {
      field = errors[i][0];
      errorMsg = errors[i][1];
      errorLabel = errors[i][2];
      
      updateAccDescription(field, "Warning: " + errorMsg);
      errorLabel.text = errorMsg;
    }
  } else {
    Alert.show("Form field values were entered correctly");
  }
  Accessibility.updateProperties();
}

function updateAccName(obj, newName: String) {
  if (! obj._accProps)
  obj._accProps = new Object();
  obj._accProps.name = newName;
}

function updateAccDescription(obj, newDescription: String) {
  if (! obj._accProps)
  obj._accProps = new Object();
  obj._accProps.description = newDescription;
}

function getAccName(obj) {
  return obj._accProps? obj._accProps.name: "";
}

function resetTextFieldAccNames() {
  updateAccName(name_txt, "name, required");
  updateAccName(zipcode_txt, "zip code, required");
}

function resetTextFieldAccDescriptions() {
  updateAccDescription(name_txt, "");
  updateAccDesciption(zipcode_txt, "");
}

function resetErrorLabels() {
  name_error_lbl.text = "";
  zipcode_error_lbl.text = "";
}]]></code>
						<description>
							<p>This approach is demonstrated in <loc href="client_side_validation_flash_forms_using_alert_as2.html" linktype="examples">working version of Validating a text field</loc>. The <loc href="client_side_validation_flash_forms_using_alert_as2.fla" linktype="examples">source of Validating a text field</loc> is available.</p>
							<!--<ednote>
								<edtext>These files seem to be different from what was expected in the wiki. The files I was expecting were named client_side_validation_flash_forms_using_accessible_description_as2.*, while what we have are client_side_validation_flash_forms_using_alert_as2.*. And reading over the example in the wiki and looking at the example files, it seems they don't match. The example files use an alert, but the wiki describes updating the accessible name. The example seems good, but like it applies to a different technique, which maybe we should document. Either that, we should update the technique, particularly the example it claims to be a working example of, or get the correct example files in place.</edtext>
							</ednote>-->
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="SCR32"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>When a Flash movie provides interactive forms that can be submitted,   confirm that: </p>
						<olist>
							<item>
								<p> The validation warnings are placed next to the control   visually. </p>
							</item>
							<item>
								<p> The validation warnings are added to the accessible name or   description of each control. </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> #1 and #2 are true </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Providing_client-side_validation_and_adding_error_text_via_the_accessible_description"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH13">
				<short-name>Using HTML language attributes to specify language in Flash content</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="meaning-doc-lang-id" relationship="sufficient"/>
					<success-criterion idref="meaning-other-lang-id" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
					<ua-issue name="JAWS" version="8.0">
						<p>JAWS 8.0 or later can be configured to change language automatically   on the basis of the lang attribute. However, it only switches amongst   major languages as indicated by the primary code. If a regional language   variant is indicated with a language subcode, JAWS will use the default   variant for which it is configured. </p>
					</ua-issue>
				</ua-issues>
				<description>
					<p>The objective of this technique is to identify the default language   of the Flash content by providing the lang and/or xml:lang attribute on   the HTML or object elements for the page containing the Flash. The   embedded Flash content will inherit the language specified. If the   entire web page uses the same language, the lang and/or xml:lang   attribute can be placed on the page's HTML element, as described in <loc href="http://www.w3.org/TR/WCAG20-TECHS/H57.html">H57:   Using language attributes on the html element</loc>. </p>
					<p>Since Flash inherits the language from the HTML or object   element, all text within the Flash content is expected to be in that   inherited language. This means that it is possible to have a Flash   object in the French language on a page that is primarily in another   language, or to have a page with multiple Flash objects, each in a   different language. It is not possible, however, to indicate changes in the human language of content <emph>within</emph> a single Flash object using this technique.</p>
				</description>
				<examples>
					<eg-group>
						<head>Using the language of the page as whole in the embedded Flash</head>
						<description>
							<p>This example defined the content of the entire web page to be in the   French language. The Flash content will inherit the specified language   from the HTML container. </p>
						</description>
						<code xml:space="preserve"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<html lang="fr" xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta content="text/html; charset=iso-8859-1"
      http-equiv="Content-Type"/>
    <title>Flash Languages Examples - French</title>
    <script src="swfobject.js" type="text/javascript"/>
    <script type="text/javascript">
    swfobject.registerObject("myMovie", "9.0.115", "expressInstall.swf");
</script>
  </head>
  <body>
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
      height="420" id="myMovie" width="780">
      <param name="movie" value="myMovie.swf"/>
      <!--[if !IE]>-->
      <object data="languages.swf" height="420"
        type="application/x-shockwave-flash" width="780">
        <!--<![endif]-->
        <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object>
  </body>
</html>
]]></code>
						<description>
							<p>This is demonstrated in the <loc href="language_en.html" linktype="examples">working example of Using the language of the page as whole in the embedded Flash</loc>. The <loc href="languages.fla" linktype="examples">source of Using the language of the page as whole in the embedded Flash</loc> is available.</p>
						</description>
					</eg-group>
					<eg-group>
						<head>Applying a language just to the embedded Flash</head>
						<description>
							<p>This example defines the content of a Flash movie to be in the French   language. The Flash movie is embedded using <loc href="http://code.google.com/p/swfobject/wiki/documentation#How_to_embed_Flash_Player_content_using_SWFObject_static_publish">SWFObject's static publishing method</loc>. This means   that there are two nested object elements, the outer to target Internet   Explorer, the Inner to target other browsers. For this reason the lang   and xml:lang attributes must be added twice. </p>
						</description>
						<code xml:space="preserve"><![CDATA[<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
  height="420" id="myMovie" lang="fr" width="780" xml:lang="fr">
  <param name="movie" value="myMovie.swf"/>
  <!--[if !IE]>-->
  <object data="languages.swf" height="420" lang="fr"
    type="application/x-shockwave-flash" width="780" xml:lang="fr">
    <!--<![endif]-->
    <!--[if !IE]>-->
  </object>
  <!--<![endif]-->
</object>
]]></code>
					</eg-group>
				</examples>
				<resources>
					<see-also>
						<ulist>
							<item>
								<p>
									<loc href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">BCP 47: Tags for the Identification of Languages</loc>
								</p>
							</item>
							<item>
								<p>
									<loc href="http://www.w3.org/TR/1999/REC-html401-19991224/struct/dirlang.html#h-8.1.2">Inheritance of language codes</loc>
								</p>
							</item>
						</ulist>
					</see-also>
				</resources>
				<related-techniques>
					<relatedtech idref="H57"/>
					<relatedtech idref="H58"/>
				</related-techniques>
				<tests>
					<procedure>
						<olist>
							<item>
								<p> Examine the html element and the object element of the HTML   document containing the reference to the SWF. </p>
							</item>
							<item>
								<p> Check that the human language of the Flash content is the same   as the inherited language for the object element as specified in HTML   4.01, Inheritance of language codes </p>
							</item>
							<item>
								<p> Check that the value of the lang attribute conforms to BCP 47:   Tags for the Identification of Languages or its successor and reflects   the  primary language used by the Flash content. </p>
							</item>
							<item>
								<p>Check that no changes in human language occur within the Flash content</p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p>For Success Criterion 3.1.1: Checks 1-3 are all true.</p>
							</item>
							<item>
								<p>For Success Criterion 3.1.2: Checks 1-4 are all true.</p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Using_HTML_language_attributes_to_specify_language_in_Flash_content"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH14">
				<short-name>Using redundant keyboard and mouse event handlers in Flash</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="keyboard-operation-keyboard-operable" relationship="sufficient"/>
					<success-criterion idref="keyboard-operation-all-funcs" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to demonstrate how to provide   device independence by providing equivalent event handlers in response   to a mouse or focus event. Supporting both mouse and keyboard events   ensures that users will be able to perceive the same information,   regardless of the input device they used. If the event changes the state   of the control, it may be important to change the descriptive name of   the control in the event handlers. </p>
				</description>
				<examples>
					<eg-group>
						<head>Updating button text with multiple event handlers</head>
						<description>
							<p>In this example, a group of buttons is assigned the same event   handlers for the flash.events.FocusEvent.FOCUS_IN and flash.events.MouseEvent.MOUSE_OVER   events. When a button receives focus or is hovered over using a mouse,   text describing the button will be updated. </p>
						</description>
						<code xml:space="preserve"><![CDATA[import fl.accessibility.ButtonAccImpl;
import fl.controls.Button;
import flash.accessibility. *
import flash.events.FocusEvent;
import flash.events.MouseEvent;
import flash.net.navigateToURL;
import flash.net.URLRequest;

ButtonAccImpl.enableAccessibility();
var states: Object = {
  "Alabama": "Alabama is a state located in the southeastern region of the \
    United States of America.",
  "California": "California is the most populous state in the United States",
  "New York": "New York is a state in the Mid-Atlantic and Northeastern \
    regions of the United States"
};

var buttons: Array =[];
var button: Button;
var accProps: AccessibilityProperties;
var count = 0;
for (var i in states) {
  button = new Button();
  button.label = i;
  button.addEventListener(MouseEvent.CLICK, clickHandler);
  button.addEventListener(MouseEvent.MOUSE_OVER, highlightHandler);
  button.addEventListener(MouseEvent.MOUSE_OUT, unHighlightHandler);
  button.addEventListener(FocusEvent.FOCUS_IN, highlightHandler);
  button.addEventListener(FocusEvent.FOCUS_OUT, unHighlightHandler);
  accProps = new AccessibilityProperties();
  accProps.description = states[i];
  button.accessibilityProperties = accProps;
  addChild(button);
  button.x = 30
  button.y = 30 + count * 30;
  buttons[i] = button;
  count++;
}

function highlightHandler(e) {
  descText.text = states[e.target.label];
}

function unHighlightHandler(e) {
  descText.text = "";
}


function clickHandler(e) {
  var url: URLRequest = new URLRequest("http://www.wikipedia.org/wiki/" + e.target.label);
  navigateToURL(url, "_self");
}]]></code>
						<description>
							<note>
								<p>To improve accessibility for screen reader users, the   descriptive text is also attached to the buttons themselves as an   accessible description. Also note that for button components, the MouseEvent.CLICK   event will fire on mouse clicks as well as when the Enter key is   pressed. </p>
							</note>
							<p>This technique is illustrated in the <loc href="redundant_event_handlers_as3.html" linktype="examples">working version of Updating button text with multiple event handlers</loc>. The <loc href="redundant_event_handlers_as3.fla" linktype="examples">source of Updating button text with multiple event handlers</loc> is available. </p>
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="SCR2"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>For all scripted event handlers in a Flash Movie, </p>
						<olist>
							<item>
								<p> Confirm that event handlers are assigned for both mouse and   keyboard events </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> The above is true </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Using_redundant_keyboard_and_mouse_event_handlers_in_Flash"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH15">
				<!-- FLASH37 merged into this -->
				<short-name>Using the tabIndex property to specify a logical reading order and a logical tab order in Flash</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="content-structure-separation-sequence" relationship="sufficient"/>
					<success-criterion idref="navigation-mechanisms-focus-order" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to control the Flash Movie's   reading order and tab order by assigning tabIndex values to its elements. </p>
					<p>The tab order is the order in which objects receive input focus when users press the Tab key. The tab order does not necessarily contain the same elements as the reading order does, as the reading order can also contain elements that are not focusable. However, both the reading order and tab order can be controlled using tab index values. </p>
					<p>Flash Player uses a default tab index order from left to right and top to bottom.</p>
					<p>To create a custom reading order, assign a tab index value to every instance on the stage, either through action script or through the Accessibility Panel. Create a tabindex value for every accessible object, not just the focusable objects. For example, dynamic text must have tab indexes, even though a user cannot tab to dynamic text.</p>
					<p>You can create a custom tab-order index in the Accessibility panel for keyboard navigation for the following objects:</p>
					<ulist>
						<item>
							<p>Dynamic text</p>
						</item>
						<item>
							<p>Input text</p>
						</item>
						<item>
							<p>Buttons</p>
						</item>
						<item>
							<p>Movie clips, including compiled movie clips</p>
						</item>
						<item>
							<p>Components</p>
						</item>
						<item>
							<p>Screens</p>
						</item>
					</ulist>
					<p>Tab focus occurs in numerical order, starting from the lowest index number. After tab focus reaches the highest tab index, focus returns to the lowest index number. When you move tab-indexed objects that are user-defined in your document, or to another document, Flash retains the index attributes. Check for and resolve index conflicts (for example, two different objects on the Stage with the same tab-index number). If two or more objects have the same tab index in any given frame, Flash follows the order in which the objects were placed on the Stage.</p>
					<p>To add a tabindex value using the Accessibility Panel, perform   the following steps for every accessible object on the stage: </p>
					<olist>
						<item>
							<p> Select the element by clicking on it. </p>
						</item>
						<item>
							<p> In the Accessibility Panel, enter a numeric value in the "Tab   index"  field. The value must be  a positive integer (up to 65535) that   reflects the order in which the selected object should be read. Elements   with higher tab index values will be read after elements with lower   values.  If two or more objects have the same tab index in any given   frame, Flash follows the order in which the objects were placed on the   Stage. </p>
						</item>
						<item>
							<p> To visualize the currently defined tab order, select View &gt;   Show Tab Order. Tab index numbers for individual objects appear in the   upper-left corner of the object. </p>
						</item>
					</olist>
					<note>
						<p>You can also use ActionScript code to create a tab-order index for keyboard navigation. </p>
					</note>
					<p>These steps are illustrated in the screenshots below </p>
					<p>
						<image>
							<img source="working-examples/FLASH15/ac_show_tab_order_view.png" height="232" width="214"/>
							<alt>visualizing the tab order</alt>
						</image>
					</p>
					<p>
						<image>
							<img source="working-examples/FLASH15/setting_tabindex_in_accessibility_panel.png" height="319" width="281"/>
							<alt>Setting a tab index value in the Accessibility Panel</alt>
						</image>
					</p>
					<note>
						<p>Flash Player no longer requires that you add all of the   objects in a FLA file to a list of tab index values. Even if you do not   specify a tab index for all objects, a screen reader reads each object   correctly. </p>
					</note>
				</description>
				<examples>
					<eg-group>
						<head>Using tabindex to navigate a column structure</head>
						<description>
							<p>This example contains dynamic TextField instances that are grouped   into columns. To ensure the reading order follows the column structure.   The TextField instances are given a tab index value that corresponds to   their textual content (for example, the TextField containing the text   "Sample Text 3" has a tabindex value of 3. Additionally, a single   TextField is added that has no tabindex value set. This field contains   the text "Not in tab order". Even though this field is visually placed   between sample text 2 and 3, it is placed at the end of the custom tab   order because it is not assigned a tabindex value. </p>
							<p>The results can be found in the <loc href="custom_reading_order_as3.html" linktype="examples">working version of Using tabindex to navigate a column structure</loc>. The <loc href="custom_reading_order_as3.fla" linktype="examples">source of Using tabindex to navigate a column structure</loc> is available.</p>
						</description>
					</eg-group>
					<eg-group>
						<head>Controlling tab order in a two-column layout</head>
						<description>
							<p>This example contains a Flash based form that is laid out over two
    						columns. To make the tab order follow the column structure, each form
    						control is assigned a tab index value in the Accessibility Panel. </p>
							<p>The results are shown in the <loc href="custom_tab_order_as3.html" linktype="examples">working version of Controlling tab order in a two-column layout</loc>.  The <loc href="custom_tab_order_as3.fla" linktype="examples">source of Controlling tab order in a two-column layout</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<resources>
					<see-also>
						<ulist>
							<item>
								<p>
									<loc href="http://www.adobe.com/devnet/flash/articles/concept_tab_order.html">Flash glossary: Tab order</loc>
								</p>
							</item>
						</ulist>
					</see-also>
				</resources>
				<related-techniques>
					<relatedtech idref="G57"/>
					<relatedtech idref="G59"/>
				</related-techniques>
				<tests>
					<procedure>
						<olist>
							<item>
								<p>Use a screen reader to navigate through the Flash movie, one element   at a time. </p>
							</item>
							<item>
								<p>Check that the order in which the screen reader announces the content, matches   the logical visual order. </p>
							</item>
							<item>
								<p>When focus has been placed inside the Flash movie, press the Tab key repeatedly to traverse its contents by keyboard. </p>
							</item>
							<item>
								<p>Verify that all interactive and focusable elements are reachable by keyboard, in a logical order. </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p>Checks #2 and #4 are true.</p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Using_the_tabIndex_property_to_specify_a_logical_reading_order_in_Flash"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH16">
				<short-name>Making actions keyboard accessible by using the click event on standard components</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="keyboard-operation-keyboard-operable" relationship="sufficient"/>
					<success-criterion idref="keyboard-operation-all-funcs" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to demonstrate how to invoke a   scripting function in a way that is keyboard accessible by attaching it   to keyboard-accessible, standard Flash components provided by the Adobe   Flash Professional authoring tool. In order to ensure that scripted   actions can be invoked from the keyboard, they are associated with   standard Flash components such as the Button component. The click event   of these components is device independent. While the "CLICK" event is a   mouse event, it is actually mapped to the default action of a button.   The default action occurs when the user clicks the element with a mouse,   but it also occurs when the user focuses the element and hits the space   key, and when the element is triggered via the accessibility API. </p>
				</description>
				<examples>
					<eg-group>
						<head>Click event on a button</head>
						<description>
							<p>This example shows a button that uses the MouseEvent.CLICK   event to change its label. This event will fire both on mouse click and   when the space key is pressed </p>
						</description>
						<code xml:space="preserve"><![CDATA[import fl.controls.Button;
import fl.accessibility.ButtonAccImpl;

ButtonAccImpl.enableAccessibility();

var testBtn = new Button();
testBtn.label = "click me";
testBtn.addEventListener(MouseEvent.CLICK, clickHandler, false);
addChild(testBtn);
testBtn.x = testBtn.y = 10;

function clickHandler(e) {
  e.target.label = "Thanks";
}]]></code>
						<description>
							<p>This approach is demonstrated in the <loc href="device_independent_event_handler_on_component_as3.html" linktype="examples">working version of click event on a button</loc>. The <loc href="device_independent_event_handler_on_component_as3.fla" linktype="examples">source of click event on a button</loc> is available. </p>
						</description>
					</eg-group>
					<eg-group>
						<head>Pending example</head>
						<description>
							<ednote>
								<edtext>The <loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Making_actions_keyboard_accessible_by_using_the_click_event_on_standard_components">wiki source for FLASH16</loc> indicated there was an action to add a second example.</edtext>
							</ednote>
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="SCR35"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>When a Flash Movie contains interactive controls, confirm that: </p>
						<olist>
							<item>
								<p> Standard Flash components are used for the controls </p>
							</item>
							<item>
								<p> The controls use the "click" event </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> #1 and #2 are true </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Making_actions_keyboard_accessible_by_using_the_click_event_on_standard_components"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH17">
				<short-name>Providing keyboard access to a Flash object and avoiding a keyboard trap</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="keyboard-operation-keyboard-operable" relationship="sufficient"/>
					<success-criterion idref="keyboard-operation-trapping" relationship="sufficient"/>
					<success-criterion idref="keyboard-operation-all-funcs"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
					<ua-issue name="" version="">
						<p>The problem targeted by this technique only occurs in browsers other   than Internet Explorer. Currently however, this technique works in Firefox on Windows and OSX, and for Google Chrome and Safari 5 on OSX. The Windows versions of Chrome and Safari do not currently shift focus to and from plug-ins correctly. Additionally, JavaScript   needs to be enabled for this technique to work. </p>
					</ua-issue>
				</ua-issues>
				<description>
					<p>The objective of this technique is to allow keyboard focus to move to and from Flash content embedded in a web page. In browsers other than Internet   Explorer, there is a problem related to keyboard accessibility of   embedded Flash content. The problem is that, while both the Flash   content and the HTML content around it may be keyboard accessible, many browsers do not support moving keyboard focus between the Flash content and HTML   content without using a mouse. Once focus is placed inside the Flash   content, a keyboard user will be trapped there. Similarly, when focus is   placed somewhere else on the HTML content (outside the Flash content), it   will be impossible to move focus into the content.  This technique is designed to let the Flash author address this issue and provide support for moving focus between the Flash content and the HTML content via the keyboard. </p>
					<p>This issue has been around for a long time, and is related to the   way browsers implement embedded plug-ins. Until this problem is fixed,   it is up to the Flash developer to come up with a work around. This   technique is one of those workarounds. The approach behind this   technique is the following: </p>
					<ulist>
						<item>
							<p> Two 'neighbor' focusable HTML objects are identified for each   Flash content in the document (one before and one after the content). These   elements can be any HTML elements that are part of the web page's tab   order (such as links and form controls). </p>
						</item>
						<item>
							<p> The Flash content object itself is added to the document tab   order as well, making it possible to tab into the content. </p>
						</item>
						<item>
							<p> Inside the Flash content, the Flash Player maintains its own tab   order. Normally, when the start or end of the Flash tab order is   reached (when tabbing through the content), focus will wrap to the   beginning or end of the content's tab order, and it will not be possible   to (shift) tab out of it. With this technique however, when a 'focus   wrap' is detected focus will instead be moved to the neighboring element   in the HTML tab order (allowing a keyboard user to 'break out' of the   Flash tab order). </p>
						</item>
					</ulist>
					<p>When the SWFFocus class is imported into a Flash project, the   following will happen: </p>
					<ulist>
						<item>
							<p> A JavaScript &lt;script&gt; tag will be generated   and added to the HTML document containing the Flash content. This   JavaScript code will:</p>
							<ulist>
								<item>
									<p> Set a tabindex value of "0" on the &lt;object&gt; element of   each Flash content found in the page. This causes the Flash objects to   become part of the tab order. </p>
								</item>
								<item>
									<p> Optionally, create a hidden anchor element before and after   the Flash content, which is used by the SWFFocus class to move focus out   of the Flash content back into the HTML page. Alternatively, the developer   can specify existing focusable HTML elements as adjacent tab stops for   the Flash content. </p>
								</item>
								<item>
									<p> Set event handlers for the Flash content object, so that when it   receives focus, the SWFFocus class is notified to manage the content's   internal tab order. </p>
								</item>
							</ulist>
						</item>
						<item>
							<p> The SWFFocus class monitors changes in focus within the Flash   content. When a focus wrap is detected in the content, a JavaScript function   will be called to instead move focus back to the neighboring HTML   content. </p>
						</item>
					</ulist>
					<p>As indicated above, there are two ways in which this technique can be   used: </p>
					<olist>
						<item>
							<p>Letting the SWFFocus class generate neighboring focusable   elements in the HTML tab order for each Flash content (demonstrated in   example 1 below)</p>
							<p>By default, the SWFFocus class will create a hidden link   element before and after an embedded Flash content. These elements are   needed as 'anchor' to move focus to when (shift) tabbing out of the   Flash content. This approach is the easiest to implement, as it does not   require any additional work by the developer. The downside is that the   hidden links will clutter the HTML tab order with meaningless elements   (although these elements are only used as tab stops when tabbing _out   of_ the Flash content, not when tabbing _into_ it). Because of this, it is   recommended to use the following approach instead:</p>
						</item>
						<item>
							<p>Explicitly identifying focusable HTML elements that come before   and after the a Flash content in the HTML tab order (demonstrated in   example 2 below)</p>
							<p>With this approach, the developer can use ID values to   identify the elements that come before and after the Flash content in the   HTML tab order. This is done by setting special class names on the Flash   content's &lt;object&gt; element. This is the preferred   approach, as it does not cause an unnecessary cluttering of the tab   order. However, it does require more work and awareness by the developer   (who has to manually set ID values). Also, in some scenarios there   simply may not be a next or previous focusable element for a Flash   content.</p>
						</item>
					</olist>
				</description>
				<examples>
					<p>The two examples below are shown in the <loc href="keyboard_trap_fix_custom_as3.html" linktype="examples">working example of Preventing a keyboard trap in Flash content</loc>. The example html file has two Flash contents embedded in it. The first Flash content is embedded with the approach described in example 1. The second example is embedded with the approach described in example 2. The <loc href="keyboard_trap_fix_custom_as3.zip" linktype="examples">source of Preventing a keyboard trap in Flash content</loc> is available. The source zip file contains the SWFFocus class.</p>
					<note>
						<p>To run the example from a local drive (as opposed to running it from a web server), the local directory needs to be added to Flash Player's security settings. </p>
					</note>
					<eg-group>
						<head>Using automatically generated links</head>
						<description>
							<p>In this example, the SWFFocus class is used without explicitly   identifying focusable HTML elements. This will cause SWFFocus to   dynamically insert hidden links before and after the Flash content. </p>
							<exsubhead>Loading the Flash Content</exsubhead>
							<p>The Flash object in this example is added using <loc href="http://code.google.com/p/swfobject/wiki/documentation#How_to_embed_Flash_Player_content_using_SWFObject_static_publish">SWFObject's dynamic publishing method</loc>, which means   that the object tag is created dynamically by JavaScript in a way that   the browser supports. While this is the recommended approach, it is not a   requirement for using this technique. The SWFFocus class will also work   when the object tag is hardcoded into the HTML document. </p>
							<p>The sample code below shows how to load the content dynamically   with SWFObject. </p>
							<exsubhead>HTML and Javascript Code Sample for Example 1 </exsubhead>
						</description>
						<code xml:space="preserve"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Keyboard Trap Fix Example</title>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
    <script src="swfobject_2_1.js" type="text/javascript"/>
    <script type="text/javascript">
      var flashvars = {};
      var params = {};
      params.scale = "noscale";
      var attributes = {};
      attributes.id = "FlashSample1SWF";
      attributes.name = "FlashSample1SWF";
      swfobject.embedSWF("keyboard_trap_fix_custom_as3.swf", "flashSample1", \
          "150", "200", "9.0.0", "expressInstall.swf", flashvars, params, attributes);
</script>
  </head>
  <body>
    <p>The following Flash content automatically generates invisible
      links before and after the flash content, allowing keyboard focus
      to move out of the Flash content.</p>
    <div id="flashSample1">
      <a href="http://www.adobe.com/go/getflashplayer">
        <img alt="Get Adobe Flash player"
          src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif"
        />
      </a>
    </div>
  </body>
</html>]]></code>
						<description>
							<exsubhead>Importing and Initializing the SWFFocus class in Flash</exsubhead>
							<p>The SWFFocus class needs to be added to a Flash or Flex project's source   path. The easiest way to achieve this is to import the SWFFocus.swc into Library path for your project or to copy the   com/swffocus/SWFFocus.as file (including the nested directory structure)   to the project's root directory. </p>
							<p>When the SWFFocus class is added to the content's source path, it   needs to be initialized with the following code: </p>
						</description>
						<code xml:space="preserve"><![CDATA[import com.adobe.swffocus.SWFFocus;
SWFFocus.init(stage);]]></code>
						<description>
							<p>The code for the class itself can be found in the source files.</p>
						</description>
					</eg-group>
					<eg-group>
						<head>Explicitly identifying existing focusable html element</head>
						<description>
							<p>For a large part, this technique is the same as example 1 : </p>
							<ulist>
								<item>
									<p> The dynamic loading approach by SWFObject is used to load the   Flash content </p>
								</item>
								<item>
									<p> The SWFFocus class needs to be added to the content's sourcepath   and initialized in the Flash content </p>
								</item>
							</ulist>
							<p>For more details about these steps, see example 1. </p>
							<p>In this case however, special class names are added to the Flash   content object. These class names indicate the ID values of the elements   previous and next of the content in the HTML tab order. The class names   are: </p>
							<ulist>
								<item>
									<p> 'swfPref-&lt;previous ID&gt;', where '&lt;previous element&gt;'   should be the ID value of the previous element in the tab order. </p>
								</item>
								<item>
									<p> 'swfNext-&lt;next ID&gt;', where '&lt;next element&gt;' should   be the ID value of the next element in the tab order. </p>
								</item>
							</ulist>
							<p>For example, the HTML code could look like this (notice the added   class names on the object tag): </p>
						</description>
						<code xml:space="preserve"><![CDATA[<a href="http://www.lipsum.com/" id="focus1">test 1</a>
<object class="swfPrev-focus1 swfNext-focus2"
  data="keyboard_trap_fix_as3.swf" tabindex="0"
  type="application/x-shockwave-flash"/>
<a href="http://www.lipsum.com/" id="focus2">test 2</a>]]></code>
						<description>
							<p>Since this example uses SWFObject's dynamic loading, the class names   will have to be specified as attribute when SWFObject is initialized.   This is demonstrated in the code example below. </p>
							<exsubhead>HTML and Javascript Code Sample for Example 2 </exsubhead>
						</description>
						<code xml:space="preserve"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Keyboard Trap Fix Example </title>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
    <script src="swfobject_2_1.js" type="text/javascript"/>

    <script type="text/javascript">
      var flashvars = {};
      var params = {};
      params.scale = "noscale";
      var attributes = {};
      attributes.id = "FlashSample2SWF";
      attributes.name = "FlashSample2SWF";
      attributes["class"] = "swfPrev-focus1 swfNext-focus2";
      swfobject.embedSWF("keyboard_trap_fix_as3.swf", "flashSample1", "150", 
        "200", "9.0.0", "expressInstall.swf", flashvars, params, attributes);
    </script>
  </head>
  <body>
    <a href="http://www.lipsum.com/" id="focus1">lorem</a>
    <p>The following Flash content uses existing links in the document
      to move focus to when (shift) tabbing out of the Flash content.
      The existing links are defined by placing special classnames on
      the Flash object.</p>
    <div id="flashSample2">
      <a href="http://www.adobe.com/go/getflashplayer">
        <img alt="Get Adobe Flash player"
          src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif"
        />
      </a>
    </div>
    <a href="http://www.lipsum.com/">lorem</a>
  </body>
</html>]]></code>
						<description>
							<p>Note: this example assumes that the focusable HTML elements exist and   have an ID value at the time SWFObject is called to insert the Flash   content. However, in some situations it is also possible that these   elements do not yet exist when the Flash content is created, or that the   elements will be deleted dynamically at a later point. If this happens,   it is possible to reassign ID values for previous and next focusable   elements. To do this, call the SWFsetFocusIds() method on the Flash   content object, like so: </p>
						</description>
						<code xml:space="preserve"><![CDATA[var o = document.getElementById("FlashSample1SWF");
o.SWFsetFocusIds('prevId', 'nextId');]]></code>
						<description>
							<p>From that point on the updated IDs will be used to move focus to when   tabbing out of the Flash content. </p>
						</description>
					</eg-group>
				</examples>
				<resources>
					<see-also>
						<ulist>
							<item>
								<p>
									<loc href="keyboard_trap_fix_custom_as3.zip" linktype="examples">Example source containing the SWFFocus class</loc>
								</p>
							</item>
							<item>
								<p>
									<loc href="http://www.iheni.com/flash-and-keyboard-access-across-browsers/">Flash and keyboard access across browsers</loc> by Henny Swan</p>
							</item>
						</ulist>
					</see-also>
				</resources>
				<tests>
					<procedure>
						<p>For a Flash content on a web page: </p>
						<olist>
							<item>
								<p> If possible, confirm that the source of the Flash content imports   and initializes the SWFFocus class </p>
							</item>
							<item>
								<p> Press the tab key to move through tabbable items on the page </p>
							</item>
							<item>
								<p> Confirm that it is possible to tab into the Flash content </p>
							</item>
							<item>
								<p> Continue tabbing and confirm that it is possible to tab out of   the flash content </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> Checks 3 and 4 are true </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<tech-info>
					<p>The main component used in this technique is an external ActionScript class called "SWFFocus". This class was created by <loc href="http://www.majordan.net/">Michael Jordan</loc> (inspired by the previous work of <loc href="http://www.sonokids.org/home/index.php">John Norgaard of Sonokids</loc>,), and later modified by Hans Hillen from <loc href="http://www.paciellogroup.com/index.php">The Paciello Group</loc> and again by Michael Jordan to address browser compatibility further. </p>
				</tech-info>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Preventing_a_keyboard_trap_in_Flash_content"/>
					</source>
					<tech-author uri="http://www.majordan.net/">Michael Jordan</tech-author>
					<tech-author uri="http://www.paciellogroup.com/index.php">Hans Hillen</tech-author>
				</admin>
			</technique>
			<technique id="FLASH18">
				<short-name>Providing a control to turn off sounds that play automatically in Flash</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="visual-audio-contrast-dis-audio" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The intent of this technique is to allow a user to turn off sounds   that start automatically when a Flash movie loads. The control to turn   off the sounds should be located near the beginning of the page to allow   the control to be easily and quickly discovered by users . This is   useful for those who utilize assistive technologies (such as screen   readers, screen magnifiers, switch mechanisms, etc.) and those who may   not (such as those with cognitive, learning and language disabilities). </p>
					<p>In this technique, an author includes a control that makes it   possible for users to turn off any sounds that are played automatically.   For maximum accessibility, the control can be added to the HTML   document rather than to the Flash movie. The HTML control will   communicate with the Flash movie through the ExternalInterface class.   This means that the user can control the sound playback without having   to interact with Flash content. If this is not practical, the control   can be provided within the Flash content, provided that the control is   keyboard operable, located early in the tab and reading order, and   clearly labeled to indicate that it will turn off the sounds that are   playing. </p>
				</description>
				<examples>
					<eg-group>
						<head>Providing a button in the Flash to stop sound</head>
						<description>
							<p>This example demonstrates the addition of a button within the Flash   movie to allow the user to stop sounds from playing.  A class called   SoundHandler is created which automatically starts playing an mp3 file   when the movie loads. </p>
						</description>
						<code xml:space="preserve"><![CDATA[package wcagSamples {
  import flash.display.Sprite;
  import flash.net.URLRequest;
  import flash.media.Sound;
  import flash.media.SoundChannel;
  
  import fl.controls.Button;
  import fl.accessibility.ButtonAccImpl;
  
  import flash.events.MouseEvent;
  public class SoundHandler extends Sprite {
    private var snd: Sound = new Sound();
    private var button: Button = new Button();
    private var req: URLRequest = new URLRequest("http://av.adobe.com/podcast\
      /csbu_dev_podcast_epi_2.mp3");
    private var channel: SoundChannel = new SoundChannel();
    
    public function SoundHandler() {
      ButtonAccImpl.enableAccessibility();
      button.label = "Stop Sound";
      button.x = 10;
      button.y = 10;
      button.addEventListener(MouseEvent.CLICK, clickHandler);
      this.addChild(button);
      snd.load(req);
      channel = snd.play();
    }
    private function clickHandler(e: MouseEvent): void {
      if (button.label == "Stop Sound") {
        button.label = "Start Sound";
        channel.stop();
      } else {
        channel = snd.play();
        button.label = "Stop Sound";
      }
    }
  }
}]]></code>
						<description>
							<p>This is demonstrated in the <loc href="control_to_toggle_audio_as3.html" linktype="examples">working example of Providing a button in the Flash to stop sound</loc>. The <loc href="control_to_toggle_audio_as3.fla" linktype="examples">source of Providing a button in the Flash to stop sound</loc> is available.</p>
						</description>
					</eg-group>
					<eg-group>
						<head>Providing a button in the HTML before the Flash object to stop sound</head>
						<description>
							<p>A class called SoundHandler is created which automatically starts   playing an mp3 file when the movie loads. An HTML button is placed in   the HTML document containing the Flash movie. When the button is clicked   the action is communicated between the HTML page and the Flash movie   via the Flash Player JavaScript API, resulting in the toggleSound   method being called on the SoundHandler class. </p>
							<exsubhead>ActionScript 3.0 code for Example 2</exsubhead>
						</description>
						<code xml:space="preserve"><![CDATA[package wcagSamples {
  import flash.display.Sprite;
  import flash.external.ExternalInterface;
  import flash.net.URLRequest;
  import flash.media.Sound;
  import flash.media.SoundChannel;
  
  import flash.events.MouseEvent;
  public class SoundHandler extends Sprite {
    private var snd: Sound = new Sound();
    private var soundOn: Boolean = true;
    private var req: URLRequest = new URLRequest("http://av.adobe.com/podcast/\
      csbu_dev_podcast_epi_2.mp3");
    private var channel: SoundChannel = new SoundChannel();
    
    public function SoundHandler() {
      if (ExternalInterface.available)
      ExternalInterface.addCallback("toggleSound", this.toggleSound);
      snd.load(req);
      channel = snd.play();
    }
    
    private function toggleSound(enable: Boolean): void {
      if (! enable) {
        channel.stop();
        soundOn = true;
      } else {
        channel = snd.play();
        soundOn = true
      }
    }
  }
}]]></code>
						<description>
							<exsubhead>HTML code for Example 2</exsubhead>
						</description>
						<code xml:space="preserve"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
    <title>Flash Sound Toggle example</title>
    <script src="swfobject.js" type="text/javascript"/>
    <script type="text/javascript">
    function $(id) {
        return document.getElementById(id);
    }
    
    swfobject.embedSWF("html_control_to_toggle_audio_as3.swf", 
      "flashPlaceHolder", "0", "0", "8");
    function init() {
            var soundOn = true;
            $("soundToggle").onclick = function(event){
                soundOn = !soundOn;
                $("flashPlaceHolder").toggleSound(soundOn);
                event.target.value = soundOn ? "Stop Sound" : "Start Sound";
            };
    }
    window.onload = init;
</script>

  </head>
  <body id="header">
    <h1>Flash Automatic Sound Demo</h1>
    <p>This page contains a Flash movie that automatically starts
      playing sound. Use the button below to stop or start the
      sound</p>
    <input id="soundToggle" type="button" value="Stop Sound"/>
    <p id="flashPlaceHolder">Flash needs to be installed for this
      example to work</p>
  </body>
</html>
]]></code>
						<description>
							<p>This is demonstrated in the <loc href="html_control_to_toggle_audio_as3.html" linktype="examples">working example of Providing a button in the HTML before the Flash object to stop sound</loc>. The source of <loc href="html_control_to_toggle_audio_as3.zip" linktype="examples">source of Providing a button in the HTML before the Flash object to stop sound</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="G170"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>For Flash movies that automatically start playing sound after   loading: </p>
						<olist>
							<item>
								<p> Confirm that an HTML control that conforms to WCAG 2.0 is placed at the   beginning of the document's tab order </p>
							</item>
							<item>
								<p> If there is no HTML-based control, confirm that an accessible   control is placed at the beginning of the Flash movie's tab order. </p>
							</item>
							<item>
								<p> Activate the HTML or Flash-based control </p>
							</item>
							<item>
								<p> Verify that audio playback stops </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> Check #1 or #2 is true, and #4 is true. </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Providing_a_control_to_turn_off_sounds_that_play_automatically_in_Flash"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH19">
				<short-name>Providing a script that warns the user a time limit is about to expire and provides a way to extend it</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="time-limits-required-behaviors" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to notify users that they are   almost out of time to complete an interaction. When scripts provide   functionality that has time limits, the script can include functionality   to warn the user of imminent time limits and provide a mechanism to   request more time. 20 seconds or more before the time limit occurs, the   script provides a confirm dialog that states that a time limit is   imminent and asks if the user needs more time. If the user answers "yes"   then the time limit is reset. If the user answers "no" or does not   respond, the time limit is allowed to expire. </p>
					<p>This technique involves time limits set with the setTimeout()   method. If, for example, the time limit should be 60 seconds, you can   set the time limit for 40 seconds (20 seconds less than the desired   timeout) and show a confirm dialog. The confirm dialog sets a new   timeout for the remaining 20 seconds. If the user requests more time, a   new timeout is set. However, if the 20-second "grace period time limit"   expires (meaning 60 seconds have now elapsed), the action appropriate   for the expiry of the 60 second time limit in the original design is   taken. </p>
				</description>
				<examples>
					<eg-group>
						<head>Using ActionScript to offer a time limit extension before the timeout expires</head>
						<description>
							<p>This is a basic AS2 example of a time limit that can be extended by   the user.  An alert is shown after 40 seconds of inactivity, warning that the   session is about to expire. The user is given 20 seconds to press the   space bar or click on the "Yes" button.  Note that the 40 second   duration would be insufficient for most tasks and is artificially short   for ease of demonstration. </p>
						</description>
						<code xml:space="preserve"><![CDATA[import mx.controls.Alert;
import flash.accessibility.Accessibility;

mx.accessibility.AlertAccImpl.enableAccessibility();

var sessionTimeout;
var sessionNotificationTimeout;
var timeLimit: Number = 60000;
var sessionAlert: Alert;
resetTimeout();

testField.addEventListener("change", resetTimeout);

function resetTimeout() {
  clearTimeout(sessionTimeout);
  clearTimeout(sessionNotificationTimeout);
  sessionTimeout = setTimeout(endSession, timeLimit);
  sessionNotificationTimeout = setTimeout(showTimeoutAlert, timeLimit - 20000);
}

function showTimeoutAlert() {
  sessionAlert = Alert.show("Click the YES button to extend your session",
  "Your login session is about to expire, do you need more time?",
  Alert.YES | Alert.NO, null, handleAlertClick);
}

function endSession() {
  sessionAlert.deletePopUp();
  Alert.show("please log in again",
  "Your session has expired");
}

function handleAlertClick(e) {
  if (e && e.detail && e.detail == Alert.YES)
  resetTimeout();
}]]></code>
						<description>
							<p>For a demonstration, see a <loc href="timeout_extension_as2.html" linktype="examples">working example of Using ActionScript to offer a time limit extension before the timeout expires</loc>. The <loc href="timeout_extension_as2.fla" linktype="examples">source of Using ActionScript to offer a time limit extension before the timeout expires</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="SCR16"/>
				</related-techniques>
				<tests>
					<procedure>
						<olist>
							<item>
								<p> load the page and start a timer that is 20 seconds less than   the time limit. </p>
							</item>
							<item>
								<p> when the timer expires, check that a confirmation dialog is   displayed warning of the impending time limit and allows the user to   extend the limit within 20 seconds. </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<p>Check #2 is true </p>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Providing_a_script_that_warns_the_user_a_time_limit_is_about_to_expire_and_provides_a_way_to_extend_it"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH20">
				<short-name>Reskinning Flash components to provide highly visible focus indication</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="navigation-mechanisms-focus-visible" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The purpose of this technique is to allow the author to use   ActionScript and component skins to apply a strong visual indication   when a component receives focus. In this particular technique, both the   component's background color and border will change. When the component   loses focus, it returns to its normal styling. </p>
					<p>The visual highlights will be applied by switching some of the   component's skin parts. The Standard Flash components each have their   own set of skins that make up the component's visual appearance. Each   part is represented by a MovieClip which can be edited or replaced in   order to customize how the component looks. The most relevant skin for   this technique is the focusRectSkin skin, which is shared   by all components. By default this skin applies a subtle visual   highlight when the component receives focus. </p>
					<p>This technique can be applied through the following steps: </p>
					<olist>
						<item>
							<p> Create a customized version of focusRectSkin. </p>
						</item>
						<item>
							<p> Use scripting to associate the component with the customized   skin. </p>
						</item>
					</olist>
					<p>There are two ways to customize a skin: </p>
					<!-- exsubhead? -->
					<olist>
						<item>
							<p>Duplicating Existing Skin</p>
							<p>With this approach you create a copy of the existing focusRect skin   for modification. You will manually have to apply the skin for each   individual component instance (as indicated in step 5 below). </p>
							<olist>
								<item>
									<p> Drag the components you want to style to the stage. This will   ensure the appropriate component related skins are added to the movie's   library. </p>
								</item>
								<item>
									<p> Open the Library panel, and navigate to the "Component Assets   &gt; Shared" folder. </p>
								</item>
								<item>
									<p> Right-click (or Ctrl-click on a Mac) on the focusRectSkin   MovieClip, and choose "Duplicate" from the context menu. </p>
								</item>
								<item>
									<p> Edit the visual border in the skin's MovieClip. For example,   the focus rectangle can be made thicker to stand out more (This step is   illustrated in the screenshot below this list). </p>
								</item>
								<item>
									<p> Using ActionScript, associate form component instances with   your customized version of focusRectSkin. This can be achieved using the   setStyle method. </p>
								</item>
							</olist>
							<p>
								<image>
									<img source="working-examples/FLASH20/editing_focusrect.png"/>
									<alt>editing a duplicate of focusRectSkin</alt>
								</image>
							</p>
						</item>
						<item>
							<p> Modifying Existing Skin </p>
							<p>With this approach, the original focusRect skin is modified. This   means that the changes you make will be applied to the visual focus   indication of _every_ focusable component. </p>
							<olist>
								<item>
									<p> Drag the components you want to style to the stage. This will   ensure the appropriate component related skins are added to the movie's   library. </p>
								</item>
								<item>
									<p> Open the Library panel, and navigate to the "Component Assets   &gt; Shared" folder. </p>
								</item>
								<item>
									<p> Open the focusRectSkin MovieClip for editing by double   clicking on it. </p>
								</item>
								<item>
									<p> Edit the visual border in the skin's MovieClip. For example,   the focus rectangle can be made thicker to stand out more. </p>
								</item>
							</olist>
							<note>
								<p>With this approach you will override the existing skin. If   you don't want this, follow the "Duplicate Existing Skin" approach   instead. </p>
							</note>
						</item>
					</olist>
					<p>The focusRect skin applies to all focusable Flash components. If you   want to modify other highlights (for example highlights that occur when   hovering over a component with the mouse), you will have to edit   component specific skins individually. For example, to edit the   mouseover highlights for the checkbox component, you will have to modify   or duplicate both Checkbox_overIcon and Checkbox_selectedOverIcon.   Similarly, for the Button component you will have to modify the   Button_over skin. </p>
					<p>Also, keep in mind that the existing skins are automatically   applied on certain events (focus, mouseover, etc.). It is however also   possible to manually switch a skin at a moment of your own choosing   (e.g. to indicate invalid content for a text field). this can also be   achieved this by calling the setStyle method. </p>
				</description>
				<examples>
					<eg-group>
						<head>A thick blue border to indicate focus</head>
						<description>
							<p>The code below shows an example where form component instances are   associated with a modified version of the focusRectSkin MovieClip. The   result is that the components receive a thick blue border rather than   the default thin border Flash provides. The code makes a reference to a   modified skin called Focus_custom, which has been added to   the movie's library in advance. </p>
							<p>Note that the custom version of focusRectSkin also sets a   transparent yellow background to increase the visual highlight further.   Components such as Buttons and checkboxes will show this background, but   TextInput components will not. To ensure the yellow background will   still be applied to the TextInput instance, the following workaround is   applied: </p>
							<olist>
								<item>
									<p> A duplicate version of the TextInput "normal" skin (which can   be found in the library at "Component Asssets &gt; TextInputSkins &gt;   TextInput_upSkin") is created and edited to show a yellow background. </p>
								</item>
								<item>
									<p> FocusIn, FocusOut, MouseOver and MouseOut handlers are   assigned to the TextInput instance, which temporarily swap the default   "normal" skin with the custom "normal" skin while the component is   focused or hovered over. </p>
								</item>
							</olist>
							<p>Additionally, the button_over skin is duplicated and modified to   change the default mouseover highlights for the button component   instance. The checkbox_overIcon and checkbox_selectedOverIcon skins are   directly modified, which means those changes will be applied to all   checkbox instances. </p>
							<p>The result of this technique can be found in the <loc href="change_styles_on_focus_as3.html" linktype="examples">working version of A thick blue border to indicate focus</loc>. </p>
							<exsubhead>Code for Example 1 (ActionScript 3.0)</exsubhead>
						</description>
						<code xml:space="preserve"><![CDATA[package wcagSamples {
  import fl.accessibility.ButtonAccImpl;
  import fl.accessibility.CheckBoxAccImpl;
  import fl.controls.CheckBox;
  import fl.controls.Button;
  import fl.controls.Label;
  import fl.controls.TextInput;
  import flash.display.Sprite;
  import flash.events.FocusEvent;
  import flash.events.MouseEvent;
  
  public class FocusStyler extends Sprite {
    public function FocusStyler() {
      ButtonAccImpl.enableAccessibility()
      CheckBoxAccImpl.enableAccessibility()
      
      var lbl1: Label = new Label();
      lbl1.text = "name";
      lbl1.x = lbl1.y = 20;
      addChild(lbl1);
      
      var txt1: TextInput = new TextInput();
      txt1.x = 60;
      txt1.y = 20;
      txt1.width = 200;
      txt1.addEventListener(FocusEvent.FOCUS_IN, handleFocusIn);
      txt1.addEventListener(FocusEvent.FOCUS_OUT, handleFocusOut);
      txt1.addEventListener(MouseEvent.MOUSE_OVER, handleFocusIn);
      txt1.addEventListener(MouseEvent.MOUSE_OUT, handleFocusOut);
      txt1.setStyle("focusRectSkin", "focus_custom");
      addChild(txt1);
      
      var chk1: CheckBox = new CheckBox();
      chk1.label = "Check Me";
      chk1.x = 60;
      chk1.y = 70;
      chk1.setStyle("focusRectSkin", "focus_custom");
      addChild(chk1);
      
      var btn1: Button = new Button();
      btn1.label = "Click Me";
      btn1.x = 60;
      btn1.y = 110;
      btn1.setStyle("focusRectSkin", "focus_custom");
      btn1.setStyle("overSkin", "Button_over_custom");
      addChild(btn1);
    }
    
    private function handleFocusIn(event) {
      event.currentTarget.setStyle("upSkin", "TextInput_upSkin_custom");
    }
    
    private function handleFocusOut(event) {
      event.currentTarget.setStyle("upSkin", "TextInput_upSkin");
    }
  }
}]]></code>
						<description>
							<p>This is demonstrated in <loc href="change_styles_on_focus_as3.html" linktype="examples">working version of A thick blue border to indicate focus</loc>. The source of <loc href="change_styles_on_focus_as3.zip" linktype="examples">working version of A thick blue border to indicate focus</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<resources>
					<see-also>
						<ulist>
							<item>
								<p>
									<loc href="http://www.adobe.com/devnet/archive/flash/articles/creating_as3_components_pt5.html">Creating ActionScript 3.0 components in Flash – Part 5:   Styles and skins</loc>
								</p>
							</item>
						</ulist>
					</see-also>
				</resources>
				<related-techniques>
					<relatedtech idref="SCR31"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>When a Flash movie contains focusable components, confirm that: </p>
						<olist>
							<item>
								<p> The visual highlight is applied by modifying the component's   skins </p>
							</item>
							<item>
								<p> A visual highlight is shown when the components receive focus </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p>#1 and #2 are true </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Reskinning_Flash_components_to_provide_highly_visible_focus_indication"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH21">
				<short-name>Using the DataGrid component to associate column headers with cells</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="content-structure-separation-programmatic" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The intent of this Technique is to ensure that information and   relationships that are implied visually by data tables are also made   available programmatically. Specifically, the association between table   column headers and their corresponding cells must be exposed to   assistive technology. In Flash, the DataGrid component can be used to   achieve this. When accessibility is enabled for the DataGrid component,   Flash will automatically prepend the column name in front of each cell   value when exposing the grid row's accessible name to assistive   technology. For example, the row in the screenshot below would be   announced by a screen reader as "Row 6 of 13 Name Patty Crawford Bats L   Throws L Year Jr Home Whittier, CA". </p>
					<note>
						<p>The DataGrid component in Flash only supports column   headings, not row headings. </p>
					</note>
					<p>
						<image>
							<img source="working-examples/FLASH21/highlighted_row_in_flash_datagrid.png" width="424" height="283"/>
							<alt>screenshot of highlighted row in grid component</alt>
						</image>
					</p>
				</description>
				<examples>
					<eg-group>
						<head>A statistical data table</head>
						<description>
							<p>In this example, statistical data is used as data provider for a   dynamically created DataGrid component. The lines <code><![CDATA[import   fl.accessibility.DataGridAccImpl;   DataGridAccImpl.enableAccessibility();]]></code> are required to enable   accessibility for the Datagrid Component. </p>
						</description>
						<code xml:space="preserve"><![CDATA[import fl.accessibility.DataGridAccImpl;
DataGridAccImpl.enableAccessibility();

import fl.data.DataProvider;
bldRosterGrid(aDg);
var aRoster: Array = new Array();
aRoster = [ {
  Name: "Wilma Carter", Bats: "R", Throws: "R", Year: "So", Home: "Redlands, CA"}, {
  Name: "Sue Pennypacker", Bats: "L", Throws: "R", Year: "Fr", Home: "Athens, GA"}, {
  Name: "Jill Smithfield", Bats: "R", Throws: "L", Year: "Sr", Home: "Spokane, WA"}, {
  Name: "Shirley Goth", Bats: "R", Throws: "R", Year: "Sr", Home: "Carson, NV"}, {
  Name: "Jennifer Dunbar", Bats: "R", Throws: "R", Year: "Fr", Home: "Seaside, CA"}, {
  Name: "Patty Crawford", Bats: "L", Throws: "L", Year: "Jr", Home: "Whittier, CA"}, {
  Name: "Angelina Davis", Bats: "R", Throws: "R", Year: "So", Home: "Odessa, TX"}, {
  Name: "Maria Santiago", Bats: "L", Throws: "L", Year: "Sr", Home: "Tacoma, WA"}, {
  Name: "Debbie Ferguson", Bats: "R", Throws: "R", Year: "Jr", Home: "Bend, OR"}, {
  Name: "Karen Bronson", Bats: "R", Throws: "R", Year: "Sr", Home: "Billings, MO"}, {
  Name: "Sylvia Munson", Bats: "R", Throws: "R", Year: "Jr", Home: "Pasadena, CA"}, {
  Name: "Carla Gomez", Bats: "R", Throws: "L", Year: "Sr", Home: "Corona, CA"}, {
  Name: "Betty Kay", Bats: "R", Throws: "R", Year: "Fr", Home: "Palo Alto, CA"}
];
aDg.dataProvider = new DataProvider(aRoster);
aDg.rowCount = aDg.length;

function bldRosterGrid(dg: DataGrid) {
  dg.setSize(400, 300);
  dg.columns =[ "Name", "Bats", "Throws", "Year", "Home"];
  dg.columns[0].width = 120;
  dg.columns[1].width = 50;
  dg.columns[2].width = 50;
  dg.columns[3].width = 40;
  dg.columns[4].width = 120;
  dg.move(50, 50);
};]]></code>
						<description>
							<p>This is demonstrated in the <loc href="using_datagrid_to_associate_headers_with_cells_as3.html" linktype="examples">working version of A statistical data table</loc>. The <loc href="using_datagrid_to_associate_headers_with_cells_as3.fla" linktype="examples">source of A statistical data table</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<tests>
					<procedure>
						<p>For Flash content that contains tabular data: </p>
						<olist>
							<item>
								<p> Open the SWF file in Internet Explorer 6 or higher (using Flash   Player 6 or higher), or Firefox 3 or higher (using Flash Player 9 or   higher) </p>
							</item>
							<item>
								<p> Use a tool which is capable of showing an object's   accessibility name, such as ACTF aDesigner 1.0 to open the Flash movie. </p>
							</item>
							<item>
								<p> In the GUI summary panel, inspect the accessibility name for   the datagrid rows and cells to ensure that the heading data is presented   in conjunction with the data cell data. </p>
							</item>
							<item>
								<p> Authors may also test with a screen reader, by reading the   Flash content and listening to hear that the heading and data cell data   are read when reading the datagrid. </p>
							</item>
							<item>
								<p> Authors may also verify in the Flash authoring tool that the   DataGrid component is used to structure the data and that the DataGrid   has been made accessible using the <function>DataGridAccImpl.enableAccessibility</function>   method. </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> Check 3, 4, or 5 is true </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Using_the_DataGrid_component_to_associate_column_headers_with_cells"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH22">
				<short-name>Adding keyboard-accessible actions to static elements</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="keyboard-operation-keyboard-operable" relationship="sufficient"/>
					<success-criterion idref="keyboard-operation-all-funcs" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to demonstrate how to provide keyboard
    				access to a Flash MovieClip that is not keyboard accessible by default.
    				This technique ensures that the element is focusable by setting the
    				tabenabled property, and it ensures that the action can be triggered
    				from the keyboard by providing a keydown handler in addition to a click
    				handler. </p>
				</description>
				<examples>
					<eg-group>
						<head>MovieClip used as a button</head>
						<description>
							<p>In this example, a custom MovieClip is used as a button. To make it
    						keyboard accessible, the MovieClip is placed in the tab order using
    						the tabEnabled. Additionally, redundant event handlers are added so
    						that the custom button responds to both a mouse click and a space bar
    						keypress. Finally, the custom button is provided an accessible name
    						using the MovieClip's AccessibilityProperties object. This makes the
    						button's label perceivable by assistive technology. </p>
							<p>This result can be viewed in the <loc href="event_handlers_to_static_objects_as3.html" linktype="examples">working
    						version of MovieClip used as a button</loc>. The <loc href="event_handlers_to_static_objects_as3.fla" linktype="examples">source of MovieClip used as a button</loc> is available.</p>
							<note>
								<p>Using a generic MovieClip is generally not recommended, since
    						the custom button will be perceived as a focusable graphic rather than
    						a button. Instead, a better approach would be to use the standard Flash
    						Button component, or create a new symbol with a type of "button". </p>
							</note>
						</description>
						<code xml:space="preserve"><![CDATA[import flash.accessibility. *
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.net.navigateToURL;
import flash.net.URLRequest;

testMC.tabEnabled = true;
updateAccName(testMC);
testMC.addEventListener(MouseEvent.CLICK, clickHandler, false);
testMC.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);

updateAccName(testMC);

function clickHandler(e) {
  testMC.labelText.text = "THANKS";
  updateAccName(testMC);
}

function keyDownHandler(e) {
  if (e.keyCode == 32)
  clickHandler(e);
}

function updateAccName(mc: MovieClip) {
  if (! mc.accessibilityProperties)
  mc.accessibilityProperties = new AccessibilityProperties();
  mc.accessibilityProperties.name = mc.labelText.text;
  Accessibility.updateProperties();
}]]></code>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="SCR29"/>
					<relatedtech idref="FLASH17"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>When a Flash Movie contains generic MovieClip instances that are used
    					as interactive controls, confirm that: </p>
						<olist>
							<item>
								<p> The MovieClip instance has its tabEnabled property set to true </p>
							</item>
							<item>
								<p> The MovieClip instance has event handlers for both mouse and keyboard events </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> #1 and #2 are true </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Adding_keyboard-accessible_actions_to_static_elements"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH23">
				<short-name>Adding summary information to a DataGrid</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="content-structure-separation-programmatic" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to provide a brief overview of
    				how data has been organized into a DataGrid or a brief explanation
    				of how to navigate the grid. </p>
					<p>As Flash does not provide a summary attribute, this descriptive text
    				will be added to the DataGrid's accessible desription instead. This
    				approach will make the summary information available to people who
    				use screen readers; the information is not displayed visually. </p>
					<p>The summary is useful when the table has a complex structure (for
    				example, when there are several sets of row or column headers, or when
    				there are multiple groups of columns or rows). The summary may also
    				be helpful for simple data tables that contain many columns or rows
    				of data. </p>
				</description>
				<examples>
					<eg-group>
						<head>Adding a summary to a datagrid in the accessibility control panel</head>
						<description>
							<p>This is an example of a datagrid being added to the stage in Flash
    						Professional from the Components panel. The description field is used
    						in the accessibility control panel in Flash to serve as the summary
    						information for the datagrid. </p>
							<olist>
								<item>
									<p> Create a new Flash file (.fla) or open an existing one to put
    						a datagrid into. </p>
								</item>
								<item>
									<p> Open the Flash components panel from the Window menu </p>
								</item>
								<item>
									<p> Drag a datagrid component onto the stage and position as desired. </p>
								</item>
								<item>
									<p> Select the datagrid component and add the summary information
    							to the description field for datagrid, using the accessibility control
    							panel. </p>
								</item>
							</olist>
						</description>
					</eg-group>
					<eg-group>
						<head>Adding a summary to a datagrid with ActionScript 3</head>
						<description>
							<p>This is a basic AS3 example of a DataGrid component that has summary
    						text added as its accessible description. </p>
						</description>
						<code xml:space="preserve"><![CDATA[import fl.accessibility.DataGridAccImpl;
import fl.controls.DataGrid;
import fl.controls.Label;
import fl.data.DataProvider;
import flash.accessibility.Accessibility;
import flash.accessibility.AccessibilityProperties;
import flash.system.Capabilities;

DataGridAccImpl.enableAccessibility();

createGrid();

//set the summary text as accessible description
var accProps: AccessibilityProperties = new AccessibilityProperties();
accProps.description = "The first column shows the player's name," +
  "the second and third column shows the player's gaming statistics." +
  "the fourth column shows the player's year as FR (Freshman), JR (junior) or SO (Sophomore)." +
  "The fifth column shows the player's home city and state";
aDg.accessibilityProperties = accProps;
if (Capabilities.hasAccessibility)
Accessibility.updateProperties();

function createGrid() {
  
  //create and add the components
  var aDg: DataGrid = new DataGrid();
  addChild(aDg);
  aDg.move(50, 50);
  bldRosterGrid(aDg);
  
  var aRoster: Array = new Array();
  aRoster =[ {
    Name: "Wilma Carter", Bats: "R", Throws: "R", Year: "So", Home: "Redlands, CA"
  }, {
    Name: "Sue Pennypacker", Bats: "L", Throws: "R", Year: "Fr", Home: "Athens, GA"
  }, {
    Name: "Jill Smithfield", Bats: "R", Throws: "L", Year: "Sr", Home: "Spokane, WA"
  }, {
    Name: "Betty Kay", Bats: "R", Throws: "R", Year: "Fr", Home: "Palo Alto, CA"
  },];
  aDg.dataProvider = new DataProvider(aRoster);
  aDg.rowCount = aDg.length;
}

function bldRosterGrid(dg: DataGrid) {
  dg.setSize(400, 300);
  dg.columns =[ "Name", "Bats", "Throws", "Year", "Home"];
  dg.columns[0].width = 120;
  dg.columns[1].width = 50;
  dg.columns[2].width = 50;
  dg.columns[3].width = 40;
  dg.columns[4].width = 120;
};]]></code>
						<description>
							<p>For a demonstration, see the <loc href="datagrid_with_summary_as3.html" linktype="examples">working version of Adding a summary to a datagrid with ActionScript 3</loc>. The <loc href="datagrid_with_summary_as3.fla" linktype="examples">source of Adding a summary to a datagrid with ActionScript 3</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<tests>
					<procedure>
						<p>If the Flash movie contains a DataGrid component, confirm that summary
    					text has been added to it through the corresponding accessible description
    					property. </p>
					</procedure>
					<expected-results>
						<p>The above is true. </p>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Adding_summary_information_to_a_DataGrid"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH24">
				<short-name>Allowing the user to extend the default time limit</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="time-limits-required-behaviors" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to allow the user to extend the
    				default time limit by providing a mechanism to extend the time when
    				scripts provide functionality that has default time limits. In order
    				to allow the user to request a longer time limit, the script can provide
    				a form (for example) allowing the user to enter a larger time limit
    				or indicating that more time is needed. </p>
				</description>
				<examples>
					<eg-group>
						<head>Changing timeout with a dropdown list</head>
						<description>
							<p>This is a basic AS2 example where the timeout duration can be changed
    						by the user through a dropdown list. In this example there is a combobox
    						with the instance name sessionLimitDuration. </p>
						</description>
						<code xml:space="preserve"><![CDATA[import mx.controls.Alert;
import mx.accessibility.AlertAccImpl;
import mx.accessibility.ComboBoxAccImpl;

ComboBoxAccImpl.enableAccessibility();
AlertAccImpl.enableAccessibility();

var sessionTimeout;
var sessionNotificationTimeout;
var timeLimit: Number;
var sessionAlert: Alert;

adjustTimeoutDuration();
// reset the timeout when interaction occurs
testField.addEventListener("change", resetTimeout);

//
//update limit duration when the combobox value changes
//
sessionLimitDuration.addEventListener("change", adjustTimeoutDuration);

function adjustTimeoutDuration(e) {
  timeLimit = sessionLimitDuration.value * 1000;
  resetTimeout();
  timeoutDescription.text = "A session timeout will be simulated after " + 
    sessionLimitDuration.selectedLabel + " without interaction in the form field below."
}

function resetTimeout() {
  clearTimeout(sessionTimeout);
  sessionTimeout = setTimeout(endSession, timeLimit);
}

function endSession() {
  sessionAlert.deletePopUp();
  Alert.show("please log in again",
  "Your session has expired");
}]]></code>
						<description>
							<p>For a demonstration, see the <loc href="checkbox_for_extending_timelimit_as3.html" linktype="examples">working
    						version of Changing timeout with a dropdown list</loc>. The <loc href="checkbox_for_extending_timelimit_as3.fla" linktype="examples">source of Changing timeout with a dropdown list</loc> is available. Please note that the session times are
    						purposefully short for demonstration purposes, developers will
    						want to provide durations that are sufficient to meet the requirements
    						of <loc href="time-limits-required-behaviors" linktype="understanding">Success
    						Criterion 2.2.1 (Timing Adjustable)</loc> . </p>
							<!--<ednote>
								<edtext>The test zip was updated but seems completely changed from the previous version. And it seems to be a checkbox, while the example in the wiki source mentions a drop-down list. Is this one correct, or does the inline example need updating, or a second example added, or something? For the moment the working example references the updated version.</edtext>
							</ednote>-->
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="SCR1"/>
					<relatedtech idref="G133"/>
					<relatedtech idref="G198"/>
					<relatedtech idref="G180"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>For Flash content that include a time limit: </p>
						<olist>
							<item>
								<p> Check that there is a control to adjust the time limit near the
    					top of the page that allows the user to adjust the time to at least
    					ten times longer than the default. </p>
							</item>
							<item>
								<p> Verify that the default time limit for the page is long enough
    						that a user can easily navigate to the control even if they are 10
    						times slower than most users. </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<p>The above is true </p>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Allowing_the_user_to_extend_the_default_time_limit"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH25">
				<short-name>Labeling a form control by setting its accessible name</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="text-equiv-all"/>
					<success-criterion idref="content-structure-separation-programmatic" relationship="sufficient"/>
					<success-criterion idref="minimize-error-cues" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to provide an accessible name to
    				the built in form components provided by Flash. Some components, such
    				as radio buttons, checkboxes and buttons, have their own 'label' property.
    				For other components, the developer needs to specify the component's
    				label text as accessible name. This can be either be achieved through
    				the Accessibility panel (for components placed on the stage during
    				authoring) or through scripting (for components that are dynamically
    				created at runtime). </p>
					<!-- exsubhead? -->
					<p>ActionScript 2</p>
					<p>In ActionScript 2 the accessible name needs to be set on a component's
    				<prop>_accProps</prop> property. This property must be an object. If the property
    				has not been set yet, the developer needs to create a custom object
    				and assign it to the <prop>_accProps</prop> property. The object itself can have
    				several accessibility related properties, one of them being <prop>_accProps.name</prop>,
    				which specifies the accessible name. When an <prop>_accProps</prop> property is
    				updated, the developer must call <function>Accessibility.UpdateProperties()</function> for
    				the changes to take effect. Before calling <function>Accessibility.UpdateProperties()</function>,
    				it is recommended to check the <var>System.capabilities.hasAccessibility</var>
    				flag. this will prevent an error on environments that do not support
    				MSAA. </p>
					<p>ActionScript 2 provides the following accessible components: </p>
					<ulist>
						<item>
							<p> SimpleButton </p>
						</item>
						<item>
							<p> CheckBox </p>
						</item>
						<item>
							<p> RadioButton </p>
						</item>
						<item>
							<p> Label </p>
						</item>
						<item>
							<p> TextInput </p>
						</item>
						<item>
							<p> TextArea </p>
						</item>
						<item>
							<p> ComboBox </p>
						</item>
						<item>
							<p> ListBox </p>
						</item>
						<item>
							<p> Window </p>
						</item>
						<item>
							<p> Alert </p>
						</item>
						<item>
							<p> DataGrid </p>
						</item>
					</ulist>
					<!-- exsubhead? -->
					<p>ActionScript 3</p>
					<p>In ActionScript 3 the accessible name needs to be set on a component's
    				<prop>accessibilityProperties</prop> property. This property must be an an instance
    				of <obj>flash.accessibility.AccessibilityProperties</obj>. If the property has
    				not been set yet, the developer needs to create the a new <obj>AccessibilityProperties</obj>
    				instance and assign it to the <prop>accessibilityProperties</prop> property. The
    				object itself can have several accessibility related properties, one
    				of them being <prop>accessibilityProperties.name</prop> which specifies the accessible
    				name. When an <prop>accessibilityProperties property</prop> is updated, the developer
    				must call <function>flash.accessibility.Accessibility.UpdateProperties()</function> for the
    				changes to take effect. Before calling <function>Accessibility.UpdateProperties()</function>,
    				it is recommended to check the <var>flash.system.capabilities.hasAccessibility</var>
    				flag. this will prevent an error on environments that do not support
    				MSAA. </p>
					<p>ActionScript 3 provides the following accessible components. </p>
					<ulist>
						<item>
							<p> Button </p>
						</item>
						<item>
							<p> CheckBox </p>
						</item>
						<item>
							<p> ComboBox </p>
						</item>
						<item>
							<p> List </p>
						</item>
						<item>
							<p> RadioButton </p>
						</item>
						<item>
							<p> TileList </p>
						</item>
					</ulist>
				</description>
				<examples>
					<eg-group>
						<head>Setting a component's accessible name using the Accessibility Panel</head>
						<description>
							<p>To add and label a component control, follow these steps: </p>
							<olist>
								<item>
									<p> From the 'Components' Panel, drag the component on to the stage,
    							or use scripting to create a new instance. </p>
								</item>
								<item>
									<p> With the newly created component instance selected, enter its
    							label text in the Accessibility Panel's Name field. </p>
								</item>
							</olist>
						</description>
					</eg-group>
					<eg-group>
						<head>Setting the accessible name through ActionScript 2.0</head>
						<description>
							<p>The code example below shows how a ListBox component is created and assigned an accessible name. </p>
						</description>
						<code xml:space="preserve"><![CDATA[mx.accessibility.ListAccImpl.enableAccessibility();

this.createClassObject(mx.controls.List, "my_list", 1);
my_list.addItem({label: "R. Davis", data: 1});
my_list.addItem({label: "V. Mann", data: 2});
my_list.addItem({label: "L. Heart", data: 3});
my_list.addItem({label: "P. Hill", data: dt4});
my_list.addItem({label: "D. Gribble", data: 5});
my_list.move(10, 10);

if (System.capabilities.hasAccessibility) {
  my_list._accProps = new Object();
  my_list._accProps.name = "Staff Members";
  Accessibility.updateProperties();
}]]></code>
						<description>
							<p>This result can be viewed in the <loc href="accessible_name_for_form_components_as2.html" linktype="examples">working version of Setting the accessible name through ActionScript 2.0</loc>. The <loc href="accessible_name_for_form_components_as2.fla" linktype="examples">source of Setting the accessible name through ActionScript 2.0</loc> is available.</p>
						</description>
					</eg-group>
					<eg-group>
						<head>Setting the accessible name through ActionScript 3.0</head>
						<description>
							<p>The code example below shows how a ListBox component is created and assigned an accessible name. </p>
						</description>
						<code xml:space="preserve"><![CDATA[import fl.controls.List;
import fl.accessibility.ListAccImpl;
import flash.system.Capabilities;
import flash.accessibility.*;

ListAccImpl.enableAccessibility();
var my_list:List = new List();
my_list.addItem({label:"R. Davis", data:1});
my_list.addItem({label:"V. Mann", data:2});
my_list.addItem({label:"L. Heart", data:3});
my_list.addItem({label:"P. Hill", data:4});
my_list.addItem({label:"D. Gribble", data:5});
my_list.x = my_list.y = 10;

if (Capabilities.hasAccessibility) {
  var accProps:AccessibilityProperties = new AccessibilityProperties();
  accProps.name = "Staff Members";
  my_list.accessibilityProperties = accProps;
  Accessibility.updateProperties();
}
addChild(my_list);]]></code>
						<description>
							<p>This result can be viewed in the <loc href="accessible_name_for_form_components_as3.html" linktype="examples">working version of Setting the accessible name through ActionScript 3.0</loc>. The <loc href="accessible_name_for_form_components_as3.fla" linktype="examples">source of Setting the accessible name through ActionScript 3.0</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="G94"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>For Flash movies that contain form components, confirm that either: </p>
						<olist>
							<item>
								<p> The selected component's label text is specified in the Accessibility
    					Panel's "name" field. </p>
							</item>
							<item>
								<p> In ActionScript 2.0: Scripting is used to dynamically set the
    					component's <prop>_accProps.name</prop> property </p>
							</item>
							<item>
								<p> In ActionScript 3.0: Scripting is used to dynamically set the
    					component's <prop>accessibilityProperties.name</prop> property </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<p>One of the above is true </p>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Labeling_a_form_control_by_setting_its_accessible_name"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH26">
				<short-name>Applying audio descriptions to Flash video</short-name>
				<applicability>
					<ulist>
						<item>
							<p> Flash CS3 and higher </p>
						</item>
						<item>
							<p> ActionScript 3.0 and higher </p>
						</item>
					</ulist>
				</applicability>
				<applies-to>
					<success-criterion idref="media-equiv-audio-desc" relationship="sufficient"/>
					<success-criterion idref="media-equiv-audio-desc-only" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to provide a way for people
    				who are blind or otherwise have trouble seeing the video in
    				audio-visual material to be able to access the material. With
    				this technique a description of the video is provided via audio
    				description that will fit into the gaps in the dialogue in
    				the audio-visual material. </p>
				</description>
				<examples>
					<eg-group>
						<head>Playing descriptions when cue points are reached</head>
						<description>
							<p>In this example, the FLVPlayback component is used to create
    						a video player. A custom class called "AudioDescriptions" is
    						added to manage the playback of extended audio descriptions.
    						This class provides event listeners to listen for cue points
    						in the media that have been identified by the audio description
    						provider. When these cuepoints are reached, an mp3 file containing
    						the corresponding description will start playing. The recorded
    						descriptions have been timed to fit with in the gaps in the
    						movie's dialog. </p>
							<p>By default, audio descriptions will be enabled. A button (which
    						must itself be accessible to meet other success criteria) is
    						provided below the video player that allows the user to turn
    						audio descriptions on or off. </p>
						</description>
						<code xml:space="preserve"><![CDATA[package {
  import fl.video. *;
  import flash.events. *;
  import flash.media.Sound;
  import flash.media.SoundChannel;
  import flash.net.URLRequest;
  import flash.display.Sprite;
  
  public class AudioDescriptions extends Sprite {
    private var channel: SoundChannel = new SoundChannel;
    private var myPlayer: FLVPlayback;
    private var _enabled: Boolean = true;
    private var _toggleBtn: Button;
    private var snd: Sound = new Sound();
    public function AudioDescriptions() {
      // point myPlayer to the FLVPlayback component instance on the stage, 
      // which should be loaded with a valid video source.
      myPlayer = my_FLVPlybk;
      // add cue points. When any of these are reached, the 
      // MetadataEvent.CUE_POINT event will fire
      myPlayer.addASCuePoint(8.35, "ASpt1");
      myPlayer.addASCuePoint(23.23, "ASpt2");
      
      enable();
      
      enable_AD_btn.addEventListener(MouseEvent.CLICK, handleBtnClick);
    }
    
    private function handleBtnClick(e) {
      _enabled = ! _enabled;
      if (! _enabled) {
        disable();
        enable_AD_btn.label = "Enable Audio Descriptions";
      } else {
        enable();
        enable_AD_btn.label = "Disable Audio Descriptions";
      }
    }
    
    public function enable() {
      // set up an event handler which will be called each time a cue point is reached
      myPlayer.addEventListener(MetadataEvent.CUE_POINT, cp_listener);
    }
    
    public function disable() {
      // remove the event handler called each time a cue point is reached, so 
      // that audio description is disabled.
      myPlayer.removeEventListener(MetadataEvent.CUE_POINT, cp_listener);
    }
    
    private function cp_listener(eventObject: MetadataEvent): void {
      snd = new Sound();
      //recreate sound object as it can only load one mp3 file
      //check to see which cue point was reached
      switch (eventObject.info.name) {
        case "ASpt1":
        snd.load(new URLRequest("sphere.mp3"));
        //create a new Sound object, and load the appropriate mp3
        channel = snd.play();
        // play the audio description, and assign it to the SoundChannel object
        break;
        case "ASpt2":
        snd.load(new URLRequest("transfrm.mp3"));
        channel = snd.play();
        break;
      }
    }
  }
}]]></code>
						<description>
							<p>The result can be viewed in the <loc href="audio_descriptions_as3.html" linktype="examples">working version of Playing descriptions when cue points are reached</loc>. The <loc href="audio_descriptions_as3.zip" linktype="examples">source of Playing descriptions when cue points are reached</loc> is available.</p>
						</description>
					</eg-group>
					<eg-group>
						<head>Providing an additional audio track for descriptions</head>
						<description>
							<p>Audio description can also be provided via an additional audio
    						track that is the same length and plays simultaneously as the
    						primary media, but that only includes sound for the segments
    						when audio description needs to be played and silence at other
    						times. A Flash author can provide a toggle to turn this additional
    						audio track on or off, based on the listener's preference.
    						When the additional track is enabled, there are two parallel
    						audio tracks, one being the primary audio, and the second being
    						the one containing only audio description. It is still necessary
    						to ensure that the audio description and primary audio do not
    						overlap in ways that make comprehension difficult. This method
    						will achieve the same result as the method used in Example
    						1, but may be chosen because of the type of audio description
    						files that are provided to the Flash author. </p>
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="G78"/>
					<relatedtech idref="G69"/>
					<relatedtech idref="G173"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>When Flash content contains video with an audio soundtrack,
    					confirm that: </p>
						<olist>
							<item>
								<p> Audio descriptions have been made available using separate
    					sound files. </p>
							</item>
							<item>
								<p> A button is provided that allows users to enable or disable
    					the audio descriptions </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> #1 and #2 are true </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Applying_audio_descriptions_to_Flash_video"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH27">
				<short-name>Providing button labels that describe the purpose of a button</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="text-equiv-all"/>
					<success-criterion idref="navigation-mechanisms-refs" relationship="sufficient"/>
					<success-criterion idref="navigation-mechanisms-link" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to describe the purpose
    				of a button by providing descriptive text as the button's accessible
    				name. The description lets a user distinguish this button from
    				other buttons in the Flash movie and helps the user determine
    				whether to activate the button. An empty string is not sufficient
    				as a button's accessible name. </p>
					<p>For buttons with text labels, the label text will be used
    				as a buttons accessible name. If a button is image based and
    				does not have a text label, the button's accessible name will
    				have to be set separately using the Accessibility Panel or
    				through scripting. </p>
				</description>
				<examples>
					<eg-group>
						<head>Using the label property to describe the button's purpose</head>
						<code xml:space="preserve"><![CDATA[import fl.controls.Button;
import fl.accessibility.ButtonAccImpl;

ButtonAccImpl.enableAccessibility();

var myButton:Button = new Button();
myButton.label = "View Items in Cart";
]]></code>
					</eg-group>
					<eg-group>
						<head>Using scripting to set the accessible name for an image button using Actionscript 3.0</head>
						<description>
							<p>In this example, the button's label property is deliberately set to an empty string. To be perceivable to assistive technology, the button's <prop>accessibilityProperties.name</prop> property is set.</p>
						</description>
						<code xml:space="preserve"><![CDATA[import fl.controls.Button;
import fl.accessibility.ButtonAccImpl;
import flash.accessibility.*;
import flash.system.Capabilities;
ButtonAccImpl.enableAccessibility();

var soundIsMuted = false;
var myButton:Button = new Button();
myButton.setStyle("icon", unmuted);
myButton.label = "";
myButton.x = myButton.y = 10;
myButton.width = myButton.height = 50;
updateAccName(myButton, "mute sound");
myButton.setStyle("icon", unmuted);
myButton.addEventListener(MouseEvent.CLICK, handleBtnClick);
addChild(myButton);

function handleBtnClick(e) {
  soundIsMuted = !soundIsMuted;
  myButton.setStyle("icon", soundIsMuted ? muted : unmuted);
  updateAccName(myButton, soundIsMuted ? "unmute sound" : "mute sound");
}

function updateAccName(obj, newName:String) {
  if (!obj.accessibilityProperties)
    obj.accessibilityProperties = new AccessibilityProperties();
  obj.accessibilityProperties.name = newName;
  if (Capabilities.hasAccessibility)
    Accessibility.updateProperties();
}]]></code>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="G91"/>
					<relatedtech idref="FLASH5"/>
					<relatedtech idref="FLASH4"/>
					<!--relatedtech>http://trace.wisc.edu/wcag_wiki/index.php?title=Providing_textual_identification_for_buttons_that_otherwise_rely_only_on_sensory_information_to_be_understood</relatedtech-->
					<relatedtech idref="FLASH30"/>
					<!--relatedtech>http://trace.wisc.edu/wcag_wiki/index.php?title=Supplementing_button_labels_with_additional_text</relatedtech-->
				</related-techniques>
				<tests>
					<procedure>
						<p>For each button in the Flash movie that uses this technique: </p>
						<olist>
							<item>
								<p> Check that the button's label text correctly describes
    					the button's purpose </p>
							</item>
							<item>
								<p> If a button does not have a text label, confirm that descriptive
    					text has been added as the button's accessible name. </p>
							</item>
							<item>
								<p> If a button contains both label text and an accessible
    							name, confirm that the combination of the two makes sense
    							as a description for the button's purpose. </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> Checks #1, #2, and #3 are true. </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Providing_button_labels_that_describe_the_purpose_of_a_button"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH28">
				<short-name>Providing text alternatives for ASCII art, emoticons, and leetspeak in Flash</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="text-equiv-all"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>ASCII characters, emoticons, and leetspeek are sometimes used
    			and present accessibility challenges since the meaning is conveyed
    			through the visual appearance of groupings of individual characters. </p>
					<p>In Flash, such groupings of characters can be made accessible
    				by wrapping them in a MovieClip, and providing an accessible
    				name. It is crucial that the the forceSimple property for the
    				MovieClip is set to true also. This will hide the actual ASCII
    				characters from assistive technology. </p>
				</description>
				<examples>
					<eg-group>
						<head>Providing a text alternative for ASCII art in the accessibility control panel</head>
						<description>
							<p>This example contains words written in ASCII art using leetspeek
    						(the text says "WCAG 2 rulez"). To make this text
    						accessible, the following steps are followed: </p>
							<olist>
								<item>
									<p> Place the ASCII characters in a MovieClip instance </p>
								</item>
								<item>
									<p> Select the MovieClip instance containing the text, and
    							make the following changes in the Accessibility panel:</p>
									<ulist>
										<item>
											<p> Add a meaningful text alternative for the ASCII art,
	    							without leetspeak (such as "WCAG 2 RULEZ"). </p>
										</item>
										<item>
											<p> Uncheck the "Make child objects accessible" checkbox,
    								so that the ASCII characters will not be read by screen
    								readers </p>
										</item>
									</ulist>
								</item>
							</olist>
							<p>These steps are ilustrated in the screenshot below: </p>
							<p>
								<image>
									<img source="working-examples/FLASH28/ascii_art_alternative.png" height="308" width="695"/>
									<alt>Adding text alternative for ASCII art using the Accessibility Panel</alt>
								</image>
							</p>
						</description>
					</eg-group>
					<eg-group>
						<head>Providing a text alternative for ASCII art using ActionScript</head>
						<description>
							<p>This example is the same as example 1, except using ActionScript
    						instead of the accessibility control panel in the Flash Professional
    						authoring tool. </p>
							<olist>
								<item>
									<p> Place the ASCII characters in a MovieClip instance </p>
								</item>
								<item>
									<p> Provide an instance name for the MovieClip instance (e.g. myASCII) </p>
								</item>
								<item>
									<p> Set the accessible name for the MovieClip and set the
    							forceSimple property to true to hide the text inside the
    							MovieClip. </p>
								</item>
							</olist>
						</description>
						<code xml:space="preserve"><![CDATA[// 'myASCII' is a MovieClip instance placed on the movie's main timeline
myASCII.accessibilityProperties = new AccessibilityProperties();
myASCII.accessibilityProperties.name = "WCAG 2 Rulez";
myASCII.accessibilityProperties.forceSimple = true;
]]></code>
						<description>
							<p>This technique is demonstrated in the <loc href="ascii_art_alternatives_as3.html" linktype="examples">working version of Providing a text alternative for ASCII art using ActionScript</loc>. The <loc href="ascii_art_alternatives_as3.html" linktype="examples">source of Providing a text alternative for ASCII art using ActionScript</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<tests>
					<procedure>
						<olist>
							<item>
								<p> Publish the SWF file </p>
							</item>
							<item>
								<p> Use a tool which is capable of showing an object's name
    					to open the Flash movie. </p>
							</item>
							<item>
								<p> Locate the ASCII grouping, leet speak, or emoticon and
    						verify in the tool that the accessibility name represents
    						the same information. </p>
							</item>
							<item>
								<p> Authors may also test with a screen reader, by reading
    							the Flash content and listening to hear that the equivalent
    							text is read when tabbing to the non-text object (if it is
    							tabbable) or hearing the alternative text read when reading
    							the content line-by-line. </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> #3 or #4 above is true </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Providing_text_alternatives_for_ASCII_art,_emoticons,_and_leetspeak_in_Flash"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH29">
				<short-name>Setting the label property for form components</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="text-equiv-all"/>
					<success-criterion idref="content-structure-separation-programmatic" relationship="sufficient"/>
					<success-criterion idref="minimize-error-cues" relationship="sufficient"/>
					<success-criterion idref="ensure-compat-rsv"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to explicitly associate a form
    				component with its label text by setting the component's label property.
    				Setting this property will visually place a label next to the component,
    				and exposes the label text to assistive technology. </p>
					<p>Components that support the label property are: </p>
					<ulist>
						<item>
							<p>
								<loc href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fl/controls/Button.html">Button</loc>
							</p>
						</item>
						<item>
							<p>
								<loc href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fl/controls/CheckBox.html">CheckBox</loc>
							</p>
						</item>
						<item>
							<p>
								<loc href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fl/controls/RadioButton.html">RadioButton</loc>
							</p>
						</item>
					</ulist>
					<p>For other components, the label text has to placed adjacent to the
    				form component manually. For these components, the label text can be
    				associated with the form component using one of these approaches: </p>
					<ulist>
						<item>
							<p>
								<specref ref="FLASH25"/>
							</p>
						</item>
						<item>
							<p>
								<specref ref="FLASH32"/>
							</p>
						</item>
					</ulist>
				</description>
				<examples>
					<p>In order for these form controls to be accessible to assistive
    				technology, the following lines of code will have to be added once
    				to the movie's script: </p>
					<p> When the Button component is used: </p>
					<p>
						<code xml:space="preserve"><![CDATA[import fl.accessibility.ButtonAccImpl;
ButtonAccImpl.enableAccessibility();]]></code>
					</p>
					<p> When the RadioButton component is used: </p>
					<p>
						<code xml:space="preserve"><![CDATA[import fl.accessibility.RadioButtonAccImpl;
RadioButtonAccImpl.enableAccessibility();]]></code>
					</p>
					<p> When the CheckBox component is used: </p>
					<p>
						<code xml:space="preserve"><![CDATA[import fl.accessibility.CheckBoxAccImpl;
CheckBoxAccImpl.enableAccessibility();]]></code>
					</p>
					<eg-group>
						<head>Setting the label using the Component Inspector panel</head>
						<description>
							<olist>
								<item>
									<p> Add the Button, CheckBox or RadioButton component to the movie
    						by dragging it on the the stage from the 'Components' panel. </p>
								</item>
								<item>
									<p> With the component selected, open the 'Component Inspector' panel
    						by selecting it in the 'Window' menu or using the Shift + F7 shortcut. </p>
								</item>
								<item>
									<p> In the Component Inspector, under the 'Parameters' tab, enter
    						the label text for the 'label' parameter. </p>
								</item>
							</olist>
							<p>The screenshot below illustrates this technique.</p>
							<p>
								<image>
									<img source="working-examples/FLASH29/component_inspector_label.png" height="349" width="513"/>
									<alt>Setting a component's label in the Component Inspector Panel</alt>
								</image>
							</p>
						</description>
					</eg-group>
					<eg-group>
						<head>Setting the label on a Button, CheckBox and RadioButton component using ActionScript 3.0</head>
						<code xml:space="preserve"><![CDATA[import fl.accessibility.ButtonAccImpl
import fl.accessibility.CheckBoxAccImpl
import fl.accessibility.RadioButtonAccImpl
import fl.controls.Button;
import fl.controls.CheckBox;
import fl.controls.RadioButton;

ButtonAccImpl.enableAccessibility();
var myButton: Button = new Button();
myButton.label = "Submit Details";
myButton.x = 10;
myButton.y = 10
addChild(myButton);

CheckBoxAccImpl.enableAccessibility();
var myCheckBox: CheckBox = new CheckBox();
myCheckBox.label = "notify me";
myCheckBox.x = 10;
myCheckBox.y = 40
addChild(myCheckBox);

RadioButtonAccImpl.enableAccessibility();
var myRadioButton: RadioButton = new RadioButton();
myRadioButton.label = "Male";
myRadioButton.x = 10;
myRadioButton.y = 60;
addChild(myRadioButton);]]></code>
						<description>
							<p>This technique is demonstrated in the <loc href="setting_label_property_as3.html" linktype="examples">working example of Setting the label on a Button, CheckBox and RadioButton component using ActionScript 3.0</loc>. The <loc href="setting_label_property_as3.fla" linktype="examples">source of Setting the label on a Button, CheckBox and RadioButton component using ActionScript 3.0</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="FLASH25"/>
					<relatedtech idref="FLASH32"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>When the Button, CheckBox or RadioButton components are used: </p>
						<olist>
							<item>
								<p> confirm that labels describing the purpose of the button have
    					been provided through the component's label property. </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<olist>
							<item>
								<p> #1 is true </p>
							</item>
						</olist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Setting_the_label_property_for_form_components"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH30">
				<short-name>Specifying accessible names for image buttons</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="text-equiv-all"/>
					<success-criterion idref="ensure-compat-rsv"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>For image based Button components the accessible name needs to be
    				set to provide a functional label. This label indicates the button's
    				function, but does not attempt to describe the image. The label is
    				especially important if there are multiple buttons on the page that
    				each lead to different results. </p>
					<p>The accessible name for a button may need to be updated if the button
    				changes during the use of the Flash movie. </p>
				</description>
				<examples>
					<eg-group>
						<head>Accessible name for a simple image button</head>
						<description>
							<p>In this example, an icon based button is given an accessible name
    					through scripting. When the button is clicked a web page is opened. </p>
						</description>
						<code xml:space="preserve"><![CDATA[//provide text equivalent for image button
this.check_btn.accessibilityProperties = new AccessibilityProperties();
this.check_btn.accessibilityProperties.name = "Check page validation";

//set up event listener and function to navigate to URL

this.check_btn.addEventListener(MouseEvent.CLICK, onClickHandler);

function onClickHandler(e: MouseEvent): void {
  var btn = e.target;
  var url: String = "http://validator.w3.org";
  var request: URLRequest = new URLRequest(url);
  navigateToURL(request, '_blank');
}]]></code>
						<description>
							<p>The result is demonstrated in the <loc href="Text_description_for_simpleimage_buttons_as3.html" linktype="examples">working version of Accessible name for a simple image button</loc>. The <loc href="Text_description_for_simpleimage_buttons_as3.fla" linktype="examples">source of Accessible name for a simple image button</loc> is available.</p>
						</description>
					</eg-group>
					<eg-group>
						<head>Accessible name for a dynamic image button</head>
						<description/>
						<code xml:space="preserve"><![CDATA[import fl.controls.Button;
import fl.accessibility.ButtonAccImpl;

ButtonAccImpl.enableAccessibility();

var soundIsMuted = false;
var myButton: Button = new Button();
myButton.label = "";
myButton.x = myButton.y = 10;
myButton.width = myButton.height = 50;
updateAccName(myButton, "mute sound");
myButton.setStyle("icon", unmuted);
myButton.addEventListener(MouseEvent.CLICK, handleBtnClick);
addChild(myButton);

function handleBtnClick(e) {
  soundIsMuted = ! soundIsMuted;
  myButton.setStyle("icon", soundIsMuted? muted: unmuted);
  updateAccName(myButton, soundIsMuted? "unmute sound": "mute sound");
}

function updateAccName(obj, newName: String) {
  if (! obj.accessibilityProperties)
  obj.accessibilityProperties = new AccessibilityProperties();
  obj.accessibilityProperties.name = newName;
  if (Capabilities.hasAccessibility)
  Accessibility.updateProperties();
}]]></code>
						<description>
							<p>The result is demonstrated in the <loc href="text_description_for_image_buttons_as3.html" linktype="examples">working version of Accessible name for a dynamic image button</loc>. The <loc href="text_description_for_image_buttons_as3.fla" linktype="examples">source of Accessible name for a dynamic image button</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="FLASH1"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>When a Flash Movie contains image based buttons, confirm that: </p>
						<olist>
							<item>
								<p> An accessible name is provided for the button that describes the
    					button's action </p>
							</item>
							<item>
								<p> If the button's action changes (for example when it is clicked)
    					the accessible name changes correspondingly </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> #1 and #2 are true </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Specifying_accessible_names_for_image_buttons"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH31">
				<short-name>Specifying caption text for a DataGrid</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="content-structure-separation-programmatic" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to programmatically associate captions
    				for DataGrids where captions are provided in the presentation. Normally,
    				the caption for a table is a table identifier and acts like a title
    				or heading for the table. </p>
					<p>Flash does not have a caption element for the DataGrid component,
    				but the same effect can be achieved through the following approach: </p>
					<olist>
						<item>
							<p> Place a label component or textfield above the DataGrid, containing
    				the grid's caption text. </p>
						</item>
						<item>
							<p> Duplicate the caption text and add it as the grid's accessible
    					name. This can either be achieved by setting a value to the grid's   "name" field
    					in the accessibility panel or by setting the grid's AccessibilityProperties.name
    					property. </p>
						</item>
					</olist>
				</description>
				<examples>
					<eg-group>
						<head>Associating a label with a datagrid</head>
						<description>
							<p>This is an example of a datagrid being added to the stage in Flash
    						Professional from the Components panel. A label element is also added
    						from the components panel to contain the caption text and the caption
    						text is used in the accessibility control panel in Flash to serve as
    						the accessibility name for the datagrid. </p>
							<ulist>
								<item>
									<p> Create a new Flash file (.fla) or open an existing one to put
    						a datagrid into. </p>
								</item>
								<item>
									<p> Open the Flash components panel from the Window menu </p>
								</item>
								<item>
									<p> Drag a datagrid component onto the stage and position as desired. </p>
								</item>
								<item>
									<p> Drag a label component onto the stage and position as desired. </p>
								</item>
								<item>
									<p> Add text to the label component. </p>
								</item>
								<item>
									<p> Select the datagrid component and add the same text as is used
    							in the label component to the name field for datagrid, using the
    							accessibility control panel. </p>
								</item>
							</ulist>
						</description>
					</eg-group>
					<eg-group>
						<head>Associating a caption with a datagrid using ActiveScript 3</head>
						<description>
							<p>This is a basic AS3 example of a datagrid generated through scripting.
    						Additionally a label element is created, containing the caption text,
    						and the caption text is added to the grid as an accessible name. </p>
						</description>
						<code xml:space="preserve"><![CDATA[import fl.accessibility.DataGridAccImpl;
import fl.controls.DataGrid;
import fl.controls.Label;
import fl.data.DataProvider;
import flash.accessibility.Accessibility;
import flash.accessibility.AccessibilityProperties;
import flash.system.Capabilities;

// enable accessibility for the DataGrid
DataGridAccImpl.enableAccessibility();

createGrid();

// set the data grid caption text
var gridCaptionText: String = "Game Results";
gridCaption.text = gridCaptionText;
//add the caption text as the DataGrid's accessible name
var accProps: AccessibilityProperties = new AccessibilityProperties();
accProps.name = gridCaptionText;
aDg.accessibilityProperties = accProps;
if (Capabilities.hasAccessibility)
Accessibility.updateProperties();

function createGrid() {
  
  //create and add the components
  var aDg: DataGrid = new DataGrid();
  var gridCaption: Label = new Label();
  addChild(aDg);
  addChild(gridCaption);
  aDg.move(50, 50);
  gridCaption.move(50, 20);
  
  var captionFormat: TextFormat = new TextFormat();
  captionFormat.size = 24;
  gridCaption.setStyle("textFormat", captionFormat);
  gridCaption.width = 300;
  gridCaption.height = 100;
  bldRosterGrid(aDg);
  //prepare the data
  var aRoster: Array = new Array();
  aRoster =[ 
    {Name: "Wilma Carter", Bats: "R", Throws: "R", Year: "So", Home: "Redlands, CA"},
    {Name: "Sylvia Munson", Bats: "R", Throws: "R", Year: "Jr", Home: "Pasadena, CA"}, 
    {Name: "Carla Gomez", Bats: "R", Throws: "L", Year: "Sr", Home: "Corona, CA"}, 
    {Name: "Betty Kay", Bats: "R", Throws: "R", Year: "Fr", Home: "Palo Alto, CA"},
  ];
  aDg.dataProvider = new DataProvider(aRoster);
  aDg.rowCount = aDg.length;
};

function bldRosterGrid(dg: DataGrid) {
  dg.setSize(400, 300);
  dg.columns =[ "Name", "Bats", "Throws", "Year", "Home"];
  dg.columns[0].width = 120;
  dg.columns[1].width = 50;
  dg.columns[2].width = 50;
  dg.columns[3].width = 40;
  dg.columns[4].width = 120;
};]]></code>
						<description>
							<p>Notes on this code sample:</p>
							<ulist>
								<item>
									<p> For a demonstration, see the <loc href="datagrid_with_caption_as3.html" linktype="examples">working version of Associating a caption with a datagrid using ActiveScript 3</loc>. The <loc href="datagrid_with_caption_as3.fla" linktype="examples">source of Associating a caption with a datagrid using ActiveScript 3</loc> is available.</p>
								</item>
								<item>
									<p> The accessible name can also be applied to the DataGrid using
    						the Accessibility panel in the Flash authoring tool. </p>
								</item>
								<item>
									<p> In the above example, the text used for the dataGrid caption will
    								be read twice, once as the text label that is offered for sighted
    								users, and again as the accessible name for the dataGrid. Authors
    								can avoid duplicate voicing by setting the <prop>silent</prop> property for the
    								label text to <propval>true</propval>. </p>
								</item>
							</ulist>
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="H39"/>
				</related-techniques>
				<tests>
					<procedure>
						<olist>
							<item>
								<p> Check whether the Flash movie contains a DataGrid component. </p>
							</item>
							<item>
								<p> Confirm that each DataGrid's caption text has been added to the component as an accessible name. </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<p>Step 2 is true. </p>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Specifying_caption_text_for_a_DataGrid"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH32">
				<short-name>Using auto labeling to associate text labels with form controls</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="text-equiv-all"/>
					<success-criterion idref="content-structure-separation-programmatic" relationship="sufficient"/>
					<success-criterion idref="minimize-error-cues" relationship="sufficient"/>
					<success-criterion idref="ensure-compat-rsv"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>Except for the <obj>CheckBox</obj> and <obj>RadioButton</obj> component, the built in Flash
    				components are not automatically provided an associated label. For
    				these components, label text has to be placed adjacent to their control
    				manually, using the <obj>Label</obj> component. If the 'auto-label' feature is
    				enabled in the Accessibility Panel, then the Flash Player will automatically
    				associate the label text for the <obj>TextInput</obj> and <obj>TextArea</obj> components.
    				This means that for these components, it is not necessary to duplicate
    				the label text for the control using the Accessibility Panel. The auto
    				label feature is enabled by default. </p>
					<p>Additionally, the auto label feature will enable the Flash Player
    				to automatically add text contained by Button symbols as the symbol's
    				accessible name. This will only work if the Button symbol only consists
    				of one layer, containing the text label. </p>
					<note>
						<p>Since auto-labeling associates labels without human intervention
    				the accuracy of the association should be verified. For more predictable
    				results authors are encouraged to explicitly add labels to all controls. </p>
					</note>
					<p>To auto labeling, perform the following steps: </p>
					<olist>
						<item>
							<p> Ensure that the textual descriptions for each form control within
    				the flash application are placed adjacent to the control itself. Text
    				eligible to be used for auto-labeling must not be set to be hidden
    				from assistive technology. </p>
						</item>
						<item>
							<p> Select the movie stage, and open the 'Accessibility' panel. </p>
						</item>
						<item>
							<p> Ensure that the 'Auto Label' option is checked. This will automatically
    					associate labels with their TextInput and TextArea controls, and
    					add text inside custom button symbols as their accessible name. </p>
						</item>
						<item>
							<p> If the auto label behavior is inappropriate to your Flash content,
    						uncheck the 'Auto label' option, and ensure that each control receives
    						a meaningful 'name' value in the 'Accessibility' panel. </p>
						</item>
						<item>
							<p> To disable auto labeling for a particular object but not the whole
    							movie, convert the text to the 'dynamic text' type using the 'Property
    							inspector'. Then select it, and uncheck its 'Make object accessible'
    							option in the 'Accessibility' panel. </p>
						</item>
					</olist>
					<note>
						<p>As an alternative to using the Accessibility Panel, the auto
    				label feature can also be turned off by setting the <prop>AccessibilityProperties.noAutoLabel</prop>
    				to <propval>true</propval> for the stage object. </p>
					</note>
				</description>
				<examples>
					<eg-group>
						<head>Using the "Auto Label" option in the Accessibility Panel</head>
						<description>
							<p>This example shows two TextInput components, a TextArea component
    						and a custom button symbol instance. For the TextInput components,
    						a separate label element has been placed to the left of the control.
    						For the TextArea component, the label has been placed above the control.
    						For the custom button, the label text is placed inside the button symbol.
    						Because the "Auto Label" option is enabled in the Accessibility
    						Panel, all these controls will be provided an accessible name based
    						on their label. </p>
							<p>The screenshot below illustrates the example: <image>
									<img source="working-examples/FLASH32/using_auto_label.png" height="300" width="593"/>
									<alt>Using the Auto Label feature in the Flash Authoring Environment</alt>
								</image>
							</p>
							<p>The results of this technique can be viewed in the <loc href="using_auto_labeling_to_associate_label_text_with_controls_as3.html" linktype="examples">working version of Using the "Auto Label" option in the Accessibility Panel</loc>. The <loc href="using_auto_labeling_to_associate_label_text_with_controls_as3.fla" linktype="examples">source of Using the "Auto Label" option in the Accessibility Panel</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="FLASH25"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>If a Flash form contains TextInput or TextArea components, or custom
    					button symbols with text labels, confirm that: </p>
						<olist>
							<item>
								<p> The Auto Label option is enabled in the movie's Accessibility
    					Panel </p>
							</item>
							<item>
								<p> Use a screen reader or MSAA checker to ensure that the label text
    					is indeed exposed as the control's accessible name </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> #1 and #2 are true </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Using_auto_labeling_to_associate_text_labels_with_form_controls"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH33">
				<short-name>Using relative values for Flash object dimensions</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="visual-audio-contrast-visual-presentation" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to specify the width and/or height
    				of an embedded Flash object using relative units such as <unit>em</unit> values.
    				The size of the Flash object is allowed to expand to fill the size
    				of its container (a parent element) by setting the movie width and
    				height to 100%. The container's width and height is set with relative
    				units. This will allow user agents that support text resizing to resize
    				the Flash object in line with changes in text size settings. When the
    				Flash object's dimensions are adjusted its contents will be scaled,
    				making it easier to read for low vision users. </p>
					<note>
						<p>This technique is not necessary to support users who use zoom
    				functionality in their browsers. </p>
					</note>
				</description>
				<examples>
					<eg-group>
						<head>Scaling text while keeping a minimum size</head>
						<description>
							<p>In this example, a Flash object is loaded into an HTML document using <loc href="http://code.google.com/p/swfobject/wiki/documentation#How_to_embed_Flash_Player_content_using_SWFObject_static_publish">SWFObject's
    						dynamic publishing method</loc>. The Flash object's container element
    						is given a class name of "flashPlaceHolder". This class
    						name is then targeted using CSS to set its width and height using
    						relative em values. When the user increases or decreases the browser's
    						text size, the Flash object will scale accordingly. To ensure that
    						the object does not become too small when text size is decreased,
    						the min-width and min-height properties are set to the default dimensions. </p>
						</description>
						<code xml:space="preserve"><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
    <title>Flash Resize example</title>
    <script src="swfobject/swfobject.js" type="text/javascript"/>
    <script type="text/javascript">
    swfobject.embedSWF("scale_movie_dimensions_on_text_resize_as3.swf", 
    "flashPlaceHolder", "100%", "100%", "8")      
</script>

    <style type="text/css">
  #flashPlaceHolder {
    width: 20em;
    height: 15em;
    min-width: 320px;
    min-height: 240px;
  }
</style>
  </head>
  <body id="header">
    <h1>Flash Resize Demonstration</h1>
    <p>When the browser's text size is changed, the Flash movie will be
      resized accordingly.</p>
    <p id="flashPlaceHolder">Flash needs to be installed for this
      example to work</p>
  </body>
</html>
]]></code>
						<description>
							<p>The result of this technique can be viewed in the <loc href="scale_movie_dimensions_on_text_resize_as3.html" linktype="examples">working version of Scaling text while keeping a minimum size</loc>. The <loc href="scale_movie_dimensions_on_text_resize_as3.fla" linktype="examples">source of Scaling text while keeping a minimum size</loc> is available.</p>
							<!--<ednote>
								<edtext>The test zip contained a "swfobject" folder, which contained a number of files that looked redundant. Not sure if it needs to be packaged with the above .fla file, for the moment it's omitted.</edtext>
							</ednote>-->
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="C24"/>
				</related-techniques>
				<tests>
					<procedure>
						<olist>
							<item>
								<p> Open a web page containing an embedded flash object </p>
							</item>
							<item>
								<p> View the HTML to confirm that the width and height dimensions
    					for the object containing the Flash object are specified using relative
    					units such as em or percent (%). </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> Check #2 is true. </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Using_relative_values_for_Flash_object_dimensions"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH34">
				<short-name>Turning off sounds that play automatically when an assistive technology is detected</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="visual-audio-contrast-dis-audio" relationship="sufficient"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The intent of this technique is to prevent sounds from playing when
    				the Flash movie loads. This is useful for those who utilize assistive
    				technologies (such as screen readers, screen magnifiers, switch mechanisms,
    				etc.) and those who may not (such as those with cognitive, learning
    				and language disabilities). By default, the sound will be played automatically.
    				When a screen reader such as JAWS is detected however, the sound will
    				have to be started manually. </p>
					<p>To perform screen reader detection, Flash provides the <prop>flash.accessibility.Accessibility.active</prop>
    				property. If this property is set to true, it means that the Flash
    				player has detected running assistive technology. Based on this flag,
    				the Flash developer can choose to run different functionality. </p>
					<note>
						<p>The Flash player requires some time to detect active assistive
    				technology and set the Accessibility.active property. To get accurate
    				results, do not check for this property immediately on the first frame
    				of the movie. Instead, perform the check 5 frames in or based on a
    				timed event. </p>
						<p>Not every screen reader will be detected using this mechanism.
    				In general, the property will be set to true when any  <abbr expansion="Microsoft Active Accessibility">MSAA</abbr> client
    				is running. </p>
						<p>Other assistive technology tools, including screen magnifiers,
    				or tools not used as assistive technologies may also utilize MSAA in
    				ways that result in <prop>Accessibility.active</prop> being set to <propval>true</propval>. </p>
					</note>
				</description>
				<examples>
					<eg-group>
						<head>A SoundHandler class</head>
						<description>
							<p>A class called SoundHandler is created which automatically starts
    						playing an mp3 file only when Accessibility.active is set to false.
    						Note that this example also checks the flash.system.Capabilities.hasAccessibility
    						property. This property does not check whether a screen reader is running,
    						but instead indicates whether the Flash player is running in an environment
    						that supports MSAA (which basically means the Windows operating system). </p>
						</description>
						<code xml:space="preserve"><![CDATA[package wcagSamples {
  import flash.accessibility.Accessibility;
  import flash.display.Sprite;
  import flash.net.URLRequest;
  import flash.media.Sound;
  import flash.media.SoundChannel;
  import flash.system.Capabilities;
  import fl.controls.Button;
  import fl.accessibility.ButtonAccImpl;
  import fl.controls.Label;
  import flash.events.MouseEvent;
  
  public class SoundHandler extends Sprite {
    private var snd: Sound = new Sound();
    private var button: Button = new Button();
    private var req: URLRequest = new URLRequest(
      "http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3");
    private var channel: SoundChannel = new SoundChannel();
    private var statusLbl: Label = new Label();
    public function SoundHandler() {
      snd.load(req);
      ButtonAccImpl.enableAccessibility();
      button.x = 10;
      button.y = 10;
      statusLbl.autoSize = "left";
      statusLbl.x = 10;
      statusLbl.y = 40;
      addChild(statusLbl);
      button.addEventListener(MouseEvent.CLICK, clickHandler);
      this.addChild(button);
      if (! Capabilities.hasAccessibility || ! Accessibility.active) {
        channel = snd.play();
        button.label = "Stop Sound";
        statusLbl.text = "No Assistive technology detected. \
          Sound will play automatically";
      } else {
        button.label = "Start Sound";
        statusLbl.text = "Assistive technology detected. \
          Sound will not play automatically";
      }
    }
    private function clickHandler(e: MouseEvent): void {
      if (button.label == "Stop Sound") {
        button.label = "Start Sound";
        channel.stop();
      } else {
        channel = snd.play();
        button.label = "Stop Sound";
      }
    }
  }
}]]></code>
						<description>
							<p>This technique can be viewed in the <loc href="screen_reader_detection_to_prevent_autoplay_as3.html" linktype="examples">working version of A SoundHandler class</loc>. The <loc href="screen_reader_detection_to_prevent_autoplay_as3.fla" linktype="examples">source of A SoundHandler class</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<resources>
					<see-also>
						<ulist>
							<item>
								<p>
									<loc href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/accessibility/Accessibility.html#active">ActionScript 3.0 Language and Components Reference: Accessibility.active property</loc>
								</p>
							</item>
							<item>
								<p>
									<loc href="http://blog.paciellogroup.com/2008/04/developer-beware-using-flash-to-detect-screen-readers/">Developer Beware: Using Flash to Detect Screen Readers</loc>
								</p>
							</item>
						</ulist>
					</see-also>
				</resources>
				<related-techniques>
					<relatedtech idref="G170"/>
				</related-techniques>
				<tests>
					<procedure>
						<olist>
							<item>
								<p> Start a screen reader that supports MSAA. </p>
							</item>
							<item>
								<p> Open a page containing a Flash movie that starts playing audio
    					automatically when a screen reader is not running </p>
							</item>
							<item>
								<p> Confirm that the audio is stopped. </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<olist>
							<item>
								<p> #3 is true </p>
							</item>
						</olist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Using_screen_reader_detection_to_turn_off_sounds_that_play_automatically"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH35">
				<short-name>Using script to scroll Flash content, and providing a mechanism to pause it</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<!--success-criterion idref="time-limits-required-behaviors"/-->
					<success-criterion idref="time-limits-pause"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<!--<ednote>
						<edtext>The wiki indicated this applies to 2.2.1 but that doesn't seem right because it's just about scrolling, removed that.</edtext>
					</ednote>-->
					<p>The objective of this technique is to provide a way for users to stop
    				scrolling content when the scrolling is created by a script. Scrolling
    				content can be difficult or impossible to read by users with low vision
    				or with cognitive disabilities. The movement can also be distracting
    				for some people making it difficult for them to concentrate on other
    				parts of the Web page. </p>
				</description>
				<examples>
					<eg-group>
						<head>A toggle button to pause and resume scrolling</head>
						<description>
							<p>In this example, text scrolls from left to right. A toggle button
    						is provided that allows the user to pause and resume the scrolling
    						behavior. Additionally, a checkbox is provided which can be used to
    						slow down the scrolling speed. </p>
							<note>
								<p>Users may prefer a greater variety of scrolling speed options
    						than are offered in this example. Developers might choose to provide
    						several speed choices with a slider or drop down list control in order
    						to accomplish this. </p>
							</note>
						</description>
						<code xml:space="preserve"><![CDATA[import fl.accessibility.ButtonAccImpl;
import fl.accessibility.CheckBoxAccImpl;

ButtonAccImpl.enableAccessibility();
CheckBoxAccImpl.enableAccessibility();

var scrollInterval: int;
var intervalLength: int = 15;

var expandedViewer: MovieClip = exampleScroller.expandedViewer;
var scrollText: MovieClip = exampleScroller.scrollText;
var scrollViewer: MovieClip = exampleScroller.scrollViewer;

var scrollingPaused: Boolean = true;

scrollStopper.addEventListener(MouseEvent.CLICK, handleBtnClick, false);
slowDown_chk.addEventListener(MouseEvent.CLICK, handleChkClick, false);

function handleBtnClick(e) {
  toggleScroll(false);
  e.target.label = scrollingPaused? "Resume Scrolling": "Stop Scrolling";
}

//slow down scrolling speed
function handleChkClick(e) {
  intervalLength = e.target.selected? 50: 15;
  if (! scrollingPaused) {
    clearTimeout(scrollInterval);
    toggleScroll(true);
  }
}

//pause or resume scrolling
function toggleScroll(noToggle: Boolean) {
  if (noToggle || scrollingPaused)
  scrollInterval = setInterval(moveText, intervalLength); else
  clearTimeout(scrollInterval);
  if (! noToggle)
  scrollingPaused = ! scrollingPaused;
}

function moveText() {
  if (scrollText.x + scrollText.width < scrollViewer.x)
  scrollText.x = scrollViewer.x + scrollViewer.width;
  scrollText.x -= 1;
}

//initiate scrolling
toggleScroll(false);
]]></code>
						<description>
							<p>The technique is demonstrated in the <loc href="pause_scrolling_as3.html" linktype="examples">working version of A toggle button to pause and resume scrolling</loc>. The <loc href="pause_scrolling_as3.fla" linktype="examples">source of A toggle button to pause and resume scrolling</loc> is available.</p>
						</description>
					</eg-group>
				</examples>
				<related-techniques>
					<relatedtech idref="G4"/>
				</related-techniques>
				<tests>
					<procedure>
						<p>When a Flash Movie contains scrolling content:</p>
						<olist>
							<item>
								<p>Confirm that a button is provided that allows users to pause and resume the scrolling behavior</p>
							</item>
							<item>
								<p>Confirm that pressing the button stops the scrolling</p>
							</item>
							<item>
								<p>Confirm that pressing the button again restarts the scrolling</p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p>Checks #1, #2, and #3 are true.</p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Using_script_to_scroll_Flash_content,_and_providing_a_mechanism_to_pause_it"/>
					</source>
				</admin>
			</technique>
			<technique id="FLASH36">
				<short-name>Using scripts to control blinking and stop it in five seconds or less</short-name>
				<applicability>
					<p use-id="flash.applicability.general"/>
				</applicability>
				<applies-to>
					<success-criterion idref="time-limits-pause"/>
				</applies-to>
				<ua-issues>
					<ua-issue use-id="flash.ua-issue.general"/>
				</ua-issues>
				<description>
					<p>The objective of this technique is to control blinking with script
    				so it can be set to stop in less than five seconds by the script. The
    				ActionScript <function>setTimeout()</function> method is used to stop the MovieClip's blinking
    				behavior in less than 5 seconds. </p>
				</description>
				<examples>
					<eg-group>
						<head>Stopping blinking after a timeout</head>
						<description>
							<p>In this example a MovieClip (blinkingTextMC) uses its timeline to
    						generate a blinking effect. Before 5 seconds has passed, the MovieClip's
    						<function>gotoAndStop()</function> method is called, which stops the blinking effect. </p>
						</description>
						<code xml:space="preserve"><![CDATA[setTimeout(stopBlinking, 4500);
function stopBlinking() {
  var blinkingTextMC = getChildByName('blinkingTextMC');
  blinkingTextMC.gotoAndStop(1);
}
]]></code>
						<description>
							<p>For a demonstration, view the <loc href="control_blinking_with_script_as3.html" linktype="examples">working version of Stopping blinking after a timeout</loc>. The <loc href="control_blinking_with_script_as3.fla" linktype="examples">source of Stopping blinking after a timeout</loc> is available. </p>
						</description>
					</eg-group>
				</examples>
				<tests>
					<procedure>
						<p>For each instance of blinking content: </p>
						<olist>
							<item>
								<p> Start a timer for 5 seconds at the start of the blink effect. </p>
							</item>
							<item>
								<p> When the timer expires, determine if the blinking has stopped. </p>
							</item>
						</olist>
					</procedure>
					<expected-results>
						<ulist>
							<item>
								<p> For each instance of blinking content, #2 is true. </p>
							</item>
						</ulist>
					</expected-results>
				</tests>
				<admin>
					<source>
						<loc href="http://trace.wisc.edu/wcag_wiki/index.php?title=Using_scripts_to_control_blinking_and_stop_it_in_five_seconds_or_less"/>
					</source>
				</admin>
			</technique>
		</div1>
	</body>
	<back>
		<div1 id="placeholders">
			<!-- note: this can be updated using /misc/id-list.xslt (requires cut and paste)-->
			<head/>
			<p id="UNKNOWN">place holder for idref</p>
			<p id="cc1">placeholder for cc1</p>
			<p id="cc2">placeholder for cc2</p>
			<p id="cc3">placeholder for cc3</p>
			<p id="cc4">placeholder for cc4</p>
			<p id="cc5">placeholder for cc5</p>
			<p id="text-equiv">placeholder for text-equiv</p>
			<p id="text-equiv-all">placeholder for text-equiv-all</p>
			<p id="media-equiv">placeholder for media-equiv</p>
			<p id="media-equiv-av-only-alt">placeholder for media-equiv-av-only-alt</p>
			<p id="media-equiv-captions">placeholder for media-equiv-captions</p>
			<p id="media-equiv-audio-desc">placeholder for media-equiv-audio-desc</p>
			<p id="media-equiv-real-time-captions">placeholder for media-equiv-real-time-captions</p>
			<p id="media-equiv-audio-desc-only">placeholder for media-equiv-audio-desc-only</p>
			<p id="media-equiv-sign">placeholder for media-equiv-sign</p>
			<p id="media-equiv-extended-ad">placeholder for media-equiv-extended-ad</p>
			<p id="media-equiv-text-doc">placeholder for media-equiv-text-doc</p>
			<p id="media-equiv-live-audio-only">placeholder for media-equiv-live-audio-only</p>
			<p id="content-structure-separation">placeholder for content-structure-separation</p>
			<p id="content-structure-separation-programmatic">placeholder for content-structure-separation-programmatic</p>
			<p id="content-structure-separation-sequence">placeholder for content-structure-separation-sequence</p>
			<p id="content-structure-separation-understanding">placeholder for content-structure-separation-understanding</p>
			<p id="visual-audio-contrast">placeholder for visual-audio-contrast</p>
			<p id="visual-audio-contrast-without-color">placeholder for visual-audio-contrast-without-color</p>
			<p id="visual-audio-contrast-dis-audio">placeholder for visual-audio-contrast-dis-audio</p>
			<p id="visual-audio-contrast-contrast">placeholder for visual-audio-contrast-contrast</p>
			<p id="visual-audio-contrast-scale">placeholder for visual-audio-contrast-scale</p>
			<p id="visual-audio-contrast-text-presentation">placeholder for visual-audio-contrast-text-presentation</p>
			<p id="visual-audio-contrast7">placeholder for visual-audio-contrast7</p>
			<p id="visual-audio-contrast-noaudio">placeholder for visual-audio-contrast-noaudio</p>
			<p id="visual-audio-contrast-visual-presentation">placeholder for visual-audio-contrast-visual-presentation</p>
			<p id="visual-audio-contrast-text-images">placeholder for visual-audio-contrast-text-images</p>
			<p id="keyboard-operation">placeholder for keyboard-operation</p>
			<p id="keyboard-operation-keyboard-operable">placeholder for keyboard-operation-keyboard-operable</p>
			<p id="keyboard-operation-trapping">placeholder for keyboard-operation-trapping</p>
			<p id="keyboard-operation-all-funcs">placeholder for keyboard-operation-all-funcs</p>
			<p id="time-limits">placeholder for time-limits</p>
			<p id="time-limits-required-behaviors">placeholder for time-limits-required-behaviors</p>
			<p id="time-limits-pause">placeholder for time-limits-pause</p>
			<p id="time-limits-no-exceptions">placeholder for time-limits-no-exceptions</p>
			<p id="time-limits-postponed">placeholder for time-limits-postponed</p>
			<p id="time-limits-server-timeout">placeholder for time-limits-server-timeout</p>
			<p id="seizure">placeholder for seizure</p>
			<p id="seizure-does-not-violate">placeholder for seizure-does-not-violate</p>
			<p id="seizure-three-times">placeholder for seizure-three-times</p>
			<p id="navigation-mechanisms">placeholder for navigation-mechanisms</p>
			<p id="navigation-mechanisms-skip">placeholder for navigation-mechanisms-skip</p>
			<p id="navigation-mechanisms-title">placeholder for navigation-mechanisms-title</p>
			<p id="navigation-mechanisms-focus-order">placeholder for navigation-mechanisms-focus-order</p>
			<p id="navigation-mechanisms-refs">placeholder for navigation-mechanisms-refs</p>
			<p id="navigation-mechanisms-mult-loc">placeholder for navigation-mechanisms-mult-loc</p>
			<p id="navigation-mechanisms-descriptive">placeholder for navigation-mechanisms-descriptive</p>
			<p id="navigation-mechanisms-focus-visible">placeholder for navigation-mechanisms-focus-visible</p>
			<p id="navigation-mechanisms-location">placeholder for navigation-mechanisms-location</p>
			<p id="navigation-mechanisms-link">placeholder for navigation-mechanisms-link</p>
			<p id="navigation-mechanisms-headings">placeholder for navigation-mechanisms-headings</p>
			<p id="meaning">placeholder for meaning</p>
			<p id="meaning-doc-lang-id">placeholder for meaning-doc-lang-id</p>
			<p id="meaning-other-lang-id">placeholder for meaning-other-lang-id</p>
			<p id="meaning-idioms">placeholder for meaning-idioms</p>
			<p id="meaning-located">placeholder for meaning-located</p>
			<p id="meaning-supplements">placeholder for meaning-supplements</p>
			<p id="meaning-pronunciation">placeholder for meaning-pronunciation</p>
			<p id="consistent-behavior">placeholder for consistent-behavior</p>
			<p id="consistent-behavior-receive-focus">placeholder for consistent-behavior-receive-focus</p>
			<p id="consistent-behavior-unpredictable-change">placeholder for consistent-behavior-unpredictable-change</p>
			<p id="consistent-behavior-consistent-locations">placeholder for consistent-behavior-consistent-locations</p>
			<p id="consistent-behavior-consistent-functionality">placeholder for consistent-behavior-consistent-functionality</p>
			<p id="consistent-behavior-no-extreme-changes-context">placeholder for consistent-behavior-no-extreme-changes-context</p>
			<p id="minimize-error">placeholder for minimize-error</p>
			<p id="minimize-error-identified">placeholder for minimize-error-identified</p>
			<p id="minimize-error-cues">placeholder for minimize-error-cues</p>
			<p id="minimize-error-suggestions">placeholder for minimize-error-suggestions</p>
			<p id="minimize-error-reversible">placeholder for minimize-error-reversible</p>
			<p id="minimize-error-context-help">placeholder for minimize-error-context-help</p>
			<p id="minimize-error-reversible-all">placeholder for minimize-error-reversible-all</p>
			<p id="ensure-compat">placeholder for ensure-compat</p>
			<p id="ensure-compat-parses">placeholder for ensure-compat-parses</p>
			<p id="ensure-compat-rsv">placeholder for ensure-compat-rsv</p>
			<p id="G1">placeholder for G1</p>
			<p id="G4">placeholder for G4</p>
			<p id="G5">placeholder for G5</p>
			<p id="G8">placeholder for G8</p>
			<p id="G9">placeholder for G9</p>
			<p id="G10">placeholder for G10</p>
			<p id="G11">placeholder for G11</p>
			<p id="G13">placeholder for G13</p>
			<p id="G14">placeholder for G14</p>
			<p id="G15">placeholder for G15</p>
			<p id="G17">placeholder for G17</p>
			<p id="G18">placeholder for G18</p>
			<p id="G19">placeholder for G19</p>
			<p id="G21">placeholder for G21</p>
			<p id="G53">placeholder for G53</p>
			<p id="G54">placeholder for G54</p>
			<p id="G55">placeholder for G55</p>
			<p id="G56">placeholder for G56</p>
			<p id="G57">placeholder for G57</p>
			<p id="G58">placeholder for G58</p>
			<p id="G59">placeholder for G59</p>
			<p id="G60">placeholder for G60</p>
			<p id="G61">placeholder for G61</p>
			<p id="G62">placeholder for G62</p>
			<p id="G63">placeholder for G63</p>
			<p id="G64">placeholder for G64</p>
			<p id="G65">placeholder for G65</p>
			<p id="G68">placeholder for G68</p>
			<p id="G69">placeholder for G69</p>
			<p id="G70">placeholder for G70</p>
			<p id="G71">placeholder for G71</p>
			<p id="G73">placeholder for G73</p>
			<p id="G74">placeholder for G74</p>
			<p id="G75">placeholder for G75</p>
			<p id="G76">placeholder for G76</p>
			<p id="G78">placeholder for G78</p>
			<p id="G79">placeholder for G79</p>
			<p id="G80">placeholder for G80</p>
			<p id="G81">placeholder for G81</p>
			<p id="G82">placeholder for G82</p>
			<p id="G83">placeholder for G83</p>
			<p id="G84">placeholder for G84</p>
			<p id="G85">placeholder for G85</p>
			<p id="G86">placeholder for G86</p>
			<p id="G87">placeholder for G87</p>
			<p id="G88">placeholder for G88</p>
			<p id="G89">placeholder for G89</p>
			<p id="G90">placeholder for G90</p>
			<p id="G91">placeholder for G91</p>
			<p id="G92">placeholder for G92</p>
			<p id="G93">placeholder for G93</p>
			<p id="G94">placeholder for G94</p>
			<p id="G95">placeholder for G95</p>
			<p id="G96">placeholder for G96</p>
			<p id="G97">placeholder for G97</p>
			<p id="G98">placeholder for G98</p>
			<p id="G99">placeholder for G99</p>
			<p id="G100">placeholder for G100</p>
			<p id="G101">placeholder for G101</p>
			<p id="G102">placeholder for G102</p>
			<p id="G103">placeholder for G103</p>
			<p id="G105">placeholder for G105</p>
			<p id="G107">placeholder for G107</p>
			<p id="G108">placeholder for G108</p>
			<p id="G110">placeholder for G110</p>
			<p id="G111">placeholder for G111</p>
			<p id="G112">placeholder for G112</p>
			<p id="G115">placeholder for G115</p>
			<p id="G117">placeholder for G117</p>
			<p id="G120">placeholder for G120</p>
			<p id="G121">placeholder for G121</p>
			<p id="G122">placeholder for G122</p>
			<p id="G123">placeholder for G123</p>
			<p id="G124">placeholder for G124</p>
			<p id="G125">placeholder for G125</p>
			<p id="G126">placeholder for G126</p>
			<p id="G127">placeholder for G127</p>
			<p id="G128">placeholder for G128</p>
			<p id="G130">placeholder for G130</p>
			<p id="G131">placeholder for G131</p>
			<p id="G133">placeholder for G133</p>
			<p id="G134">placeholder for G134</p>
			<p id="G135">placeholder for G135</p>
			<p id="G136">placeholder for G136</p>
			<p id="G138">placeholder for G138</p>
			<p id="G139">placeholder for G139</p>
			<p id="G140">placeholder for G140</p>
			<p id="G141">placeholder for G141</p>
			<p id="G142">placeholder for G142</p>
			<p id="G143">placeholder for G143</p>
			<p id="G144">placeholder for G144</p>
			<p id="G145">placeholder for G145</p>
			<p id="G146">placeholder for G146</p>
			<p id="G147">placeholder for G147</p>
			<p id="G148">placeholder for G148</p>
			<p id="G149">placeholder for G149</p>
			<p id="G150">placeholder for G150</p>
			<p id="G151">placeholder for G151</p>
			<p id="G152">placeholder for G152</p>
			<p id="G153">placeholder for G153</p>
			<p id="G155">placeholder for G155</p>
			<p id="G156">placeholder for G156</p>
			<p id="G157">placeholder for G157</p>
			<p id="G158">placeholder for G158</p>
			<p id="G159">placeholder for G159</p>
			<p id="G160">placeholder for G160</p>
			<p id="G161">placeholder for G161</p>
			<p id="G162">placeholder for G162</p>
			<p id="G163">placeholder for G163</p>
			<p id="G164">placeholder for G164</p>
			<p id="G165">placeholder for G165</p>
			<p id="G166">placeholder for G166</p>
			<p id="G167">placeholder for G167</p>
			<p id="G168">placeholder for G168</p>
			<p id="G169">placeholder for G169</p>
			<p id="G170">placeholder for G170</p>
			<p id="G171">placeholder for G171</p>
			<p id="G172">placeholder for G172</p>
			<p id="G173">placeholder for G173</p>
			<p id="G174">placeholder for G174</p>
			<p id="G175">placeholder for G175</p>
			<p id="G176">placeholder for G176</p>
			<p id="G177">placeholder for G177</p>
			<p id="G178">placeholder for G178</p>
			<p id="G179">placeholder for G179</p>
			<p id="G180">placeholder for G180</p>
			<p id="G181">placeholder for G181</p>
			<p id="G182">placeholder for G182</p>
			<p id="G183">placeholder for G183</p>
			<p id="G184">placeholder for G184</p>
			<p id="G185">placeholder for G185</p>
			<p id="G186">placeholder for G186</p>
			<p id="G187">placeholder for G187</p>
			<p id="G188">placeholder for G188</p>
			<p id="G189">placeholder for G189</p>
			<p id="G190">placeholder for G190</p>
			<p id="G191">placeholder for G191</p>
			<p id="G192">placeholder for G192</p>
			<p id="G193">placeholder for G193</p>
			<p id="G194">placeholder for G194</p>
			<p id="G195">placeholder for G195</p>
			<p id="G196">placeholder for G196</p>
			<p id="G197">placeholder for G197</p>
			<p id="G198">placeholder for G198</p>
			<p id="H2">placeholder for H2</p>
			<p id="H4">placeholder for H4</p>
			<p id="H24">placeholder for H24</p>
			<p id="H25">placeholder for H25</p>
			<p id="H27">placeholder for H27</p>
			<p id="H28">placeholder for H28</p>
			<p id="H30">placeholder for H30</p>
			<p id="H32">placeholder for H32</p>
			<p id="H33">placeholder for H33</p>
			<p id="H34">placeholder for H34</p>
			<p id="H35">placeholder for H35</p>
			<p id="H36">placeholder for H36</p>
			<p id="H37">placeholder for H37</p>
			<p id="H39">placeholder for H39</p>
			<p id="H40">placeholder for H40</p>
			<p id="H42">placeholder for H42</p>
			<p id="H43">placeholder for H43</p>
			<p id="H44">placeholder for H44</p>
			<p id="H45">placeholder for H45</p>
			<p id="H46">placeholder for H46</p>
			<p id="H48">placeholder for H48</p>
			<p id="H49">placeholder for H49</p>
			<p id="H50">placeholder for H50</p>
			<p id="H51">placeholder for H51</p>
			<p id="H53">placeholder for H53</p>
			<p id="H54">placeholder for H54</p>
			<p id="H56">placeholder for H56</p>
			<p id="H57">placeholder for H57</p>
			<p id="H58">placeholder for H58</p>
			<p id="H59">placeholder for H59</p>
			<p id="H60">placeholder for H60</p>
			<p id="H62">placeholder for H62</p>
			<p id="H63">placeholder for H63</p>
			<p id="H64">placeholder for H64</p>
			<p id="H65">placeholder for H65</p>
			<p id="H67">placeholder for H67</p>
			<p id="H69">placeholder for H69</p>
			<p id="H70">placeholder for H70</p>
			<p id="H71">placeholder for H71</p>
			<p id="H73">placeholder for H73</p>
			<p id="H74">placeholder for H74</p>
			<p id="H75">placeholder for H75</p>
			<p id="H76">placeholder for H76</p>
			<p id="H77">placeholder for H77</p>
			<p id="H78">placeholder for H78</p>
			<p id="H79">placeholder for H79</p>
			<p id="H80">placeholder for H80</p>
			<p id="H81">placeholder for H81</p>
			<p id="H82">placeholder for H82</p>
			<p id="H83">placeholder for H83</p>
			<p id="H84">placeholder for H84</p>
			<p id="H85">placeholder for H85</p>
			<p id="H86">placeholder for H86</p>
			<p id="H87">placeholder for H87</p>
			<p id="H88">placeholder for H88</p>
			<p id="H89">placeholder for H89</p>
			<p id="H90">placeholder for H90</p>
			<p id="H91">placeholder for H91</p>
			<p id="C6">placeholder for C6</p>
			<p id="C7">placeholder for C7</p>
			<p id="C8">placeholder for C8</p>
			<p id="C9">placeholder for C9</p>
			<p id="C12">placeholder for C12</p>
			<p id="C13">placeholder for C13</p>
			<p id="C14">placeholder for C14</p>
			<p id="C15">placeholder for C15</p>
			<p id="C16">placeholder for C16</p>
			<p id="C17">placeholder for C17</p>
			<p id="C18">placeholder for C18</p>
			<p id="C19">placeholder for C19</p>
			<p id="C20">placeholder for C20</p>
			<p id="C21">placeholder for C21</p>
			<p id="C22">placeholder for C22</p>
			<p id="C23">placeholder for C23</p>
			<p id="C24">placeholder for C24</p>
			<p id="C25">placeholder for C25</p>
			<p id="C26">placeholder for C26</p>
			<p id="C27">placeholder for C27</p>
			<p id="C28">placeholder for C28</p>
			<p id="C29">placeholder for C29</p>
			<p id="C30">placeholder for C30</p>
			<p id="SCR1">placeholder for SCR1</p>
			<p id="SCR2">placeholder for SCR2</p>
			<p id="SCR14">placeholder for SCR14</p>
			<p id="SCR16">placeholder for SCR16</p>
			<p id="SCR18">placeholder for SCR18</p>
			<p id="SCR19">placeholder for SCR19</p>
			<p id="SCR20">placeholder for SCR20</p>
			<p id="SCR21">placeholder for SCR21</p>
			<p id="SCR22">placeholder for SCR22</p>
			<p id="SCR24">placeholder for SCR24</p>
			<p id="SCR26">placeholder for SCR26</p>
			<p id="SCR27">placeholder for SCR27</p>
			<p id="SCR28">placeholder for SCR28</p>
			<p id="SCR29">placeholder for SCR29</p>
			<p id="SCR30">placeholder for SCR30</p>
			<p id="SCR31">placeholder for SCR31</p>
			<p id="SCR32">placeholder for SCR32</p>
			<p id="SCR33">placeholder for SCR33</p>
			<p id="SCR34">placeholder for SCR34</p>
			<p id="SCR35">placeholder for SCR35</p>
			<p id="SCR36">placeholder for SCR36</p>
			<p id="SCR37">placeholder for SCR37</p>
			<p id="SVR1">placeholder for SVR1</p>
			<p id="SVR2">placeholder for SVR2</p>
			<p id="SVR3">placeholder for SVR3</p>
			<p id="SVR4">placeholder for SVR4</p>
			<p id="SM1">placeholder for SM1</p>
			<p id="SM2">placeholder for SM2</p>
			<p id="SM6">placeholder for SM6</p>
			<p id="SM7">placeholder for SM7</p>
			<p id="SM11">placeholder for SM11</p>
			<p id="SM12">placeholder for SM12</p>
			<p id="SM13">placeholder for SM13</p>
			<p id="SM14">placeholder for SM14</p>
			<p id="T1">placeholder for T1</p>
			<p id="T2">placeholder for T2</p>
			<p id="T3">placeholder for T3</p>
			<p id="ARIA1">placeholder for ARIA1</p>
			<p id="ARIA2">placeholder for ARIA2</p>
			<p id="ARIA3">placeholder for ARIA3</p>
			<p id="ARIA4">placeholder for ARIA4</p>
			<p id="F1">placeholder for F1</p>
			<p id="F2">placeholder for F2</p>
			<p id="F3">placeholder for F3</p>
			<p id="F4">placeholder for F4</p>
			<p id="F7">placeholder for F7</p>
			<p id="F8">placeholder for F8</p>
			<p id="F9">placeholder for F9</p>
			<p id="F10">placeholder for F10</p>
			<p id="F12">placeholder for F12</p>
			<p id="F13">placeholder for F13</p>
			<p id="F14">placeholder for F14</p>
			<p id="F15">placeholder for F15</p>
			<p id="F16">placeholder for F16</p>
			<p id="F17">placeholder for F17</p>
			<p id="F19">placeholder for F19</p>
			<p id="F20">placeholder for F20</p>
			<p id="F22">placeholder for F22</p>
			<p id="F23">placeholder for F23</p>
			<p id="F24">placeholder for F24</p>
			<p id="F25">placeholder for F25</p>
			<p id="F26">placeholder for F26</p>
			<p id="F30">placeholder for F30</p>
			<p id="F31">placeholder for F31</p>
			<p id="F32">placeholder for F32</p>
			<p id="F33">placeholder for F33</p>
			<p id="F34">placeholder for F34</p>
			<p id="F36">placeholder for F36</p>
			<p id="F37">placeholder for F37</p>
			<p id="F38">placeholder for F38</p>
			<p id="F39">placeholder for F39</p>
			<p id="F40">placeholder for F40</p>
			<p id="F41">placeholder for F41</p>
			<p id="F42">placeholder for F42</p>
			<p id="F43">placeholder for F43</p>
			<p id="F44">placeholder for F44</p>
			<p id="F46">placeholder for F46</p>
			<p id="F47">placeholder for F47</p>
			<p id="F48">placeholder for F48</p>
			<p id="F49">placeholder for F49</p>
			<p id="F50">placeholder for F50</p>
			<p id="F52">placeholder for F52</p>
			<p id="F54">placeholder for F54</p>
			<p id="F55">placeholder for F55</p>
			<p id="F58">placeholder for F58</p>
			<p id="F59">placeholder for F59</p>
			<p id="F60">placeholder for F60</p>
			<p id="F61">placeholder for F61</p>
			<p id="F62">placeholder for F62</p>
			<p id="F63">placeholder for F63</p>
			<p id="F65">placeholder for F65</p>
			<p id="F66">placeholder for F66</p>
			<p id="F67">placeholder for F67</p>
			<p id="F68">placeholder for F68</p>
			<p id="F69">placeholder for F69</p>
			<p id="F70">placeholder for F70</p>
			<p id="F71">placeholder for F71</p>
			<p id="F72">placeholder for F72</p>
			<p id="F73">placeholder for F73</p>
			<p id="F74">placeholder for F74</p>
			<p id="F75">placeholder for F75</p>
			<p id="F76">placeholder for F76</p>
			<p id="F77">placeholder for F77</p>
			<p id="F78">placeholder for F78</p>
			<p id="F79">placeholder for F79</p>
			<p id="F80">placeholder for F80</p>
			<p id="F81">placeholder for F81</p>
			<p id="F82">placeholder for F82</p>
			<p id="F83">placeholder for F83</p>
			<p id="F84">placeholder for F84</p>
			<p id="F85">placeholder for F85</p>
			<p id="F86">placeholder for F86</p>
			<p id="F87">placeholder for F87</p>
			<p id="F88">placeholder for F88</p>
			<p id="F89">placeholder for F89</p>
		</div1>
		<div1 id="references">
			<head>References</head>
			<blist>
				<bibl id="CSS1" key="CSS1">"Cascading Style Sheets, level 1," B. Bos, H. Wium Lie, eds., W3C Recommendation 17 Dec 1996, revised 11 Jan 1999. Available at <loc href="http://www.w3.org/TR/REC-CSS1/">http://www.w3.org/TR/REC-CSS1/</loc>.</bibl>
				<bibl id="CSS2" key="CSS2">"Cascading Style Sheets, level 2," B. Bos, H. Wium Lie, C. Lilley, and I. Jacobs, eds., W3C Recommendation 12 May 1998. Available at <loc href="http://www.w3.org/TR/CSS2/">http://www.w3.org/TR/CSS2/</loc>.</bibl>
				<bibl id="CSS21" key="CSS21">"Cascading Style Sheets, level 2 revision 1,"  B. Bos, T. Çelik,  I. Hickson,   H. Wium Lie, eds., W3C Candidate Recommendation 25 February 2004.  Available at:  <loc href="http://www.w3.org/TR/CSS21/">http://www.w3.org/TR/CSS21/</loc>
				</bibl>
				<bibl id="CSS3" key="CSS3">
					<titleref href="http://www.w3.org/Style/CSS/current-work#table">[CSS 2.1 and CSS 3] Roadmap</titleref>, CSS WG's table of modules and publication dates.</bibl>
				<bibl id="FLASH" key="FLASH">"Flash", Adobe Systems. Available at <loc href="http://www.adobe.com/devnet/swf.html">http://www.adobe.com/devnet/swf.html</loc>.</bibl>
				<bibl id="HTML4" key="HTML4">"HTML 4.01 Specification," D. Raggett, A. Le Hors, I. Jacobs, eds.,  W3C Recommendation 24 December 1999. Available at <loc href="http://www.w3.org/TR/html401/">http://www.w3.org/TR/html401/</loc>
				</bibl>
				<bibl id="WCAG20" key="WCAG20">"Web Content Accessibility Guidelines 2.0,"  B. Caldwell, M. Cooper, L. Guarino Reid, and G. Vanderheiden, eds., W3C Working Draft 11 December 2007. This W3C Working Draft is available at <loc href="http://www.w3.org/TR/2007/WD-WCAG20-20071211/">http://www.w3.org/TR/2007/WD-WCAG20-20071211/</loc>.  The latest version of WCAG 2.0 is available at <loc href="http://www.w3.org/TR/WCAG20/">http://www.w3.org/TR/WCAG20/</loc>
				</bibl>
				<bibl id="XHTML1" key="XHTML1">"XHTML 1.0 The Extensible HyperText Markup Language (Second Edition)," S. Pemberton, et al.,  W3C Recommendation 26 January 2000, revised 1 August 2002. Available at:  <loc href="http://www.w3.org/TR/xhtml1/">http://www.w3.org/TR/xhtml1/</loc>.</bibl>
			</blist>
		</div1>
	</back>
</spec>
