function ausgewaehlteGenres() {
	// checkboxen holen
	var inputs = jQuery('form#genreauswahl ul li .genreButton input[type=checkbox]');
	var genres = new Array();
	// inputs durchgehen und nach markierten suchen
	for(var i in inputs) {
		if(inputs[i].checked == true)
		{
			genres[genres.length] = inputs[i].value;
		}
	}
	if(genres.length == 7) {
		return false;
	}
	return genres;
}


function ausgewaehlteSortierung() {
	// sortierungen holen
	var sortierung	= jQuery('input#sortierung').val();
	return sortierung;
}

jQuery(document).ready(function($){

	$('input.blurFocus').focus(function(){
		if(this.value == this.defaultValue){
			this.value = '';
		}
	});
	$('input.blurFocus').blur(function(){
		if(this.value == ''){
			this.value = this.defaultValue;
		}
	});
		
	var alleli = $().find('form#genreauswahl ul li');

	$().find('form#genreauswahl ul li').mouseover(function(){
		if ($(this).hasClass('ausgewaehlt')) {
			$(this).addClass('abgewaehlt');
		} else {
			$(this).addClass("over");
		}
	});
	$().find('form#genreauswahl ul li').mouseout(function(){
		if ($(this).hasClass('ausgewaehlt')) {
			$(this).removeClass('abgewaehlt');
		} else {
			$(this).removeClass('over');
		}
	});
	$().find('form#genreauswahl ul li label').mouseover(function(){
		var parent = $(this);
		while(!parent.is('li')) {
			parent = parent.parent();
		}
		$(parent).addClass('wow');
		$('form#genreauswahl ul li').each(function() {
			if (!$(this).hasClass('wow')) {
				if ($(this).hasClass('ausgewaehlt')) {
					$(this).removeClass("ausgewaehlt");
					$(this).addClass("abgewaehlt");
				}
			}
		});
	});
	$().find('form#genreauswahl ul li label').mouseout(function(){
		var parent = $(this);
		while(!parent.is('li')) {
			parent = parent.parent();
		}
		$('form#genreauswahl ul li').each(function() {
			if ($(this).hasClass('abgewaehlt')) {
				$(this).removeClass("abgewaehlt");
				$(this).addClass("ausgewaehlt");
			}
		});
		$(parent).removeClass('wow');
	});

	// genre-link-klick
	$('form#genreauswahl ul li a').click(function(){
		$('form#genreauswahl ul li .genreButton input[type=checkbox]').attr("checked", "");
		var parent = $(this);
		while(!parent.is('li')) {
			parent = parent.parent();
		}
		$(parent).find(".genreButton input[type=checkbox]").attr("checked", "checked");
		$('form#genreauswahl ul li').removeClass("ausgewaehlt");
		$('form#genreauswahl ul li').removeClass("abgewaehlt");
		$('form#genreauswahl ul li').removeClass("wow");
		$('form#genreauswahl ul li').removeClass("over");
		$(parent).addClass("ausgewaehlt");
		formularAbschicken();
		return false;
	});
	
	
	// auswahl-bestaetigungesbuttons
	$('#filterauswahl button, #sortierungsauswahl button').click(function(){
		// genres und filter-einstellungen holen
		var genres		= ausgewaehlteGenres();
		var filter		= ausgewaehlteFilter();
		var sortierung	= ausgewaehlteSortierung();
		filter.push('f=1');
		
		// parameter mergen
		if(genres.length > 0) {
			filter.push('genres=' + genres.join(','));
		}
		
		// sortierung anhaengen (nur wenn eine auswahl zur verfuegung steht)
		if(document.getElementById('sortierungsauswahl'))
		{
			if(sortierung && sortierung.length > 0) {
				filter[filter.length] = 'sortierung=' + sortierung;
			}
			else
			{
				filter[filter.length] = 'sortierung=veroeffentlichung,ab';
			}
		}
		
		
		formularAbschicken();
		return false;
	});
	
	
	// genre-checkbox-klick
	$('form#genreauswahl ul li .genreButton input[type=checkbox]').click(function(){

		$(this).parents().filter('li').removeClass("over");
		$(this).parents().filter('li').removeClass("abgewaehlt");
		$(this).parents().filter('li').removeClass("wow");
		if ((this.checked == "checked") || (this.checked == true)) {
			$(this).parents().filter('li').addClass("ausgewaehlt");
		}
		else {
			$(this).parents().filter('li').removeClass("ausgewaehlt");
			
			// war es das letzte? dann alle auswaehlen
			if ($('form#genreauswahl ul li.ausgewaehlt').length == 0) {
				$('form#genreauswahl ul li').addClass('ausgewaehlt');
				$('form#genreauswahl input[type=checkbox]').attr('checked','checked');
			}
		}
		
		// genreliste holen
		var p = $("#genreauswahl")[0];
		
		// wenn ein timeout laeuft wird er beendet
		if(p.warten){
			clearTimeout(p.warten);
			$(p).removeAttr('warten');
		}
		
		// ein neuer timeout wird gestartet
		if(!p.warten || p.warten == null){
			p.warten = setTimeout(function(){
				
				formularAbschicken();
				
				// id des timeouts loeschen
				$(p).removeAttr('warten');
			}, 1000);
		}
		
		
		
		return true;
	});
	
	function formularAbschicken() {
		$ = jQuery;
		
		// hier muessen in allen widgets der seite alle zustaende neu
		// befuellt werden.
		
		
		// array anlegen, in dem wir alle zu erneuernden elemente sichern
		var neu = [];
		
		// seitenindex standardmaessig deaktivieren
		var si = false;
		
		// alle widgets holen und zustaende holen und string erstellen, der sie zurueckgibt
		var ws = $('.widget');
		ws.each(function(){
			var w = this.id;
			this.zs = $(this).find('.zustaende').each(function(){
				//if($(this).css('display') != 'none'){
					neu.push(w + '.' + this.className.match(/zustand_[a-z0-9_]+/)[0].replace(/zustand_/, ''));
					if($(this).find('.seitenIndex').length == 0){
						neu[(neu.length-1)] += '#false';
					}
				//}
			});
		});
		var zs = neu.join(',');
		
		
		// pruefen auf welcher seite wir sind
		var rubrik	= window.location.pathname.split('/')[1];
		if(!rubrik || rubrik == ''){
			rubrik = 'home';
		}
		
		// konfig fuer ajax-abfrage erstellen
		var p = {
			aktion:		9,
			zs:			zs,
			r:			rubrik,
			si:			si
		}
		
		// genres und filter-einstellungen holen
		var genres		= ausgewaehlteGenres();
		var filter		= ausgewaehlteFilter();
		var sortierung	= ausgewaehlteSortierung();
		filter.push('f=1');
		
		// parameter mergen
		if(genres.length > 0) {
			filter.push('genres=' + genres.join(','));
		}
		
		// sortierung anhaengen (nur wenn eine auswahl zur verfuegung steht)
		if(document.getElementById('sortierungsauswahl'))
		{
			if(sortierung && sortierung.length > 0) {
				filter[filter.length] = 'sortierung=' + sortierung;
			}
			else
			{
				filter[filter.length] = 'sortierung=veroeffentlichung,ab';
			}
		}
		
		// query vervollstaendigen
		q = filter.join('&');
		
		laut.ajax.senden(p, function(d){
			// zustaende neu laden
			if(d.zs){
				for(var i in d.zs){
					var tmp = d.zs[i];
					var z = $('#' + tmp.w + ' .zustand_' + tmp.z);
					laut.aktualisiereZustand(d.zs[i], z);
				}
			}
			// teaserband aktualisieren
			if(d.tb && d.tb.length > 0 && laut.teaser && typeof(laut.teaser.arrayRefresh) == 'function'){
				laut.teaser.arrayRefresh(d.tb);
			}
		}, q);
		
		// aktion: formularAbschicken
		laut.trackClick('','genre');
		
		return false;
	}

	window.ausgewaehlteFilter = function() {
		var filter = new Array();
		
		// redaktionswertung?
		var redwert = $('form input[name=redaktionswertung]:checkbox');
		
		if($(redwert).length > 0) {
			var redawert = '';
			for (var i=0; i<$(redwert).length; i++) {
				if (($(redwert)[i].checked) && ($(redwert)[i].value > 0)){
					if (redawert != '') redawert += ',' + $(redwert)[i].value;
					else redawert = $(redwert)[i].value;
				}
			}
			if (redawert == '') {
				redawert = '1,2,3,4,5';
				$('form input[name=redaktionswertung]:checkbox').attr('checked','checked');
			}
			filter[filter.length] = 'redaktionswertung=' + redawert;
		}

		// autor gewaehlt?
		if ($('#filterauswahl select[name=id_autor]').length > 0)
		{
			autor = $('#filterauswahl select[name=id_autor] option:selected');
			if(autor[0].value > 0) {
				filter[filter.length] = 'id_autor=' + autor[0].value;
			}
		}

		// zeitangaben holen
		if ($('#filterauswahl select[name=monat]').length > 0)
		{
			monat	= $('#filterauswahl #monat');
			jahr	= $('#filterauswahl #jahr');
			
			if($(monat[0]).val() > 0 || $(jahr[0]).val() > 0)
			{
				filter[filter.length] = 'monat=' + $(monat[0]).val();
				filter[filter.length] = 'jahr=' + $(jahr[0]).val();
			}
		}

		// pruefen ob nur deutsche texte gewuenscht sind
		if ($('#deutschCheckbox').length > 0) {
			if($('#deutschCheckbox')[0].checked == true) {
				filter[filter.length] = 'deutsch=true';
			}
		}

		return filter;
	}
	
	
	// sortierbuttons
	$("#sort_aktualitaet, #sort_popularitaet").live('click', function(){
		var t = '';
		var charts	= $(laut.widgets).find('.zustand_teaser_charts');
		var artikel	= $(laut.widgets).find('.zustand_artikel_teaser');
		
		// a wird durch b ersetzt (ausgeblendet)
		var wechsel = function(a,b){
			// parent finden und position korrekt setzen
			var pos = a.parent().css('position');
			a.parent().css('position', 'relative');
			
			a.css('background', '#ffffff');
			a.css('position', 'absolute');
			a.css('z-index', 1);
			a.css('top', '0px');
			b.css('display', 'block');
			a.fadeOut(500, function(){
				$(this).css('background', 'transparent');
				$(this).css('position', 'relative');
				$(this).css('z-index', 0);
				
				$(this).parent().css('position', pos);
			});
		};
		
		
		if(charts.length > 0 && artikel.length > 0){
			if(this.id == 'sort_aktualitaet'){
				wechsel(charts, artikel);
			}
			if(this.id == 'sort_popularitaet'){
				wechsel(artikel, charts);
			}
		}
		
		
		if(this.id == 'sort_aktualitaet'){
			$("input#sortierung").attr("value","veroeffentlichung,ab");
			t = 'Neu | <a id="sort_popularitaet" href="?sortierung=popularitaet,ab" class="' + window.laut.seite.kategorie + '">Charts</a>';
		}
		else if(this.id == 'sort_popularitaet'){
			$("input#sortierung").attr("value","popularitaet,ab");
			t = '<a id="sort_aktualitaet" href="?sortierung=veroeffentlichung,ab" class="' + window.laut.seite.kategorie + '">Neu</a> | Charts';
		}
		
		
		var p		= $(this).parent();
		var form	= $(p).find('form');
		
		$(p).empty();
		$(p).html(t);
		$(p).prepend(form);
		
		formularAbschicken();
		return false;
	});
});

