(function($) {

	var dbug = function( msg ){
		try {
			if(window.console){
				console.debug(msg);
			}
		} catch(e) { /* ignore silently */ }
	};


	// Helper function to get the right index for galleries.
	var getIndex = function( idx, length ) {
		if( idx >= length ){
			return idx % length;
		}
		else if( idx < 0 ) {
			return getIndex( length + (idx % length) );
		}
		else {
			return idx;
		}
	};


	var isIE6 = /MSIE 6/i.test(navigator.userAgent);


	function createCookie(name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	}

	function readCookie(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	}

	function eraseCookie(name) {
		createCookie(name,"",-1);
	}

	$.fn.aaAdCaroussel = function(opts){
		var options= $.extend(
			{
				"fadeOutDuration": 500,
				"intervalDuration": 2000,
				"slideDuration": 1000
			},
			opts);

		return this.each(function(){
			var that = this;
			var idx = 2;
			var length = options.ads.length;
			var timeout = null;
			var stopped = false;

			var animate = function(){
				$(".left", that)
					.fadeOut(
						options.fadeOutDuration,
						function(){
							$(".left", that).remove();
							$(".right", that)
								.animate(
									{
										"left": 0
									},
									options.slideDuration,
									function(){
										$(".right", that)
											.addClass("left")
											.removeClass("right");

										var right = [
											"<div class='right'>",
												"<a href='" + options.ads[idx].href +"' title='" + options.ads[idx].title +"' target='" + options.ads[idx].target + "'>",
													"<img src='" + options.ads[idx].img +"' alt='" + options.ads[idx].title +"' />",
												"</a>",
											"</div>"
											];

										right = $(right.join(""));
										$(".body", that).append(right);

										idx = getIndex(idx+1, length);

										if(!stopped){
											timeout = window.setTimeout(animate, options.intervalDuration);
										}
									}
								);
						}
					);
			};

			var showAll = function(){
				$(".left, .right", that).stop();
				$(".body", that).remove();

				var line = [];
				for(var i = 0; i < length; i+=2){
					line.push("<div class='body clearfix'>");
					try {
						line.push(
							"<div class='left'>",
								"<a href='" + options.ads[i].href +"' title='" + options.ads[i].title +"' target='" + options.ads[i].target + "'>",
									"<img src='" + options.ads[i].img +"' alt='" + options.ads[i].title +"' />",
								"</a>",
							"</div>"
							);
					} catch(e) { /*ignore */ }
					try {
						line.push(
							"<div class='right'>",
								"<a href='" + options.ads[i+1].href +"' title='" + options.ads[i+1].title +"' target='" + options.ads[i+1].target + "'>",
									"<img src='" + options.ads[i+1].img +"' alt='" + options.ads[i+1].title +"' />",
								"</a>",
							"</div>"
							);
					} catch(e) { /*ignore */ }
					line.push("</div>");
				}
				$(".headline", that).after(line.join(""));
			};

			var resume = function(){
				$(".body", that).remove();
				var line = [
					"<div class='body clearfix'>",
						"<div class='left'>",
							"<a href='" + options.ads[0].href +"' title='" + options.ads[0].title +"' target='" + options.ads[0].target + "'>",
								"<img src='" + options.ads[0].img +"' alt='" + options.ads[0].title +"' />",
							"</a>",
						"</div>",
						"<div class='right'>",
							"<a href='" + options.ads[1].href +"' title='" + options.ads[1].title +"' target='" + options.ads[1].target + "'>",
								"<img src='" + options.ads[1].img +"' alt='" + options.ads[1].title +"' />",
							"</a>",
						"</div>",
					"</div>"
					];
				$(".headline", that).after(line.join(""));
			};


			$(document).ready(function(){
				if(!stopped){
					timeout = window.setTimeout(animate, options.intervalDuration);
				}
			});


			$(".more_all", this).toggle(
				function(){
					stopped = true;
					window.clearTimeout(timeout);
					showAll();
					return false;
				},
				function(){
					stopped = false;
					resume();
					timeout = window.setTimeout(animate, options.intervalDuration);
					return false;
				});
		});
	};


	$.fn.aaAdGallery = function(options){

		var settings = $.extend({
			"delay": 3000,
			"speed": 200
		}, options);

		return this.each(function(){
			var that = this;

			var controls = $(".control", this);
			var list = $(".text", this);

			var index = 0;
			var length = $("li", list).not(".all").size();

			var interval = null;

			var getPositionString = function( idx ){
				return "<span class=\"active\">" + (idx+1) + "</span>" + " von " + length;
			};

			var switchTo = function( idx ){
				idx = getIndex(idx, length);

				$("li", list).stop(true, true);

				$("li.active", list)
					.fadeOut(settings.speed, function(){
						$(this).removeClass("active");

						$("li", list).not(".all").eq(idx)
							.fadeIn(settings.speed)
							.addClass("active");
					});

				$(".counter", controls).html( getPositionString(idx) );

				index = idx;
			};

			var init = function(){
				var control = [];
				control.push("<span class=\"counter\">");
				control.push( getPositionString(index) );
				control.push("</span>");
				control.push("<a title=\"vorherige Seite\" class=\"paging_ctrl paging_bb\">vorherige Anzeige</a>");
				control.push("<a title=\"n&auml;chste Seite\" class=\"paging_ctrl paging_fb\">n&auml;chste Anzeige</a>");

				control = $(control.join(""));

				$(controls).html(control);

				$(".paging_bb", controls).click(function(){
					window.clearInterval(interval);
					switchTo(index-1);
					return false;
				});

				$(".paging_fb", controls).click(function(){
					window.clearInterval(interval);
					switchTo(index+1);
					return false;
				});
			};

			init();

			interval = window.setInterval(function(){
				index = getIndex(index+1, length);
				switchTo( index );
			}, options.delay);

		});
	};


	$.fn.aaAdLoad = function(opts){
		var options = $.extend({
			"targetId": null
		}, opts);

		return this.each(function(){
			var that = this;

			$(document).ready(function(){
				// get target info
				var $target = $(options.target);
				var targetCss = {
					"textAlign": $target.css("text-align"),
					"width": $target.css("width")
				};
				var targetOffset = $target.offset();

				// get ad dimensions
				var height = $(that).outerHeight();
				var width = $(that).outerWidth();

				// set target dimensions to ad dimensions
				$target
					.css({
						"height": height,
						"width": width
					});

				// move ad over target
				$(that).
					css({
						"display": "block",
						"left": targetOffset.left,
						"text-align": targetCss.textAlign,
						"top": $target.hasClass("superbanner") ? 0 : targetOffset.top,
						"visibility": "visible",
						"width": targetCss.width
					});
			});
		});
	};


	$.fn.aaCaroussel = function( options ){
		// overwrite default settings
		var settings = $.extend({
			"animate": true,
			"delay": 5000,
			"speed": 2000,
			"startIndex": 0
		}, options);

		// break if no length passed
		if(!settings.length) { return; }

		return this.each(function(){
			var currentIndex = settings.startIndex;
			var timeout = null;

			var articles = $(".teaser_list li", this);
			// animating function
			var fadeIn = function( index ){

				$(navLinks).removeClass("active").eq(index).addClass("active");

				$(articles).fadeOut( settings.speed );
				$(articles).eq( index ).fadeIn( settings.speed );

				currentIndex < settings.length-1 ? currentIndex++ : currentIndex = 0;
			};


			var navLinks = $(".nav a", this);
			$(navLinks).click(function(){
				if(timeout){
					clearTimeout(timeout);
				}
				var activeIndex = $(navLinks).index(this);
				fadeIn(activeIndex);
				return false;
			});

			// start interval
			if( settings.animate ) {
				currentIndex < settings.length-1 ? currentIndex++ : currentIndex = 0;
				timeout = window.setInterval(function(){ fadeIn( currentIndex ); }, settings.delay);
			}

		});
	};


	$.fn.aaCinemaSearch = function( opts ){
		var options = $.extend({
			"url": "",
			"cinema": "0",
			"day": "0",
			"location": "0",
			"movie": "0",
			"cache": true,
			"inlineLabels": false,
			"xslcache": true
		}, opts);

		return this.each(function(){

			var id = $(this).attr("id");

			var $location = $("#"+ id +"_0");
			var $day = $("#"+ id +"_1");
			var $cinema = $("#"+ id +"_2");
			var $movie = $("#"+ id +"_3");

			var requestData = function( target ){

				var activeLocation = $location.val() || options.location;
				var activeDay = $day.val() || options.day;
				var activeCinema = $cinema.val() || options.cinema;
				var activeMovie = $movie.val() || options.movie;

				var paramLocation = activeLocation;
				var paramCinema = activeCinema;
				var paramMovie = activeMovie;
				var paramDay = activeDay;

				// depending on the target set sub-selects
				switch(target){
					case $location[0]:
						paramCinema = paramMovie = paramDay = "0";
						break;
					case $cinema[0]:
						paramMovie = paramDay = "0";
						break;
					case $movie[0]:
						paramDay = "0";
						break;
				}

				$.ajax({
					"url": options.url,
					"data": {
						"service": options.service,
						"action": options.action,
						"ort": paramLocation,
						"tag": paramDay,
						"kino": paramCinema,
						"film": paramMovie,
						"cache": options.cache,
						"inlineLabels": options.inlineLabels,
						"xslcache": options.xslcache
					},
					"dataType": "json",
					"success": function(data){
						// fill select boxes with data
						// only fill cinema, movie and day
						var data = data["data"];

						var tempHTML = [];
						if(data.location[activeLocation] === undefined){
							activeLocation = "0";
						}
						for(var location in data.location){
							if(location === activeLocation) {
								tempHTML.push("<option value=\""+ location + "\" selected=\"selected\">" + data.location[location] + "</option>");
							} else {
								tempHTML.push("<option value=\""+ location + "\">" + data.location[location] + "</option>");
							}
						}
						$location.html(tempHTML.join(""));

						tempHTML = [];
						if(data.cinema[activeCinema] === undefined){
							activeCinema = "0";
						}
						for(var cinema in data.cinema){
							if(cinema === activeCinema) {
								tempHTML.push("<option value=\""+ cinema + "\" selected=\"selected\">" + data.cinema[cinema] + "</option>");
							} else {
								tempHTML.push("<option value=\""+ cinema + "\">" + data.cinema[cinema] + "</option>");
							}
						}
						$cinema.html(tempHTML.join(""));

						tempHTML = [];
						if(data.movie[activeMovie] === undefined){
							activeMovie = "0";
						}
						for(var movie in data.movie){
							if(movie === activeMovie) {
								tempHTML.push("<option value=\""+ movie + "\" selected=\"selected\">" + data.movie[movie] + "</option>");
							} else {
								tempHTML.push("<option value=\""+ movie + "\">" + data.movie[movie] + "</option>");
							}
						}
						$movie.html(tempHTML.join(""));

						tempHTML = [];
						if(data.day[activeDay] === undefined){
							activeDay = "0";
						}
						for(var day in data.day){
							if(day === activeDay) {
								tempHTML.push("<option value=\""+ day + "\" selected=\"selected\">" + data.day[day] + "</option>");
							} else {
								tempHTML.push("<option value=\""+ day + "\">" + data.day[day] + "</option>");
							}
						}
						$day.html(tempHTML.join(""));
					}
				});
			};

			// bind event handler
			$location.change(function(e){ requestData(this); });
			$cinema.change(function(e){ requestData(this); });
			$movie.change(function(e){ requestData(this); });

			// init
			requestData();
		});
	};


	$.fn.aaCinemaSwitch = function(){
		return this.each(function(){
			var $switch = $(".switch a", this);
			var $switchUnits = $(".switch_unit", this);

			$switch.click(function(){
				var idx = $switch.index(this);

				$switch.removeClass("active");
				$(this).addClass("active");

				$switchUnits
					.hide()
					.eq(idx)
					.show();

				return false;
			});
		});
	};


	$.fn.aaComment = function() {
		return this.each(function(){
			dbug("aaComment()");
		});
	};



	$.fn.aaFlags = function( opts ){
		var options = $.extend({}, opts);
		return this.each(function(){
			var $flag = $(options.skeleton);
			$(".content", $flag).append($("img", this).attr("alt"));

			$(this).hover(
					function(){
						if(!$(this).data("flag")){
							$(this)
								.append($flag)
								.data("flag", true);
						}
						$(".flag", this).show();
					},
					function(){
						$(".flag", this).hide();
					});
		});
	};



	$.fn.aaFooter = function( opts ){

		var options = $.extend({
			"cookieName": null,
			"cookieDays": 365,
			"duration": 300
		}, opts);

		return this.each(function(){

			var footer = this;
			var footerHeight = $(footer).outerHeight();

			/* position footer because ie6 doesn't support position: fixed */
			if(isIE6){
				var positionFooter = function() {
					var windowHeight = $(window).height();
					var windowScrollTop = $(window).scrollTop();
					var top = (windowScrollTop + windowHeight - footerHeight) + "px";

					$(footer).css({
						"position": "absolute",
						"top": top
					});
				};

				$(window).bind("load scroll resize", function(e){
					positionFooter();
				});
				positionFooter();
			}

			var $layer = $(".info_layer", this);

			// button open/close
			var $visible = $(".visible", this);
			var $hidden = $(".hidden", this);

			$(".close", $visible).click(function(){
				isIE6 ? $layer.hide() : $layer.stop(true, true).fadeOut();
				$visible.animate({
						"top": "35px"
					},
					options.duration,
					function(){
						$hidden.animate({
								"top": "0px"
							},
							options.duration
						);
						writeCookie(false);
					}
				);
				return false;
			});

			$(".open", $hidden).click(function(){
				$hidden.animate({
						"top": "35px"
					},
					options.duration,
					function(){
						$visible.animate({
								"top": "0px"
							},
							options.duration
						);
						writeCookie(true);
					}
				);
				return false;
			});


			// write/read cookie
			var cookie = readCookie(options.cookieName);

			var writeCookie = function(expanded){
				createCookie(options.cookieName, ("expanded="+expanded.toString()), options.cookieDays);
			};

			// if no cookie is set yet.
			if(!cookie){
				writeCookie(true);
				$hidden.css("top", "35px");
				$visible.css("top", "0px");
			}
			else {
				if(cookie === "expanded=true"){
					$hidden.css("top", "35px");
					$visible.css("top", "0px");
				}
				else{
					$hidden.css("top", "0px");
					$visible.css("top", "35px");
				}
			}
			$(footer).css({
				"visibility": "visible"
			});
		});
	};


	$.fn.aaFooterInfoLayer = function( opts ){
		var options = $.extend({
			"length": null,
			"visible": 5
		}, opts);

		return this.each(function(){
			var index = 0;

			var $layer = $(".info_layer", this);
			var $layerToggle = $(".layer_toggle", this);
			var $layerClose = $(".close_layer", this);
			var $layerPrev = $(".paging_bt", this);
			var $layerNext = $(".paging_ft", this);
			var $layerNewsList = $(".news_list", this);

			// show/hide layer
			var layerToggle = function(){
				$layer.stop(true, true);

				if($layer.is(":visible")){
					isIE6 ? $layer.hide() : $layer.fadeOut();
				}
				else {
					isIE6 ? $(".info_layer").hide() : $(".info_layer").fadeOut();
					isIE6 ? $layer.show() : $layer.fadeIn();
				}
			};
			$layerToggle.click(
				function (evnt) {
					evnt.stopPropagation();
					layerToggle();
				}
			);
			$layerClose.click(
				function (evnt) {
					evnt.stopPropagation();
					layerToggle();
				}
			);
			$(document).click(
				function (evnt) {
					if ($layer.is(":visible")) {
						layerToggle();
					}
				}
			);

			// switch news
			var switchNews = function( idx ){
				$("li", $layerNewsList).removeClass("active");
				for(var i=0; i<options.visible; i++){
					$("li", $layerNewsList)
						.eq(index+i)
						.addClass("active");
				}
			};

			$layerPrev.click(function(){
				if(index-options.visible >= 0 || options.length%options.visible === 0){
					index = getIndex(index-options.visible, options.length);
				}
				else{
					index = options.length - options.length%options.visible;
				}
				switchNews(index);
				return false;
			});
			$layerNext.click(function(){
				index = index + options.visible >= options.length ? 0 : index + options.visible;
				switchNews(index);
				return false;
			});
		});
	};


	$.fn.aaGastroSearch = function( opts ){
		var options = $.extend({
			"duration": 500,
			"openText": "&rsaquo; erweiterte Suche &ouml;ffnen",
			"closeText": "&rsaquo; erweiterte Suche schlie&szlig;en"
		}, opts);

		return this.each(function(){
			var $extendedSearch = $(".extended", this);
			var $extendLink = $(".extend", this);

			$extendLink.toggle(
					function(){
						$extendedSearch.fadeIn(
								options.duration,
								function(){
									$extendLink.html(options.closeText);
								});
					},
					function(){
						$extendedSearch.fadeOut(
								options.duration,
								function(){
									$extendLink.html(options.openText);
								});
					});
		});
	};


	$.fn.aaImgCaroussel = function( opts ) {

		var options = $.extend({
			"duration": 300,
			"index": 0,
			"json": null,
			"length": 0,
			"overview": null,
			"preload": 2
		}, opts);

		return this.each(function(){

			var prev = $(".previous", this);
			var next = $(".next, .gallery dt a", this);
			var img = $(".gallery img", this);
			var caption = $(".gallery dd");
			var counter = $(".counter .active", this);
			var index = options.index;
			var fotograf = $("#galerieFotograf", this);

			// preload specified img range
			var preload = function( idx, range ) {

				for(var i=idx-range; i < idx+range+1; i++){
					var j = getIndex(i, options.length);

					if(options.json[j] && !options.json[j].loaded){
						(function(k){
							var preload_img = new Image();
							preload_img.onload = function(){
								options.json[k].loaded = true;
							};
							preload_img.src = options.json[k].src;
						})(j);
					}
				}
			};

			var roll = function(idx){
				$(img)
					.fadeOut(
							options.duration,
							function(){
								$(this)
									.attr("src", options.json[idx].src)
									.attr("alt", options.json[idx].caption)
									.fadeIn(options.duration);
							}
					);

				$("#galerieFotograf").html('Fotos: '+options.json[idx].fotograf);

				$(caption)
					.html(options.json[idx].caption);

				$(counter).html(idx+1);

				//var ivw_img = new Image();
				//ivw_img.src = IVW+"?r="+escape(document.referrer)+"&d="+(Math.random()*100000);
				loadIVW();
				
			};

			roll(index);
			preload(index, options.preload);

			$(prev).click(function(){
				index = getIndex(index - 1, options.length);
				roll(index);
				preload(index, options.preload);
				return false;
			});

			$(next).click(function(){
				if(index+1 === options.length && options.overview !== null){
					window.location.href = options.overview;
				}
				else {
					index = getIndex(index + 1, options.length);
					roll(index);
					preload(index, options.preload);
				}
				return false;
			});

		});
	};


	$.fn.aaImgDoubleGallery = function( options ) {
		if( typeof options.json == "undefined"){
			return;
		}
		options.height = options.height || 492;
		options.preload = options.preload || 2;
		options.speed = options.speed || 100;

		return this.each(function(){
			var that = this;
			var index = 0;
			var json = options.json;
			var length = 0;

			var $counter = $(".counter .active", this);

			for(var elem in json){
				length++;
			}

			// wrapper for the controls
			var gallery = $(".img_gallery", this);

			// switch to the img with index idx
			var switchTo = function( idx ) {
				idx = getIndex( idx, length );
				preload(idx, options.preload);


				// set new alt, caption and imgsrc
				$(".img img", that)
					.fadeOut(options.speed)
					.attr("src", json[idx].src)
					.attr("alt", json[idx].caption);
				// center image vertically
				var imageHeight = $(".img img", that).height();
				var paddingTop  = (options.height / 2) - (imageHeight / 2);
				var blockHeight = options.height - paddingTop;
				$(".img", that).css({"padding-top" : paddingTop+"px", "height" : blockHeight+"px"});
				// fade in
				$(".img img", that).fadeIn(options.speed);
				$(".img_caption", that).html(json[idx].caption);

				$counter.html(idx+1);

				index = idx;
				return false;
			};

			// preload specified img range
			var preload = function( idx, range ) {
				for(var i=idx-range; i < idx+range+1; i++){
					var j = getIndex(i, length);

					if(json[j] && !json[j].loaded){
						(function(k){
							var img = new Image();
							img.onload = function(){
								json[k].loaded = true;
							};
							img.src = json[k].src;
						})(j);
					}
				}
			};


			// init and add events
			var init = function(){
				preload(index, options.preload);

				$(".prev", that).live("click", function(){
					switchTo( index-1 );
				});
				$(".next", that).live("click", function(){
					switchTo( index+1 );
				});

				// remove non-active elements
				$(".img, .img_caption", that).not(".active").remove();
			};

			init();

		});
	};



	$.fn.aaImgGallery = function( options ) {
		if( typeof options.json == "undefined"){
			return;
		}
		options.preload = options.preload || 2;
		options.speed = options.speed || 100;

		return this.each(function(){
			var that = this;
			var index = 0;
			var json = options.json;
			var length = 0;

			for(var elem in json){
				length++;
			}

			// wrapper for the controls
			var control = $(".control", this);
			var gallery = $(".img_gallery", this);

			// switch to the img with index idx
			var switchTo = function( idx ) {
			
				idx = getIndex( idx, length );
				//loadIVW("inline-bg/"+idx+"/");
				loadET("inline-bg/"+idx+"/");
				preload(idx, options.preload);

				// switch control
				$(control).html(json[idx].control);

				// set new alt, caption, photographer and imgsrc
				$(".img img", that)
					.fadeOut(options.speed)
					.attr("src", json[idx].src)
					.attr("alt", json[idx].caption)
					.fadeIn(options.speed);
				$(".img_caption_text", that).html(json[idx].caption);
				$(".fotograf", that).html(json[idx].photographer);

				index = idx;
				return false;
			};

			// preload specified img range
			var preload = function( idx, range ) {
				for(var i=idx-range; i < idx+range+1; i++){
					var j = getIndex(i, length);

					if(json[j] && !json[j].loaded){
						(function(k){
							var img = new Image();
							img.onload = function(){
								json[k].loaded = true;
							};
							img.src = json[k].src;
						})(j);
					}
				}
			};


			// init and add events
			var init = function(){
				preload(index, options.preload);

				// add controls
				if (json[0]) {
					$(control).html( json[0].control );
				}

				var links = $("a", control).not(".prev, .next");
				$("a", control).live("click", function(){

					var idx = parseInt($(this).html());
					if(idx === "NaN"){
						return true; 	// exception for 'alle'-link
					}
					else {
						switchTo( idx-1 );
						return false;
					}
				});

				$(".prev", control).live("click", function(){
					switchTo( index-1 );
				});
				$(".next", control).live("click", function(){
					switchTo( index+1 );
				});

				// remove non-active elements
				$(".img, .img_caption", that).not(".active").remove();
			};

			init();

		});
	};


	$.fn.aaLayerClose = function(){

		return this.each(function(){
			var $lightboxAndShim = $(this).not("> *", this);
			var $lightboxWrapper = $(".wrapper_lightbox", this);
			var $lightbox = $(".lightbox", this);
			var $closeButton = $(".close", this);

			$lightboxAndShim.css("cursor", "pointer");
			$lightbox.css("cursor", "default");

			$closeButton.live("click", function(){
				!isIE6 ? $lightboxAndShim.fadeOut(): $lightboxAndShim.hide();
				return false;
			});

			$lightboxWrapper.click(function(e){
				if(this == e.target){
					!isIE6 ? $lightboxAndShim.fadeOut(): $lightboxAndShim.hide();
				}
			});

			$lightboxAndShim.click(function(e){
				if(this == e.target){
					!isIE6 ? $lightboxAndShim.fadeOut(): $lightboxAndShim.hide();
				}
			});

		});
	};

	$.fn.aaLayerLegend = function(){
		return this.each(function(){
			var $open = $(".legend", this);
			var $layer = $(".layer_legend", this);
			var $close = $(".close", this);

			$open.css("cursor", "pointer");
			$open.toggle(
					function(){
						$layer.show();
						return false;
					},
					function(){
						$layer.hide();
						return false;
					});
			$close.click(function(){
				$layer.hide();
				return false;
			});
		});
	};


	$.fn.aaLayerOffer = function( opts ){

		var options = $.extend({}, opts);

		return this.each(function(){
			var that = this;
			var index = 0;
			var $counter = $(".counter .active", this);

			var $left = $(".slider .item_left", this);
			var $center = $(".slider .item_center", this);
			var $right = $(".slider .item_right", this);

			var $prev = $(".paging_bb", this);
			var $next = $(".paging_fb", this);


			$(".jqzoom img", this).one("load", function(){
				$(".jqzoom", that).jqzoom({
					"hideEffect": "fadeout",
					"lens": true,
					"showEffect": "fadein",
					"title": false,
					"xOffset": 20,
					"yOffset": 30,
					"zoomHeight": 308,
					"zoomType": "reverse",
					"zoomWidth": 308
				});
			});

			var load = function($container, idx){
				$container.load(
					options.url,
					{
						"action": "anzeige",
						"page": idx,
						"service": "ajax"
					}
				);
			};

			$next.click(function(){
				$left.html($center.html());
				$center.html($right.html());

				$(".jqzoom", $center).jqzoom({
					"hideEffect": "fadeout",
					"lens": true,
					"showEffect": "fadein",
					"title": false,
					"xOffset": 20,
					"yOffset": 30,
					"zoomHeight": 308,
					"zoomType": "reverse",
					"zoomWidth": 308
				});

				index = getIndex(index + 1, options.count);
				$counter.text(index + 1);

				load($right, getIndex(index + 1, options.count));

				return false;
			});

			$prev.click(function(){
				$right.html($center.html());
				$center.html($left.html());

				$(".jqzoom", $center).jqzoom({
					"hideEffect": "fadeout",
					"lens": true,
					"showEffect": "fadein",
					"title": false,
					"xOffset": 20,
					"yOffset": 30,
					"zoomHeight": 308,
					"zoomType": "reverse",
					"zoomWidth": 308
				});

				index = getIndex(index - 1, options.count);
				$counter.text(index + 1);

				load($left, getIndex(index - 1, options.count));

				return false;
			});

		});
	};


	$.fn.aaLayerSize = function(){

		return this.each(function(){
			var that = this;
			var $lightbox = $(".lightbox", this);

			var pageHeight = $(document).height();
			var viewportHeight = window.innerHeight ? window.innerHeight : $(window).height();

			var resize = function(){
				$(that).css({
						"display": "block",
						"visibility": "hidden"
					});

					var lightboxHeight = $lightbox.outerHeight();
					var scrollTop = $(window).scrollTop();

					$(that).height(pageHeight);

					var layerOffset = (viewportHeight - lightboxHeight) > 0 ? parseInt((viewportHeight - lightboxHeight)/2) + scrollTop : 0 + scrollTop;

					$lightbox.css({
						"margin": "0 auto",
						"position": "relative",
						"top": layerOffset+"px"
						});

					$(that).css({
						"visibility": "visible"
					});
			};

			if($lightbox.hasClass("video") || $lightbox.hasClass("comment")){
				resize();
			}
			else if( $lightbox.hasClass("offer") ){
				$lightbox
					.find(".jqzoom img")
					.load(function(){
						resize();
					});
			}
			else{
				$lightbox
					.find("img")
					.load(function(){
						resize();
					});
			}

		});
	};


	$.fn.aaLocalize = function(){
		return this.each(function(){
			var $layer = $(".nav_localize", this);

			$layer.css({
				"display": "none",
				"visibility": "visible"
			});

			$("a.localize", this).toggle(
					function(){
						$layer.show();
						return false;
					},
					function(){
						$layer.hide();
						return false;
					}
			);

		});
	};


	$.fn.aaLocalizeHeader = function(){
		return this.each(function(){
			var layer = $(".nav_localize", this);

			$(layer).css({
				"display": "none",
				"visibility": "visible"
			});

			$(".button", this).toggle(
					function(){
						$(this).addClass("button_active");
						$(layer).show();
					},
					function(){
						$(this).removeClass("button_active");
						$(layer).hide();
					}
			);

		});
	};


	$.fn.aaMapHover = function( opts ){

		var options = $.extend({
			"basepath": null,
			"prefix": null,
			"postfix": null
		}, opts);

		return this.each(function(){

			var $img = $("img", this);
			var $areaList = $("area", this);

			var imgsrc = $img.attr("src");
			$areaList.hover(
					function(){
						var index = $areaList.index(this);
						$img.attr("src", options.basepath + options.prefix + (index+1) + options.postfix);
					},
					function(){
						$img.attr("src", imgsrc);
					}
				);

			// preload images
			$(document).ready(function(){
				var src = $img.attr("src");

				for(var i=0; i< $areaList.size(); i++){
					var img = new Image();
					img.src = options.basepath + options.prefix + (i+1) + options.postfix;
				}

			});
		});
	};


	$.fn.aaNavigation = function(){
		return this.each(function(){
			$(".nav_main_sec > li", this).hover(
					function(){
						$("ul", this).show();
					},
					function(){
						$("ul", this).hide();
					}
			);
		});
	};


	$.fn.aaNewsletterAdmin = function(){
		return this.each(function(){
			var $all = $(".all", this);
			var $reset = $(".reset", this);
			var $tos = $(".send .checkbox");

			$all.click(function(){
				$(this)
					.closest("fieldset")
					.find(".checkbox")
					.attr("checked", true);
				return false;
			});

			$reset.click(function(){
				$(this)
					.closest("fieldset")
					.find(".checkbox")
					.attr("checked", false);
				return false;
			});

			//Überprüfung deaktiviert, da bereits in der newsleter.jsp überprüft wird
//			$(this).submit(function(){
//				if(!$tos.attr("checked")){
//					alert("Bitte bestätigen Sie die Hinweise zum Datenschutz und die Nutzungsbedingungen.");
//					return false;
//				}
//				else{
//					return true;
//				}
//			});
		});
	};


	$.fn.aaPopupImg = function( opts ){
		var options = $.extend({
			"action": "image",
			"caption": "",
			"service": "ajax",
			"src": "",
			"title": "",
			"type": "GET",
			"url": "/",
			"width": "420"
		}, opts);

		return this.each(function(){
			var that = this;
			var $layerContainer = $("#layer_lightbox_0");
			$(".zoom", this).click(function(){
				$.ajax(
						{
							"url": options.url,
							"data": ({
								"action": options.action,
								"caption": options.caption,
								"service": options.service,
								"src": options.src,
								"title": options.title,
								"width": options.width
							}),
							"error": function(XMLHttpRequest, textStatus, errorThrown){ dbug(textStatus + " " + errorThrown); },
							"success": function(html){
								$layerContainer.html(html);
								$("#layer_lightbox_shim_0, #layer_lightbox")
									.show()
									.aaLayerSize()
									.aaLayerClose();
							},
							"type": options.type
						}
					);
				return false;
			});
		});
	};


	$.fn.aaRegioNav = function(){
		return this.each(function(){
			var $liFirstLvl = $(".nav_main > li");
			var $liFirstLvlActive = $(".nav_main > li.active");

			$liFirstLvl.each(function(){
				var $navSec = $(".nav_sec", this);

				$(this).hover(
						function(){
							$liFirstLvl.removeClass("active");
							$(this).addClass("active");

							$navSec.show();
						},
						function(){
							$liFirstLvl.removeClass("active");
							$liFirstLvlActive.addClass("active");

							$navSec.hide();
						});

				var $navSecLi = $(".nav_sec > ul > li", this);

				$navSecLi.each(function(){
					var $navThi = $(".nav_sec_c", this);

					$(this).hover(
							function(){
								$navThi.show();
							},
							function(){
								$navThi.hide();
							});
				});

			});

		});
	};


	$.fn.aaSearchFormExtend = function( opts ){
		var options = $.extend({},opts);

		return this.each(function(){
			var that = this;
			var $hiddenInput = $(".extended_search", this);
			var $extendedSearch = $(".extended", this);

			if( options.extended === false ){
				$(".extend", this)
					.html(options.textExtend)
					.attr("title", options.textExtend);
				$extendedSearch.fadeOut();
				$hiddenInput.val("off");

				options.extended = false;
			}
			else {
				$(".extend", this)
					.html(options.textHide)
					.attr("title", options.textHide);
				$extendedSearch.show();
				$hiddenInput.val("on");

				options.extended = true;
			}

			$(".extend", this).click(function(){
				if(options.extended === true) {
					$(this)
						.html(options.textExtend)
						.attr("title", options.textExtend);
					$extendedSearch.fadeOut();
					$hiddenInput.val("off");

					options.extended = false;
				}
				else {
					$(this)
						.html(options.textHide)
						.attr("title", options.textHide);
					$extendedSearch.fadeIn();
					$hiddenInput.val("on");

					options.extended = true;
				}
			});

			// datepicker
			$(document).ready(function(){
				$.datepicker.setDefaults( $.datepicker.regional[ "de" ] );
				$(".extended .text", this)
				.datepicker({
					"altFormat": "@",
					"buttonImage": options.calendarIcon,
					"buttonImageOnly": true,
					"dateFormat": "DD',' d. MM yy",
					"dayNames": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
					"dayNamesMin": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
					"dayNamesShort": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
					"monthNames": ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
					"monthNamesShort": ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
					"onSelect": function() {
						$(".extended select option[value=manual]:first").attr("selected", true);
					},
					"showOn": "button"
				});


				var dateFrom = parseInt($(options.altFieldFrom).val());
				isNaN(dateFrom) ? dateFrom = new Date(new Date().getTime() - 1209600000) : dateFrom = new Date(dateFrom); // 1209600000 == 2 weeks in ms
				$(".extended .from", this).datepicker("setDate", dateFrom);

				var dateTo = parseInt($(options.altFieldTo).val());
				isNaN(dateTo) ? dateTo = new Date() : dateTo = new Date(dateTo);
				$(".extended .to", this).datepicker("setDate", dateTo);

				$(".extended .from", this).datepicker( "option", "altField", options.altFieldFrom );
				$(".extended .to", this).datepicker( "option", "altField", options.altFieldTo );

				$(".extended select", this).change(function(){
					var cdatefrom = new Date();
					cdatefrom.setHours(0);
					cdatefrom.setMinutes(0);
					cdatefrom.setSeconds(0);

					var cdateto = new Date();
					cdateto.setHours(23);
					cdateto.setMinutes(59);
					cdateto.setSeconds(59);

					switch ( $(this).val() ) {
					case "td":
						//cdatefrom.setDate(cdatefrom.getDate());
						break;
					case "last2days":
						cdatefrom.setDate(cdatefrom.getDate()-1);
						break;
					case "3":
						cdatefrom.setDate(cdatefrom.getDate()-3);
						break;
					case "lastweek":
						cdatefrom.setDate(cdatefrom.getDate()-7);
						break;
					case "30":
						cdatefrom.setDate(cdatefrom.getDate()-30);
						break;
					case "lastmonth":
						cdatefrom.setDate(cdatefrom.getDate());
						cdatefrom.setMonth(cdatefrom.getMonth()-1);
						break;
					case "lastyear":
						cdatefrom.setDate(cdatefrom.getDate());
						cdatefrom.setYear(cdatefrom.getFullYear()-1);
						break;
					case "all":
						cdatefrom.setDate(1);
						cdatefrom.setYear(2000);
						cdatefrom.setMonth(0);
						break;
					}

					$(".extended .from", that).datepicker("setDate", cdatefrom);
					$(".extended .to", that).datepicker("setDate", cdateto);
				});
			});

			// init
			if(options.extended){
				$extendedSearch.fadeIn();
				$hiddenInput.val("on");
			}
			else {
				$extendedSearch.fadeOut();
				$hiddenInput.val("off");
			}
		});
	};


	$.fn.aaShowActivity = function(){
		return this.each(function(){
			var $li = $("li", this);
			$(".more_all", this).click(function(){
				isIE6 ? $li.show() : $li.fadeIn();
				isIE6 ? $(this).hide() : $(this).fadeOut();
				return false;
			});
		});
	};


	$.fn.aaSignOn = function(){
		return this.each(function(){

			var $layer = $(".so_layer", this);

			$(".login a", this)
				.not(".more_all")
				.css("cursor", "pointer")
				.toggle(
					function(){
						$layer.css("display", "block");
						return false;
					},
					function(){
						$layer.hide();
						return false;
					});
		});

	};


	$.fn.aaSlideShow = function(options){
		var settings = $.extend({
			"speed": 100
		}, options);

		return this.each(function(){
			var that = this;

			var isBlocked = true;
			var index = 0;
			var default_offset = 65;

			var imgs = $("dt", this);

			var rebuild = function(direction){
				// set new index
				index += direction;

				if(direction === -1){
					$("dl dt:last, dl dd:last", that).remove();
					$("dl", that).prepend("<dd>test</dt>");
					$("dl", that).prepend("<dt class=\"s0\" style=\"z-index: -4;\"><a href=\"\" title=\"\"><img src=\"img/img_184x138.jpg\" alt=\"\"><span class=\"mask mask_l\"></span></a></dd>");
				}
				else if(direction === 1){
					$("dl dt:first, dl dd:first", that).remove();
					$("dl", that).append("<dt class=\"s8\" style=\"z-index: -4;\"><a href=\"\" title=\"\"><img src=\"img/img_184x138.jpg\" alt=\"\"><span class=\"mask mask_r\"></span></a></dd>");
					$("dl", that).append("<dd>test</dt>");
				}
			};

			var animate = function(loops, offset, direction){
				isBlocked = true;

				var zIndex = [-4, -3, -2, -1, 0, -1, -2, -3, -4];
				var mask = ["mask mask_l","mask mask_l","mask mask_l","mask mask_l","mask","mask mask_r","mask mask_r","mask mask_r","mask mask_r"];
				if(direction === 1){
					zIndex = [-5, -4, -3, -2, -1, 0, -1, -2, -3];
					mask = ["mask mask_l","mask mask_l","mask mask_l","mask mask_l","mask mask_l","mask","mask mask_r","mask mask_r","mask mask_r"];
				}
				else if(direction === -1){
					zIndex = [-3, -2, -1, 0, -1, -2, -3, -4, -5];
					mask = ["mask mask_l","mask mask_l","mask mask_l","mask","mask mask_r","mask mask_r","mask mask_r","mask mask_r","mask mask_r"];
				}

				for(var i=0; i<loops; i++){

					$("dt", that).each(function(index, elem){
						// build animation queue
						$(this).queue(function(){

							if(index === 4){
								$(".mask", this).fadeIn(settings.speed);
							}

							if(index === 4 + direction){
								$(".mask", this).fadeOut(settings.speed);
							}

							// animate images and set z-index
							$(this)
								.animate({
									"left": "-=" + Math.floor((offset / 2))
								}, settings.speed, "linear", function(){
									// set the new classes for all but the center image
									if(!(4+direction == index)){
										$(this).removeClass("active");
										$(".mask", this).attr("class", mask[index]);
									}

								})
								.css({
									"z-index": zIndex[index]
								})
								.animate({
									"left": "-=" + Math.ceil((offset / 2))
								}, settings.speed, "linear", function(){
									// set the new active image
									if((4+direction == index)){
										$(".mask", this).attr("class", mask[index]);
										$(this).addClass("active");
									}
								});



						});

					});

					$("dt", that).each(function(){
						// start animation queue
						$(this).dequeue();
					});

					rebuild(direction);
				}

				configureClicks();
				isBlocked = false;
			};

			var configureClicks = function(){
				$("dt", that).unbind("click");
				$("dt", that).click(function(e){
					if(!isBlocked){
						var idx = $("dt", that).index(this);

						if(idx === 4){
							dbug("goto");
						}
						else{
							var direction = (idx - 4);
							var loops = direction < 0 ? direction * -1 : direction;
							var offset = direction < 0 ? default_offset * -1 : default_offset;

							direction = direction < 0 ? -1 : 1;
							animate(loops, offset, direction);
						}
					}

					return false;
				});
			};

			configureClicks();
			isBlocked = false;

		});
	};


	$.fn.aaSubindexCaroussel = function( opts ) {
		var options = $.extend({
			"duration": 500,
			"json": null,
			"length": 0,
			"preload": 2
		}, opts);

		var index = 0;


		return this.each(function(){

			var list = $(".slider ul", this);
			var prev = $(".previous a", this);
			var next = $(".next a", this);

			if( options.length <= 4 ) { 		// break if not enough images
				list.css("left", "0");
				prev.hide();
				next.hide();
				return;
			}

			// preload specified img range
			var preload = function( idx, range ) {

				for(var i=idx-range; i < idx+range+1; i++){
					var j = getIndex(i, options.length);

					if(options.json[j] && !options.json[j].loaded){
						(function(k){
							var img = new Image();
							img.onload = function(){
								options.json[k].loaded = true;
							};
							img.src = options.json[k].src;
						})(j);
					}
				}
			};

			// init first preload and show nav-icons
			preload(index, options.preload);
			preload(index + 3, options.preload);

			var getItem = function( idx ){
				idx = getIndex( idx, options.length );

				var li = $("<li />");
				li.html($("li", list).eq(0).html());

				$("img", li)
					.attr("src", options.json[idx].src)
					.attr("alt", options.json[idx].caption);
				$("a", li).attr("href", options.json[idx].href);
				$("a.headline", li).html(options.json[idx].caption);


				return li;
			};

			var roll = function(direction, append){
				$(list).animate(
						{
							"left": direction
						},
						options.duration,
						function(){
							var left = parseInt($(list).css("left"));

							if(append){
								var li = getItem( index + 3 + options.preload );
								$(list)
									.append(li)
									.css({
										"left": left+212
									});
								$("li:first", list).remove();

							}
							else{
								var li = getItem( index - options.preload );
								$(list)
									.prepend(li)
									.css({
										"left": left-212
									});
								$("li:last", list).remove();
							}
						}
				);
			};

			$(prev)
				.click(function(){
					index = getIndex( index-1, options.length );
					roll("+=212", false);
					preload(index, options.preload);
					return false;
				})
				.css("display", "block");
			$(next)
				.click(function(){
					index = getIndex( index+1, options.length );
					roll("-=212", true);
					preload(index + 3, options.preload);
					return false;
				})
				.css("display", "block");

		});
	};


	$.fn.aaTableToggle = function(){

		return this.each(function(){
			var that = this;
			var $toggle = $(".toggle", this);

			$toggle.click(
					function(){
						var toggleClass = $("a", this).attr("class");
						var $rows = $("tr."+toggleClass, that);
						$rows.is(":visible") ? $rows.hide() : $rows.show();
						return false;
					});
		});

	};

	$.fn.aaTeaserCaroussel = function(opts){

		var options = $.extend({
			"duration": 800,
			"json": null,
			"length": 0,
			"preloadRange": 6,
			"type": null
		}, opts);

		var proto = [
		             "<li>",
			             "<dl>",
			             	"<dt class=\"img\">",
			             		"<a>",
			             			"<img alt\"\" src=\"\" />",
			             			options.type === "video" ? "<span class=\"play\"></span>" : "",
			             		"</a>",
			             	"</dt>",
			             	"<dd class=\"headline\">",
			             		"<a />",
			             	"</dd>",
			             "</dl>",
		             "</li>"
		             ];


		return this.each(function(){

			var blocked = false;
			var index = 0;
			var $counter = $(".counter .active", this);

			var $teaserList = $(".teaser_list", this);

			var $previous = $(".control .paging_bb", this);
			var $next = $(".control .paging_fb", this);


			if(options.length <= 3){
				$teaserList.css("left", "-5px");
			}


			var updateCounter = function(){
				$counter.html((index/3)+1);
			};


			var preload = function(index){
				for(var idx = (index-options.preloadRange); idx < (index+3+options.preloadRange+1); idx++){
					var i = getIndex(idx, options.length);

					if(options.json[i] && !options.json[i].loaded){
						(function(j){
							var preload_img = new Image();
							preload_img.onload = function(){
								options.json[j].loaded = true;
							};
							preload_img.src = options.json[j].src;
						})(i);
					}

				}
			};

			preload(index);

			var buildLis = function(startIndex){

				var $ul = $("<ul />");

				for(var i=0; i<3; i++){
					var $proto = $(proto.join(""));

					$(".img a, .headline a", $proto)
						.attr("title", options.json[startIndex+i].alt)
						.attr("href", options.json[startIndex+i].href);

					$(".img img", $proto)
						.attr("src", options.json[startIndex+i].src)
						.attr("alt", options.json[startIndex+i].alt);

					$(".headline a", $proto)
						.html(options.json[startIndex+i].headline);

					$ul.append($proto);

				}

				return $ul.html();
			};


			$previous.click(function(){
				if(blocked) return false;
				blocked = true;

				index = getIndex(index-3, options.length);
				updateCounter();

				$teaserList
					.stop(false, false)
					.animate(
						{
							"left": "+=582"
						},
						options.duration,
						function(){
							var $lis = buildLis(getIndex(index-3, options.length));

							$("li:gt(5)", $teaserList).remove();

							$teaserList
								.prepend($lis)
								.css("left", "-587px");
							blocked = false;
						}
					);
				return false;
			});

			$next.click(function(){
				if(blocked) return false;
				blocked = true;

				index = getIndex(index+3, options.length);
				updateCounter();

				$teaserList
					.stop(false, false)
					.animate(
						{
							"left": "-=582"
						},
						options.duration,
						function(){
							var $lis = buildLis(getIndex(index+3, options.length));

							$("li:lt(3)", $teaserList).remove();

							$teaserList
								.append($lis)
								.css("left", "-587px");
							blocked = false;
						}
					);

				return false;
			});
		});
	};


	$.fn.aaTeaserCarousselFallback = function(opts){

		var options = $.extend({
			"duration": 800,
			"json": null,
			"length": 0,
			"preloadRange": 6,
			"type": null
		}, opts);

		var proto = [
		             "<li>",
			             "<dl>",
			             	"<dt class=\"img\">",
			             		"<a>",
			             			"<img alt\"\" src=\"\" />",
			             			options.type === "video" ? "<span class=\"play\"></span>" : "",
			             		"</a>",
			             	"</dt>",
			             	"<dd class=\"headline\">",
			             		"<a />",
			             	"</dd>",
			             "</dl>",
		             "</li>"
		             ];


		return this.each(function(){

			var swf = swfobject.getFlashPlayerVersion();
			if(swf.major !== 0){
				// flash installed, embed flash
			}
			else {

				var blocked = false;
				var index = 0;
				var $counter = $(".counter .active", this);

				var $teaserList = $(".teaser_list", this);

				var $previous = $(".control .paging_bb", this);
				var $next = $(".control .paging_fb", this);

				var updateCounter = function(){
					$counter.html((index/3)+1);
				};


				var preload = function(index){
					for(var idx = (index-options.preloadRange); idx < (index+3+options.preloadRange+1); idx++){
						var i = getIndex(idx, options.length);

						if(options.json[i] && !options.json[i].loaded){
							(function(j){
								var preload_img = new Image();
								preload_img.onload = function(){
									options.json[j].loaded = true;
								};
								preload_img.src = options.json[j].src;
							})(i);
						}

					}
				};

				preload(index);

				var buildLis = function(startIndex){

					var $ul = $("<ul />");

					for(var i=0; i<3; i++){
						var $proto = $(proto.join(""));

						$(".img a, .headline a", $proto)
							.attr("title", options.json[startIndex+i].headline)
							.attr("href", options.json[startIndex+i].href);

						$(".img img", $proto)
							.attr("src", options.json[startIndex+i].src)
							.attr("alt", options.json[startIndex+i].headline);

						$(".headline a", $proto)
							.html(options.json[startIndex+i].headline);

						$ul.append($proto);

					}

					return $ul.html();
				};


				$previous.click(function(){
					if(blocked) return false;
					blocked = true;

					index = getIndex(index-3, options.length);
					updateCounter();

					$teaserList
						.stop(false, false)
						.animate(
							{
								"left": "+=582"
							},
							options.duration,
							function(){
								var $lis = buildLis(getIndex(index-3, options.length));

								$("li:gt(5)", $teaserList).remove();

								$teaserList
									.prepend($lis)
									.css("left", "-587px");
								blocked = false;
							}
						);
					return false;
				});

				$next.click(function(){
					if(blocked) return false;
					blocked = true;

					index = getIndex(index+3, options.length);
					updateCounter();

					$teaserList
						.stop(false, false)
						.animate(
							{
								"left": "-=582"
							},
							options.duration,
							function(){
								var $lis = buildLis(getIndex(index+3, options.length));

								$("li:lt(3)", $teaserList).remove();

								$teaserList
									.append($lis)
									.css("left", "-587px");
								blocked = false;
							}
						);

					return false;
				});
			}
		});
	};


	$.fn.aaTeaserEvents = function() {
		return this.each(function(){
			var navLinks = $(".event_nav a", this);
			var eventLists = $(".events", this);

			$(navLinks).click(function(){
				var index = $(navLinks).index(this);

				$(navLinks)
					.removeClass("active")
					.eq(index)
					.addClass("active");

				$(eventLists)
					.removeClass("active")
					.eq(index)
					.addClass("active");

				return false;
			});

		});
	};


	$.fn.aaTeaserVideo = function(){
		return this.each(function(){
			var $videoList = $(".video_list li", this);
			var length = $videoList.size();

			$videoList.each(function(idx, item){
				var $flag = $(".flag", this);
				$(this).css("z-index", length-idx);
				$flag.css("z-index", length-idx);

				$(this).hover(
						function(){
							$flag.show();
						},
						function(){
							$flag.hide();
						});
			});
		});
	};


	$.fn.aaTextGallery = function(options){

		var settings = $.extend({
			"speed": 200
		}, options);

		return this.each(function(){
			var that = this;

			var controls = $(".control", this);
			var list = $(".text", this);

			var index = 0;
			var length = $("li", list).not(".all").size();

			var getPositionString = function( idx ){
				return "<span class=\"active\">" + (idx+1) + "</span>" + " von " + length;
			};

			var switchTo = function( idx ){
				idx = getIndex(idx, length);

				loadIVW("inline-tg/"+idx+"/");

				$("li.active", list)
					.fadeOut(settings.speed, function(){
						$(this).removeClass("active");

						$("li", list).not(".all").eq(idx)
							.fadeIn(settings.speed)
							.addClass("active");
					});

				$(".counter", controls).html( getPositionString(idx) );
				index = idx;
			};

			var init = function(){
				var control = [];
				control.push("<span class=\"counter\">");
				control.push( getPositionString(index) );
				control.push("</span>");
				control.push("<a title=\"vorherige Seite\" class=\"paging_ctrl paging_bb\">vorherige Seite</a>");
				control.push("<a title=\"n&auml;chste Seite\" class=\"paging_ctrl paging_fb\">n&auml;chste Seite</a>");

				control = $(control.join(""));

				$(controls).html(control);

				$(".paging_bb", controls).click(function(){
					switchTo(index-1);
					return false;
				});

				$(".paging_fb", controls).click(function(){
					switchTo(index+1);
					return false;
				});
			};

			init();

		});
	};



	$.fn.aaThemenDouble = function( opt_opts ) {

		var options = $.extend({
			"fadeSpeed": 500,
			"speed": 1000,
			"teaserBlocks": null,
			"teaserWrapper": null
		}, opt_opts);

		var teaserHeight = 271;

		return this.each(function(){
			var nav = $(".nav_themen", this);
			var teaserList = $(".teaser_themen_double ul", this);

			$("a", nav).click(function(){
				var index = $("a", nav).index(this);
				var top = (teaserHeight*index) * -1 + "px";
				$("li", nav)
					.removeClass("active")
					.eq(index)
					.addClass("active");

				$(teaserList)
					.animate({
						"top": top
					},
					options.speed
				);

				if(options.teaserBlocks !== null && options.teaserWrapper !== null){
					$(options.teaserWrapper + " .active").fadeOut(
							options.fadeSpeed,
							function(){
								$(this).removeClass("active");
								$(options.teaserBlocks[index]).fadeIn(
										options.fadeSpeed,
										function(){
											$(this).addClass("active");
										}
								);
							}
					);
				}

				return false;
			});
		});
	};


	$.fn.aaThemenSingle = function( opt_opts ) {

		var options = $.extend({
			"dMul": 2
		}, opt_opts);

		return this.each(function(){

			var up = $(".nav_articles .up a", this);
			var down = $(".nav_articles .down a", this);

			var linklist = $(".nav_wrapper ul", this);
			var linklistLinks = $("a", linklist);
			var linklistHeight = $(linklist).height();
			var linkListWrapperHeight = $(".nav_wrapper", this).height();

			var maxDown = (linklistHeight - linkListWrapperHeight) * -1;

			var nav = $(".nav_articles li a");

			// events scroll buttons
			$(down).mousedown(function(){
				$(up).css("display", "block");

				linklistHeight = $(linklist).height();

				var topOffset = parseInt($(linklist).css("top")) * -1;
				$(linklist).animate(
						{
							"top": maxDown
						},
						options.dMul * linklistHeight,
						"linear"
				);
			});

			$(down).mouseup(function(){
				$(linklist).stop(true, false);

				var top = parseInt($(linklist).css("top"));
				if(top === maxDown){
					$(down).css("display", "none");
				}
			});

			$(up).mousedown(function(){
				$(down).css("display", "block");

				linklistHeight = $(linklist).height();

				$(linklist).animate(
						{
							"top": 0
						},
						options.dMul * linklistHeight,
						"linear"
				);
			});

			$(up).mouseup(function(){
				$(linklist).stop(true, false);

				var top = parseInt($(linklist).css("top"));
				if(top === 0){
					$(up).css("display", "none");
				}
			});

			// only show scroll buttons if the link list is higher then the wrapper
			if(linklistHeight > linkListWrapperHeight) {
				$(down).css("display", "block");
			}
		});
	};

	$.fn.aaTicker = function(){
		return this.each(function(){
			var nav = $(".headline a", this);
			var lists = $(".list", this);

			$(nav).click(function(){
				$(nav).removeClass("active");
				$(this).addClass("active");

				var index = $(nav).index(this);

				$(lists)
					.removeClass("list_active")
					.eq(index)
					.addClass("list_active");

				return false;
			});

		});
	};

	$.fn.aaUpdateList = function(){
		return this.each(function(){

			$(".remove", this).each(function(){
				var $remove = $(".click", this);
				var $layer = $(".layer_confirm", this);
				var $no = $(".no", this);

				$remove.css("cursor", "pointer");

				$remove.click(
						function(){
							$layer.is(":visible") ? $layer.hide() : $layer.show();
							return false;
						});

				$no.click(function(){
					$layer.hide();
					return false;
				});

			});
		});
	};

	$.fn.aaUserSettings = function( opts ){

		var options = $.extend({
			"duration": 100
		}, opts);

		return this.each(function(){
			var $blocks = $(".block", this);
			var $editLinks = $(".edit a", this);
			var $forms = $("form", this);
			var $formsReset = $(".cancel", $forms);
			var $formsSubmit = $(".submit", $forms);

			dbug($editLinks.size());
			dbug($blocks.size());

			$editLinks.click(function(){
				var idx = $editLinks.index(this);

				$blocks
					.eq(idx)
					.fadeOut(options.duration, function(){
						$forms
							.eq(idx)
							.fadeIn();
					});

				return false;
			});

			$formsReset.click(function(){
				var idx = $formsReset.index(this);

				$forms
					.eq(idx)
					.fadeOut(options.duration, function(){
						$blocks
							.eq(idx)
							.fadeIn();
				});

				return false;
			});

			$forms.submit(function(){

				var action = $(this).attr("action");
				var data = $(this).serialize();
				dbug(action);
				dbug(data);

				$.ajax({
					"type": "POST",
					"url": action,
					"data": data,
					"success": function(data, textStatus, XMLHttpRequest){
					},
					"error": function(XMLHttpRequest, textStatus, errorThrown){
						dbug(textStatus);
					}
				});
				return false;
			});
		});
	};
	$.fn.aaWarn = function(){
		return this.each(function(){
			var $toggle = $(".toggle", this);
			var $layer = $(".layer_warn", this);
			var $cards = $(".layer_warn a", this);
			loadIVW();
			$toggle.toggle(
					function(){
						$layer.show();
						return false;
					},
					function(){
						$layer.hide();
						return false;
					});

			$cards.click(
					function(){
						$layer.hide();
					});
		});
	};
})(jQuery);

