/*============================================================================||
||       __  ___  _______    ___  ____  __         ___                        ||
||      /  \/  /_/__  __/_ _/ __\/_/  \/ /   _____/   \                       ||
||     / /\_/ / ___/ / __ `/ /  __/ __/  \  / ___/  `_/                       ||
||    / /  / / __// / /_/ / /__/ / / / /\ \/ __// /\ \                        ||
||   /_/  /_/____/_/\__,_/\___/_/_/ /_/ /_/____/_/ /_/                        ||
||                                                                            ||
||============================================================================||
|| XEffect																	  ||
|| Copyright Tim Jones. All Rights Reserved.                                  ||
||============================================================================*/

var XEffect = {};

//=============================================================================
XEffect.Slide = function(Element, X, Y, X2, Y2, Steps, Callback) {
	if(Steps < 1) {
		return;
	}

	var Count = 0;

	var XInterval = (X2 - X) / Steps;
	var YInterval = (Y2 - Y) / Steps;

	var NewX = X;
	var NewY = Y;

	function OnMove() {
		NewX += XInterval;
		NewY += YInterval;

		Element.style.left = NewX + "px";
		Element.style.top  = NewY + "px";

		Count++;

		if(Count < Steps) {
			setTimeout(OnMove, 5);
		}else{
			if(Callback) {
				Callback();
			}
		}
	}

	OnMove();
}

//-----------------------------------------------------------------------------
XEffect.FadeIn = function(Element, Steps, Callback) {
	if(Steps < 1) {
		return;
	}
 
	var Count = 0;
 
	var AlphaStep = 1.0 / Steps;
 
	function OnFade() {
		Element.style.filter		= "alpha(opacity=" + ((Count * AlphaStep) * 100) + ")";
		Element.style.MozOpacity	= Count * AlphaStep;
		Element.style.opacity		= Count * AlphaStep;
 
		Count++;
 
		if(Count < Steps) {
			setTimeout(OnFade, 10);
		}else{
			Element.style.filter		= "alpha(opacity=100)";
			Element.style.MozOpacity	= 1.0;
			Element.style.opacity		= 1.0;
 
			if(Callback) {
				Callback();
			}
		}
	}
 
	OnFade();
}

//-----------------------------------------------------------------------------
XEffect.FadeOut = function(Element, Steps, Callback) {
	if(Steps < 1) {
		return;
	}
 
	var Count = Steps;
 
	var AlphaStep = 1.0 / Steps;
 
	function OnFade() {
		Element.style.filter		= "alpha(opacity=" + ((Count * AlphaStep) * 100) + ")";
		Element.style.MozOpacity	= Count * AlphaStep;
		Element.style.opacity		= Count * AlphaStep;
 
		Count--;
 
		if(Count >= 0) {
			setTimeout(OnFade, 10);
		}else{
			Element.style.filter		= "alpha(opacity=0)";
			Element.style.MozOpacity	= 0.0;
			Element.style.opacity		= 0.0;
 
			if(Callback) {
				Callback();
			}
		}
	}
 
	OnFade();
}

//-----------------------------------------------------------------------------
XEffect.Grow = function(Element, Steps, StartWidth, StartHeight, GrowX, GrowY, Shrink, Callback) {
	if(Steps < 1) {
		return;
	}

	var Count = 0;

	var XInterval = GrowX / Steps;
	var YInterval = GrowY / Steps;

	var NewWidth	= StartWidth;
	var NewHeight	= StartHeight;

	if(Shrink) {
		XInterval = -XInterval;
		YInterval = -YInterval;
	}

	function OnMove() {
		NewWidth  += XInterval;
		NewHeight += YInterval;

		if(GrowX && NewWidth >= 0) {
			XElement.SetWidth(Element, NewWidth);
		}

		if(GrowY && NewHeight >= 0) {
			XElement.SetHeight(Element, NewHeight);
		}

		Count++;

		if(Count < Steps) {
			setTimeout(OnMove, 5);
		}else if(Callback) {
			Callback();
		}
	}

	OnMove();
}

//=============================================================================