jQuery('.__ajaxmehr a').live('click', function($){
	var thisLink = jQuery(this);
	laut.ajax.get(this.href, function(response){
		if(thisLink.attr('callback') && typeof(thisLink.attr('callback')) == 'function'){
			thisLink.attr('callback')(response);
		}
		else{
		thisLink.parents('.__ajaxmehr').replaceWith(response);
		}
		
		// aktion: neuer mehrklick
		laut.trackClick('','nochmehr');
	});
	
	return false;
});


// vorhandene navigationselemente der albumuebersicht mit ajax-funktionalitaet versehen
jQuery('.__seitenindex').live('click', function($){
	// flag setzen, damit kein weiterer user-initialisierter aufruf erfolgt, bis
	// vorhergegangener abgeschlossen ist
	
	var href	= this.href.split('/');
	var query	= href.pop().split('?').pop();
	var query	= query.substr(0,1) == '?' ? query.substr(1) : query;
	var rubrik	= window.location.href.split('/')[3];
	
	
	$ = jQuery;
	
	// der zu erneuernde zustand muss automatisch bestimmt werden
	var p = $(this);
	while(p = p.parent()){
		if(p.hasClass('widget')){
			var w = p[0].id;
			break;
		}
		if(p.hasClass('zustaende')){
			var oZ = p;
			var z = p[0].className.match(/zustand_[a-z0-9_]+/)[0].replace(/zustand_/, '');
		}
	}
	
	
	
	// neue parameter erstellen
	var p = {
		aktion:	9,
		zs:		w + '.' + z,
		r:		rubrik
	}
	
	laut.ajax.senden(p, function(d){
		for(var i in d.zs){
			var tmp = d.zs[i];
			var z = $('#' + tmp.w + ' .zustand_' + tmp.z);
			
			// wenn das widget nicht oben steht, wird es hoch geholt
			if($('.widget')[0] != $('#' + w)[0]){
				$('#' + w)[0].widget.nachOben();
			}
			laut.aktualisiereZustand(d.zs[i], z, true);
			
			// aktion: Umblaettern
			laut.trackClick('','pagination');
		}
	}, query);
	
	return false;
});


