var slide;
var beam;
var currentSlide;
var slideArray=new Array();
var slidingInProcess=false;

window.addEvent('load', function() {

	getCurrentSlide();
	initializeSildes();
	initializeSliding();
	initializeAnchors();
	
	showSlidingPages();
});

function showSlidingPages()
{
	// Show elements
	$('navigation').setStyle('opacity', '0');
	$('slider_arrows').setStyle('opacity', '0');
	$('slider_shadows').setStyle('opacity', '0');
	$('slidebox').setStyle('opacity', '0');
	
	// Fade in elements
	$('navigation').fade('in');
	$('slider_arrows').fade('in');
	$('slider_shadows').fade('in');
	$('slidebox').fade('in');
}

function getCurrentSlide()
{
	currentSlide=$('slides').getElement('div.slide').id;
}

function initializeAnchors()
{
	// Get Page location
	var winLocation=document.location.href.match(/^[^#]*/)[0]+'#';

	// Browse navigation Links ...
	var navCounter=0;
	$$('div#navigation a').each(function(element) {		
		// ... and set IDs
		targetSlide=element.href.replace(winLocation, "");
		element.set('id', 'nav'+targetSlide);

		// build up a slide array
		slideArray[navCounter]=targetSlide;
		
		navCounter++;
	});
	
	// Browse through all Links ...
	$$('a').each(function(element) {
		
		// Check if the link contains an anchor to this page
		if(element.href.indexOf("#")!=-1 && element.href.indexOf(winLocation)==0 && element.href.length>winLocation.length)
		{
			// Check if the anchor positions exists
			var targetSlide=element.href.replace(winLocation, "");
			if(targetSlide && $(targetSlide)) 
			{
				// Set the click action
				element.addEvent('click', function(e) {
					new Event(e).stop();
					  
					startSliding(targetSlide);					
				});
			}
		}
		else if(element.href.indexOf("#")!=-1 && element.href.indexOf(winLocation)==0)
		{
			// Set the click action
			element.addEvent('click', function(e) {
				new Event(e).stop();
			});
		}
	});
	
	// Set the active CSS class for the current slide
	$('nav'+currentSlide).addClass('active');
}

function initializeSliding()
{
	// Set Slidestyle according to the settings
	if(slideStyle=="linear") slideStyle=Fx.Transitions.Quad.easeInOut;
	else if(slideStyle=="dynamic") slideStyle=Fx.Transitions.Cubic.easeOut;
	else if(slideStyle=="bounce") slideStyle=Fx.Transitions.Bounce.easeOut;
	
	// Define new standard slide
	slide=new Fx.Scroll('slidebox', {
		duration: slideDuration,
		transition: slideStyle,
		wheelStops: false,
		onStart: function() {
			slidingInProcess=true;
		},
		onComplete: function() {
			slidingInProcess=false;
		}
	});
	
	// Define instant move slide
	beam=new Fx.Scroll('slidebox', {
		duration: 0,
		wheelStops: false,
		onStart: function() {
			slidingInProcess=true;
		},
		onComplete: function() {
			slidingInProcess=false;
		}
	});
}

function initializeSildes()
{
	// Set body dimensions
	$('slides').style.width=gridCols*900+'px';
	$('slides').style.height=gridRows*300+'px';
	
	// Browse through slides ...
	colCounter=1;
	rowCounter=1;
	$$('div.slide').each(function(element) { 

		// .. and set the position according to the grid
		element.setStyle('left', ((colCounter-1)*900)+'px');
		element.setStyle('top', ((rowCounter-1)*300)+'px');
		
		if(colCounter>=gridCols)
		{
			colCounter=1;
			rowCounter++;
		}
		else colCounter++;
	});
}

function slideTo(direction)
{
	// herausfinden welche die aktive Slide-Nummer ist
	counter=0;
	while(slideArray[counter])
	{
		if(currentSlide==slideArray[counter]) var currentSlideNumber=counter;
		counter++;
	}
	
	// zurück sliden
	if(direction=='previous')
	{
		if(slideArray[currentSlideNumber-1]) targetSlide=slideArray[currentSlideNumber-1];
		else targetSlide=slideArray[counter-1];

	}
	
	// vor sliden
	if(direction=='next')
	{
		if(slideArray[currentSlideNumber+1]) targetSlide=slideArray[currentSlideNumber+1];
		else targetSlide=slideArray[0];
	}
	
	startSliding(targetSlide);
}

function startSliding(targetSlide)
{
	if(currentSlide!=targetSlide && slidingInProcess==false)
	{
		// Toggle active CSS classes
		$$('div#navigation a').removeClass('active');
		$('nav'+targetSlide).addClass('active');

		// Set the current slide and slide there
		currentSlide=targetSlide;
		slide.toElement(targetSlide);
	}
}