/* Alpha */
alpha = function () {
	var obj = $(arguments[0]);
	obj.numStepAlpha = (isIE) ? 45 : 40;
	obj.thisIntervalAlpha = null;
	obj.onEnterFrameAlpha = function() {
		obj.numTimeAlpha += obj.numStepAlpha;
		var newAlpha = findTweenValue(obj.numInicioAlpha, obj.numFinalAlpha, 0, obj.numTimeAlpha, obj.numDurationAlpha, obj.strEasingAlpha);
		setAlpha(obj, newAlpha);
		if (obj.numTimeAlpha>=obj.numDurationAlpha) {
			setAlpha(obj, obj.numFinalAlpha);
			clearInterval(obj.thisIntervalAlpha);
			obj.callbackAlpha();
		}
	};
	obj.alphaTo = function() {
		this.numTimeAlpha = 0;
		this.numInicioAlpha = arguments[0];
		this.numFinalAlpha = arguments[1];
		this.strEasingAlpha = (arguments[2]) ? arguments[2] : 'linear';
		this.numDurationAlpha = (arguments[3]) ? arguments[3]*1000 : 1000;
		this.callbackAlpha = arguments[4] || function () {
		};
		clearInterval(obj.thisIntervalAlpha);
		obj.thisIntervalAlpha = setInterval(obj.onEnterFrameAlpha, obj.numStepAlpha);
	};
	obj.stopAlpha = function() {
		clearInterval(obj.thisIntervalAlpha);
	};
};
// Aplica um valor alpha de 0 a 100
setAlpha = function (e, a) {
	a = Math.round(a);
	if (typeof e == 'string') e = $(e);
	with (e.style) {
		if (isIE) {
			filter = 'alpha(opacity='+a+')';
		} else {
			opacity = a/100;
		}
	}
};
/* Tween */
tween = function () {
	var obj = $(arguments[0]);
	obj.numStepTween = (isIE) ? 10 : 10;
	obj.thisIntervalTween = null;
	obj.posXTween = 100;
	obj.posYTween = 100;
	obj.onEnterFrameTween = function() {
		obj.numTimeTween += obj.numStepTween;
		var posX = findTweenValue(obj.numInicioXTween, obj.numFinalXTween, 0, obj.numTimeTween, obj.numDurationTween, obj.strEasingTween);
		var posY = findTweenValue(obj.numInicioYTween, obj.numFinalYTween, 0, obj.numTimeTween, obj.numDurationTween, obj.strEasingTween);
		setPosition(obj, posX, posY);
		if (obj.numTimeTween>=obj.numDurationTween) {
			setPosition(obj, obj.numFinalXTween, obj.numFinalYTween);
			clearInterval(obj.thisIntervalTween);
			obj.callbackTween();
		}
	};
	obj.tweenTo = function() {
		var pos = getPos(obj);
		this.numTimeTween = 0;
		this.numInicioXTween = pos.y;
		this.numInicioYTween = pos.x;
		this.numFinalXTween = arguments[0];
		this.numFinalYTween = arguments[1];
		this.strEasingTween = (arguments[2]) ? arguments[2] : 'linear';
		this.numDurationTween = (arguments[3]) ? arguments[3]*1000 : 1000;
		this.callbackTween = arguments[4] || function () {
		};
		clearInterval(obj.thisIntervalTween);
		obj.thisIntervalTween = setInterval(obj.onEnterFrameTween, obj.numStepTween);
	};
	obj.stopTween = function() {
		clearInterval(obj.thisIntervalTween);
	};
};
/* Função de easing */
findTweenValue = function (PS, PD, TS, TN, TD, AT, E1, E2) {
	var t = TN-TS, b = PS, c = PD-PS, d = TD-TS, a = E1, p = E2, s = E1;
	switch (AT.toLowerCase()) {
	case "linear" :
		return c*t/d+b;
	case "easeinexpo" :
		return (t == 0) ? b : c*Math.pow(2, 10*(t/d-1))+b;
	case "easeoutexpo" :
		return (t == d) ? b+c : c*(-Math.pow(2, -10*t/d)+1)+b;
	case "easeoutelastic" :
		if (t == 0) {
			return b;
		}
		if ((t /= d) == 1) {
			return b+c;
		}
		if (!p) {
			p = d*.3;
		}
		if (!a || a<Math.abs(c)) {
			a = c;
			var s = p/4;
		} else {
			var s = p/(2*Math.PI)*Math.asin(c/a);
		}
		return (a*Math.pow(2, -10*t)*Math.sin((t*d-s)*(2*Math.PI)/p)+c+b);
	}
};