laut.HTMLtoDOM = function(h){
	// container zum umwandeln des codes erstellen
	var tmp = document.createElement('div');
	// html-code einfuegen (wird vom browser umgewandelt)
	tmp.innerHTML = h;
	
	// tueckgabearray erstellen
	var re = new Array();
	
	// childnodes des containers durchgehen und sollten sie ein elementknoten
	// sein an das rueckgabearray anhaengen
	if(tmp.childNodes && tmp.childNodes.length > 0){
		for(var i = 0; tmp.childNodes[i]; i++){
			if(tmp.childNodes[i].nodeType == 1){
				re.push(tmp.childNodes[i]);
			}
		}
	}
	
	return re;
}

/*
laut.aktualisiereZustand = function(d, z, scrollTo){
	$ = jQuery;
	var anzeigen = function(z){
		var ul	= z.find('ul')[0];						// die erste liste im zustand wird die auszutauschende sein
		var w	= $(z).parents('.widget');				// wir brauchen auch das widget in dem sich der zustand befindet
		var e	= w[0].id;								// die id des widgets als e(lement)
		var r	= window.location.href.split('/')[3];	// unsere aktuelle rubrik
		var si	= $('#' + e + ' .__seitenindex');		// pruefen ob wir einen seitenindex in diesem zustand haben
		
		
		
		// a wird durch b ersetzt (ausgeblendet)
		var wechsel = function(a,b){
			// parent finden und position korrekt setzen
			var pos = a.parent().css('position');
			a.parent().css('position', 'relative');
			
			a.css('background', '#ffffff');
			a.css('position', 'absolute');
			a.css('z-index', 1);
			a.css('top', '0px');
			b.css('display', 'block');
			a.fadeOut(500, function(){
				$(this).css('background', 'transparent');
				$(this).css('position', 'relative');
				$(this).css('z-index', 0);
				
				$(this).parent().css('position', pos);
			});
		};
		
		
		
		// gibt es seitenindex, muss er entfernt werden
		if(si && si.length > 0){
			$(ul).next().remove();
			// anzahl der vorhandenen elemente holen, damit wir den seitenindex richtig
			// bestimmen koennen
			var lis = z.find('.boxListe li.scrolltop').length;
		}
		// liste absolut positionieren und den hintergrund undurchsichtig machen
		$(ul).css('width', $(ul).parent().width() + 'px');
		$(ul).css('overflow', 'hidden');
		$(ul).css('position', 'absolute');
		$(ul).css('background', '#ffffff');
		$(ul).css('z-index', 1);
		
		// neue liste anhaengen
		z.append(d.html);
		
		// alte liste ausblenden und anschliessend entfernen
		$(ul).fadeOut(500, function(){
			$(this).remove();
		});
		
		
		// url holen, query-string auslesen und seitenzahl ersetzen
		if(laut.ajax && laut.ajax.requests && laut.ajax.requests.parameter.length > 0){
			var q = laut.ajax.requests.parameter[(laut.ajax.requests.parameter.length-1)].q;
		}
		else{
			var q = window.location.href.split('?')[1];
		}
		q = q.split('#')[0];
		
		
		if(q){
			var search	= "[&]?" + e + "_s=[0-9]*";
			var reg		= new RegExp(search, 'gi');
			var match	= reg.exec(q);
			if(match && match[0]){
				q = q.replace(match[0], '');
			}
		}
		if(q && q != ''){
			q = q + '&';
		}
		else{
			q = '';
		}
		q = q + e + '_s=';
		
		
		// seitenindex neu suchen und query anpassen
		var si = $('#' + e + ' .__seitenindex');
		if(si.length > 0){
			for(var x in si){
				if(x == 0 || x % 2 == 0){
					si[x].href = "/" + r + "/?" + q + (d.start*1-lis >= 0 ? d.start*1-lis : 0);
				}
				else{
					si[x].href = "/" + r + "/?" + q + (d.start*1+lis);
				}
			}
		}
		
		// widget events neu setzen
		$(w)[0].widget.initEvents();
	};
	
	
	if(z == undefined || z == '' || z.length == 0){
		return false;
	}
	if(scrollTo && scrollTo == true){
		laut.scrollTo(z, 500, function(){
			anzeigen(z);
		});
	}
	else{
		anzeigen(z);
	}
}
*/
laut.aktualisiereZustand = function(d, z, scrollTo){
	$ = jQuery;
	var anzeigen = function(z){
		var ul	= z.find('*:not(.clear)')[0];						// die erste liste im zustand wird die auszutauschende sein
		var w	= $(z).parents('.widget');				// wir brauchen auch das widget in dem sich der zustand befindet
		var e	= w[0].id;								// die id des widgets als e(lement)
		var r	= window.location.href.split('/')[3];	// unsere aktuelle rubrik
		var si	= $('#' + e + ' .__seitenindex');		// pruefen ob wir einen seitenindex in diesem zustand haben
		
		// a wird durch b ersetzt (ausgeblendet)
		var wechsel = function(a,b){
			// parent finden und position korrekt setzen
			var pos = a.parent().css('position');
			a.parent().css('position', 'relative');
			
			a.css('background', '#ffffff');
			a.css('position', 'absolute');
			a.css('z-index', 1);
			a.css('top', '0px');
			b.css('display', 'block');
			a.fadeOut(500, function(){
				$(this).css('background', 'transparent');
				$(this).css('position', 'relative');
				$(this).css('z-index', 0);
				
				$(this).parent().css('position', pos);
			});
		};
		
		
		
		// gibt es seitenindex, muss er entfernt werden
		if(si && si.length > 0){
			$(ul).next().remove();
			// anzahl der vorhandenen elemente holen, damit wir den seitenindex richtig
			// bestimmen koennen
			var lis = z.find('.boxListe li.scrolltop').length;
		}
		// liste absolut positionieren und den hintergrund undurchsichtig machen
		$(ul).css('width', $(ul).parent().width() + 'px');
		$(ul).css('overflow', 'hidden');
		$(ul).css('position', 'absolute');
		$(ul).css('background', '#ffffff');
		$(ul).css('z-index', 1);
		
		// neue liste anhaengen
		z.append(d.html);
		
		// alte liste ausblenden und anschliessend entfernen
		$(ul).fadeOut(500, function(){
			$(this).remove();
		});
		
		// widget events neu setzen
		if($(w)[0] && $(w)[0].widget){
			$(w)[0].widget.initEvents();
		}
	};
	
	
	if(z == undefined || z == '' || z.length == 0){
		return false;
	}
	if(scrollTo && scrollTo == true){
		laut.scrollTo(z, 500, function(){
			anzeigen(z);
		});
	}
	else{
		anzeigen(z);
	}
}

