//tween manager

var Tween =
{
	Sprites : [],
	DOMList : [],
	DOMIndex : 0,
	DOM_Sprites : [],
	AnimateDOM : function(_name, DOM_OBJ, _callback)
	{
	try{
		this.DOM_Sprites[_name] = DOM_OBJ;
		this.DOM_Sprites[_name].callback = _callback;
		try{ clearInterval(this.DOM_Sprites[_name].Thread); } catch(e){}
		this.DOM_Sprites[_name].Thread = setInterval("Tween.MoveDOMObj(Tween.DOM_Sprites['"+_name+"'])", GLOBAL_FRAMEDELAY);
	} catch(ex){ alert("AnimateDOM: "+ex.message); }
	},
	AnimateDOMResize : function(_name, DOM_OBJ, _callback)
	{
	try{
		this.DOM_Sprites[_name] = DOM_OBJ;
		this.DOM_Sprites[_name].eventHandler = _callback;
		try{ clearInterval(DOM_OBJ.RThread); } catch(e){}
		DOM_OBJ.RThread = setInterval("Tween.ResizeDOMObj(Tween.DOM_Sprites['"+_name+"'])", GLOBAL_FRAMEDELAY);
	} catch(ex){ alert("AnimateDOMResize: "+ex.message); }
	},
	AnimatePos : function(RawObj, _callback, _blnUseSmoothMovement, _framespeed)
	{
	try{
		this.Sprites[RawObj.Name] = RawObj;
		this.Sprites[RawObj.Name].callback = _callback;
		this.Sprites[RawObj.Name].smoothAnimation = _blnUseSmoothMovement;
		clearInterval(RawObj.ThreadAnimPos);
		RawObj.ThreadAnimPos = setInterval("Tween.Move(Tween.Sprites['"+RawObj.Name+"'])", (_blnUseSmoothMovement)?_framespeed:GLOBAL_FRAMEDELAY);
	} catch(ex){ alert("AnimatePos: "+ex.message); }
	},
	AnimateSize : function(RawObj, _callback)
	{
	try{
		this.Sprites[RawObj.Name] = RawObj;
		this.Sprites[RawObj.Name].callback = _callback;
		clearInterval(RawObj.ThreadAnimDimension);
		RawObj.ThreadAnimDimension = setInterval("Tween.Resize(Tween.Sprites['"+RawObj.Name+"'])", GLOBAL_FRAMEDELAY);
	} catch(ex){ alert("AnimateSize: "+ex.message); }
	},
	MoveDOMObj : function(DOM_SPRITE)
	{
	try{
		if(DOM_SPRITE.XPos==DOM_SPRITE.TargetXPos&&DOM_SPRITE.YPos==DOM_SPRITE.TargetYPos)
		{
			clearInterval(DOM_SPRITE.Thread);
			if(DOM_SPRITE.callback!=null) DOM_SPRITE.callback();
		}
		else
		{
			//determine xpos
			if(DOM_SPRITE.XPos-GLOBAL_FRAMESKIP > DOM_SPRITE.TargetXPos)
			{
				DOM_SPRITE.XPos-=GLOBAL_FRAMESKIP;
			}
			else if(DOM_SPRITE.XPos > DOM_SPRITE.TargetXPos)
			{
				DOM_SPRITE.XPos-=1;
			}
			else if(DOM_SPRITE.XPos+GLOBAL_FRAMESKIP < DOM_SPRITE.TargetXPos)
			{
				DOM_SPRITE.XPos+=GLOBAL_FRAMESKIP;
			}
			else if(DOM_SPRITE.XPos < DOM_SPRITE.TargetXPos)
			{
				DOM_SPRITE.XPos+=1;
			}
			//determine ypos
			if(DOM_SPRITE.YPos-GLOBAL_FRAMESKIP > DOM_SPRITE.TargetYPos)
			{
				DOM_SPRITE.YPos-=GLOBAL_FRAMESKIP;
			}
			else if(DOM_SPRITE.YPos > DOM_SPRITE.TargetYPos)
			{
				DOM_SPRITE.YPos-=1;
			}
			else if(DOM_SPRITE.YPos+GLOBAL_FRAMESKIP < DOM_SPRITE.TargetYPos)
			{
				DOM_SPRITE.YPos+=GLOBAL_FRAMESKIP;
			}
			else if(DOM_SPRITE.YPos < DOM_SPRITE.TargetYPos)
			{
				DOM_SPRITE.YPos+=1;
			}
			DOM_SPRITE.style.left = DOM_SPRITE.XPos+"px";
			DOM_SPRITE.style.top = DOM_SPRITE.YPos+"px";
		}
	} catch(ex){ alert("MoveDOMObj: "+ex.message); }
	},
	ResizeDOMObj : function(DOM_SPRITE)
	{
	try{
		if(DOM_SPRITE.Height==DOM_SPRITE.TargetHeight&&DOM_SPRITE.Width==DOM_SPRITE.TargetWidth)
		{
			clearInterval(DOM_SPRITE.RThread);
			if(DOM_SPRITE.eventHandler!=null) DOM_SPRITE.eventHandler();
		}
		else
		{
			//determine xpos
			if(DOM_SPRITE.Width-GLOBAL_FRAMESKIP > DOM_SPRITE.TargetWidth)
			{
				DOM_SPRITE.Width-=GLOBAL_FRAMESKIP;
			}
			else if(DOM_SPRITE.Width > DOM_SPRITE.TargetWidth)
			{
				DOM_SPRITE.Width-=1;
			}
			else if(DOM_SPRITE.Width+GLOBAL_FRAMESKIP < DOM_SPRITE.TargetWidth)
			{
				DOM_SPRITE.Width+=GLOBAL_FRAMESKIP;
			}
			else if(DOM_SPRITE.Width < DOM_SPRITE.TargetWidth)
			{
				DOM_SPRITE.Width+=1;
			}
			//determine ypos
			if(DOM_SPRITE.Height-GLOBAL_FRAMESKIP > DOM_SPRITE.TargetHeight)
			{
				DOM_SPRITE.Height-=GLOBAL_FRAMESKIP;
			}
			else if(DOM_SPRITE.Height > DOM_SPRITE.TargetHeight)
			{
				DOM_SPRITE.Height-=1;
			}
			else if(DOM_SPRITE.Height+GLOBAL_FRAMESKIP < DOM_SPRITE.TargetHeight)
			{
				DOM_SPRITE.Height+=GLOBAL_FRAMESKIP;
			}
			else if(DOM_SPRITE.Height < DOM_SPRITE.TargetHeight)
			{
				DOM_SPRITE.Height+=1;
			}
			DOM_SPRITE.style.width = DOM_SPRITE.Width+"px";
			DOM_SPRITE.style.height = DOM_SPRITE.Height+"px";
		}
	} catch(ex){ alert("ResizeDOMObj: "+ex.message); }
	},
	Move : function(sprite)
	{
	try{
		if(sprite.XPos==sprite.TargetXPos&&sprite.YPos==sprite.TargetYPos)
		{
			clearInterval(sprite.ThreadAnimPos);
			if(sprite.callback!=null) sprite.callback();
		}
		else
		{
			//determine xpos
			if(sprite.XPos-GLOBAL_FRAMESKIP > sprite.TargetXPos && !sprite.smoothAnimation)
			{
				sprite.XPos-=GLOBAL_FRAMESKIP;
			}
			else if(sprite.XPos > sprite.TargetXPos)
			{
				sprite.XPos-=1;
			}
			else if(sprite.XPos+GLOBAL_FRAMESKIP < sprite.TargetXPos && !sprite.smoothAnimation)
			{
				sprite.XPos+=GLOBAL_FRAMESKIP;
			}
			else if(sprite.XPos < sprite.TargetXPos)
			{
				sprite.XPos+=1;
			}
			//determine ypos
			if(sprite.YPos-GLOBAL_FRAMESKIP > sprite.TargetYPos && !sprite.smoothAnimation)
			{
				sprite.YPos-=GLOBAL_FRAMESKIP;
			}
			else if(sprite.YPos > sprite.TargetYPos)
			{
				sprite.YPos-=1;
			}
			else if(sprite.YPos+GLOBAL_FRAMESKIP < sprite.TargetYPos && !sprite.smoothAnimation)
			{
				sprite.YPos+=GLOBAL_FRAMESKIP;
			}
			else if(sprite.YPos < sprite.TargetYPos)
			{
				sprite.YPos+=1;
			}
			sprite.DIV.style.left = sprite.XPos+"px";
			sprite.DIV.style.top = sprite.YPos+"px";
		}
	} catch(ex){ alert("Move: "+ex.message); }
	},
	Resize : function(sprite)
	{
	try{
		if(sprite.Height==sprite.TargetHeight&&sprite.Width==sprite.TargetWidth)
		{
			clearInterval(sprite.ThreadAnimDimension);
			if(sprite.callback!=null) sprite.callback();
		}
		else
		{
			//determine xpos
			if(sprite.Width-GLOBAL_FRAMESKIP > sprite.TargetWidth)
			{
				sprite.Width-=GLOBAL_FRAMESKIP;
			}
			else if(sprite.Width > sprite.TargetWidth)
			{
				sprite.Width-=1;
			}
			else if(sprite.Width+GLOBAL_FRAMESKIP < sprite.TargetWidth)
			{
				sprite.Width+=GLOBAL_FRAMESKIP;
			}
			else if(sprite.Width < sprite.TargetWidth)
			{
				sprite.Width+=1;
			}
			//determine ypos
			if(sprite.Height-GLOBAL_FRAMESKIP > sprite.TargetHeight)
			{
				sprite.Height-=GLOBAL_FRAMESKIP;
			}
			else if(sprite.Height > sprite.TargetHeight)
			{
				sprite.Height-=1;
			}
			else if(sprite.Height+GLOBAL_FRAMESKIP < sprite.TargetHeight)
			{
				sprite.Height+=GLOBAL_FRAMESKIP;
			}
			else if(sprite.Height < sprite.TargetHeight)
			{
				sprite.Height+=1;
			}
			sprite.DIV.style.width = sprite.Width+"px";
			sprite.DIV.style.height = sprite.Height+"px";
		}
	} catch(ex){ alert("Resize: "+ex.message); }
	}
};