/*
|	Animate Function
|	Uses RobertPenner easing equations (RP): www.robertpenner.com
|	Requires: core.js
|
|	hp.animate.run({init:functionname,target:elementid,x:n,y:n});
*/

		//Animate
		{hp.animate=function(){
			return {
				run:function(oA){
					var oT=hp.utils.get(oA.target);oT.nStartTime=new Date().getTime(),oT.nTimer=0,oT.nPosX=0,oT.nPosY=0;					
					clearInterval(oT.interval);
					oT.interval=setInterval(function(){
						oA.init.call(this,oT,oA.x,oA.y);
					},1);
				},
				moveTo:function(oT,nTX,nTY){
					var nObjX=parseInt(oT.style.left),nDiffX=Math.floor(nTX-nObjX),
						nObjY=parseInt(oT.style.top),nDiffY=Math.floor(nTY-nObjY);
					
					//timed functions
					oT.nTimer=(new Date().getTime()-oT.nStartTime);
					//X axis
					if(nTX!=undefined&&(nDiffX!=0&&!isNaN(nDiffX))) {
						oT.nPosX=hp.easing.easeOutQuad(oT.nTimer,nObjX,nDiffX,7000);//(RP)
						(nDiffX<0)?oT.nPosX=Math.floor(oT.nPosX):oT.nPosX=Math.ceil(oT.nPosX);
						oT.style.left=oT.nPosX+'px';
					}
					//Y axis
					if(nTY!=undefined&&(nDiffY!=0&&!isNaN(nDiffY))) {
						oT.nPosY=hp.easing.easeOutQuad(oT.nTimer,nObjY,nDiffY,7000);//(RP)
						(nDiffY<0)?oT.nPosY=Math.floor(oT.nPosY):oT.nPosY=Math.ceil(oT.nPosY);
						oT.style.top=oT.nPosY+'px';
					}
					
					//complete all		
					if((nDiffX==0||isNaN(nDiffX))&&(nDiffY==0||isNaN(nDiffY))){
						clearInterval(oT.interval);
						(nTX)?oT.style.left=nTX+'px':null;
						(nTY)?oT.style.top=nTY+'px':null;
					}
				}
			}
		}()};
		
		//Equations (RP)
		{hp.linear=function(){
			return {
				tween:function (t,b,c,d) {
					return c*t/d + b;
				}
			}
		}()};
		{hp.easing=function(){
			return {
				easeInQuad:function (t,b,c,d) {
					return c*(t/=d)*t + b;
				},
				easeOutQuad:function (t,b,c,d) {
					return -c *(t/=d)*(t-2) + b;
				}
			}
		}()};