package com.guru.form 
{
	import com.guru.utils.TraceUtil;
	import flash.display.MovieClip;
	import flash.events.FocusEvent;
	import flash.text.TextField;
	import flash.text.TextFieldType;
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class FormTextElement
	{
		protected var mTimeline_mc:MovieClip;
		protected var mInput_mc:MovieClip;
		protected var mDefault_mc:MovieClip;
		protected var mError_mc:MovieClip;
		protected var mMinChar_num:Number;
		protected var mMaxChar_num:Number;
		
		public function FormTextElement(pTimeline_mc:MovieClip, pMinChar_num:Number = 0, pMaxChar_num:Number = 999, pRestrict_str:String = null, pTabIndex_num:Number = 0)
		{
			mTimeline_mc = pTimeline_mc;
			mInput_mc = mTimeline_mc.input_mc;
			mDefault_mc = mTimeline_mc.default_mc;
			mError_mc = mTimeline_mc.error_mc;
			
			mMinChar_num = pMinChar_num;
			mMaxChar_num = pMaxChar_num;
			
			mInput_mc.text_txt.type = TextFieldType.INPUT;
			mInput_mc.text_txt.selectable = true;
			mInput_mc.text_txt.text = "";
			mInput_mc.text_txt.restrict = pRestrict_str;
			mInput_mc.text_txt.maxChars = mMaxChar_num;
			
			this.onFocusOut(null);
			
			if (pTabIndex_num != 0)
			{
				mInput_mc.text_txt.tabEnabled = true;
				mInput_mc.text_txt.tabIndex = pTabIndex_num;	
			}
			
			mInput_mc.addEventListener(FocusEvent.FOCUS_IN, onFocusIn);
			mInput_mc.addEventListener(FocusEvent.FOCUS_OUT, onFocusOut);
		}
		
		public function setText(pText_str:String):void
		{
			mInput_mc.text_txt.text = pText_str + "";
			this.onFocusOut(null);
			this.checkError();
		}
		
		public function checkError():Boolean
		{
			var wordLength_num:Number = this.getData().length;
			var error_bol:Boolean = true;
			if (wordLength_num >= mMinChar_num && wordLength_num <= mMaxChar_num)
			{
				error_bol = false;
				this.hideError();
			}
			else
			{
				this.showError();
			}
			return error_bol;
		}
		
		public function showError():void
		{
			mError_mc.gotoAndStop(2);
		}
		
		public function hideError():void
		{
			mError_mc.gotoAndStop(1);
		}
		
		public function getData():String
		{
			return this.getText();
		}
		
		public function dispose():void
		{
			mInput_mc.removeEventListener(FocusEvent.FOCUS_IN, onFocusIn);
			mInput_mc.removeEventListener(FocusEvent.FOCUS_OUT, onFocusOut);
			
			mInput_mc.text_txt.tabEnabled = false;
			mInput_mc.text_txt.tabIndex = 0;
		}
		
		protected function onFocusIn(e:FocusEvent):void
		{
			mDefault_mc.visible = false;
		}
		
		protected function onFocusOut(e:FocusEvent):void
		{
			mDefault_mc.visible = this.getText().length == 0;
		}
		
		protected function getText():String
		{
			return mInput_mc.text_txt.text;
		}
	}

}