package  
{
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;
	
	import flash.text.TextLineMetrics;
	import flash.text.TextField;

	/**
	 * 
	 */
	public class actionscript_book_NewsLayout_com_example_programmingas3_newslayout_FormattedTextField extends flash.text.TextField
	{
		private var _format:TextFormat;
		
		public var preferredWidth:Number = 300;
		public var preferredHeight:Number = 100;
		
		public function actionscript_book_NewsLayout_com_example_programmingas3_newslayout_FormattedTextField(tf:TextFormat = null) 
		{
			super();
			
			this.autoSize = TextFieldAutoSize.NONE;
			this.wordWrap = true;

			if (tf != null)
			{
				_format = tf;
			}
			else
			{
				_format = getDefaultTextFormat();
			}
			
			//this.setStyle(_format);
		}
		
		private function getDefaultTextFormat():TextFormat 
		{
			var format:TextFormat = new TextFormat();
			format.font = "Verdana";
			format.size = 10;
			format.bold = false;
			format.leading = 0;
			return format;
		}
				
		public function changeFace(faceName:String="Verdana"):void
		{
			if (faceName != null)
			{
				this._format.font = faceName;
				this.setTextFormat(this._format);
			}
		}

		public function changeSize(size:uint=12):void
		{
			if (size > 5)
			{
				this._format.size = size;
				this.setTextFormat(this._format);
			}
		}

		public function changeBold(isBold:Boolean = false):void
		{
			//this.setStyle("fontWeight", isBold ? "bold" : "normal");
			this._format.bold = isBold;
			this.setTextFormat(this._format);
		}
		
		public function changeItalic(isItalic:Boolean = false):void
		{
			//this.setStyle("fontStyle", isItalic ? flash.text.FontStyle.ITALIC : flash.text.FontStyle.REGULAR );
			this._format.italic = isItalic;
			this.setTextFormat(this._format);
		}

		public function changeNormal(isNormal:Boolean = false):void
		{
			this._format.italic = false;
			this._format.bold = false;
			this.setTextFormat(this._format);
		}
				
		public function changeSpacing(spacing:int=1):void
		{
			if (spacing > -10 && spacing < 100)
			{
				this._format.letterSpacing = spacing;
				this.setTextFormat(this._format);
			}
		}
		
		public function changeLeading(leading:int=0):void
		{
			if (leading > -100 && leading < 100)
			{
				this._format.leading = leading;
				this.setTextFormat(this._format);
			}
		}

		public function changeAlign(align:String = "left"):void
		{
			if (align == TextFormatAlign.LEFT || align == TextFormatAlign.RIGHT ||
				align == TextFormatAlign.JUSTIFY || align == TextFormatAlign.CENTER)
			{
				this._format.align = align;
				this.setTextFormat(this._format);
			}
		}
	}
}