<?xml version="1.0" encoding="utf-8"?>
<!--

Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

-->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
				xmlns:s="library://ns.adobe.com/flex/spark"
				layout="vertical">		
<mx:Script>
	<![CDATA[
			import com.adobe.linguistics.spelling.SpellUI;	
			
			private function enableUS():void {
				SpellUI.enableSpelling(textArea, "en_US");
			}

			private function enableGB():void {
				SpellUI.enableSpelling(textArea, "en_GB");
			}
	]]>
</mx:Script>
	<s:Panel title="Spell Check" width="100%" height="100%">
		<s:layout>
			<s:VerticalLayout paddingLeft="20" paddingTop="20" gap="10" />
		</s:layout>
		<s:VGroup width="100%" height="100%">
			<mx:TextArea id="textArea" width="50%" height="50%" fontSize="20" text="Spell cheecking in TextArea"/>
			<mx:Button id="tt2" label="Check British English" click="enableGB()" /> 
			<mx:Button id="tt3" label="Check American English" click="enableUS()" />			
		</s:VGroup>
	</s:Panel>
	
</mx:Application>