/********************************** früher aa.js **************************
 *  
 * update 8.7.2011, nad
 * 
 *************************************************************************/

function arrayContains(array, object) {
    if (typeof(Array.prototype.indexOf) === "function") {
        return array.indexOf(object) > -1;
    } else {
        for (arrayObject in array) {
            if (arrayObject == object) {
                return true;
            }
        }
        return false;
    }
    return false;
}

var aa = {};
aa.hasCookie = function () {
    if(document.cookie.match(/B-Usr/) || document.cookie.match(/COMMUNITY_USER/)) {
        return true;
    }
    return false;
};
aa.loadCommentForm = function (articleId) {
    if (this.hasCookie) {
        jQuery.ajax(
            {
                "type": "GET",
                "url": "/community/?service=ajax&action=commentForm&articleId=" + articleId,
                "dataType": "html",
                "success": function(data, textStatus, XMLHttpRequest){
                    if (data != "") {
                        jQuery(data).appendTo("#kommentieren");
                        jQuery("#notesLinks").show();
                        jQuery("#commentForm").submit(sendComment);
                    } else {
                        jQuery("#sign_on_1").show();
                        jQuery("#notesLinks").hide();
                    }
                },
                "error": function(XMLHttpRequest, textStatus, errorThrown){
                    /* ignore silently */
                }
            }
        );
    }
};