// ------------------------------------------
//	Allgemeine Funktionen
// ------------------------------------------
jQuery(document).ready(function($){
	
	// timeout-funktion
	(function($){var a={},c="doTimeout",d=Array.prototype.slice;$[c]=function(){return b.apply(window,[0].concat(d.call(arguments)))};$.fn[c]=function(){var e=d.call(arguments),f=b.apply(this,[c+e[0]].concat(e));return typeof e[0]==="number"||typeof e[1]==="number"?this:f};function b(l){var m=this,h,k={},n=arguments,i=4,g=n[1],j=n[2],o=n[3];if(typeof g!=="string"){i--;g=l=0;j=n[1];o=n[2]}if(l){h=m.eq(0);h.data(l,k=h.data(l)||{})}else{if(g){k=a[g]||(a[g]={})}}k.id&&clearTimeout(k.id);delete k.id;function f(){if(l){h.removeData(l)}else{if(g){delete a[g]}}}function e(){k.id=setTimeout(function(){k.fn()},j)}if(o){k.fn=function(p){o.apply(m,d.call(n,i))&&!p?e():f()};e()}else{if(k.fn){j===undefined?f():k.fn(j===false);return true}else{f()}}}})(jQuery);
	
	// funktion zum scrollen zu bestimmtem element auf der seite
	// ziel, dauer, callback
	laut.scrollTo = function(z,d,c){
		if(typeof(z) == 'string'){
			z = $('#' + z);
		}
		if(!d){
			d = 1000;
		}
		if(!c || typeof(c) != 'function'){
			c = function(){};
		}
		$('html').animate(
			{
				scrollTop: $(z).offset().top
			},
			d,
			c
		);
	};
	
	
	// erstellt ein confirm-fenster
	laut.confirm = function(n,c){
		
		// abstand zum oberen ende des dokuments ermitteln
		var top = $('html').scrollTop();
		// nach browser unterscheiden und anzeigemasse holen
		if(jQuery.browser.msie){
			laut.browser = {
				breite:	document.documentElement.offsetWidth,
				hoehe:	document.documentElement.offsetHeight
			}
		}
		else {
			// brauchen wir, weil safari bei der jquery-funktion
			// keinen wert liefert
			var top = window.pageYOffset;
			laut.browser = {
				breite:	window.innerWidth,
				hoehe:	window.innerHeight
			}
		}
		
		
		// pruefen ob wir ein confirm-element haben
		var ob = document.getElementById('lautConfirm');
		//$('body').css('overflow', 'hidden');
		
		
		// sollte unser confirmfeld noch nicht exisitieren, wird es angelegt
		if(!ob){
			var dunkel = document.createElement('div');
			dunkel.id					= 'lautDunkel';
			dunkel.style.background		= '#000000';
			dunkel.style.display		= 'none';
			dunkel.style.left			= '0px';
			dunkel.style.position		= 'fixed';
			dunkel.style.zIndex			= 999;
			dunkel.style.opacity		= 0.2;
			dunkel.style.MozOpacity		= 0.2;
			dunkel.style.filter			= 'alpha(opacity=20)';
			dunkel.innerHTML			= '&nbsp;';
			
			var ob = document.createElement('div');
			ob.id						= 'lautConfirm';
			ob.style.background			= '#f1f1f1';
			ob.style.border				= '4px solid #000000';
			ob.style.borderRadius		= '8px';
			ob.style.MozBorderRadius	= '8px';
			ob.style.display			= 'none';
			ob.style.height				= 'auto';
			ob.style.overflow			= 'hidden';
			ob.style.position			= 'fixed';
			ob.style.width				= '250px';
			ob.style.zIndex				= '1000';
			ob.style.WebkitBorderRadius	= '8px';
			
			var text = document.createElement('div');
			text.className				= 'text';
			text.style.background		= '#ffffff';
			text.style.padding			= '10px';
			text.style.borderBottom		= '1px dashed #909090';
			text.style.MozBorderRadiusTopleft		= '8px';
			text.style.MozBorderRadiusTopright		= '8px';
			text.style.WebkitBorderTopLeftRadius	= '8px';
			text.style.WebkitBorderTopRightRadius	= '8px';
			ob.appendChild(text);
			
			var span = document.createElement('span');
			span.style.display			= 'block';
			span.style.cssFloat			= 'left';
			span.style.styleFloat		= 'left';
			span.style.cursor			= 'pointer';
			span.style.height			= '100%';
			span.style.padding			= '5px 0px';
			span.style.overflow			= 'hidden';
			span.style.textAlign		= 'center';
			span.style.width			= '50%';
			
			var ok = span.cloneNode(true);
			ok.innerHTML	= 'Ja';
			ob.appendChild(ok);
			
			var ab = span.cloneNode(true);
			ab.innerHTML	= 'Nein';
			ob.appendChild(ab);
			
			// anhaengen
			$('body').append(dunkel);
			$('body').append(ob);
		}
		// existiert es schon, suchen wir die buttons
		else {
			var spans = ob.getElementsByTagName('span');
			var ab		= spans[1];
			var ok		= spans[0];
			var text	= ob.getElementsByTagName('div')[0];
			var dunkel	= $('#lautDunkel')[0];
		}
		
		
		// jetzt die nachricht einfuegen
		text.innerHTML = n;
		
		
		// die position bestimmen
		ob.style.top		= Math.round((laut.browser.hoehe/2)-($(ob).height()/2))+'px';
		//ob.style.top		= 0 + 'px';
		ob.style.left		= Math.round((laut.browser.breite/2)-($(ob).width()/2))+'px';
		//dunkel.style.top	= Math.round(top-(laut.browser.hoehe/2))+'px';
		dunkel.style.top	= '0px';
		dunkel.style.height	= (laut.browser.hoehe*2)+'px';
		dunkel.style.width	= (laut.browser.breite*2)+'px';
		
		
		// buttons mit funktion versehen
		$(ab).click(function(){
			$(this.parentNode).fadeOut(300, function(){
				$('#lautDunkel').fadeOut(300, function(){
					$('body').css('overflow', 'auto');
				});
			});
		});
		$(ok).unbind('click');
		$(ok).click(function(){
			$(this.parentNode).fadeOut(300, function(){
				$('#lautDunkel').fadeOut(300, function(){
					//$('body').css('overflow', 'auto');
				});
			});
			c();
		});
		
		
		// einblenden
		$(dunkel).fadeIn(300, function(){
			$(ob).fadeIn(300);
		});
		
		
		return false;
	}
});


