var FEATURE_HEIGHT = 99;
var FEATURES_TOTAL = 6;
var FEATURES_VISIBLE_TOTAL = 3;
var AUTO_SCROLL_INITIAL_FEATURES_TIMER = 10000;
var AUTO_SCROLL_FEATURES_TIMER = 5000;
var FEATURE_SCROLL_AMOUNT = 9;
var FEATURE_OPACITY_AMOUNT = (1 / (FEATURE_HEIGHT / FEATURE_SCROLL_AMOUNT) * 3);

var features;
var featuresCurrentPosition = 0;
var featuresIndex = 0;
var featuresOpacityPosition = 0;
var autoScrollFeaturesTimer = null;
var preventAutoScroll = false;

function startFeatures()
{
	//Set out initial view to be the middle list
	features = document.getElementById("featuresWrap");
	if (features != null)
	{
		features.scrollTop = FEATURES_VISIBLE_TOTAL * FEATURE_HEIGHT;
		features.style.visibility = "visible";
	
		startAutoScrollFeature(AUTO_SCROLL_INITIAL_FEATURES_TIMER);	
	}
}

function mouseOverFeatures()
{
	preventAutoScroll = true;
	stopAutoScrollFeature();
}

function mouseOutFeatures()
{
	preventAutoScroll = false;
	startAutoScrollFeature(AUTO_SCROLL_FEATURES_TIMER);
}

function stopAutoScrollFeature()
{
	if (autoScrollFeaturesTimer != null)
	{
		clearTimeout(autoScrollFeaturesTimer);
		autoScrollFeaturesTimer = null;
	}
}

function startAutoScrollFeature(time)
{
	if (autoScrollFeaturesTimer == null && !preventAutoScroll)
	{
		autoScrollFeaturesTimer = setTimeout(startScrollFeatureDown, time);
	}
}

function startScrollFeatureDown()
{
	if (featuresCurrentPosition == 0)
	{
		var incomingFeature = document.getElementById("feature-" + (featuresIndex + FEATURES_VISIBLE_TOTAL));
		setFeatureOpacity(incomingFeature, 0);
		
		var outgoingFeature = document.getElementById("feature-" + featuresIndex);
		setFeatureOpacity(outgoingFeature, 1);
		
		stopAutoScrollFeature()
		scrollFeatureDown();
	}
}

function scrollFeatureDown()
{
	if (featuresCurrentPosition < FEATURE_HEIGHT)
	{
		var amount = Math.min(FEATURE_SCROLL_AMOUNT, FEATURE_HEIGHT - featuresCurrentPosition);
		features.scrollTop += amount;
		featuresCurrentPosition += amount;
		
		if (featuresOpacityPosition == 2)
		{
			var incomingFeature = document.getElementById("feature-" + (featuresIndex + FEATURES_VISIBLE_TOTAL));
			incrementFeatureOpacity(incomingFeature, FEATURE_OPACITY_AMOUNT);

			var outgoingFeature = document.getElementById("feature-" + featuresIndex);
			incrementFeatureOpacity(outgoingFeature, -FEATURE_OPACITY_AMOUNT);
			
			featuresOpacityPosition = 0;
		}
		else
		{
			featuresOpacityPosition++;
		}
		
		setTimeout(scrollFeatureDown, 30);
	}
	else
	{
		//Reset opacity
		var incomingFeature = document.getElementById("feature-" + (featuresIndex + FEATURES_VISIBLE_TOTAL));
		setFeatureOpacity(incomingFeature, 1);

		var outgoingFeature = document.getElementById("feature-" + featuresIndex);
		setFeatureOpacity(outgoingFeature, 1);
		
		featuresOpacityPosition = 0;
		featuresCurrentPosition = 0;
		featuresIndex++;
		
		//Hit bottom of the list - reset back to the middle list
		if (featuresIndex == FEATURES_TOTAL)
		{
			features.scrollTop = FEATURES_VISIBLE_TOTAL * FEATURE_HEIGHT;
			
			featuresIndex = 0;
		}
		
		startAutoScrollFeature(AUTO_SCROLL_FEATURES_TIMER);
	}
}

function startScrollFeatureUp()
{
	if (featuresCurrentPosition == 0)
	{
		var incomingFeature = document.getElementById("feature-" + (featuresIndex - 1));
		setFeatureOpacity(incomingFeature, 0);
		
		var outgoingFeature = document.getElementById("feature-" + (featuresIndex + FEATURES_VISIBLE_TOTAL - 1));
		setFeatureOpacity(outgoingFeature, 1);
		
		stopAutoScrollFeature()		
		scrollFeatureUp();
	}
}

function scrollFeatureUp()
{
	if (featuresCurrentPosition < FEATURE_HEIGHT)
	{
		var amount = Math.min(FEATURE_SCROLL_AMOUNT, FEATURE_HEIGHT - featuresCurrentPosition);
		features.scrollTop -= amount;
		featuresCurrentPosition += amount;
		
		if (featuresOpacityPosition == 2)
		{
			var incomingFeature = document.getElementById("feature-" + (featuresIndex - 1));
			incrementFeatureOpacity(incomingFeature, FEATURE_OPACITY_AMOUNT);

			var outgoingFeature = document.getElementById("feature-" + (featuresIndex + FEATURES_VISIBLE_TOTAL - 1));
			incrementFeatureOpacity(outgoingFeature, -FEATURE_OPACITY_AMOUNT);
			
			featuresOpacityPosition = 0;
		}
		else
		{
			featuresOpacityPosition++;
		}
		
		setTimeout(scrollFeatureUp, 30);
	}
	else
	{
		//Reset opacity
		var incomingFeature = document.getElementById("feature-" + (featuresIndex - 1));
		setFeatureOpacity(incomingFeature, 1);

		var outgoingFeature = document.getElementById("feature-" + (featuresIndex + FEATURES_VISIBLE_TOTAL - 1));
		setFeatureOpacity(outgoingFeature, 1);
		
		featuresOpacityPosition = 0;
		featuresCurrentPosition = 0;
		featuresIndex--;
		
		//Hit bottom of the list - reset back to the middle list
		if (featuresIndex == -(FEATURES_TOTAL / 2))
		{
			features.scrollTop = (FEATURES_VISIBLE_TOTAL + (FEATURES_TOTAL / 2)) * FEATURE_HEIGHT;
			
			featuresIndex = FEATURES_TOTAL / 2;
		}
		
		startAutoScrollFeature(AUTO_SCROLL_FEATURES_TIMER);
	}
}

function incrementFeatureOpacity(feature, amount)
{
	feature.style.opacity = parseFloat(feature.style.opacity) + amount;
	//Setting opacity is too slow in IE
	//feature.style.filter = 'alpha(opacity=' + (feature.style.opacity * 100) + ')';
}

function setFeatureOpacity(feature, value)
{
	feature.style.opacity = value;
	//Setting opacity is too slow in IE
	//feature.style.filter = 'alpha(opacity=' + (value * 100) + ')';
}
