<?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 name="school"
	explicitMinWidth="100" 
	explicitMinHeight="100" 
    xmlns="http://ns.adobe.com/mxml/2009"
 	xmlns:s="library://ns.adobe.com/flex/spark"
 	xmlns:mx="library://ns.adobe.com/flex/mx"
    xmlns:flow="library://ns.adobe.com/flashx/textLayout" 
	xmlns:flashGeometry="flash.geom.*"
	creationComplete="handleCreationComplete()"
	preinitialize="preinitialize()"
	resize="handleResize()">

    <Script>
    	<![CDATA[
    	import flashx.textLayout.edit.EditManager;
      import flashx.textLayout.container.ContainerController;
		
		[Bindable]
		private var ChineseFontName:String;
		[Bindable]
		private var KoreanFontName:String;
		[Bindable]
		private var JapaneseFontName:String;
		
			[Bindable]
			public var boundTextSpan:String;
			
		private var schoolContainer:Sprite;
		private var udhrContainer:Sprite;
		
		private const insetWidth:Number = 8;
		private const insetHeight:Number = 8;

		public function handleCreationComplete(): void
		{
			if (Capabilities.os.search("Mac OS") > -1)
			{
				ChineseFontName = "宋体";
				KoreanFontName = "Adobe 명조 Std M";
				JapaneseFontName = "小塚明朝 Pro L";
			}
			else
			{
				ChineseFontName = "Adobe Song Std L";
				KoreanFontName = "Adobe Myungjo Std M";
				JapaneseFontName = "Kozuka Mincho Pro L";
			}
			boundTextSpan = "This span is bound for glory";
 
			schoolContainer = new Sprite();
			schoolContainer.x = 4;
			var schoolController:ContainerController = new ContainerController(schoolContainer);
			schoolFlow.flowComposer.addController(schoolController);
		//	schoolController.wraps = new WrapManager();
		//	schoolController.wraps.wraps = [ new Rectangle(0, 150, 144, 178)];
			textPanel.rawChildren.addChild(schoolContainer);
			
			udhrContainer = new Sprite();
			udhrFlow.flowComposer.addController(new ContainerController(udhrContainer));
			textPanel.rawChildren.addChild(udhrContainer);

			schoolFlow.interactionManager = new EditManager();
			udhrFlow.interactionManager = new EditManager();
			handleResize();
		}

		public function preinitialize(): void
		{
			XML.ignoreWhitespace = false;
		}
		
		public function handleResize(): void
		{
			
			if (!schoolContainer)		// we get resize before creationComplete
				return;
				
			var stageWidth:Number = textPanel.width;
			var stageHeight:Number = textPanel.height;
			
			var compositionWidth:Number = (stageWidth-insetWidth)/2;
			var compositionHeight:Number = stageHeight - insetHeight;
			schoolFlow.flowComposer.getControllerAt(0).setCompositionSize(compositionWidth, compositionHeight);

			udhrFlow.flowComposer.getControllerAt(0).setCompositionSize(compositionWidth, compositionHeight);
			udhrContainer.x = (stageWidth-insetWidth)/2 + insetWidth;

			schoolFlow.flowComposer.updateAllControllers();
			udhrFlow.flowComposer.updateAllControllers();
		}
        ]]>
    
    </Script>
	

	<Declarations>
		

	<flow:TextFlow id="schoolFlow" blockProgression="tb" fontFamily="Minion Pro" paddingLeft="10" paddingRight="10">
								<flow:p fontSize="36"><flow:span>“School” is written </flow:span><flow:span fontFamily="Adobe Arabic" locale="ar">مدرسة</flow:span><flow:span> in Arabic, </flow:span><flow:span fontFamily="{ChineseFontName}" locale="zh">學校</flow:span><flow:span> in Chinese, </flow:span><flow:span locale="el">σχολείο</flow:span><flow:span> in Greek, </flow:span><flow:span fontFamily="Adobe Hebrew" locale="he">בֵּית־סֵפֶר</flow:span><flow:span> in Hebrew, </flow:span><flow:span fontFamily="{JapaneseFontName}" locale="ja">学校</flow:span><flow:span> in Japanese, </flow:span><flow:span fontFamily="{KoreanFontName}" locale="ko">학교</flow:span><flow:span> in Korean, </flow:span><flow:span locale="be" fontFamily="Vrinda">স্কুল</flow:span><flow:span> in Bengali, </flow:span><flow:span locale="ru">школа</flow:span><flow:span> in Russian, and </flow:span><flow:span fontFamily="Adobe Thai" locale="th">อาศรม</flow:span><flow:span> in Thai.</flow:span></flow:p>	
	</flow:TextFlow>

	<!-- FIXME needs to be replaced -->
	<flow:TextFlow id="udhrFlow" blockProgression="tb" fontSize="36" textAlign="right" direction="rtl" fontFamily="Adobe Arabic" locale="ar" paddingLeft="10" paddingRight="10">
		 <flow:p><flow:span text="{boundTextSpan}"/></flow:p>
								<flow:p><flow:span>الإعلان العالمي لحقوق الإنسان</flow:span></flow:p>
								<flow:p><flow:span>لمّا كان الاعتراف بالكرامة المتأصلة في جميع أعضاء الأسرة البشرية وبحقوقهم المتساوية الثابتة هو أساس الحرية والعدل </flow:span><flow:span locale="en" fontFamily="Myriad Pro">English here</flow:span><flow:span>والسلام في العالم.</flow:span></flow:p>
								<flow:p><flow:span>ولما كان تناسي حقوق الإنسان وازدراؤها قد أفضيا إلى أعمال همجية آذت الضمير الإنساني. </flow:span><flow:span fontFamily="Adobe Hebrew" locale="he" fontSize="48">בֵּית־סֵפֶר</flow:span><flow:span>وكان غاية ما يرنو إليه عامة البشر انبثاق عالم يتمتع فيه الفرد بحرية القول والعقيدة ويتحرر من الفزع والفاقة.</flow:span></flow:p>
								<flow:p><flow:span>ولما كان من الضروري أن يتولى القانون حماية حقوق الإنسان لكيلا يضطر المرء آخر الأمر إلى التمرد على الاستبداد والظلم.</flow:span></flow:p>
								<flow:p><flow:span>ولما كانت شعوب الأمم المتحدة قد أكدت في الميثاق من جديد إيمانها بحقوق الإنسان الأساسية وبكرامة الفرد وقدره وبما للرجال والنساء من حقوق متساوية وحزمت أمرها على أن تدفع بالرقي الاجتماعي قدمًا وأن ترفع مستوى الحياة في جو من الحرية أفسح.</flow:span></flow:p>
	</flow:TextFlow>

	</Declarations>

	<mx:Canvas x="0" y="150" width="144" horizontalScrollPolicy="off" verticalScrollPolicy="off" height="178" borderStyle="solid" backgroundColor="0xFFFFFF">	
		<mx:Image source="@Embed(source='../../test/testFiles/assets/gremlin.jpg')" height="178" width="144"/>
	</mx:Canvas>
	<mx:Canvas id="textPanel" percentWidth="100" percentHeight="100"/>
	
</s:Application>