// ------------------------------------
//  Suche
// ------------------------------------
jQuery(document).ready(function($){
	$('form#suche input#suchfeld').click(function(){
		if(this.value == 'Suchen'){
			this.value = '';
		}
	});
	$('form#suche input#suchfeld').blur(function(){
		if(this.value == ''){
			this.value = 'Suchen';
		}
	});
	$('form#suche').submit(function(){
		/*var inp = document.createElement('input');
		inp.type = 'hidden';
		inp.id = 'suche';
		inp.name = 'suche';
		inp.value = $(this).find('input')[0].value;
		this.appendChild(inp);*/
		this.action = '/Suche';
	});
});

// ------------------------------------
//  Ajax-Schnittstelle
// ------------------------------------
window.laut.ajax = {
	//	funktion zum senden von anfragen an den server
	//	@param	p	parameterobjekt; wird an den server uebergeben
	//	@param	c	callbackfunktion, die nach abschluss der
	//				transaktion ausgefuehrt wird
	//	@param	g	(optional) get-variablen
	//	@param	t	(optional) typ der rueckgabe
	//	@param	w	(optional) soll das warteflag beachtet werden
	//				(default: true)
	senden: function(p, c, g, t, w) {
		if(w == undefined || w == true){
			if(laut.ajax.warten == 1){
				return false;
			}
			else{
				laut.ajax.warten = 1;
			}
		}
		if(t == undefined){
			t = 'json';
		}
		jQuery.post('/php/ajax.php' + (g != undefined ? '?' + g : ''), p, function(d){
			laut.ajax.warten = 0;
			c(d);
		}, t);
		p.q = g;
		this.requests.parameter.push(p);
		this.requests.anzahl++;
	},
	get: function(url, callback){
	  if(laut.ajax.warten == 1){ return false; } else { laut.ajax.warten = 1; }

	  jQuery.get(url, '', function(responseData){
	    laut.ajax.warten = 0;
	    callback(responseData);
	  })
	},
	post: function(url, params, callback){
	  if(laut.ajax.warten == 1){ return false; } else { laut.ajax.warten = 1; }
	  
	  jQuery.post(url, params, function(responseData){
	    laut.ajax.warten = 0;
	    callback(responseData);
	  })
	},
	requests: {
		anzahl:		0,
		parameter:	new Array()
	},
	info: function(){
		$ = jQuery;
		
		
		// gibt es schon ein ajax-info-div?
		if($('#lautAjaxInfo').length == 0){
			var div	= $(document.createElement('div'));
			div.attr('id','lautAjaxInfo');
			div.css('display','none');
			div.css('position','absolute');
			div.css('top','-100px');
			div.css('height','44px');
			div.css('width','44px');
			div.css('z-index','2');
			div.css('background','url(/grafiken/layout/ajaxLoader_back.png)');
			
			var img = $(document.createElement('img'));
			img.attr('src','/grafiken/layout/ajaxLoader.gif');
			img.css('margin','6px');
			
			div.append(img);
			$('body').append(div);
			
			
			div.ajaxStart(function(){
				laut.ajax.infoTimeout = window.setTimeout(function(){
					$(div).fadeIn(100);
				}, 100);
			});
			div.ajaxStop(function(){
				$(this).fadeOut(100);
				if(laut.ajax.infoTimeout){
					clearTimeout(laut.ajax.infoTimeout);
					$(laut.ajax).removeAttr('infoTimeout');
				}
			});
			
			
			this.infoGrafik = div;
		}
		
		
		var div = this.infoGrafik;
		// position setzen
		$('body').mousemove(function(){
			if(laut && laut.seite && laut.seite.maus && laut.seite.maus.x && laut.seite.maus.y){
				var x = laut.seite.maus.x+25 > $(window).width()-44 ? $(window).width()-44 : laut.seite.maus.x+25;
				var y = laut.seite.maus.y+25 > $(window).height()-44+$(window).scrollTop() ? $(window).height()-44+$(window).scrollTop() : laut.seite.maus.y+25;
				
				div.css('top', y + 'px');
				div.css('left', x + 'px');
			}
		});
		
	}
};