aa.showRatings = function (pOptions) {
    alert("obsolete function! Please use $j('#<FormId>').aaShowRating(options) instead!");
    return;
    if (!this.showRatingsWasCalled) {
        if (
            this.hasCookie() ||
            pOptions.checkLoginCookie === false
        ) {
            var defaultOptions = {};
            if (typeof(sectionId) !== "undefined" && sectionId == 39) {
                defaultOptions = {readOnly: true};
            }
            var options = jQuery.extend({}, defaultOptions, pOptions);
            // Will show ratings!
        }
    }
    this.showRatingsWasCalled = true;
};

aa.toBackendDate = function (/*Date*/ date) {
   var toTwoDigits = function(num) {
       var number = parseInt(num);
       return (number < 10) ? "0" + number : "" + number;
   };
   return date.getFullYear() + '-' + toTwoDigits(date.getMonth() + 1) + '-' + toTwoDigits(date.getDate());
}



$j.fn.aaShowBlamePopup = function () {
	
	return this.each(function () {
		var that = $j(this);
        $j(that).click(

       		function (evnt) {

       			loadIVW();
       			$j.ajax(
                    {
                        "url": "/community/",
                        "data": ({
                            "service": "ajax",
                            "action": "showComplaintForm",
                            "articleId": that.attr("data-articleid"),
                            "complaintPUpTitle": that.attr("data-title")
                        }),
                        "error": function (XMLHttpRequest, textStatus, errorThrown) { dbug(textStatus + " " + errorThrown); },
                        "success": function (html) {
                            if (html != "") {
                                var $layerContainer = $j("#layer_lightbox_0");
                                $layerContainer.html(html);
                                $j("#layer_lightbox_shim_0, #layer_lightbox")
                                    .show()
                                    .aaLayerSize()
                                    .aaLayerClose();
                                $j("#layer_lightbox_0 textarea").tinymce(tinyMceConfig);
                                window.setTimeout(function () {$j("#layer_lightbox_0 .comment.mod").show();}, 500);
                            }
                        },
                        "type": "get"
                    }
                );
                return false;
            }
        )
	});
}

