<?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:Module xmlns:mx="http://www.adobe.com/2006/mxml"
				xmlns:s="library://ns.adobe.com/flex/spark"
				paddingBottom="0" paddingTop="0" paddingLeft="0" paddingRight="0"
				height="100%" width="100%">		
<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="10" paddingRight="10" paddingTop="10" paddingBottom="10"/>
		</s:layout>
		<s:VGroup width="100%" height="100%">
			<mx:TextArea id="textArea" width="50%" height="50%" text="Spell cheecking in TextArea"/>
			<mx:Button label="Check British English" click="enableGB()" /> 
			<mx:Button label="Check American English" click="enableUS()" />			
		</s:VGroup>
	</s:Panel>
	
</mx:Module>