// ------------------------------------
//	Werbe-Frame geladen
// ------------------------------------

	window.laut.werbung.laden = function(){
	
	};

	window.laut.werbung.reloadAds = function(auto){
		window.laut.werbung.ord = Math.random()*10000000000000000;
		$.each($('.werbeFrame'), function() {
			$(this).attr({
					src: '/elemente/werbung/frameWerbung.inc.php?kategorie=' + window.laut.seite.kategorie + '&ad_genres='
			});
		});
	};
	window.laut.werbung.geladen = function(werbemittelName,werbemittelBreite,werbemittelHoehe){
		
		if (werbemittelHoehe > 1) {
			
			// AUSNAHME: IE 7.0 verrechnet sich bei der Hoehe um 4 Pixel
			if ($.browser.msie && $.browser.version == '7.0')
			{
				werbemittelHoehe = werbemittelHoehe - 4;
			}
			$('div#werbung' + werbemittelName).height(werbemittelHoehe);
			$('div#werbung' + werbemittelName).width(werbemittelBreite);
			$('div#werbung' + werbemittelName).css('visibility', 'visible');
		} else {
			$('div#werbung' + werbemittelName).height('0px');
			$('div#werbung' + werbemittelName).css('visibility', 'hidden');
		}	
	};
	window.laut.flashMachen = function(src, id, width, height, version, install, flashvars, params, attributes){
		var div = $(document.createElement('div'));
		div.attr('id', id + Math.round(Math.random()*100));
		
		$('#' + id).empty().append(div);
		swfobject.embedSWF(src, div.attr('id'), width, height, version, install, flashvars, params, attributes);
	}

