/********************************/
//	Dynamic Dependant Project
//	FX Stuff
//	Requires the foundation code
/********************************/

var ddp;
if(!ddp) ddp = {};
ddp.fx = {};

/********************************/
//	DDP -> FX
/********************************/
(function() {


function doPosChangeMem(elem,startPos,endPos,steps,intervals,powr) 
{
	var ppx = "px";
	if (document.layers) ppx = "";
	
	if (elem.posChangeMemInt) window.clearInterval(elem.posChangeMemInt);
	var actStep = 0;
	elem.posChangeMemInt = window.setInterval(
		function() {
			elem.currentPos = [
			easeInOut(startPos[0],endPos[0],steps,actStep,powr),
			easeInOut(startPos[1],endPos[1],steps,actStep,powr)];

			elem.style.left = elem.currentPos[0]+ppx;
			elem.style.top = elem.currentPos[1]+ppx;	

			actStep++;
			if (actStep > steps) window.clearInterval(elem.posChangeMemInt);
		}
		,intervals)

}

/***************************************************************/

function doSizeChangeMem(elem,startPos,endPos,steps,intervals,powr) 
{
	var ppx = "px";
	if (document.layers) ppx = "";
	
	if (elem.sizeChangeMemInt) window.clearInterval(elem.sizeChangeMemInt);
	var actStep = 0;
	elem.sizeChangeMemInt = window.setInterval(
		function() {
			elem.currentPos = [
			easeInOut(startPos[0],endPos[0],steps,actStep,powr),
			easeInOut(startPos[1],endPos[1],steps,actStep,powr)];

			elem.style.width = elem.currentPos[0]+ppx;
			elem.style.height = elem.currentPos[1]+ppx;	

			actStep++;
			if (actStep > steps) window.clearInterval(elem.sizeChangeMemInt);
		}
		,intervals)

}

/***************************************************************/

function doOpacityChangeMem(elem,startOpacity,endOpacity,steps,intervals,powr) 
{

	if (elem.opacityMemInt) window.clearInterval(elem.opacityMemInt);
	var actStep = 0;
	elem.opacityMemInt = window.setInterval(
		function() {
			elem.currentOpacity = easeInOut(startOpacity,endOpacity,steps,actStep,powr);

			
			if(typeof elem.style.opacity == "string") 
			{
				elem.style.opacity = elem.currentOpacity/100;
			} 
			else 
			{ 
				elem.style.filter="alpha(opacity="+elem.currentOpacity+")";
			}
			
			actStep++;
			if (actStep > steps) window.clearInterval(elem.opacityMemInt);
		}
		,intervals)

}

function doBGFadeMem(elem,startRGB,endRGB,steps,intervals,powr) 
{
	if (elem.bgFadeMemInt) window.clearInterval(elem.bgFadeMemInt);
	var actStep = 0;
	elem.bgFadeMemInt = window.setInterval(
		function() {
			elem.currentbgRGB = [
				easeInOut(startRGB[0],endRGB[0],steps,actStep,powr),
				easeInOut(startRGB[1],endRGB[1],steps,actStep,powr),
				easeInOut(startRGB[2],endRGB[2],steps,actStep,powr)
				];
			elem.style.backgroundColor = "rgb("+
				elem.currentbgRGB[0]+","+
				elem.currentbgRGB[1]+","+
				elem.currentbgRGB[2]+")";
			actStep++;
			if (actStep > steps) window.clearInterval(elem.bgFadeMemInt);
		}
		,intervals)
}


/***************************************************************/

function easeInOut(minValue,maxValue,totalSteps,actualStep,powr) {
//Generic Animation Step Value Generator By www.hesido.com
	var delta = maxValue - minValue;
	var stepp = minValue+(Math.pow(((1 / totalSteps)*actualStep),powr)*delta);
	return Math.ceil(stepp)
}

/***************************************************************/

function slideChange(obj,startpos,endpos,steps,interval) 
{
	if (!obj.currentPos) obj.currentPos = startpos; //if no mem is set, set it first;
	doPosChangeMem(obj,obj.currentPos,endpos,steps,interval,0.5);
}

function slideRestore(obj,pos,steps,interval) 
{
	if (!obj.currentPos) return;	//avoid error if mouseout an element occurs before the mosueover
										//(e.g. the pointer already in the object when onload)
	doPosChangeMem(obj,obj.currentPos,pos,steps,interval,0.5);
}

/***************************************************************/

function fadeChange(obj,startOpacity,endOpacity,steps,interval)
{
	if (!obj.currentOpacity) obj.currentOpacity = startOpacity;
		doOpacityChangeMem(obj,startOpacity,endOpacity,steps,interval,0.5);
}

function fadeRestore(obj,endOpacity,steps,interval)
{	
	if (!obj.currentOpacity) return;
		doOpacityChangeMem(obj,obj.currentOpacity,endOpacity,steps,interval,0.5);	
}

/***************************************************************/

function slideFadeChange(obj,startpos,endpos) 
{
	if (!obj.currentPos) obj.currentPos = startpos; 
	doPosChangeMem(obj,obj.currentPos,endpos,20,10,0.5);
	if (!obj.currentOpacity) obj.currentOpacity = 0;
		doOpacityChangeMem(obj,obj.currentOpacity,100,50,10,0.5);	
}

function slideFadeRestore(obj,pos) 
{
	if (!obj.currentPos) return;
	doPosChangeMem(obj,obj.currentPos,pos,20,10,0.5);	
	if (!obj.currentOpacity) return;
	doOpacityChangeMem(obj,obj.currentOpacity,0,50,10,0.5);
}

/****************************************************************/



/**************************************************/
//Export the public functions to a public namespace
/**************************************************/

//Exports go here
var ddpns = ddp.fx;
ddpns.doPosChangeMem = doPosChangeMem;
ddpns.doSizeChangeMem = doSizeChangeMem;
ddpns.slideChange = slideChange;
ddpns.slideRestore = slideRestore;
ddpns.doOpacityChangeMem = doOpacityChangeMem;
ddpns.fadeChange = fadeChange;
ddpns.fadeRestore = fadeRestore;
ddpns.slideFadeChange = slideFadeChange;
ddpns.slideFadeRestore = slideFadeRestore;
ddpns.easeInOut = easeInOut;


})();