(function() {
	var SCROLL_SPEED = .2; // pixels per millisecond
	var DIRECTION_LEFT = -1;
	var DIRECTION_RIGHT = 1;
	
	var timer = null;
	var tickerBody;
	var leftButton;
	var rightButton;
	var fps;
	
	dojo.addOnLoad(function() {
		leftButton = dojo.query("#ticker-left img")[0];	
		dojo.connect(leftButton, "onmouseenter", onTickerLeftMouseEnter)
		dojo.connect(leftButton, "onmouseleave", onTickerLeftMouseLeave);
		
		rightButton = dojo.query("#ticker-right img")[0];
		dojo.connect(rightButton, "onmouseenter", onTickerRightMouseEnter)
		dojo.connect(rightButton, "onmouseleave", onTickerRightMouseLeave);
		
		tickerBody = dojo.byId("ticker-body");
		
		dojo.query("a", tickerBody).forEach(function(link) {
			link.unlitImage = null;
			link.litImage = null;
			
			
			var unlit = dojo.query("img.unlit", link);
			
			if (unlit && unlit.length > 0) {
				link.unlitImage = unlit[0];
			}
			
			var lit = dojo.query("img.lit", link);
			
			if (lit && lit.length > 0) {
				link.litImage = lit[0];
			}

			if (!link.unlitImage && !link.litImage) {
				var image = dojo.query("img", link);
				
				if (image && image.length > 0) {
					link.unlitImage = image[0];
					link.litImage = image[0];
				}
			}
			else if (!link.litImage) {
				link.litImage = link.unlitImage;
			}
			else if (!link.unlitImage) {
				link.unlitImage = link.litImage;
			}
			
			dojo.connect(link, "onmouseenter", onLinkMouseEnter);
			dojo.connect(link, "onmouseleave", onLinkMouseLeave);
		})
		
		/*
		fps = document.createElement("div");
		fps.style.position = "fixed";
		fps.style.left = "0";
		fps.style.top = "0";
		fps.style.width = "200px";
		fps.style.height= "10px";
		
		document.body.appendChild(fps);
		*/
	});
	
	function onTickerLeftMouseEnter(event) {
		dojo.stopEvent(event);
		
		startScroll(DIRECTION_LEFT);
	}
	
	function onTickerLeftMouseLeave(event) {
		dojo.stopEvent(event);
	
		stopScroll();
	}
	
	function onTickerRightMouseEnter(event) {
		dojo.stopEvent(event);

		startScroll(DIRECTION_RIGHT);
	}
	
	function onTickerRightMouseLeave(event) {
		dojo.stopEvent(event);

		stopScroll();
	}
	
	function startScroll(direction) {
		timer = window.setInterval(createTimer(direction), 1);		
	}
	
	function stopScroll() {
		if (timer) {
			clearTimeout(timer);
		}
	}
	
	function createTimer(direction) {
		var myDirection = direction;
		var startTime = new Date().getTime();
		var lastTime = startTime;
		var count = 0;
		
		return function() {
			var currentTime = new Date().getTime();
			var delta = Math.round((currentTime - lastTime) * SCROLL_SPEED);
			
			var offset = tickerBody.scrollLeft;
			offset = offset + (delta * myDirection);

			tickerBody.scrollLeft = offset;
			
			if (tickerBody.scrollLeft != offset) {
				stopScroll();
				
				if (tickerBody.scrollLeft == 0) {
					leftButton.style.display = "none";
				}
				else {
					rightButton.style.display = "none";
				}
			}
			else {
				leftButton.style.display = "block";
				rightButton.style.display = "block";
			}
			
			lastTime = currentTime;
			
			/*
			count++;
			fps.innerHTML = 1000 * (count / (currentTime - startTime));
			*/
		}
	}
	
	function onLinkMouseEnter(event) {
		dojo.stopEvent(event);
		
		var link = event.currentTarget;
		
		link.unlitImage.style.display = "none";
		link.litImage.style.display = "inline";
	}
	
	function onLinkMouseLeave(event) {
		dojo.stopEvent(event);

		var link = event.currentTarget;

		link.unlitImage.style.display = "inline";
		link.litImage.style.display = "none";
	}
})();
