<?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"
				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:Application>

