var SlideScrollLinkWidth = 80;
var SlideScrollPrevImage = "images/btn_prev.png";
var SlideScrollNextImage = "images/btn_next.png";

Event.DOMReady(prepareSlideScrolls);

function prepareSlideScrolls(){
	var sliders = Document.getElementsByClassMatch("JS:SlideScroll");
	sliders.each(SlideScroll);
}

function SlideScroll(element){
	var element = SlideScroll.setContainer(element);
	var children = Document.getChildNodes(element, "div");
	element.totalSlides = children.length;
	element.currentSlide = 1;
	element.slides = children;
	SlideScroll.setSlides(children, element);
	var parameters = Document.getArguments(element, "JS:SlideScroll");
	if(parameters[0]){
		switch(parameters[0]){
			case "auto":
				SlideScroll.autoPlay(element);
				break;
			default:
				SlideScroll.setNavigation(element);
				break;
		}
	}
	else{
		SlideScroll.setNavigation(element);
	}
}
SlideScroll.setContainer = function(element){
	var width = element.offsetWidth;
	var height = element.offsetHeight;
	element.style.position = "absolute";
	element.style.zIndex = 1;
	element.style.overflow = "hidden";
	element.style.width = width + "px";
	element.style.height = height + "px";
	return element;
}
SlideScroll.setSlides = function(slides, parent){
	var width = parent.offsetWidth;
	var height = parent.offsetHeight;
	var xpos = 0;
	for(var i = 0; i < slides.length; i ++){
		var totalPadding = Number(Document.getStyle(slides[i], "padding-left").replace("px","")) + Number(Document.getStyle(slides[i], "padding-right").replace("px",""));
		slides[i].style.position = "absolute";
		slides[i].style.zIndex = 1;
		slides[i].style.display = "block";
		slides[i].style.left = xpos + "px";
		slides[i].style.width = (width - totalPadding) + "px";
		slides[i].slideNumber = i + 1;
		xpos += width;
	}
}
SlideScroll.setNavigation = function(element){
	var bodyElement = document.getElementsByTagName("body")[0];
	var prevLink = document.createElement("a");
	prevLink.style.position = "absolute";
	prevLink.style.zIndex = 2;
	prevLink.style.display = "block";
	prevLink.style.textIndent = "-9999px";
	prevLink.style.width = SlideScrollLinkWidth +"px";
	prevLink.style.height = element.offsetHeight +"px";
	prevLink.style.left = Document.getX(element) +"px";
	prevLink.style.top = Document.getY(element) +"px";
	prevLink.style.background = "url("+SlideScrollPrevImage+") no-repeat center center";
	bodyElement.appendChild(prevLink);
	prevLink.innerHTML = "previous";
	prevLink.setAttribute("href", "#");
	prevLink.setAttribute("title", "previous");
	prevLink.setAttribute("id", "SlideScrollPrev");
	prevLink.slideRef = element;
	Event.addEvent(prevLink, "click", SlideScroll.prevSlide);
	var nextLink = document.createElement("a");
	nextLink.style.position = "absolute";
	nextLink.style.zIndex = 2;
	nextLink.style.display = "block";
	nextLink.style.textIndent = "-9999px";
	nextLink.style.width = SlideScrollLinkWidth +"px";
	nextLink.style.height = element.offsetHeight +"px";
	nextLink.style.left = (Document.getX(element) + element.offsetWidth - SlideScrollLinkWidth) +"px";
	nextLink.style.top = Document.getY(element) +"px";
	nextLink.style.background = "url("+SlideScrollNextImage+") no-repeat center center";
	bodyElement.appendChild(nextLink);
	nextLink.innerHTML = "next";
	nextLink.setAttribute("href", "#");
	nextLink.setAttribute("title", "next");
	nextLink.setAttribute("id", "SlideScrollNext");
	nextLink.slideRef = element;
	Event.addEvent(nextLink, "click", SlideScroll.nextSlide);
}
SlideScroll.nextSlide = function(evt){
	Event.preventDefault(evt);
	var element = Event.getTarget(evt);
	var slider = element.slideRef;
	SlideScroll.moveRight(slider);
}
//Tween(element, property, easingClass, start, end, seconds)
//
SlideScroll.prevSlide = function(evt){
	Event.preventDefault(evt);
	var element = Event.getTarget(evt);
	var slider = element.slideRef;
	SlideScroll.moveLeft(slider);
}
SlideScroll.moveRight = function(slider){
	if(slider.animating){
		return;
	}
	// if last slide exit
	if(slider.currentSlide <= 1){
		return;
	}
	// move each slide left
	var sliderX = Document.getX(slider);
	var sliderWidth = slider.offsetWidth;
	for(var i = 0; i < slider.totalSlides; i ++){
		if(i == 0){
			slider.animating = true;
		}
		var currentSlide = slider.slides[i];
		var currentX = Document.getX(currentSlide) - sliderX;
		var finalX = Document.getX(currentSlide) + sliderWidth - sliderX;
		var tween = new Tween(currentSlide, "x", Strong.easeOut, currentX, finalX, 1.2);
		//var tween = new Tween(currentSlide, "x", Back.easeOut, currentX, finalX, 1.5);
		if(i == 0){
			tween.onMotionFinished = function(){
				slider.animating = false;
			}
		}
	}
	slider.currentSlide --;
}
SlideScroll.moveLeft = function(slider){
	if(slider.animating){
		return;
	}
	// if last slide exit
	if(slider.currentSlide >= slider.totalSlides){
		return;
	}
	// move each slide left
	var sliderX = Document.getX(slider);
	var sliderWidth = slider.offsetWidth;
	for(var i = 0; i < slider.totalSlides; i ++){
		if(i == 0){
			slider.animating = true;
		}
		var currentSlide = slider.slides[i];
		var currentX = Document.getX(currentSlide) - sliderX;
		var finalX = currentX - sliderWidth;
		var tween = new Tween(currentSlide, "x", Strong.easeOut, currentX, finalX, 1.2);
		//var tween = new Tween(currentSlide, "x", Back.easeOut, currentX, finalX, 1.5);
		if(i == 0){
			tween.onMotionFinished = function(){
				slider.animating = false;
			}
		}
	}
	slider.currentSlide ++;
}
SlideScroll.autoPlay = function(element){
	var children = Document.getChildNodes(element);
	var totalSlides = children.length;
	var motion = "right_to_left";
	var timer = setInterval(
		function(){
			var currentSlide = element.currentSlide;
			if(currentSlide == totalSlides){
				motion = "left_to_right";
			}
			else if(currentSlide == 1){
				motion = "right_to_left";
			}
			if(motion == "right_to_left"){
				SlideScroll.moveLeft(element);
			}
			else{
				SlideScroll.moveRight(element);
			}
		}
		, 10000
	);
}
