alpha = function () {
	var obj = $(arguments[0]);
	obj.numStepAlpha = (is_ie)?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);
	};
};

tween = function () {
	var obj = $(arguments[0]);
	obj.numStepTween = (is_ie)?10:10;
	obj.thisIntervalTween = null;
	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.tweenToRelative = function() {
		var posR = getPos(arguments[0]);
		var pos = getPos(obj);
		var t = pos.y - posR.y;
		var l = pos.x - posR.x;
		this.numTimeTween = 0;
		this.numInicioXTween = t;
		this.numInicioYTween = l;
		this.numFinalXTween = arguments[1];
		this.numFinalYTween = arguments[2];
		this.strEasingTween = (arguments[3]) ? arguments[3] : 'linear';
		this.numDurationTween = (arguments[4]) ? arguments[4]*1000 : 1000;
		this.callbackTween = arguments[5] || function(){};
		clearInterval(obj.thisIntervalTween);
		obj.thisIntervalTween = setInterval(obj.onEnterFrameTween, obj.numStepTween);
	};
	obj.stopTween = function() {
		clearInterval(obj.thisIntervalTween);
	};
};

findTweenValue = function (_propStart, _propDest, _timeStart, _timeNow, _timeDest, _animType, _extra1, _extra2) {
	var t = _timeNow-_timeStart;
	var b = _propStart;
	var c = _propDest-_propStart;
	var d = _timeDest-_timeStart;
	var a = _extra1;
	var p = _extra2;
	var s = _extra1;
	switch (_animType.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);
	}
};

setPosition = function (obj, x, y) {
	with (obj.style) {
		top = x+'px';
		left = y+'px';
	}
};

getPos = function (e) {
	if (typeof e == 'string') e = $(e);
	var left = 0;
	var top = 0;
	while (e.offsetParent) {
		left += e.offsetLeft;
		top += e.offsetTop;
		e = e.offsetParent;
	}
	left += e.offsetLeft;
	top += e.offsetTop;
	return {x:left, y:top};
};

setAlpha = function (e, a) {
	a = Math.round(a);
	if (typeof e == 'string') e = $(e);
	with (e.style) {
		if (is_ie) filter = 'alpha(opacity='+a+')';
		else opacity = a/100;
	}
};


