package classes.caurina.transitions {

	/**
	 * PropertyInfoObj
	 * An object containing the updating info for a given property (its starting value, and its final value)
	 *
	 * @author		Zeh Fernando
	 * @version		1.0.0
	 * @private
	 */

	public class PropertyInfoObj {
		
		public var valueStart				:Number;	// Starting value of the tweening (null if not started yet)
		public var valueComplete			:Number;	// Final desired value
		public var originalValueComplete	:Object;	// Final desired value as declared initially
		public var arrayIndex				:Number;	// Index (if this is an array item)
		public var extra					:Object;	// Additional parameters, used by some special properties
		public var isSpecialProperty		:Boolean;	// Whether or not this is a special property instead of a direct one
		public var hasModifier				:Boolean;	// Whether or not it has a modifier function
		public var modifierFunction		:Function;	// Modifier function, if any
		public var modifierParameters		:Array;		// Additional array of modifier parameters

		// ==================================================================================================================================
		// CONSTRUCTOR function -------------------------------------------------------------------------------------------------------------

		/**
		 * Initializes the basic PropertyInfoObj.
		 *
		 * @param	p_valueStart		Number		Starting value of the tweening (null if not started yet)
		 * @param	p_valueComplete		Number		Final (desired) property value
		 */
		function PropertyInfoObj(p_valueStart:Number, p_valueComplete:Number, p_originalValueComplete:Object, p_arrayIndex:Number, p_extra:Object, p_isSpecialProperty:Boolean, p_modifierFunction:Function, p_modifierParameters:Array) {
			valueStart			=	p_valueStart;
			valueComplete		=	p_valueComplete;
			originalValueComplete	=	p_originalValueComplete;
			arrayIndex				=	p_arrayIndex;
			extra					=	p_extra;
			isSpecialProperty		=	p_isSpecialProperty;
			hasModifier			=	Boolean(p_modifierFunction);
			modifierFunction 	=	p_modifierFunction;
			modifierParameters	=	p_modifierParameters;
		}


		// ==================================================================================================================================
		// OTHER functions ------------------------------------------------------------------------------------------------------------------

		/**
		 * Clones this property info and returns the new PropertyInfoObj
		 *
		 * @param	omitEvents		Boolean			Whether or not events such as onStart (and its parameters) should be omitted
		 * @return 					TweenListObj	A copy of this object
		 */
		public function clone():PropertyInfoObj {
			var nProperty:PropertyInfoObj = new PropertyInfoObj(valueStart, valueComplete, originalValueComplete, arrayIndex, extra, isSpecialProperty, modifierFunction, modifierParameters);
			return nProperty;
		}

		/**
		 * Returns this object described as a String.
		 *
		 * @return 					String		The description of this object.
		 */
		public function toString():String {
			var returnStr:String = "\n[PropertyInfoObj ";
			returnStr += "valueStart:" + String(valueStart);
			returnStr += ", ";
			returnStr += "valueComplete:" + String(valueComplete);
			returnStr += ", ";
			returnStr += "originalValueComplete:" + String(originalValueComplete);
			returnStr += ", ";
			returnStr += "arrayIndex:" + String(arrayIndex);
			returnStr += ", ";
			returnStr += "extra:" + String(extra);
			returnStr += ", ";
			returnStr += "isSpecialProperty:" + String(isSpecialProperty);
			returnStr += ", ";
			returnStr += "hasModifier:" + String(hasModifier);
			returnStr += ", ";
			returnStr += "modifierFunction:" + String(modifierFunction);
			returnStr += ", ";
			returnStr += "modifierParameters:" + String(modifierParameters);
			returnStr += "]\n";
			return returnStr;
		}
		
	}

}
