<?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.

-->
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx"
			   xmlns:a="http://flex.apache.org/ns">
	<s:layout>
		<s:HorizontalLayout verticalAlign="middle" horizontalAlign="center" />
	</s:layout>
	
	<fx:Script>
		<![CDATA[	
			import org.apache.flex.validators.PostCodeValidator;
			
			import mx.controls.Alert;
			
			protected function validatePostCode(event:MouseEvent):void
			{
				if (aust.selected) {
					checkAustralianPostCode(postcode.text);
				}
				else if (uk.selected) {
					checkUKPostCode(postcode.text);
				}
				else if (can.selected) {
					checkCanadianPostCode(postcode.text);
				}
			}
			
			public function checkAustralianPostCode(postcode:String):void {
				validator.formats = ["NNNN"];
			}
				
			public function checkUKPostCode(postcode:String):void {
				validator.formats = ["AN NAA", "ANN NAA", "AAN NAA", "ANA NAA", "AANN NAA", "AANA NAA"];
			}
			
			public function checkCanadianPostCode(postcode:String):void {
				validator.format = "ANA NAN";
			}
		]]>
	</fx:Script>
	
	
	<fx:Declarations>
		<a:PostCodeValidator id="validator" source="{postcode}" property="text" 
					   trigger="{checkPostcode}" triggerEvent="click"
					   invalid="Alert.show('Postcode incorrect format!', 'Postcode')"/>
	</fx:Declarations>
		
	
	<s:Panel title="Postcode Validator Example" width="100%" height="100%">		
		<s:layout>
			<s:VerticalLayout paddingLeft="10" paddingRight="10" paddingTop="10" paddingBottom="10"/>
		</s:layout>
		<s:HGroup verticalAlign="middle">
			<s:Label text="Postcode" />
			<s:TextInput id="postcode" text=""/>
		</s:HGroup>
		<s:HGroup verticalAlign="middle">
			<s:Label text="Country" />
			<s:RadioButton id="aust" label="Australia" selected="true" />	
			<s:RadioButton id="uk" label="UK" />	
			<s:RadioButton id="can" label="Canada" />
		</s:HGroup>
		<s:Button id="checkPostcode" label="Validate Postcode" click="validatePostCode(event)" />
	</s:Panel>
</s:Application>