$j.fn.aaShowRating = function(pOptions){

    var defaultOptions = {
        callback: function (value, starElement) {
            var rating = $j(this).data('rating');
            var form = rating.context[0];
            $j('INPUT[type=hidden][name=ratingValue]', form).val(value);
            rating.context.find(".star").rating("disable");
            var ratedArticleIds = $j.cookie("ratedArticleIds") || "";
            ratedArticleIds += ratedArticleIds != "" ? "," : "";
            $j.ajax(
                {
                    url: rating.context.attr('action'),
                    data: rating.context.serialize(),
                    type: rating.context.attr('method'),
                    success: function (data, textStatus, XMLHttpRequest) {
                        $j.cookie(
                            "ratedArticleIds",
                            ratedArticleIds + rating.context.find("input[name=articleId]").val(),
                            {
                                expires: 365,
                                path: "/"
                            }
                        );
                        $j(".success", form).fadeIn('fast').delay(5000).fadeOut('fast');
                    	$j('#ratingsCount').html('&nbsp;(Bewertungen: '+(options.countRating+1)+')');
                    },
                    error: function () {
                        /* ignore */
                    }
                }
            );
        }
    };
    
    if (typeof(sectionId) !== "undefined" && sectionId == 39) {
        defaultOptions.readOnly = true;
    }
    var options = $j.extend({}, defaultOptions, pOptions);

    var ratedArticleIdsCookieValue = $j.cookie("ratedArticleIds");
    var ratedArticleIds = ratedArticleIdsCookieValue != null ? ratedArticleIdsCookieValue.split(",") : [];

    return this.each(function(){
        var that = this;
        if (arrayContains(ratedArticleIds, this.elements["articleId"].value)) {
            options.readOnly = true;
            $j(this).click(
                function (evnt) {
                    $j(".alreadyRated", this).fadeIn('fast').delay(5000).fadeOut('fast');
                }
            );
        }
        
        if(options.username == ''){
        	options.readOnly = true;
            $j(this).click(
                function (evnt) {
                    $j(".userEmpty", this).fadeIn('fast').delay(5000).fadeOut('fast');
                }
            );
        }
               
        if ($j(this).parent().css('display') == "none") { // if the form isn't visible yet, it's not initialized before!
            $j("INPUT[type=radio].star", this).rating(options);
            $j(this).parent().css('display', 'inline');
        }
    });
};