// ------------------------------------
//	Benutzersteuerung
// ------------------------------------
/**
 * ueberprueft ob ein benutzer eingeloggt ist
 * uebergibt boolean an callback-funktion
 * @param	c	callback-funktion
 */
window.laut.pruefeLogin = function(c){

	// cookie holen
	var coo = document.cookie.split('; ');
	
	for(var i = 0; i < coo.length; i++) {
		if(coo[i].substr(0, 11) == 'laut3_login') {
			// schluessel von wert trennen
			coo = unescape(coo[i].split('=')[1]);
			coo = eval('(' + coo + ')');
			
			
			// relevante infos sichern
			laut.benutzer = {
				id:		coo.benutzer,
				hash:	coo.hash,
				auth:	coo.auth
			}
			
			break;
		}
	}
	
	// pruefen ob daten vorhanden sind
	if(laut.benutzer && laut.benutzer.id && laut.benutzer.id > 0) {
		var re = true;
	}
	else {
		var re = false;
	}
	
	if(re == true && c && typeof(c) == 'function'){
		c();
	}
	else{
		laut.community.loginForm.zeigen(c);
	}
	
	
	
	return re;
	// wenn callbackfunktion exisitiert wird diese mit dem ergebnis der
	// pruefung aufgerufen
	if(c && typeof(c) == 'function') {
		c(re);
	}
	
	return re;
};


/**
 * zum anmelden eines benutzers im js
 * @param	d	logindaten
 * @param	c	callback-funktion
 */
window.laut.login = function(d,c){
	// falls jquery nicht existiert wird es gesetzt
	if(!$) {
		$ = jQuery;
	}

	// benutzername und passwort holen
	var p = {
		aktion:		2,
		passwort:	d.passwort,
		benutzer:	d.benutzer
	}
	
	laut.ajax.senden(p, function(data){
		if(c && typeof(c) == 'function'){
			if(data && data.code == 1){
				laut.benutzer = {
					id:		data.benutzer,
					hash:	data.hash,
					auth:	data.auth,
					name:	data.name,
					bild:	data.bild,
					url:	data.url
				}
				laut.community.loginstatus();
			}
			c(data);
		}
	});
};




//
// allgemeine funktionen unter laut.seite
//
if(!laut.seite){
	laut.seite = {};
}

/**
 * loggt die aktuelle position des mauszeigers
 * @param	e	event des mauszeigers
 */
laut.seite.mousemove = function(e){
	var $		= jQuery;
	
	laut.seite.maus = {};
	laut.seite.maus.x = e.pageX;
	laut.seite.maus.y = e.pageY;
}


jQuery(document).ready(function(){
	laut.ajax.info();
	jQuery('body').mousemove(laut.seite.mousemove);
});

/**
 * sendet tracking-anfragen an ivw und googleanalytics
 * @param	string	cat		kategorie, die bei ivw gesetzt wird
 * @param	string	path	pfad, der getrackt wird (google-category)
 * @param	boolean	ivw		track ivw
 * @param	boolean	ga		track googleanalytics
 * @return	void
 */
window.laut.trackClick = function(cat, path, ivw, ga){
	
	if (window.laut.seite.device != 'ipad' && window.laut.werbung.status == 1) {
		//laut.werbung.reloadAds();
	}
	
	if((typeof(ivw) == 'undefined' && typeof(ga) == 'undefined')){
		var ivw	= true;
		var ga	= true;
	}
	
	if(typeof(cat) == 'undefined' || cat == ''){
		var cat = '';
		switch(laut.seite.typ){
			case 'home':
			cat = 'homepage';
			break;
			
			case 'news-uebersicht':
			cat = 'vl_start';
			break;
			
			case 'news':
			cat = 'vl_news';
			break;
			
			case 'album-uebersicht':
			cat = 'ls_start';
			break;
			
			case 'album':
			cat = 'ls_cd';
			break;
			
			case 'artist-uebersicht':
			cat = 'wl_start';
			break;
			
			case 'artist':
			cat = 'wl_artist';
			break;
			
			case 'artist-az':
			cat = 'wl_archiv';
			break;
			
			case 'event-uebersicht':
			cat = 'lh_start';
			break;
			
			case 'tour':
			cat = 'lh_termine';
			break;
			
			case 'event':
			cat = 'lh_suche';
			break;
			
			case 'genre-uebersicht':
			cat = 'lw_start';
			break;
			
			case 'genre':
			cat = 'lw_genre';
			break;
			
			case 'meta':
			cat = 'kl_sonstiges';
			break;
			
			default:
			cat = 'laut';
		}
	}
	
	
	if(ivw === true){
		var pixel = new Image();
		pixel.src = 'http://laut.ivwbox.de/cgi-bin/ivw/CP/' + cat + ';' + (new Date).getTime() + '?r=' + escape(document.referrer)+"&d="+(Math.random()*100000);
	}
	
	if(ga === true){
		if(typeof(pageTracker) != 'undefined' && pageTracker) {
			// protokoll und anker abschneiden
			var dir_path = '/' + window.location.href.split('://')[1].split('/').slice(1).join('/').split('#')[0];
			
			// wenn das letzte zeichen ein / ist, wird er entfernt
			if(dir_path.substr((dir_path.length-1)) == '/'){
				dir_path = dir_path.substr(0, dir_path.length-1);
			}
			
			// eingeloggt-status
			if (laut.benutzer && laut.benutzer.auth == 1){
				var GA_User_Type = 'Member';
			}
			else{
				var GA_User_Type = 'Visitor';
			}
			
			if (typeof(pageTracker._setCustomVar) !== 'function') {
				return;
			}
			pageTracker._setCustomVar(
				1,
				"User Type",
				GA_User_Type,
				2  
			);
			pageTracker._trackPageview(dir_path + '#' + path);
		}
	}
	
	
	return;
}

