var scroll;
var content;
var container;
var halfOfContentSize;
var leftArrow;
var rightArrow;
var showArrows = false;
var currentElement;

window.addEvent('domready', init);

function init() {
	content = $("content");
	window.addEvent("keypress", keyHandler);
	content.addEvent("click", clickHandler);
	content.addEvent("mousewheel", wheelHandler);
	content.addEvent("mousemove", cursorHandler);
	leftArrow = $("right-arrow");
	rightArrow = $("left-arrow");
	leftArrow.addEvent("click", leftArrowHandler);
	rightArrow.addEvent("click", rightArrowHandler);
	scroll = new Fx.Scroll(content, {
		wheelStops : false
	});
	halfOfContentSize = content.getSize().x / 2;
	container = $("container");
	adjustArrowVisibility(true);
	content.addEvent("mouseenter", mouseEnterHandler);
	content.addEvent("mouseleave", mouseLeaveHandler);
	leftArrow.addEvent("mouseenter", mouseEnterHandler);
	leftArrow.addEvent("mouseleave", mouseLeaveHandler);
	rightArrow.addEvent("mouseenter", mouseEnterHandler);
	rightArrow.addEvent("mouseleave", mouseLeaveHandler);
	leftArrow.addEvent("mousewheel", wheelHandler);
	rightArrow.addEvent("mousewheel", wheelHandler);
	currentElement = $("images").getElement("td");
	scroll.set(0, 0);
}

function mouseEnterHandler(event) {
	showArrows = true;
	adjustArrowVisibility();
}
function mouseLeaveHandler(event) {
	showArrows = false;
	adjustArrowVisibility();
	content.setStyle("cursor", "default");
}
function keyHandler(event) {
	if (event.key == "left") {
		scr(-1);
	} else if (event.key == "right" || event.key == "space") {
		scr(1);
	}
}

function clickHandler(event) {
	if (event.page.x - container.getPosition().x < halfOfContentSize) {
		scr(-1);
	} else {
		scr(1);
	}
	cursorHandler(event);		
}

function wheelHandler(event) {
	event.preventDefault();
	scr(event.wheel * -1);
	cursorHandler(event);	
}

function leftArrowHandler(event) {
	scr(1);
}

function rightArrowHandler(event) {
	scr(-1);
}

function scr(direction) {
	if (direction > 0 && isRightScrollPossible()) {
		var tmpElement = currentElement.getNext();
		scroll.cancel();
		currentElement = tmpElement;
		scroll.toElement(currentElement);
	} else if (direction < 0 && isLeftScrollPossible()) {
		scroll.cancel();
		currentElement = currentElement.getPrevious();
		scroll.toElement(currentElement);
	}
	adjustArrowVisibility();
}

function isLeftScrollPossible() {
	return $chk(currentElement.getPrevious());
}

function isRightScrollPossible() {
	return $chk(currentElement.getNext());
}

function adjustArrowVisibility(immediately) {
	var show;
	var hide;
	var cursorStyle;
	if ($chk(immediately)) {
		show = "show";
		hide = "hide";
	} else {
		show = "in";
		hide = "out";
	}
	if (showArrows) {
		if (!isRightScrollPossible()) {
			leftArrow.fade(hide);
		} else {
			leftArrow.fade(show);
		}

		if (!isLeftScrollPossible()) {
			rightArrow.fade(hide);
		} else {
			rightArrow.fade(show);
		}
	} else {
		leftArrow.fade(hide);
		rightArrow.fade(hide);
	}
}

function cursorHandler(event) {
	if (event.page.x - container.getPosition().x > halfOfContentSize && isRightScrollPossible()) {
		content.setStyle("cursor", "pointer");
	} else if (event.page.x - container.getPosition().x < halfOfContentSize && isLeftScrollPossible()) {
		content.setStyle("cursor", "pointer");
	} else {
		content.setStyle("cursor", "default");
	}
}