$j.fn.aaWeatherImagesNav = function() {
    return this.each(
        function () {
            var that = this;
            var image = $j("#" + this.id.replace(/^nav_/, "img_"));
            $j("a", this).click(function () {
                $j("a", that).removeClass("active");
                $j(this).addClass("active");
                image.attr("src", $j(this).attr("href").substring(1));
                return false;
            });
        }
    );
}

$j.fn.aaImgLightbox = function( opts ){
	var options = $j.extend({
		"action": "image",
		"caption": "",
		"service": "ajax",
		"src": "",
		"title": "",
		"type": "GET",
		"url": "/",
		"width": "600"
	}, opts);

	return this.each(function(){
		var that = this;
		var $layerContainer = $j("#layer_lightbox_0");
		$j(".aalightbox", this).click(function(){
			$j.ajax(
					{
						"url": options.url,
						"data": ({
							"action": options.action,
							"caption": options.caption,
							"service": options.service,
							"src": options.src,
							"title": options.title,
							"width": options.width
						}),
						"error": function(XMLHttpRequest, textStatus, errorThrown){ dbug(textStatus + " " + errorThrown); },
						"success": function(html){
							$layerContainer.html(html);
							$j("#layer_lightbox_shim_0, #layer_lightbox")
								.show()
								.aaLayerSize()
								.aaLayerClose();
						},
						"type": options.type
					}
				);
			return false;
		});
	});
};


