var animation = {};

animation.timer = 
{
	effect: "",
	
	startTimer: function(data)
	//startTimer: function(startValue,endValue,duration,interval,transitionType,elementID,effect)
	{
		var timerData = {};
		
		timerData.startValue = data.startValue || 0;
		timerData.endValue   = data.endValue || 1;
		timerData.duration   = data.duration*1000 || 500;
		timerData.interval   = data.interval || 25;
		
		timerData.transitionType = data.transitionType || 'linear';
		timerData.elementID      = data.elementID || 'testDiv';
		timerData.effect         = data.effect || 'fadeOut';
		timerData.time           = 0;
		
		//alert('start_'+timerData.effect);
		//document.getElementById('value').innerHTML = timerData.time;
		
		//animation.effect['start_'+timerData.effect](timerData.elementID,timerData.startValue);
		animation.effect[timerData.effect](timerData.elementID,timerData.startValue,'start_'+timerData.effect);
		
		var timerFunction = function() {animation.timer.continueTimer(timerData);};
		setTimeout(timerFunction,timerData.interval);
		
		//setTimeout("animation.timer.continueTimer("+startValue+","+endValue+","+time+","+duration+","+interval+",'"+transitionType+"','"+elementID+"','"+effect+"')",interval);
	},
	
	continueTimer: function(data)
	//continueTimer: function(startValue,endValue,time,duration,interval,transitionType,elementID,effect)
	{
		var timerData = {};
		
		timerData.startValue = data.startValue || 0;
		timerData.endValue   = data.endValue || 1;
		timerData.duration   = data.duration || 500;
		timerData.interval   = data.interval || 25;
		
		timerData.transitionType = data.transitionType || 'linear';
		timerData.elementID      = data.elementID || 'testDiv';
		timerData.effect         = data.effect || 'fadeOut';
		timerData.time           = data.time || 0;
		
		//elementID = elementID || 'testDiv';
		//effect = effect || 'fadeOut';
		if (timerData.time == 0)
		{
		}
		
		timerData.time = timerData.time+timerData.interval;
		//document.getElementById('value').innerHTML = timerData.time;
		var nextValue;
		
		nextValue = animation.transitions[timerData.transitionType+'Transition'](timerData.time, timerData.duration, timerData.startValue, timerData.endValue);
		
		//animation.effect[timerData.effect](timerData.elementID,nextValue);
		animation.effect[timerData.effect](timerData.elementID,nextValue,timerData.effect);
		//document.getElementById('text').innerHTML = Math.round(nextValue);
		
		if (nextValue < timerData.endValue)
		{
			var timerFunction = function() {animation.timer.continueTimer(timerData);};
			setTimeout(timerFunction,timerData.interval);
			//setTimeout("animation.timer.continueTimer("+startValue+","+endValue+","+time+","+duration+","+interval+",'"+transitionType+"','"+elementID+"','"+effect+"')",interval);
		}
		//else document.getElementById('text').innerHTML = "End";
	}
};

