// JavaScript Document
var animiationTime = 5000;
var clickAnimationTime = 1000;
var showTime = 7500;
var lastAnimationTime = 0;
var currentEffect = null
var nextEffect = null;

Event.observe(document, 'dom:loaded', NewsScroller__init);
function NewsScroller__init() {
	//alert('NewsScroller__init');
	try {
		setTimeout('NewsScroller__cycle(+1, animiationTime, false);', showTime);
		var newsUp = $$('img.newsUp')[0];
		var newsDown = $$('img.newsDown')[0];
		newsUp.observe('click', NewsScroller__newsUp);
		newsDown.observe('click', NewsScroller__newsDown);
	}
	catch(e) {
		//alert(e);
		//console.log(e);
	}
}

function NewsScroller__cycle(direction, overideAnimTime, user) {
	//alert('NewsScroller__cycle');
	//console.log('NewsScroller__cycle');
	if(new Date().getTime() - lastAnimationTime < animiationTime && !user) {
		//Too early
		return;	
	}

	lastAnimationTime = new Date().getTime();
	
	try {
		var localAnimTime = overideAnimTime;
		
		var newsItems = $$('div.newsItem');
		var currentItemIndex = null;
		if(currentEffect == null) {
			for(var i = 0; i < newsItems.length && currentItemIndex == null; i++) {
				if(parseInt(newsItems[i].style.top) == 0) currentItemIndex = i;
			}
		}
		else {
			for(var i = 0; i < newsItems.length && currentItemIndex == null; i++) {
				if(newsItems[i] == currentEffect.element) currentItemIndex = i;
			}
			currentEffect.cancel();
		}
		
		if(currentItemIndex == null) {
			//Nothing's on show???
			//Just default to the first.
			currentItemIndex = 0;
		}
		
		var nextItemIndex = currentItemIndex+direction;
		if(nextItemIndex >= newsItems.length) nextItemIndex = 0;
		else if(nextItemIndex < 0) nextItemIndex = newsItems.length-1;
		
		if(nextEffect != null) {
			nextEffect.cancel();
		}
		
		//console.log(newsItems[currentItemIndex]);
		//console.log(newsItems[nextItemIndex]);	
		
		//targetPosition += parseFloat(newsItems[currentItemIndex].style.top);
		if(nextEffect != null && nextEffect.element != newsItems[nextItemIndex]) {
			currentEffect = new Effect.Morph(newsItems[currentItemIndex], {
				style:{top:"0px"},
				duration:localAnimTime/1000,
				afterFinish:NewsScroller__oldFinished
			});
			
			//Setup the animation to move the 
			//"old" next item to wherever we need it
			var oldNextItem =  nextEffect.element;
			var oldNextTarget = direction > 0 ? -($(oldNextItem.parentNode).getHeight()+1) : ($(oldNextItem.parentNode).getHeight()+1);
			nextEffect = new Effect.Morph(oldNextItem, {
				style:{top:oldNextTarget+"px"},
				duration:localAnimTime/1000
			});
		}
		else {
			if(direction > 0) {
				//Next item needs to be below the container and animate "up".
				newsItems[nextItemIndex].style.top = (($(newsItems[nextItemIndex].parentNode).getHeight()+1) + parseFloat(newsItems[currentItemIndex].style.top)) +"px";
				var targetPosition = (-($(newsItems[currentItemIndex].parentNode).getHeight()+1));
			}
			else {
				//Next item needs to be above the container and animate "up".
				newsItems[nextItemIndex].style.top = ((-($(newsItems[nextItemIndex].parentNode).getHeight()+1)) + parseFloat(newsItems[currentItemIndex].style.top)) +"px";
				var targetPosition = ( ($(newsItems[currentItemIndex].parentNode).getHeight()+1));
			}
			
			currentEffect = new Effect.Morph(newsItems[currentItemIndex], {
				style:{top:targetPosition+"px"},
				duration:localAnimTime/1000,
				afterFinish:NewsScroller__oldFinished
			});
			
			nextEffect = new Effect.Morph(newsItems[nextItemIndex], {
				style:{top:"0px"},
				duration:localAnimTime/1000
			});
		}
	}
	catch(e) {
		//alert(e);
		//console.log(e);
	}
}

/**
* Move the "old" news item, now above the container,
* to the parking area below the container.
*/
function NewsScroller__oldFinished(effect) {
	//No longer necessary.
	//var newsItem = effect.element;
	//newsItem.style.top = (newsItem.parentNode.getHeight()+1)+"px";
	currentEffect = null;
	nextEffect = null;
	setTimeout('NewsScroller__cycle(+1, animiationTime, false);', showTime);
}

function NewsScroller__newsDown() {
	NewsScroller__cycle(-1, clickAnimationTime, true);
}

function NewsScroller__newsUp() {
	NewsScroller__cycle(+1, clickAnimationTime, true);
}