aa.formatDate = function (date) {
    if (!!!date) {
       date = new Date();
    }
    var then = normalize(date.getDate()) + '.' + normalize((date.getMonth() + 1)) + '.' + date.getFullYear();
    then += ' ' + normalize(date.getHours()) + ':' + normalize(date.getMinutes());
    return then;
    /* private function */
    function normalize(number) {
        return !isNaN(parseInt(number/1)) && number < 10 ? '0' + number : number;
    }
};


aa.deleteMessageCallBackInMessagesOverview = function (element) {
    $j(element).parent().parent().remove();
}
aa.deleteMessageCallBackInMessage = function (element) {
    self.location.href = messageOverviewUri;
}

/* Lightboxes --------------------------------------------------------------- */

function loadLightbox(url, data) {
    $j('#layer_lightbox_0').load(
        url,
        data,
        function() {
            $j("#layer_lightbox_shim_0, #layer_lightbox")
                .aaLayerSize()
                .aaLayerClose();
        }
    );
}

function sendVote(form, url) {
    return sendAjaxForm(form, url, 'poll');
}

function sendQuiz(form, url) {
    return sendAjaxForm(form, url, 'quiz');
}

function sendAjaxForm(form, url, action) {
    var formElements = new Array();
    var x = 0;

    for (var i = 0; i < form.elements.length; i++) {
        if (form.elements[i].name && form.elements[i].name != '') {
            if (form.elements[i].type == 'radio') {
                if (form.elements[i].checked && form.elements[i].checked == true) {
                    formElements[x++] = form.elements[i];
                }
            } else {
                formElements[x++] = form.elements[i];
            }
        }
    }
    loadLightbox(url + '?service=ajax&action=' + action +'&cache=false', formElements);
    return false;
}

function loadVote(url, data) {
    loadLightbox(url + '?service=ajax&action=poll&cache=false', data);
}
function loadVideo(url, url2, sTitle) {
    loadLightbox('/?service=ajax&action=video&flv=' + escape(url) + '&img=' + escape(url2) + '&title=' + escape(sTitle), null);
}
function loadBrightcove(url) {

    loadLightbox(url + '?service=ajax&action=brightcove', null);
}
function loadQuiz(url) {
    loadLightbox(url + '?service=ajax&action=quiz&cache=false', null);
}
function loadAnzeige(url, page) {
    if (page) {
        loadLightbox(url + '?service=ajax&action=anzeige&page=' + page, null);
    } else {
        loadLightbox(url + '?service=ajax&action=anzeige', null);
    }
}

/* Ajax Pixels -------------------------------------------------------------- */

function countAction(objId, sectionId, publicationId, pCat, pMeta, pTitle, pUrl, statsUrl ){

    var jsRt     = '1';
    var jsObjId  = objId;
    var jsType   = escape('article');
    var jsCtxId  = sectionId;
    var jsPubId  = publicationId;
    var jsCat    = escape(pCat);
    var jsMeta   = escape(pMeta);
    var jsTitle  = escape(pTitle);
    var jsUrl    = escape(pUrl);
    var ref=escape(document.referrer);
    if (ref.length>=252) ref=ref.substring(0,252)+"...";
    var isJS10 = 1;
    var logger_js_image = new Image();
    
    logger_js_image.src = statsUrl + '?clientDT=' + (new Date()).getTime() + '&rt=' + jsRt+ '&objId=' + jsObjId  + '&type=' + jsType + '&ctxId=' + jsCtxId + '&pubId=' + jsPubId + '&cat=' + jsCat + '&meta=' + jsMeta + '&title=' + jsTitle + '&url=' + jsUrl;
}

