var start = {
	/**
	 * Newsticker controller
	 *
	 * @version $Id$
	 * @author  Rasmus Andersson
	 */
	newsticker: {
		data: [],
		fps: 60, // animation FPS
		speed: 2, // animation speed/step size
		stepInterval: 4000, // millis between switching message
		ivStep: 0,
		ivStepTmp: 0,
		ivAnim: 0,
		element: null,
		dataNextIndex: 0,
		
		start: function() {
			var valid = true;
			
			if(start.newsticker.element == null)
				valid = start.newsticker.init();
			else
				start.newsticker.stop();
			
			if(valid) {
				start.newsticker.ivStep = setInterval(start.newsticker.displayNext, start.newsticker.stepInterval);
			}
		},
		
		init: function() {
			if(start.newsticker.data.length < 1)
				return false;
			
			var element = $("start_newsticker");
			if(element == null)
				return false;
			
			element.onmouseout = start.newsticker.startImmediately;
			var childs = element.childNodes;
			for(var i=0; i<childs.length; i++) {
				var child = childs.item(i);
				if(child.tagName == "DIV") {
					start.newsticker.element = child;
					break;
				}
			}
			base.captureMousePosition();
			start.newsticker.setNext();
			return true;
		},
		
		startImmediately: function() {
			start.newsticker.stop();
			start.newsticker.ivStepTmp = setInterval(start.newsticker.displayNext, start.newsticker.stepInterval - ((1000/start.newsticker.fps)*45));
		},
		
		stop: function() {
			clearInterval(start.newsticker.ivStep);
			clearInterval(start.newsticker.ivStepTmp);
			start.newsticker.ivStepTmp = 0;
			start.newsticker.ivStep = 0;
		},
		
		displayNext: function() {
			if(start.newsticker.ivStepTmp != 0) {
				// restart with normal interval
				start.newsticker.start();
			}
			if(Position.within(start.newsticker.element, base.mousePosition.x, base.mousePosition.y))
			{
				//alert("within");
				start.newsticker.stop();
			}
			else {
				start.newsticker.startAnimate("Out");
			}
		},
		
		setNext: function() {
			start.newsticker.element.innerHTML = start.newsticker.data[start.newsticker.dataNextIndex++];
			if(start.newsticker.dataNextIndex == start.newsticker.data.length)
				start.newsticker.dataNextIndex = 0;
		},
		
		onAminationDone: function(direction) {
			if(direction == "Out") {
				start.newsticker.setNext();
				start.newsticker.element.style.marginTop = "-15px";
				start.newsticker.startAnimate("In");
			}
		},
		
		startAnimate: function(direction) {
			start.newsticker.stopAnimate();
			start.newsticker.ivAnim = setInterval("start.newsticker.animate" + direction + "();", 1000/start.newsticker.fps);
		},
		
		stopAnimate: function() {
			clearInterval(start.newsticker.ivAnim);
		},
		
		animateOut: function() {
			var top = start.newsticker.element.style.marginTop ? parseInt(start.newsticker.element.style.marginTop) : 0;
			if(top > 20) {
				start.newsticker.stopAnimate();
				start.newsticker.onAminationDone("Out");
			}
			else {
				start.newsticker.element.style.marginTop = (top+start.newsticker.speed)+"px";
			}
		},
		
		animateIn: function() {
			var top = start.newsticker.element.style.marginTop ? parseInt(start.newsticker.element.style.marginTop) : -15;
			if(top >= 0) {
				start.newsticker.stopAnimate();
				start.newsticker.onAminationDone("In");
			}
			else {
				start.newsticker.element.style.marginTop = (top+start.newsticker.speed)+"px";
			}
		}
	}
};

base.triggerOnLoad(start.newsticker.start);