/*
Created By: Christian Klinger / Klinger-webDESIGN
Website: http://www.klinger-webdesign.de
Date: 2011-04-15
*/

var delay = 6000;		// set timer for slide effect
var move;				// distance to move the list item - set at initSlider()
var moveBackUp;
var timer;				// timer-object for start/stop timer
var list;				// list-object, contains all list items
var position;			// counter to detect position of list items

// call this function to start rotation
function initSlider( ) {
	$('sliderFrame').setStyle({ 'height': '236px' });							// set heigt to show pageination - new height depends on height of the pageination
	$('paging').toggle();														// show pageination
	list = $('slider').getElementsByTagName('li'); 								// get native list of slides
	var firstClone = document.getElementById('sliderItem-1').cloneNode(true); 	// create clone of first list element
	var i = list.length + 1 
	firstClone.setAttribute( 'id', 'sliderItem-'+i ); 							// change ID-attribute for clone
	firstClone.setAttribute( 'rel', i ); 										// set rel-attribute - important for direkt linking
	new Insertion.Bottom( document.getElementById('slider'), firstClone ); 		// add clone to end of slider-lisst
	list = $('slider').getElementsByTagName('li');								// get full list of slides with clone at the end
	
	eventObserver();															// check for user events
	moveBackUp = move = -728; 																// set to width of li-element
	position = 0;																// set start position
	
	setTimeout( rotateSwitch( ), delay );										// start rotation
}

// main function for rotating list items
function rotateSwitch( ) {
	return( Effect.Run = function() {
		if( position == list.length - 1 ) {
			// if rotation is befor last position: move every list item to start
			for( i=1; i <= list.length; i++){
				$('sliderItem-'+i).setStyle({
					  'left': '0px',
					  'position': 'relative',
					  'top': '0px'
				});
			}
			position = 0;
			move =moveBackUp ;
			// call rotation without delay to avoid double delay time
			timer = setTimeout( rotateSwitch( ), 0 );
		}
		else {
			// move to next item in list
			for( i=1; i <= list.length; i++){
				new Effect.MoveBy($('sliderItem-'+i), 0, move);
			}
			position++;
			// call rotation with delay
			timer = setTimeout( rotateSwitch( ), delay );
		}
	});
}

function eventObserver() {
       
    var links = $$("#paging a");
    if( links ) {
    	links.each(function(link){										// check if direkt link is clicked
    		link.observe('click', function (event) {
        		if( link.readAttribute('rel') == 'sliderStartStop' ) {	
        			if( link.innerHTML == "stop" ) {
        				clearTimeout(timer);							// stop rotation
        				link.update( 'start' );							// change start/stop button
        				return true;
        			} else {
        				link.update( 'stop' );							// change start/stop button
        				timer = setTimeout( rotateSwitch( ), delay );	// resume rotation
        				return true;
        			}
        		} else {
	    			clearTimeout(timer);								// stop rotation
	    			$("sliderStartStop").update( 'start' );				// change start/stop button
	    			position = link.readAttribute('rel');				// get position for clicked list item
	    			move = moveBackUp * (position - 1);						// calc distance to move
	
	    			for( i=1; i <= list.length; i++){					// move all items to view selected one
	    				$('sliderItem-'+i).setStyle({
	    					'left': move+'px',
	    					  'position': 'relative',
	    					  'top': '0px'
	    				});
	    			}
        		}
    		});    	
    	});
    	return true;
    }
}