/* -------------------------------------------------------------------------- */
aa.emo = "<img src=\"/resources/ver1-0/js/tiny_mce/plugins/emotions/img/";
aa.smilieReplacements = {
    ':no:': aa.emo + 'extended/no.gif" alt=":no:" title="No" />',
    ':sleeping:': aa.emo + 'extended/sleeping.gif" alt=":sleeping:" title="Sleeping" />',
    ':biggrin:': aa.emo + 'more_smilies/biggrin.gif" id="smilie_40" alt=":)" title="Biggrin" />',
    ':\\)': aa.emo + 'more_smilies/biggrin.gif" id="smilie_40" alt=":)" title="Biggrin" />',
    ':wink:': aa.emo + 'more_smilies/wink.gif" id="smilie_19" alt=";)" title="Wink" />',
    ';\\)': aa.emo + 'more_smilies/wink.gif" id="smilie_19" alt=";)" title="Wink" />',
    ':confused1:': aa.emo + 'more_smilies/confused1.gif" alt=":confused1:" title="Confused1" />',
    ':laugh:': aa.emo + 'more_smilies/laugh.gif" id="smilie_22" alt=":D" title="Laugh" />',
    ':D': aa.emo + 'more_smilies/laugh.gif" id="smilie_22" alt=":D" title="Laugh" />',
    ':blink:': aa.emo + 'more_smilies/blink.gif" alt=":blink:" title="Blink" />',
    ':innocent:': aa.emo + 'extended/innocent.gif" alt=":innocent:" title="Innocent" />',
    ':sleep:': aa.emo + 'more_smilies/sleep.gif" alt=":sleep:" title="Sleep" />',
    ':sad:': aa.emo + 'more_smilies/sad.gif" alt=":sad:" title="Sad" />',
    ':scared:': aa.emo + 'more_smilies/scared.gif" alt=":scared:" title="Scared" />',
    ':blush:': aa.emo + 'more_smilies/blush.gif" alt=":blush:" title="Blush" />',
    ':ohmy:': aa.emo + 'more_smilies/ohmy.gif" alt=":ohmy:" title="Ohmy" />',
    ':yes:': aa.emo + 'extended/yes.gif" alt=":yes:" title="Yes" />',
    ':mellow:': aa.emo + 'more_smilies/mellow.gif" alt=":mellow:" title="Mellow" />',
    ':mad:': aa.emo + 'more_smilies/mad.gif" alt=":mad:" title="Mad" />',
    ':lol:': aa.emo + 'more_smilies/lol.gif" alt=":lol:" title="Lol" />',
    ':tongue_smilie:': aa.emo + 'more_smilies/tongue_smilie.gif" alt=":tongue_smilie:" title="Tongue Smilie" />',
    ':sneaky2:': aa.emo + 'more_smilies/sneaky2.gif" alt=":sneaky2:" title="Sneaky2" />',
    ':thumbdown:': aa.emo + 'more_smilies/thumbdown.gif" alt=":thumbdown:" title="Thumbdown" />',
    ':thumbup1:': aa.emo + 'more_smilies/thumbup1.gif" alt=":thumbup1:" title="Thumbup1" />',
    ':thumbup:': aa.emo + 'more_smilies/thumbup.gif" alt=":thumbup:" title="Thumbup" />',
    ':angry:': aa.emo + 'more_smilies/angry.gif" alt=":angry:" title="Angry" />',
    ':whistling:': aa.emo + 'extended/whistling.gif" alt=":whistling:" title="Whistling" />',
    ':w00t:': aa.emo + 'more_smilies/w00t.gif" alt=":w00t:" title="W00t" />',
    ':chinese:': aa.emo + 'extended/chinese.gif" alt=":chinese:" title="Chinese" />',
    ':chris:': aa.emo + 'extended/chris.gif" alt=":chris:" title="Chris" />',
    ':clap:': aa.emo + 'extended/clap.gif" alt=":clap:" title="Clap" />',
    ':clover:': aa.emo + 'extended/clover.gif" alt=":clover:" title="Clover" />',
    ':clown:': aa.emo + 'extended/clown.gif" alt=":clown:" title="Clown" />',
    ':cool2:': aa.emo + 'extended/cool2.gif" alt=":cool2:" title="Cool2" />',
    ':cowboy:': aa.emo + 'extended/cowboy.gif" alt=":cowboy:" title="Cowboy" />',
    ':detective:': aa.emo + 'extended/detective.gif" alt=":detective:" title="Detective" />',
    ':devil:': aa.emo + 'extended/devil.gif" alt=":devil:" title="Devil" />',
    ':devil2:': aa.emo + 'extended/devil2.gif" alt=":devil2:" title="Devil2" />',
    ':chef:': aa.emo + 'extended/chef.gif" alt=":chef:" title="Chef" />',
    ':rolleyes:': aa.emo + 'extended/rolleyes.gif" alt=":rolleyes:" title="Rolleyes" />',
    ':drool:': aa.emo + 'more_smilies/drool.gif" alt=":drool:" title="Drool" />',
    ':winkiss:': aa.emo + 'extended/winkiss.gif" alt=":winkiss:" title="Winkiss" />',
    ':sorcerer:': aa.emo + 'extended/sorcerer.gif" alt=":sorcerer:" title="Sorcerer" />',
    ':censored:': aa.emo + 'extended/censored.gif" alt=":censored:" title="Censored" />',
    ':red_indian:': aa.emo + 'extended/red_indian.gif" alt=":red_indian:" title="Red Indian" />',
    ':cursing:': aa.emo + 'more_smilies/cursing.gif" alt=":cursing:" title="Cursing" />',
    ':ninja:': aa.emo + 'extended/ninja.gif" alt=":ninja:" title="Ninja" />',
    ':smartass:': aa.emo + 'extended/smartass.gif" alt=":smartass:" title="Smartass" />',
    ':boat:': aa.emo + 'extended/boat.gif" alt=":boat:" title="Boat" />',
    ':punk:': aa.emo + 'extended/punk.gif" alt=":punk:" title="Punk" />',
    ':crying:': aa.emo + 'more_smilies/crying.gif" alt=":crying:" title="Crying" />',
    ':kiss:': aa.emo + 'extended/kiss.gif" alt=":kiss:" title="Kiss" />',
    ':walkman:': aa.emo + 'extended/walkman.gif" alt=":walkman:" title="Walkman" />',
    ':batman:': aa.emo + 'extended/batman.gif" alt=":batman:" title="Batman" />',
    ':pinch:': aa.emo + 'extended/pinch.gif" alt=":pinch:" title="Pinch" />',
    ':cool:': aa.emo + 'more_smilies/cool.gif" alt=":cool:" title="Cool" />',
    ':wacko:': aa.emo + 'extended/wacko.gif" alt=":wacko:" title="Wacko" />',
    ':sleep1:': aa.emo + 'extended/sleep1.gif" alt=":sleep1:" title="Sleep1" />',
    ':balloon:': aa.emo + 'extended/balloon.gif" alt=":balloon:" title="Balloon" />',
    ':phone:': aa.emo + 'extended/phone.gif" alt=":phone:" title="Phone" />',
    ':huh:': aa.emo + 'more_smilies/huh.gif" alt=":huh:" title="Huh" />',
    ':helpsmilie:': aa.emo + 'extended/helpsmilie.gif" alt=":helpsmilie:" title="Helpsmilie" />',
    ':turned:': aa.emo + 'extended/turned.gif" alt=":turned:" title="Turned" />',
    ':shifty:': aa.emo + 'extended/shifty.gif" alt=":shifty:" title="Shifty" />',
    ':arabia:': aa.emo + 'extended/arabia.gif" alt=":arabia:" title="Arabia" />',
    ':ph34r:': aa.emo + 'extended/ph34r.gif" alt=":ph34r:" title="Ph34r" />',
    ':glare:': aa.emo + 'more_smilies/glare.gif" alt=":glare:" title="Glare" />',
    ':closedeyes:': aa.emo + 'more_smilies/closedeyes.gif" alt=":closedeyes:" title="Closedeyes" />',
    ':happybday:': aa.emo + 'extended/happybday.gif" alt=":happybday:" title="Happybday" />',
    ':tt2:': aa.emo + 'extended/tt2.gif" alt=":tt2:" title="Tt2" />',
    ':rockon:': aa.emo + 'extended/rockon.gif" alt=":rockon:" title="Rockon" />',
    ':angel:': aa.emo + 'extended/angel.gif" alt=":angel:" title="Angel" />',
    ':oops:': aa.emo + 'extended/oops.gif" alt=":oops:" title="Oops" />',
    ':bored:': aa.emo + 'more_smilies/bored.gif" alt=":bored:" title="Bored" />',
    ':hammer:': aa.emo + 'extended/hammer.gif" alt=":hammer:" title="Hammer" />',
    ':tt1:': aa.emo + 'extended/tt1.gif" alt=":tt1:" title="Tt1" />',
    ':shaun:': aa.emo + 'extended/shaun.gif" alt=":shaun:" title="Shaun" />',
    ':alien:': aa.emo + 'extended/alien.gif" alt=":alien:" title="Alien" />',
    ':online2long:': aa.emo + 'extended/online2long.gif" alt=":online2long:" title="Online2long" />',
    ':yinyang:': aa.emo + 'extended/yinyang.gif" alt=":yinyang:" title="Yinyang" />',
    ':blushing:': aa.emo + 'more_smilies/blushing.gif" alt=":blushing:" title="Blushing" />',
    ':flowers:': aa.emo + 'extended/flowers.gif" alt=":flowers:" title="Flowers" />',
    ':tooth:': aa.emo + 'extended/tooth.gif" alt=":tooth:" title="Tooth" />',
    ':scooter:': aa.emo + 'extended/scooter.gif" alt=":scooter:" title="Scooter" />',
    ':1eye:': aa.emo + 'extended/1eye.gif" alt=":1eye:" title="1eye" />',
    ':offtopic:': aa.emo + 'extended/offtopic.gif" alt=":offtopic:" title="Offtopic" />',
    ':excl:': aa.emo + 'extended/excl.gif" alt=":excl:" title="Excl" />',
    ':sweatdrop:': aa.emo + 'extended/sweatdrop.gif" alt=":sweatdrop:" title="Sweatdrop" />',
    ':santa:': aa.emo + 'extended/santa.gif" alt=":santa:" title="Santa" />',
    ':001_icon16:': aa.emo + 'extended/001_icon16.gif" alt=":001_icon16:" title="001 Icon16" />',
    ':knutschmund:': aa.emo + 'extended/001_icon16.gif" alt=":knutschmund:" title="Knutschmund" />',
    ':nuke:': aa.emo + 'extended/nuke.gif" alt=":nuke:" title="Nuke" />',
    ':yawn:': aa.emo + 'extended/yawn.gif" alt=":yawn:" title="Yawn" />',
    ':euro:': aa.emo + 'extended/euro.gif" alt=":euro:" title="Euro" />',
    ':surrender:': aa.emo + 'extended/surrender.gif" alt=":surrender:" title="Surrender" />',
    ':sailor:': aa.emo + 'extended/sailor.gif" alt=":sailor:" title="Sailor" />',
    ':nono:': aa.emo + 'extended/nono.gif" alt=":nono:" title="Nono" />',
    ':wub:': aa.emo + 'extended/wub.gif" alt=":wub:" title="Wub" />',
    ':eek:': aa.emo + 'extended/eek.gif" alt=":eek:" title="Eek" />',
    ':stuart:': aa.emo + 'extended/stuart.gif" alt=":stuart:" title="Stuart" />'
};

aa.substituteSmilieShortcuts = function (originalHtml) {
    if(typeof(originalHtml) === 'string') {
        for (var shortcut in aa.smilieReplacements) {
            originalHtml = originalHtml.replace(new RegExp('([^"])' + shortcut + '([^"])'), "$1" + aa.smilieReplacements[shortcut] + "$2");
        }
        return originalHtml;
    }
    return "";
}

