/*
	Wird nach dem Laden der Seite ausgefuehrt.
*/

function enhanceCarousel (carousel) {

	carousel.addMethods({

		normalisePreviousButton: function() {
			// Den Button wieder 'sichtbar' machen
			var previousClassName = "previous_button" + this.options.disabledButtonSuffix;
			var button = this.previousButton;
			button.removeClassName(previousClassName);

			// Den Click-Handler so ersetzen, dass er beim naechsten Click
			// die Seite neu laedt.
			button.stopObserving("click", button.clickHandler);
			button.clickHandler = this.followPreviousButton.bind(this);
			button.observe("click", button.clickHandler);

			// Jetzt den Scroll-Event beobachten, damit der Scroll-Handler
			// beim ersten Scrollen wieder korrigiert wird.
			// Das Prinzip: Hat das Carousel nichts mehr zu scrollen, aber
			// der Newsticker koennte noch etwas liefern (mini_previous_more=1),
			// So ersetzen wir den Click-Handler durch eine reload Funktion
			// (followPreviousButton).
			this.observe('scroll:started', this.scrollPreviousButton);

			// Der Vollstaendigkeitshalber sagen wir Bescheid
			this.fire('previousButton:enabled');
		},

		followPreviousButton: function() {
			// Die Seite wird neu geladen, weil wir noch Daten ueber
			// den Newsticker holen koennen
			var button = this.previousButton;
			document.location = button;
		},

		scrollPreviousButton: function() {
			// Wir stellen die Scroll-Funktionalitaet wieder her, da sich das
			// Carousel bewegt hat.
			var button = this.previousButton;
			this.elementSize = this.computeElementSize();
			var scrollInc = this.options.scrollInc;
			if (scrollInc == "auto") {scrollInc = Math.floor(this.nbVisible);}

			button.stopObserving("click", button.clickHandler);
			button.clickHandler = this.scroll.bind(this, (button == this.nextButton ? -1 : 1) * scrollInc * this.elementSize);
			button.observe("click", button.clickHandler)
		},

		normaliseNextButton: function() {
			// Den Button wieder 'sichtbar' machen
			var nextClassName = "next_button" + this.options.disabledButtonSuffix;
			var button = this.nextButton;
			button.removeClassName(nextClassName);

			// Den Click-Handler so ersetzen, dass er beim naechsten Click
			// die Seite neu laedt.
			button.stopObserving("click", button.clickHandler);
			button.clickHandler = this.followNextButton.bind(this);
			button.observe("click", button.clickHandler);

			// Jetzt den Scroll-Event beobachten, damit der Scroll-Handler
			// beim ersten Scrollen wieder korrigiert wird.
			// Das Prinzip: Hat das Carousel nichts mehr zu scrollen, aber
			// der Newsticker koennte noch etwas liefern (mini_next_more=1),
			// So ersetzen wir den Click-Handler durch eine reload Funktion
			// (followNextButton).
			this.observe('scroll:started', this.scrollNextButton);

			// Der Vollstaendigkeitshalber sagen wir Bescheid
			this.fire('nextButton:enabled');
		},

		followNextButton: function() {
			// Die Seite wird neu geladen, weil wir noch Daten ueber
			// den Newsticker holen koennen
			var button = this.nextButton;
			document.location = button;
		},

		scrollNextButton: function() {
			// Wir stellen die Scroll-Funktionalitaet wieder her, da sich das
			// Carousel bewegt hat.
			var button = this.nextButton;
			this.elementSize = this.computeElementSize();
			var scrollInc = this.options.scrollInc;
			if (scrollInc == "auto") {scrollInc = Math.floor(this.nbVisible);}

			button.stopObserving("click", button.clickHandler);
			button.clickHandler = this.scroll.bind(this, (button == this.nextButton ? -1 : 1) * scrollInc * this.elementSize);
			button.observe("click", button.clickHandler)
		}
	});
}


Event.observe(window, 'load', function(){

	// Standard-Aktion von Karussel-Links verhindern
	$$('a.previous_button', 'a.next_button').each(function(elem){
		elem.observe('click', function(e){
			Event.stop(e);
		});
	});

	enhanceCarousel(UI.Carousel);

	if($('video-archiv') != null) {
		// Karussel fuer Video-Archiv
		var videoarchivCarousel = new UI.Carousel('video-archiv', {scrollInc : 6, first_scroll_suppress_ivw_reload : 1});

		videoarchivCarousel.observe('scroll:started', function(event) {
			if (videoarchivCarousel.options.first_scroll_suppress_ivw_reload == 1) {
                videoarchivCarousel.options.first_scroll_suppress_ivw_reload = 0;
                return;
			} else {
                trackingReload.reload_all();
            }
		});

		videoarchivCarousel.observe('previousButton:disabled', function(event) {
			if (previous_more_mini == 1) {
				videoarchivCarousel.normalisePreviousButton();
			}
		});

		videoarchivCarousel.observe('nextButton:disabled', function(event) {
			if (next_more_mini == 1) {
				videoarchivCarousel.normaliseNextButton();
			}
		});

		// An die korrekte Stelle im Carousel scrollen
		videoarchivCarousel.scrollTo(scrollto_mini);
//		alert("scrolling MINI to:" + scrollto_mini);
	}

	if($('sendungen') != null) {
		// Karussel fuer Sendungen
		var sendungenCarousel = new UI.Carousel('sendungen', {scrollInc : 2, first_scroll_suppress_ivw_reload : 1});

		sendungenCarousel.observe('scroll:started', function(event) {
			if (sendungenCarousel.options.first_scroll_suppress_ivw_reload == 1) {
                sendungenCarousel.options.first_scroll_suppress_ivw_reload = 0;
                return;
			} else {
                trackingReload.reload_all();
            }
		});

		sendungenCarousel.observe('previousButton:disabled', function(event) {
			if (previous_more_normal == 1) {
				sendungenCarousel.normalisePreviousButton();
			}
		});

		sendungenCarousel.observe('nextButton:disabled', function(event) {
			if (next_more_normal == 1) {
				sendungenCarousel.normaliseNextButton();
			}
		});

		// An die korrekte Stelle im Carousel scrollen
		sendungenCarousel.scrollTo(scrollto_normal);
//		alert("scrolling NORMAL to:" + scrollto_normal);
	}
});




