var tween = {

	fps: 24,
	list: new Array(),

	alphaTo:function(obj, end, secs, cb) {
		//
	},

	moveToXY:function(obj, endX, endY, secs, cb) {
		this.moveToX(obj, endX, secs, cb);
		this.moveToY(obj, endY, secs, cb);
	},

	moveToX:function(obj, end, secs, cb) {
		this.prepareDimension(obj, 'left', obj.offsetLeft, end, secs, cb);
	},

	moveToY:function(obj, end, secs, cb) {
		this.prepareDimension(obj, 'top', obj.offsetTop, end, secs, cb);
	},

	sizeToWH:function(obj, endW, endH, secs, cb) {
		this.sizeToW(obj, endW, secs, cb);
		this.sizeToH(obj, endH, secs, cb);
	},

	sizeToW:function(obj, end, secs, cb) {
		this.prepareDimension(obj, 'width', obj.offsetWidth, end, secs, cb);
	},

	sizeToH:function(obj, end, secs, cb) {
		this.prepareDimension(obj, 'height', obj.offsetHeight, end, secs, cb);
	},

	prepareDimension:function(obj, prop, start, end, secs, cb) {
		var newStart = this.inProgress(obj, prop)
		var anim = new Object();
		anim.elm = obj;
		anim.prop = prop;
		anim.curr = (newStart !=0 ) ? newStart : start;
		anim.end = end;
		anim.speed = secs;
		anim.step = (end-start)/(secs*this.fps);
		anim.callback = cb;
		anim.timer = setTimeout(function(){tween.tweenDimension(anim)}, 1000/this.fps);
		this.list.push(anim);
	},

	tweenDimension:function(obj) {
		if(Math.round(obj.curr) != obj.end) {
			obj.curr += obj.step;
			obj.elm.style[obj.prop] = Math.round(obj.curr)+'px';
			obj.timer = setTimeout(function(){tween.tweenDimension(obj)}, 1000/tween.fps);
		} else {
			clearTimeout(obj.timer);
			if(obj.callback != undefined) {
				obj.callback();
			}
			tween.deleteTween(obj);	
		}
	},

	inProgress:function(obj, prop) {
		var num = 0;
		for(var i=0;i<this.list.length;i++) {
			if(this.list[i].elm == obj && this.list[i].prop == prop) {
				clearTimeout(this.list[i].timer);
				num = Math.round(this.list[i].curr);
				break;
			}
		}
		return num;
	},

	deleteTween:function(obj, prop) {
		for(var i=0;i<this.list.length;i++) {
			if(this.list[i] == obj) {
				this.list.splice(i,1);
				break;
			}
		}
	},

	setFPS:function(fps) {
		this.fps = fps;
	}
};