$j.fn.aaWarn = function(){ 
    return this.each(function(){

        var $layer = $j(".layer_warn", this);

        $j("a.toggle", this)
            .toggle(
                function(){
                    //$layer.css("display", "block");
                    $layer.show();
                	loadIVW();                    
                    return false;
                },
                function(){
                    $layer.hide();
                	loadIVW();
                    return false;
                });
    });
};

aa.limitTo = function (textArea, maxChars) {
    if (maxChars == -1) {
        /* nothing to do ... -1L stands for 'there's no limit' */
        return;
    }
    //console.log("maxChars: " + maxChars);
    if (!$j(textArea).hasClass("wysiwyg")) { // standard textarea
        if (textArea.value.length > maxChars) {
            textArea.value = textArea.value.substring(0, maxChars);
            alert("Die Länge dieses Textfeldes ist begrenzt auf maximal " + maxChars + " Zeichen.\nIhr Text wurde angeschnitten.");
        }
    } else { // tinyMCE:
        /* have to be handled separately ... */
    }
};
aa.validateTinyMCEs = function (form) {
    try {
        var isValide = true;
        $j("TEXTAREA.wysiwyg", form).each(
            function (idx, textarea) {
                $j(textarea).parent().removeClass("error");
                $j(document.getElementById("error" + textarea.id)).html("");
                if (typeof(textarea.onblur) == 'function') {
                    maxChars = textarea.onblur.toString().replace(/.*limitTo\(this,\s?([0-9]*)\).*/g, "$1");
                    editor = tinyMCE.getInstanceById(textarea.id);
                    // get content length ... counting each smiley as 2 chars ...
                    imgsMatches = aa.substituteSmilieShortcuts(editor.getContent()).match(/<img/g);
                    charLength = (imgsMatches == null ? 0 : imgsMatches.length) * 2 + 
                                 aa.substituteSmilieShortcuts(editor.getContent()).replace(/<[^>]*>/g).length;
                    if (charLength > maxChars) {
                        //alert("Ihr Text überschreitet die maximal zulässige Länge von " + maxChars + " Zeichen.\nBitte kürzen Sie Ihren Text.");
                        isValide = false;
                        $j(textarea).parent().addClass("error");
                        tinyMCE.getInstanceById(textarea.id).focus();
                        $j(document.getElementById("error" + textarea.id)).html("Ihr Text überschreitet die maximal zulässige Länge von " + maxChars + " Zeichen.\nBitte kürzen Sie Ihren Text.");
                    }
                }
            }
        );
        return isValide;
    } catch (textareaTinyMceException) {
        /* ignore ... */
        //alert("Exception: " + textareaTinyMceException);
    }
}

$j.fn.aaForumTopicOptions = function(){
    return this.each(function(){

        var $layer = $j(".detail_layer.options", $j(this).parent());

        $j(this)
            .css("cursor", "pointer")
            .toggle(
                function(){
                    if ($j(".detail_layer.search:visible", $j(this).parent()).length > 0) {
                        $j("#topicSearch").click();
                    }
                    $layer.show('slow');
                    return false;
                },
                function(){
                    $layer.hide();
                    return false;
                }
            );
    });
};
$j.fn.aaForumTopicSearch = function(){
    return this.each(function(){

        var $layer = $j(".detail_layer.search", $j(this).parent());

        $j(this)
            .css("cursor", "pointer")
            .toggle(
                function(){
                    if ($j(".detail_layer.options:visible", $j(this).parent()).length > 0) {
                        $j("#topicOptions").click();
                    }
                    $layer.show('slow');
                    return false;
                },
                function(){
                    $layer.hide();
                    return false;
                }
            );
    });
};

aa.setLocalizedCookie = function (anchor) {
    var regionKey = anchor.href.replace(/^.*region=([^\&]*).*$/, "$1");
    $j.cookie("regionKey", regionKey, {path: '/'});
    anchor.href = anchor.href.substring(0, anchor.href.indexOf('?'));
    return true;
};

aa.quoteForumPosting = function (evnt) {
    // this is the clicked cite button!
    try {
        var quoteTemplate = '<p></p><blockquote><div class="txt"><div>Zitat von <a title="" href="${postUrl}" class="user">${postAuthor}</a></div>${postBody}</div></blockquote><p></p>';
        var postUrl = $j("#" + this.id.replace("CiteBtn", "Info") + " td.permlink>a.permalink").attr("href");
        var postAuthor = null;
        var postAuthorHtml = $j("#" + this.id.replace("CiteBtn", "Body") + " td.user a.name");
        if (postAuthorHtml.size() > 0) {
           postAuthor = postAuthorHtml.text();
        }
        var postBody = $j("#" + this.id.replace("CiteBtn", "Body") + " td.text *").clone();
        postBody = $j(postBody).find("blockquote").remove().end().html();
        postBody = $j.trim(postBody);

        if ($j("#AddForumPostingForm textarea").size() > 0) {
            tinyMCE.getInstanceById($j("#AddForumPostingForm textarea")[0].id).setContent(
               tinyMCE.getInstanceById($j("#AddForumPostingForm textarea")[0].id).getContent() + 

               quoteTemplate.replace("${postUrl}", postUrl).replace("${postAuthor}", postAuthor == null ? "Gast" : postAuthor).replace("${postBody}", postBody)
            );
        }
        //self.location.href = "#posting";
        //change nad 2011.02.21 change because IE can't hop to self.location.href without reload  
        if (!document.all){
        	self.location.href = "#posting";
        }else{
        	document.all.posting.scrollIntoView("true");
        }
        
    } catch (exp) {
        /*ignore silently console.dir(exp);*/
    }
    return false;
};

aa.collectPlaylistIds = function (playerIds) {
    var playlistIds = [];
    if (typeof(playerId2PlaylistIdsMap) != undefined) {
        for (var playerIdIdx in playerIds) {
            try {
                var newPlaylistIds = jQuery.map(
                    playerId2PlaylistIdsMap[playerIds[playerIdIdx]].items,
                    function (elm, idx) {
                        return elm.id;
                    }
                );
                playlistIds = jQuery.merge(playlistIds, newPlaylistIds);
            } catch(exp) {
                /* ignore silently */
            }
        }
    }
    return playlistIds;
};

function checkFormZahlweise(radioName, valueBankeinzug, valueRechnung) {
	var $form_bankeinzug	= $j("#form_zahlweise_bankeinzug");
	var $form_rechnung		= $j("#form_zahlweise_rechnung");
	var zahlweise			= $j("input[name='" + radioName + "']:checked").val();

	if (zahlweise == valueBankeinzug) {
		$form_bankeinzug.show();
	} else {
		$form_bankeinzug.hide();
	}

	if (zahlweise == valueRechnung) {
		$form_rechnung.show();
	} else {
		$form_rechnung.hide();
	}
}

/* eTracker ----------------------------------------------------------------- */

var toSleep = true;
function stopTimer() {
    toSleep=false;
}
function clickTracker(LinkName) {
    var secureID="oVbuKg";
    var redirectUrl="http://www.etracker.de/skin/de.def/img/1px.gif";
    etrackerSink = new Image(1,1);
    toSleep = true;
    etrackerSink.src = "http://www.etracker.de/lnkcnt.php?et="+secureID+"&url="+redirectUrl+"&lnkname="+LinkName;
    etrackerSink.onload=stopTimer;
    if(toSleep==true) {
        maxDelay(500);
    }
    return true;
}
function maxDelay(gap) {
    var then,now;
    then=new Date().getTime();
    now=then;
    while(toSleep==true&&(now-then)<gap) {
        now=new Date().getTime();
    }
}

/* ivw ---------------------------------------------------------------------- */

function loadIVW(ivw_extension) {

    var ivwCode="http://augsallg.ivwbox.de/cgi-bin/ivw/CP/" + code; // + ivw_extension;
    if (! $j.browser.msie) {

	    $j('#ivw_p').html("<IMG SRC=\""+ivwCode+"?r="+escape(document.referrer)+"&d="+(Math.random()*100000)+"\" WIDTH=\"1\" HEIGHT=\"1\">");    

    }else{
    
	var ivw_image = new Image();
	ivw_image.src = ivwCode+"?r="+escape(document.referrer)+"&d="+(Math.random()*100000);

    }
    var jetzt = new Date();	

    if (typeof et_pagename != 'undefined'){	
	    var eTrackerCode="http://www.etracker.de/cnt.php?v=3.0&java=y&tc="+jetzt.getTime()+"&et_tz=-120&et=oVbuKg&et_ilevel=0&et_pagename="+et_pagename+ivw_extension +"&et_areas="+et_areas+"&et_target=,0,0,0,0&et_lpage=0&et_se=0&et_url="+window.location.href+"&slang=de&ref=" + document.referrer;	
	    $j('#et_image').html("<IMG SRC=\""+ eTrackerCode +"\" WIDTH=\"1\" HEIGHT=\"1\">");           
    }
    return true;
}

function loadET(ivw_extension) {

    var ivwCode="http://augsallg.ivwbox.de/cgi-bin/ivw/CP/" + code; // + ivw_extension;
    if (! $j.browser.msie) {

	    $j('#ivw_p').html("<IMG SRC=\""+ivwCode+"?r="+escape(document.referrer)+"&d="+(Math.random()*100000)+"\" WIDTH=\"1\" HEIGHT=\"1\">");    

    }else{
    
	var ivw_image = new Image();
	ivw_image.src = ivwCode+"?r="+escape(document.referrer)+"&d="+(Math.random()*100000);

    }
    var jetzt = new Date();	

    if (typeof et_pagename != 'undefined'){	
	    var eTrackerCode="http://www.etracker.de/cnt.php?v=3.0&java=y&tc="+jetzt.getTime()+"&et_tz=-120&et=oVbuKg&et_ilevel=0&et_pagename="+et_pagename+ivw_extension +"&et_areas="+et_areas+"&et_target=,0,0,0,0&et_lpage=0&et_se=0&et_url="+et_bg_url+"&slang=de&ref=" + document.referrer;	
	    $j('#et_image').html("<IMG SRC=\""+ eTrackerCode +"\" WIDTH=\"1\" HEIGHT=\"1\">");           
    }
    return true;
}

/* socialshareprivacy ------------------------------------------------------- */

jQuery(document).ready(function($){
	if ($('#socialshareprivacy').length > 0) {
		$('#socialshareprivacy').socialSharePrivacy({
			services : {
				facebook : {
					'app_id'            : '153204848101730', 
					'dummy_img'         : '/resources/ver1-0/img/socialshareprivacy/dummy_facebook.png'
				}, 
				twitter : {
					'dummy_img'         : '/resources/ver1-0/img/socialshareprivacy/dummy_twitter.png'
				},
				gplus : {
					'dummy_img'         : '/resources/ver1-0/img/socialshareprivacy/dummy_gplus.png'
				}
			},
			'css_path'          : '/resources/ver1-0/css/socialshareprivacy.css',
			'info_link'         : 'http://www.augsburger-allgemeine.de/service/Datenschutzhinweis-id10487051.html'
		}); 
	}
});

/* -------------------------------------------------------------------------- */


/********************************** früher jquery.cookie.js **************************
 *  
 * update 8.7.2011, nad
 * 
 *************************************************************************/
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};


