var Azexis = Azexis || {};

Azexis.SlideViewer = function(container, links, options) {
	container = $(container);
	options = $merge({
		scrollWidth: 650,
		matchHeight: false,
		linkBase: ''
	}, options);
	
	var animating = false;
	var items = $ES(".ticker-item", container);
	var activeItem = 0;
	
	function mod(a,b) { var n = a%b; return n < 0 ? n+b : n; }

	items.each(function(el, i) {
		if (i == activeItem) {
			el.setStyle("display", "block");
		} else {
			el.setStyle("display", "none");
		}
	});
	
	function slideLeft() {
		var left = items[activeItem];
		var right = items[mod(activeItem+1, items.length)];
		
		var completes = 0;
		function onComplete() {
			completes++;
			if (completes === 2) {
				left.setStyle("display", "none");
				activeItem = mod(activeItem+1, items.length);
				animating = false;
			}
		}
		
		right.setStyle("display", "block");
		right.setStyle("left", options.scrollWidth);
		
		var fx = new Fx.Style(left, "left", {
			onComplete: onComplete
		});
		fx.start(-options.scrollWidth);
		var fx2 = new Fx.Style(right, "left", {
			onComplete: onComplete
		});
		fx2.start(0);
	}
	
	function slideRight() {
		var left = items[mod(activeItem-1, items.length)];
		var right = items[activeItem];
		
		var completes = 0;
		function onComplete() {
			completes++;
			if (completes === 2) {
				right.setStyle("display", "none");
				activeItem = mod(activeItem-1, items.length);
				animating = false;
			}
		}
		
		left.setStyle("display", "block");
		left.setStyle("left", -options.scrollWidth);
		
		var fx = new Fx.Style(left, "left", {
			onComplete: onComplete
		});
		fx.start(0);
		var fx2 = new Fx.Style(right, "left", {
			onComplete: onComplete
		});
		fx2.start(options.scrollWidth);
	}
	
	var curLink = 0;
	
	function next() {
		if (animating) {
			return false;
		}
		
		animating = true;
		slideLeft();
		return true;
	}
	
	function prev() {
		if (animating) {
			return false;
		}
		animating = true;
		slideRight();
		return true;
	}
	
	return {
		next: next,
		prev: prev
	};
}

window.addEvent("domready", function() {
	var clunk = Azexis.SlideViewer("slide-container");
	var pauseBtn = $("news-ticker-pause");
	var prev = $("news-ticker-prev");
	var next = $("news-ticker-next");
	var timer;
	
	function play() {
		timer = setInterval(clunk.next, 4000);
		pauseBtn.addClass("active");
	}
	
	function pause() {
		$clear(timer);
		timer = null;
		pauseBtn.removeClass("active");
	}
	
	function slide(e, fn) {
		var e = new Event(e);
		e.preventDefault();
		pause();
		fn();
		return true;
	}
	
	pauseBtn.addEvent("click", function(e) {
		var e = new Event(e);
		e.preventDefault();
		if (timer) {
			pause();
		} else {
			play();
		}
		return true;
	});
	
	prev.addEvent("click", function(e) { slide(e, clunk.prev); });
	next.addEvent("click", function(e) { slide(e, clunk.next); });
	
	// Start playing on start.
	play();
});
