var g_images 		= new Array();
var g_loaded		= 0;
var g_slider 		= null;
var g_current		= 0;
var g_scrolling		= true;
var g_newOffset		= 0;

function init() {
	initSlideshow();
}

function initSlideshow() {
	g_slider = document.getElementById("slideshow-slider");
	g_images = g_slider.getElementsByTagName("img");

	document.getElementById("button-next").onclick = handleClickNext;
	document.getElementById("button-prev").onclick = handleClickPrev;

	document.onkeydown = handleKeyDown;
	
	highlight(g_current);
}

function loaded() {
	g_loaded++;

	var count = document.getElementById("slideshow-slider").getElementsByTagName("img").length;
	if(g_loaded == count) {
		document.getElementById("slideshow-loading").style.display = "none";
		g_scrolling = false;
	}
}

function error() {
    message("Beim Laden der Bilder trat ein Fehler auf", true);
}

function message(sMsg, bErr) {
    var cont = document.getElementById("slideshow-loading");
    cont.innerHTML = "<div>" + sMsg + "</div>";
    if(bErr) {
        cont.style.backgroundImage = "none";
        document.getElementById("slideshow-slider").innerHTML = "";
    }
}

function scrollTo(nr) {
	if(!g_scrolling) {
		if(nr != g_current) {
			var offset = parseInt(g_slider.style.marginLeft);
			if(isNaN(offset)) {
				g_slider.style.marginLeft = 0;
			}
	
			g_newOffset = 0;
			for(i = 0; i < nr; i++) {
				g_newOffset -= g_images[i].width + 2;
			}
			scroll();
			g_current = nr;
			highlight(nr);
		}
	}

}

function highlight(nr) {
    for(var i = 0; i < g_images.length; i++) {
        with(g_images[i].style) {
            if(i != nr) {
                opacity = "0.2";
                filter = "Alpha(opacity=20)";
            }
            else {
                opacity = "1";
                filter = "none";
            }
        }
    }
}

function scrollToEnd() {
	if(g_current != g_images.length -1) scrollTo(g_images.length - 1);
}

function scrollToStart() {
	if(g_current != 0) scrollTo(0);
}

function scroll() {
	var millis = 20;
	var currentOffset = parseInt(g_slider.style.marginLeft);
	g_scrolling = true;
	if(currentOffset != g_newOffset) {


		var amount = Math.pow(Math.abs(currentOffset - g_newOffset), 0.6);

		if(currentOffset > g_newOffset - 5 && currentOffset < g_newOffset + 5) {
			currentOffset = g_newOffset;
			g_scrolling = false;
		}
		else if(currentOffset < g_newOffset) {
			currentOffset += amount;
			window.setTimeout("scroll()", millis);
		}
		else {
			currentOffset -= amount;
			window.setTimeout("scroll()", millis);
		}

		g_slider.style.marginLeft = currentOffset + "px";
	}
}

function handleClickNext() {
	if(g_current + 1 < g_images.length) {
		scrollTo(g_current + 1);
	}
}

function handleClickPrev() {
	if(g_current - 1 >= 0) {
		scrollTo(g_current - 1);
	}
}

function handleKeyDown(e) {
	if(!e) e = window.event;
	var code = e.which ? e.which : e.keyCode;
	switch(code) {
		case 37: handleClickPrev(); break;
		case 38: scrollToEnd(); break;
		case 39: handleClickNext(); break;
		case 40: scrollToStart(); break;
	}
}

window.addEventListener?window.addEventListener("load",init,false):window.attachEvent("onload",init);