animation.effect = 
{
	fadeStartValue: 1,
	fadeStartFromValue: 1,
	fadeStartToValue: 0,
	
	fadeIn: function(lementID,multiplyValue,type) { animation.effect.fade(lementID,multiplyValue,type); },
	fadeOut: function(lementID,multiplyValue,type) { animation.effect.fade(lementID,multiplyValue,type); },
	
	fade: function(elementID,multiplyValue,type)
	{
		//the start of the fade transition
		if ((type == 'start_fadeOut') || (type == 'start_fadeIn'))
		{
			animation.effect.fadeStartValue = document.getElementById(elementID).style.opacity;
			if (type == 'start_fadeOut') type = 'fadeOut';
			else if (type == 'start_fadeIn') type = 'fadeIn';
		}
		
		//Continuation of the fade transition
		var opacityValue;
		
		if (type == 'fadeOut')
		{
			opacityValue = animation.effect.fadeStartValue-multiplyValue;
			if (opacityValue < 0) opacityValue = 0;
		}
		else if (type == 'fadeIn')
		{
			opacityValue = animation.effect.fadeStartValue+multiplyValue;
			if (opacityValue > 1) opacityValue = 1;
		}
		
		document.getElementById(elementID).style.opacity = opacityValue;
		document.getElementById(elementID).style.filter = 'alpha(opacity = ' + (opacityValue*100) + ')';
	},
	
	startSlideShow: function()
	{
		if (ryanwd.product.featuredAnimationOn)
		{
			var currentIndex = ryanwd.product.currentFeaturedItem;
			var currentItem = ryanwd.product.featuredItemsID[currentIndex];
			ryanwd.animation.startTimer(0,1,1,25,'linear',currentItem,'fadeIn');
			setTimeout("ryanwd.product.nextFeaturedItem()",2000);
		}
	},
	
	nextSlideShow: function()
	{
		if (ryanwd.product.featuredAnimationOn)
		{
			var currentIndex = ryanwd.product.currentFeaturedItem;
			var nextIndex = currentIndex+1;
			var previousIndex = currentIndex-1;
			
			if (nextIndex+1 > ryanwd.product.numberOfFeaturedItems) nextIndex = 0;
			if (previousIndex < 0) previousIndex = 3;
			
			ryanwd.product.previousFeaturedItem = previousIndex;
			ryanwd.product.currentFeaturedItem = nextIndex;
			
			var previousItem = ryanwd.product.featuredItemsID[previousIndex];
			
			var currentItem = ryanwd.product.featuredItemsID[currentIndex];
			var nextItem = ryanwd.product.featuredItemsID[nextIndex];
			
			document.getElementById(previousItem).style.opacity = 0;
			document.getElementById(previousItem).style.filter = 'alpha(opacity = 0)';
			document.getElementById(nextItem).style.zIndex = 100;
			document.getElementById(currentItem).style.zIndex = ryanwd.product.numberOfFeaturedItems-currentIndex;
			
			ryanwd.animation.startTimer(0,1,1,25,'linear',nextItem,'fadeIn');
	
			setTimeout("ryanwd.product.nextFeaturedItem()",2000);
		}
	}
	
	/*
	start_fadeOut: function(elementID,multiplyValue)
	{
		animation.effect.fadeStartValue = document.getElementById(elementID).style.opacity;
		var opacityValue = animation.effect.fadeStartValue-multiplyValue;
		if (opacityValue < 0) opacityValue = 0;
		document.getElementById(elementID).style.opacity = opacityValue;
		document.getElementById(elementID).style.filter = 'alpha(opacity = ' + (opacityValue*100) + ')';
	},
	
	fadeOut: function(elementID,multiplyValue)
	{
		var opacityValue = animation.effect.fadeStartValue-multiplyValue;
		if (opacityValue < 0) opacityValue = 0;
		document.getElementById(elementID).style.opacity = opacityValue;
		document.getElementById(elementID).style.filter = 'alpha(opacity = ' + (opacityValue*100) + ')';
	},
	
	start_fadeIn: function(elementID,multiplyValue)
	{
		animation.effect.fadeStartValue = document.getElementById(elementID).style.opacity;
		var opacityValue = animation.effect.fadeStartValue+multiplyValue;
		if (opacityValue > 1) opacityValue = 1;
		document.getElementById(elementID).style.opacity = opacityValue;
		document.getElementById(elementID).style.filter = 'alpha(opacity = ' + (opacityValue*100) + ')';
	},
	
	fadeIn: function(elementID,multiplyValue)
	{
		var opacityValue = animation.effect.fadeStartValue+multiplyValue;
		if (opacityValue > 1) opacityValue = 1;
		document.getElementById(elementID).style.opacity = opacityValue;
		document.getElementById(elementID).style.filter = 'alpha(opacity = ' + (opacityValue*100) + ')';
	}
	*/
};

animation.transitions = 
{
	linearTransition: function(time, duration, startValue, endValue)
	{
		startValue = startValue || 0;
		endValue = endValue || 1;
		if (time > duration) return startValue+endValue;
		return startValue + ((time / duration) * endValue);
	},
	sinusoidalTransition: function(time, duration, startValue, endValue)
	{
		startValue = startValue || 0;
		endValue = endValue || 1;
		if (time > duration) return startValue+endValue;
		return startValue + ((-Math.cos((time/duration)*Math.PI)/2) + 0.5) * endValue;
	},
	squareTransition: function(time, duration, startValue, endValue)
	{
		startValue = startValue || 0;
		endValue = endValue || 1;
		if (time > duration) return startValue+endValue;
		return startValue + Math.pow(time/duration, 2) * endValue;
	},
	squarerootTransition: function(time, duration, startValue, endValue)
	{
		startValue = startValue || 0;
		endValue = endValue || 1;
		if (time > duration) return startValue+endValue;
		return startValue + Math.sqrt(time/duration) * endValue;
	},
	fifthTransition: function(time, duration, startValue, endValue)
	{
		startValue = startValue || 0;
		endValue = endValue || 1;
		if (time > duration) return startValue+endValue;
		return startValue + Math.sqrt((-Math.cos((time/duration)*Math.PI)/2) + 0.5) * endValue;
	},
	circleTransition: function(time, duration, startValue, endValue)
	{
		startValue = startValue || 0;
		endValue = endValue || 1;
		if (time > duration) return startValue+endValue;
		var pos = time/duration;
		return startValue + Math.sqrt(1 - Math.pow((pos-1), 2))* endValue;
	},
	pulsateTransition: function(time, duration, startValue, endValue)
	{
		startValue = startValue || 0;
		endValue = endValue || 1;
		if (time > duration) return startValue+endValue;
		return startValue + (0.5 + Math.sin(17*time/duration)/2) * endValue;
	},
	growSpecificTransition: function(time, duration, startValue, endValue)
	{
		startValue = startValue || 0;
		endValue = endValue || 1;
		if (time > duration) return startValue+endValue;
		var pos = time/duration;
		return startValue + (5 * Math.pow(pos, 3) - 6.4 * Math.pow(pos, 2) + 2 * pos) * endValue;
	}
};

