var SlideScrollLinkWidth = 24;
var SlideScrollTopBorder = 0;
var SlideScrollPrevImage = "images/slide_left.jpg";
var SlideScrollNextImage = "images/slide_right.jpg";
var SlideScrollButtonWidth = 16;
var SlideScrollButtonHeight = 11;
var SlideScrollButtonTopMargin = 10;
var SlideScrollAnimationSpeed = 1.5;
var SlideScrollTimer = 8;

Event.DOMReady(prepareSlideScrolls);

function prepareSlideScrolls(){
	if(Browser.getBrowser() == "internet explorer" && Browser.getVersion() < 7){
		return;
	}
	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);
	}
	if(parameters[1]){
		SlideScroll.setButtons(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");
	var leftPadding = Number(Document.getStyle(element, "margin-left").replace("px",""));
	var rightPadding = Number(Document.getStyle(element, "margin-right").replace("px",""));
	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 - SlideScrollTopBorder) +"px";
	prevLink.style.left = (Document.getX(element) - leftPadding - SlideScrollLinkWidth) +"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.nextSlide);
	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 - SlideScrollTopBorder) +"px";
	nextLink.style.left = (Document.getX(element) + element.offsetWidth + rightPadding) +"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);
	//Event.addEvent(nextLink, "click", SlideScroll.prevSlide);
}
SlideScroll.prevSlide = 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.nextSlide = 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){
		SlideScroll.fastForward(slider);
		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 --;
	if(slider.buttons){
		SlideScroll.updateButtons(slider);
	}
}
SlideScroll.moveLeft = function(slider){
	if(slider.animating){
		return;
	}
	// if last slide exit
	if(slider.currentSlide >= slider.totalSlides){
		SlideScroll.rewind(slider);
		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 ++;
	if(slider.buttons){
		SlideScroll.updateButtons(slider);
	}
}
SlideScroll.rewind = function(slider){
	var sliderX = Document.getX(slider);
	var totalSlides = slider.totalSlides;
	var sliderWidth = slider.offsetWidth;
	var totalWidth = sliderWidth * (totalSlides - 1);
	for(var i = 0; i < totalSlides; i ++){
		if(i == 0){
			slider.animating = true;
		}
		var currentSlide = slider.slides[i];
		var currentX = Document.getX(currentSlide) - sliderX;
		var finalX = Document.getX(currentSlide) + totalWidth - sliderX;
		var tween = new Tween(currentSlide, "x", Strong.easeOut, currentX, finalX, SlideScrollAnimationSpeed);
		if(i == 0){
			tween.onMotionFinished = function(){
				slider.animating = false;
			}
		}
	}
	slider.currentSlide = 1;
	if(slider.buttons){
		SlideScroll.updateButtons(slider);
	}
}
SlideScroll.fastForward = function(slider){
	var sliderX = Document.getX(slider);
	var totalSlides = slider.totalSlides;
	var sliderWidth = slider.offsetWidth;
	var totalWidth = sliderWidth * (totalSlides - 1);
	for(var i = 0; i < totalSlides; i ++){
		if(i == 0){
			slider.animating = true;
		}
		var currentSlide = slider.slides[i];
		var currentX = Document.getX(currentSlide) - sliderX;
		var finalX = currentX - totalWidth;
		var tween = new Tween(currentSlide, "x", Strong.easeOut, currentX, finalX, SlideScrollAnimationSpeed);
		if(i == 0){
			tween.onMotionFinished = function(){
				slider.animating = false;
			}
		}
	}
	slider.currentSlide = slider.totalSlides;
	if(slider.buttons){
		SlideScroll.updateButtons(slider);
	}
}
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);
			}
		}
		, SlideScrollTimer * 1000
	);
}
SlideScroll.setButtons = function(element){
	var children = Document.getChildNodes(element);
	var totalSlides = children.length;
	var holder = document.createElement("div");
	holder.style.position = "absolute";
	holder.style.zIndex = 1;
	holder.style.width = (SlideScrollButtonWidth * totalSlides) + "px";
	holder.style.height = SlideScrollButtonHeight + "px";
	document.getElementsByTagName("body")[0].appendChild(holder);
	holder.style.top = (Document.getY(element) + element.offsetHeight + SlideScrollButtonTopMargin) + "px";
	holder.style.left = (Document.getX(element) + (element.offsetWidth / 2) - (holder.offsetWidth / 2)) + "px";
	element.buttons = holder;
	for(var i = 0; i < totalSlides; i ++){
		var a = document.createElement("a");
		a.innerHTML = "&nbsp;";
		a.href = "#";
		a.style.display = "block";
		a.style.width = SlideScrollButtonWidth + "px";
		a.style.height = SlideScrollButtonHeight + "px";
		a.style.cssFloat = "left";
		a.style.styleFloat = "left";
		a.className = "btn_slide";
		holder.appendChild(a);
		a.slideNum = i + 1;
		if(a.slideNum == element.currentSlide){
			a.className = "btn_slide_active";
		}
		a.slider = element;
		Event.addEvent(a, "click", SlideScroll.moveToSlide);
	}
}
SlideScroll.moveToSlide = function(evt){
	Event.preventDefault(evt);
	var element = Event.getTarget(evt);
	var slider = element.slider;
	if(slider.animating){
		return;
	}
	var gotoSlide = element.slideNum;
	var currentSlide = slider.currentSlide;
	if(gotoSlide > currentSlide){
		SlideScroll.goToFourthSlide(slider, gotoSlide);
	}
	else if(gotoSlide < currentSlide){
		SlideScroll.goToBackSlide(slider, gotoSlide);
	}
	else{
		return;
	}
}
SlideScroll.goToFourthSlide = function(slider, gotoSlide){
	var sliderX = Document.getX(slider);
	var totalSlides = slider.totalSlides;
	var totalSlideToMove = gotoSlide - slider.currentSlide;
	var sliderWidth = slider.offsetWidth;
	var totalWidth = sliderWidth * (totalSlideToMove);
	for(var i = 0; i < totalSlides; i ++){
		if(i == 0){
			slider.animating = true;
		}
		var currentSlide = slider.slides[i];
		var currentX = Document.getX(currentSlide) - sliderX;
		var finalX = currentX - totalWidth;
		var tween = new Tween(currentSlide, "x", Strong.easeOut, currentX, finalX, SlideScrollAnimationSpeed);
		if(i == 0){
			tween.onMotionFinished = function(){
				slider.animating = false;
			}
		}
	}
	slider.currentSlide = gotoSlide;
	if(slider.buttons){
		SlideScroll.updateButtons(slider);
	}
}
SlideScroll.goToBackSlide = function(slider, gotoSlide){
	var sliderX = Document.getX(slider);
	var totalSlides = slider.totalSlides;
	var totalSlideToMove = gotoSlide - slider.currentSlide;
	var sliderWidth = slider.offsetWidth;
	var totalWidth = sliderWidth * (totalSlideToMove);
	//var accumilatingWidth = 0;
	for(var i = 0; i < totalSlides; i ++){
		if(i == 0){
			slider.animating = true;
		}
		var currentSlide = slider.slides[i];
		var currentX = Document.getX(currentSlide) - sliderX;
		var finalX = Document.getX(currentSlide) - totalWidth - sliderX;
		var tween = new Tween(currentSlide, "x", Strong.easeOut, currentX, finalX, SlideScrollAnimationSpeed);
		if(i == 0){
			tween.onMotionFinished = function(){
				slider.animating = false;
			}
		}
	}
	slider.currentSlide = gotoSlide;
	if(slider.buttons){
		SlideScroll.updateButtons(slider);
	}
}
SlideScroll.updateButtons = function(slider){
	var holder = slider.buttons;
	var links = holder.getElementsByTagName("a");
	for(var i = 0; i < links.length; i ++){
		links[i].className = "btn_slide";
	}
	links[slider.currentSlide - 1].className = "btn_slide_active";
}
