/**
 * Spielplan
 * für www.stadthalle-hockenheim.de
 *
 * @author			René Kubach, www.exedis.de
 * @copyright		exedis, http://www.exedis.de
 *
 * © exedis – Internet Konzeption, Gestaltung, Realisation
 * http://www.exedis.de
 */

$(document).ready(function(){

	// Spielplan laden
	Spielplan.laden();

});

/**
 *
 */
Spielplan = {

	// Einstellungen
	selListe:			'.veranstaltung',
	selDetails:			'.details',
	strgClass:			'detailStrg',
	strgAufText:		'Details anzeigen',
	strgZuText:			'Details ausblenden',
	offenClass:			'offen',

	// Klassenmember
	liste:				new Array(),
	bereit:				false,

	/**
	 * @todo Schnelles Öffnen bei Laden mit Anker
	 */
	laden: function () {
		// Veranstaltungen als Objekte laden
		$(this.selListe).each(function(nr){
			Spielplan.add(nr,$(this));
		});
		// Aufruf der Seite mit einem Anker
		if ( document.location.hash ) {
			for ( var i=0; i<this.liste.length; i++ ) {
				if ( document.location.hash.substr(1)==this.liste[i].anker ) {
					this.oeffnen(i);
				}
			}
		}
		this.aktionEnde();
	},

	add: function ( nr, obj ) {
		obj.find(this.selDetails).after('<span class="link '+this.strgClass+'" onclick="Spielplan.toggle('+nr+');">'+this.strgAufText+'</span> '); // Leerzeichen am Ende für IE <= IE8
		obj.find('.bild').click(function(){
			Spielplan.toggle(nr);
		});
		var vImg = obj.find('.bild img');
		this.liste[nr] = {
			anker:			obj.find('a').eq(0).attr('name'),
			vorschau:		vImg.attr('src'),
			bild:			obj.find('.bild a.gross').attr('href'),
			nr:				nr,
			strg:			obj.find('.'+this.strgClass),
			obj:			obj,
			offen:			false
		};
	},

	get: function ( nr ) {
		return this.liste[nr];
	},

	/**
	 * Öffnet ein geschlossenes Element und schließt ein offenes
	 */
	toggle: function ( nr ) {
		if ( this.bereit ) {
			if ( this.get(nr).obj.hasClass('offen') ) {
				this.schliessen( nr );
			} else {
				this.oeffnen( nr );
			}
		}
	},

	/**
	 * Öffnet eine Veranstaltung, d.h. zeigt die Details dazu an.
	 *
	 * Im Einzelnen:
	 * - das Bild wird vergrößert
	 * - die Detail-Informationen (this.selDetails) werden eingeblendet
	 * - die Klasse offen wird hinzugefügt
	 * - ruft oeffnenEnde() auf
	 *
	 * @todo Bild vorladen, Bildgröße per Effekt ändern
	 */
	oeffnen: function ( nr ) {
		this.aktionStart();
		var v 		= this.get(nr);
		v.offen 	= true;
		v.strg.text(this.strgZuText);
		var preloader = new ImagePreloader( v.bild );
		preloader.callback = function(){
			Spielplan.zeigeVollbild( nr, preloader );
		};
		preloader.start();
		v.obj.addClass(this.offenClass).find(this.selDetails).slideDown(750,function(){
			Spielplan.aktionEnde();
		});
	},

	zeigeVollbild: function ( nr, preloader ) {
		var v = this.get(nr);
		if ( v.offen ) {
			var img = this.get(nr).obj.find('.bild img');
			img.animate({width: preloader.img.width, height: preloader.img.height},250,function(){
				if ( Spielplan.get(nr).offen ) {	// nur Datei tauschen, wenn das Element noch immer offen ist
					img.attr('src',preloader.img.src);
				} else {							// sonst: Vergrößerung rückgängig machen
					img.css({width: '', height: ''});
				}
			});
		}
	},

	schliessen: function ( nr ) {
		this.aktionStart();
		var v = this.get(nr);
		v.offen = false;
		v.obj.removeClass(this.offenClass);
		v.strg.text(this.strgAufText);
		v.obj
			.find('.bild img').css({width: '', height: ''}).attr('src',this.get(nr).vorschau).end()
			.find(this.selDetails).slideUp(250,function(){
				Spielplan.aktionEnde(nr);
			});
	},

	aktionStart: function () {
		this.bereit 	= false;
	},

	aktionEnde: function () {
		this.bereit 	= true;
	}

};