/**
	fontColor:   #RRGGBB
	fontSize:    XXpx
	borderColor: #RRGGBB
	bgColor:     #RRGGBB
	autoUndo:    true
**/

dAnimText           = function(){};
dAnimText.Effect    = function(div, settings){
	if(!settings && dAnimText.defaultsettings)
		settings = dAnimText.defaultsettings;
	else if(!settings)
		settings = {};
	
	if(!settings.delay)       settings.delay = 1000;
	if(!settings.ease)        settings.ease  = 'easeInOut';
	
	settings.fontColor   = settings.fontColor  ?dAnimText._NormalizeRgb(settings.fontColor):false;
	settings.borderColor = settings.borderColor?dAnimText._NormalizeRgb(settings.borderColor):false;
	settings.bgColor     = settings.bgColor    ?dAnimText._NormalizeRgb(settings.bgColor):false;
	if(!settings.fontSize) settings.fontSize = false;
	if(typeof settings.autoUndo == 'undefined') settings.autoUndo = true;
	
	dAnimText.defaultSettings = settings;
	
	settings._original = dAnimText._GetProps(div);
	dAnim.CreateAnimation('Text', div, settings);
}
dAnimText._GetProps     = function(div){
	var obj = document.getElementById(div);
	var ret = {
		fontSize:    obj.style.fontSize,
		fontColor:   dAnimText._NormalizeRgb(obj.style.color),
		borderColor: dAnimText._NormalizeRgb(obj.style.borderColor),
		bgColor:     dAnimText._NormalizeRgb(obj.style.backgroundColor)
	};
	
	return ret;
}
dAnimText._NormalizeRgb = function(rgb){
	var ret = new Array(0, 0, 0);
	if(rgb.substr(0, 3) == 'rgb'){
		ret = rgb.substr(4, rgb.length-4-1).split(",");
		ret[0] = parseInt(ret[0]);
		ret[1] = parseInt(ret[1]);
		ret[2] = parseInt(ret[2]);
	}
	else if(rgb){
		if(rgb.substr(0, 1) == '#')
			rgb = rgb.substr(1);
		
		if(rgb.length == 3){
			ret[0] = parseInt(rgb.charAt(0)+rgb.charAt(0),16);
			ret[1] = parseInt(rgb.charAt(1)+rgb.charAt(1),16);
			ret[2] = parseInt(rgb.charAt(2)+rgb.charAt(2),16);
		}
		else{
			ret[0] = parseInt(rgb.substr(0, 2),16);
			ret[1] = parseInt(rgb.substr(2, 2),16);
			ret[2] = parseInt(rgb.substr(4),   16);
		}
	}
	
	return ret;
}
dAnimText._Int2Hex      = function(n){
	var ret = parseInt(n).toString(16);
	if(ret.length < 2)
		ret = "0"+ret;
	return ret;
}
dAnimText._CalcRgb  = function(or, ne, calcEase, invert){
	if(invert){
		var nR = dAnimText._Int2Hex(ne[0]+((or[0]-ne[0])*calcEase));
		var nG = dAnimText._Int2Hex(ne[1]+((or[1]-ne[1])*calcEase));
		var nB = dAnimText._Int2Hex(ne[2]+((or[2]-ne[2])*calcEase));
	}
	else{
		var nR = dAnimText._Int2Hex(or[0]+((ne[0]-or[0])*calcEase));
		var nG = dAnimText._Int2Hex(or[1]+((ne[1]-or[1])*calcEase));
		var nB = dAnimText._Int2Hex(or[2]+((ne[2]-or[2])*calcEase));
	}
	return nR+nG+nB;
}
dAnimText._Frame    = function(set, obj, act, _pc, isFirst, isLast){
	if(act.trigger == 'Text'){
		var or       = set._original;
		var calcEase = dAnim._CalcEase(set.ease, (_pc/100));
		if(set.autoUndo){
			if(_pc <= 50){
				var calcEase = dAnim._CalcEase(set.ease, (_pc/100)*2);
			}
			if(_pc > 50){
				var calcEase = dAnim._CalcEase(set.ease, ((_pc-50)/100)*2);
			}
		}
		
		if(set.bgColor){
			var nColor = dAnimText._CalcRgb(or.bgColor, set.bgColor, calcEase, (_pc>50));
			obj.style.backgroundColor = "#"+nColor;
		}
		if(set.fontColor){
			var nColor = dAnimText._CalcRgb(or.fontColor, set.fontColor, calcEase, (_pc>50));
			obj.style.color = "#"+nColor;
		}
		if(set.borderColor){
			var nColor = dAnimText._CalcRgb(or.borderColor, set.borderColor, calcEase, (_pc>50));
			obj.style.borderColor = "#"+nColor;
		}
		if(isLast && set._inverted){
			// Desinverter
			set._inverted = false;
			var tmp = set._original;
			set._original = {
				bgColor:     set.bgColor,
				fontColor:   set.fontColor,
				borderColor: set.borderColor,
				fontSize:    set.fontSize
			};
			set.bgColor     = tmp.bgColor;
			set.fontColor   = tmp.fontColor;
			set.borderColor = tmp.borderColor;
			set.fontSize    = tmp.fontSize;
		}
	}
}

// Cadastra o módulo acima no dAnim
dAnim.AddModule('Text', dAnimText._Frame);