/**
 * open external links in new window
 */
$(function(){
	$('a.extern').click(function(){
		$(this).attr('target', '_blank');
	});
});

/**
 * lautSlideshow
 */
$(document).ready(function(){
	window.laut.slideshow = {
		count: 0,
		createA: function(number, itemNumber, title){
			/**
			 * creating the tag and configuringn via attr() etc. doesn't work in ie6/7
			 */
			a = $('<a class="vor" href="#lautSlideshow'+number+'Item'+itemNumber+'" title="'+title+'" class="fancybox" rel="lautSlideshow'+number+'">' + title + '</a>');
			a.fancybox({
				padding:			0,
				transitionIn:		'elastic',
				transitionOut:		'elastic',
				speedIn:			150,
				speedOut:			100,
				changeSpeed:		100,
				overlayShow:		true,
				overlayColor:		'#000',
				overlayOpacity:		0.5,
				padding:			15,
				titleShow:			false,
				cyclic:				true,
				width:				523,
				autoDimensions:		true,
				onComplete:			this.onComplete,
				onClosed:			this.onClosed,
				type:				'inline'
			});
			a.click(function(){
				return false;
			});
			return a;
		},
		resizeElements: function(parent){
			$(parent).find('object, embed').css('display','block').css('width','100%').css('margin','15px 0px 0px 0px');
		},
		setWmode: function(){
			$('embed').attr('wmode', 'transparent');
			var embedTag;
			$('ul.inhalt embed:not(.__reseted)').each(function(){
				$(this).addClass('__reseted');
				if($(this).parents('.lautSlideshow').length > 0)
				{
					return;
				}
				embedTag = $(this).attr("outerHTML");
				if((embedTag != null) && (embedTag.length > 0)){
					embedTag = embedTag.replace(/embed /gi, 'embed wmode="opaque"');
					$(this).attr("outerHTML", embedTag);
				}
				else {
					$(this).wrap("<div></div>");
				}
			});
		},
		onComplete: function(){
			window.laut.slideshow.setAnchor(this);
			laut.trackClick('vl_news','slideshow_complete');
		},
		onClosed: function(){
			window.laut.slideshow.removeAnchor();
			laut.trackClick('vl_news','slideshow_close');
		},
		setAnchor: function(obj){
			if(typeof(obj) != 'object'){
				return false;
			}
			
			/**
			 * we have to change the original-id of the content-object
			 * to avoid the browser from jumping
			 */
			var contentObj = $($(obj.orig).attr('href'));
			var tmpId = '_'+contentObj.attr('id');
			contentObj.attr('id', '_'+contentObj.attr('id'));
			
			/**
			 * ok, set the new location.hash
			 */
			window.laut.setzeHash(obj.orig.attr('href').split('#')[1]);
			
			/**
			 * and cut off our previously set prefix
			 */
			$('#'+tmpId).attr('id', tmpId.substr(1));
		},
		removeAnchor: function(){
			window.location.hash = "";
		},
		checkHash: function(){
			var hash = window.location.hash;
			if(hash.substr(0,14) == '#lautSlideshow'){
				$('a[href="'+hash+'"]').trigger('click');
			}
		}
	};
	
	$('div.lautSlideshow').each(function(){
		/**
		 * create visible startlink
		 */
		var number = window.laut.slideshow.count++;
		$(this).before(window.laut.slideshow.createA(number, 0, $(this).attr('title')));
		
		$(this).attr('id', 'lautSlideshow' + number);
		
		/**
		 * set slideshowitem-attributes
		 */
		var itemNumber = 0;
		$(this).find('div.lautSlideshowItem').each(function(){
			/**
			 * set floatings for images and objects
			 */
			window.laut.slideshow.resizeElements(this);
			
			$(this).attr('id', 'lautSlideshow'+number+'Item'+itemNumber);
			/**
			 * invisible links to set the relation for gallery-view
			 * we have to skip the first element, because its already linked
			 * by the start-link above.
			 */
			if(itemNumber > 0){
				$(this).before(window.laut.slideshow.createA(number, itemNumber, itemNumber));
			}
			
			itemNumber++;
		});
	});
	
	window.laut.slideshow.setWmode();
	setTimeout(function(){
		window.laut.slideshow.checkHash();
	}, 200);
});

/*
 * add shuffle-function to jquery
 */
(function($){
  $.fn.shuffle = function() {
    return this.each(function(){
      var items = $(this).children();
      return (items.length)
        ? $(this).html($.shuffle(items))
        : this;
    });
  }

  $.shuffle = function(arr) {
    for(
      var j, x, i = arr.length; i;
      j = parseInt(Math.random() * i),
      x = arr[--i], arr[i] = arr[j], arr[j] = x
    );
    return arr;
  }
})(jQuery);


