package classes.matuto.mtween.textinho
{
	import flash.display.MovieClip;
	import flash.display.Sprite;
	
	
	public class Texto extends Sprite
	{
		
		public var linhas		:Array = new Array;
		public var pos			:Number = 0;
		private var quebra		:String = "%3Cbr%3E";
		
		private var classe		:Class;
		
		//private var quebra	:String = "%0D%0A";
		
		public var onClose		:Function;
		
		public function Texto(_classe:Class)
		{
			classe = _classe;
		}		
		
		public function init( time :Number) :void
		{
			var length:int 			= 		linhas.length;
			
			for(var i:int=0; i< length; i++)
			{
				var atual :Linha = linhas[i];
				atual.init(time);
			}
			
		}		
		
		public function setTexto(_texto :String, caracteres :int) :void
		{

			linhas = [];
			
			_texto = escape(_texto);
			
			var paragrafos :Array = _texto.split(quebra);
			
			var total :int = paragrafos.length;
			
			for(var i:int=0; i<total; i++)
			{
				var atual :String = unescape( paragrafos[i] );
				montaLinhas(atual + " ", caracteres);
			}
			
			pos = 0;
		}
		
		/*
		private function quebraTexto(txt:String):Array 
		{
			var result:Array =  (txt.split(quebra).length <= 1) ? txt.split(quebra2) : txt.split(quebra);
			return result;
		}
		*/
		
		public function mudaFonte(t:Number):void
		{
			var length:int = linhas.length;
			
			for(var i:int=0; i< length; i++)
			{
				var atual :Linha = linhas[i];
				atual.mudaFonte(t);
			}
		}
		
		public function montaLinhas(_texto :String, caracteres :int) :void
		{
			//linhas = new Array();

			var _linhas	:int = Math.ceil( _texto.length/caracteres );
			
			var _inicial :int = 0;
			
			for(var i:int=0; i<_linhas; i++)
			{
				var atual :String;
				
				var _pos :int = _texto.indexOf(" ", _inicial + caracteres);
				//if (_pos < _texto.length - 1 && i==_linhas-1) _linhas++;
				atual = _texto.substr(_inicial, _pos - _inicial);
				
				if(atual=="" || atual==" ") {
					pos += -35;
					continue;
				}
				
				//tira as tags html para não contar no tamanho da linha
				
				var pos_a :int = atual.indexOf("<font");
				
				if(pos_a!=-1) {
					
					var string_inutil :String = atual.substr(pos_a, atual.indexOf(">"));
					
					var tamanho :int = string_inutil.length;
					
					_pos = _texto.indexOf(" ", _inicial+tamanho+caracteres);
					atual = _texto.substr(_inicial, _pos - _inicial);
					_inicial = _pos;
				}
				
				//----------------------
				
				_inicial = _pos;
				
				var _lin :Linha = new classe();
				
				var length:int = linhas.length;
				
				_lin.name = "_linha_"+ length;
				addChild(_lin);
				
				_lin.setTextinho(atual, (length-1)/5);
				
				_lin.y = pos;
				
				pos = _lin.y-5 + _lin.height + .5;
				linhas.push(_lin);
			}
			
		}
		
		
		public function close() :void
		{
			var length:int = linhas.length;
			
			if (length > 0) {
				
				for(var i:int=0; i< length; i++)
				{
					var atual :Linha = linhas[i];
					
					atual.onClose = function() :void{
						//removeChild(this);
						if(this==linhas[0])  {
							
							for (var i:int = 0; i < linhas.length; i++) 
							{
								removeChild(linhas[i]);
							}
							linhas = new Array();
							onClose();
						}

					}
					atual.close((length-i)/5);
				}
			}else{
				linhas = [];
				onClose();
			}
		}
		
	}
	
}