// =============================================================================
//
// DIG CMS Template                                                             
//                                                                      
//  $Rev: 2329 $
//  $Author: hauer $
//  $Date: 2012-01-20 16:33:43 +0100 (Fr, 20 Jan 2012) $
//
// =============================================================================


/********************************
 * 								*
 *  DIG Foundation Collection	*
 * 								*
 ********************************/

// Rotator-Baustein initialisieren
function init_rotator(rotator_id, speed, standingTime) {
	// Ist das Element vorhanden?
	if (!$('#rotator_list', $('#' + rotator_id)).length) {
		// Wenn nicht, beenden
		return;
	}

	// Status-Flag - Durch mouseEnterHandler ausgelöste Pause
	var pause = false;
	// Status-Flag - rotate() wird verzögert rekursiv ausgeführt
	var waitForContinue = false;
	// Status-Flag - rotate() wird verzögert durch mouseLeaveHandler ausgeführt
	var waitForRestart = false;
	
	var listLength = $('#rotator_list li', $('#' + rotator_id)).length;
	var i=0;
	var listElement = null;
	while ( i < listLength ) {
		listElement = $('#rotator_list li:eq(' + i + ')', $('#' + rotator_id));
		if ( listElement.css('height') == '0px' ) {
			listElement.remove();
			listLength--;
		} else {
			i++;
		}
	}
	if (listLength <= 1) {
		return;
	}
	
	// Rotator-Funktion
	function rotate(element) {
		// Stoppen, wenn der Anwender das wünscht
		if (pause) {
			if (waitForRestart == true) {
				waitForContinue = false;
				waitForRestart = false;
				return;
			} else {
				return;
			}
		}
		
		// Nächstes oder erstes <li>
		var $next_li = $(element).next('li').length ? $(element).next('li') : $('#rotator_list li:first', $('#' + rotator_id));
		
		// Fortsetzen
		function doIt() {
			rotate($next_li);
		}
		
		// Event-Handler am aktuellen Element für mouseenter/mouseleave-Event (namespace "rotator") aushängen
		$(element).unbind('.rotator');
		// Event-Handler am nächsten Element für mouseenter/mouseleave-Event einhängen
		$($next_li).bind('mouseenter.rotator', mouseEnterHandler);
		$($next_li).bind('mouseleave.rotator', mouseLeaveHandler);

		// Breite des aktuellen Elements ermitteln
		var elementWidth = $(element).width();
		// <li> ausblenden, indem das Element nach links herausgeschoben wird (CSS-Eigenschaft "left" wird von 0 nach -elementWidth animiert)
		$(element).animate({ 'left' : -elementWidth }, speed, 'linear', function() { $(element).hide(); } );			
		// Nächstes <li> anzeigen, indem das nächste Element recht neben dem aktuellen Element angezeigt ...
		$($next_li).css('left', elementWidth);
		$($next_li).show();
		// ... und nach links hineingeschoben wird (CSS-Eigenschaft "left" wird von elementWidth nach 0 animiert)
		$($next_li).animate( { 'left' : 0 }, speed, 'linear', function() {
			waitForContinue = true;
			setTimeout( function() { doIt(); waitForContinue = false; }, standingTime);
		});
	} // function rotate(element) {

	// Pause/Play Event-Handler für Animation 
	var mouseEnterHandler = function() {
		// Rotation anhalten
		pause = true;
		// Nicht folgen
		this.blur();
		return false;
	};
	var mouseLeaveHandler = function() {
		// Pause beenden
		pause = false;
		// Aktuelles Element merken
		var thisElement = this;
		// Rotation fortfahren, wenn keine Rotation aktiv ist
		if ( !waitForContinue && !waitForRestart ) {
			waitForRestart = true;
			setTimeout( function() { rotate($(thisElement), $('#' + rotator_id)); }, standingTime/2);
		}
		// Nicht folgen
		this.blur();
		return false;
	};

	// Event-Handler am ersten <li> für mouseenter/mouseleave-Event einhängen
	$('#rotator_list li:first', $('#' + rotator_id)).bind('mouseenter.rotator', mouseEnterHandler);
	$('#rotator_list li:first', $('#' + rotator_id)).bind('mouseleave.rotator', mouseLeaveHandler);

	// Auf Laden der Seite warten
	$(window).load(function() {
		// Rotation beginnen
		rotate($('#rotator_list li:visible:first', $('#' + rotator_id)));
	});
} // function init_rotator(rotator_id, speed, standingTime) {
