/*
 * jQuery css clip animation support -- Jim Palmer
 * version 0.1.2
 * idea spawned from jquery.color.js by John Resig
 * Released under the MIT license.
 */
(function(jQuery){
    jQuery.fx.step.clip = function(fx){
        if ( fx.state == 0 ) {
            var cRE = /rect\(([0-9]{1,})(px|em)[,| ]([0-9]{1,})(px|em)[,| ]([0-9]{1,})(px|em)[,| ]([0-9]{1,})(px|em)\)/;
            fx.start = cRE.exec( fx.elem.style.clip.replace(/, /g, ' ') );
            fx.end = cRE.exec( fx.end.replace(/, /g, ' ') );
        }

		if (fx.start) {
	        var sarr = new Array(), earr = new Array(), spos = fx.start.length, epos = fx.end.length,
	            emOffset = fx.start[ss+1] == 'em' ? ( parseInt($(fx.elem).css('fontSize')) * 1.333 * parseInt(fx.start[ss]) ) : 1;
	        for ( var ss = 1; ss < spos; ss+=2 ) { sarr.push( parseInt( emOffset * fx.start[ss] ) ); }
	        for ( var es = 1; es < epos; es+=2 ) { earr.push( parseInt( emOffset * fx.end[es] ) ); }
	        fx.elem.style.clip = 'rect(' +
	            parseInt( ( fx.pos * ( earr[0] - sarr[0] ) ) + sarr[0] ) + 'px ' +
	            parseInt( ( fx.pos * ( earr[1] - sarr[1] ) ) + sarr[1] ) + 'px ' +
	            parseInt( ( fx.pos * ( earr[2] - sarr[2] ) ) + sarr[2] ) + 'px ' +
	            parseInt( ( fx.pos * ( earr[3] - sarr[3] ) ) + sarr[3] ) + 'px)';
		}
    }
})(jQuery);


//----------------------------
// Plugins
//----------------------------
//
//
//$.fn.__bindo = $.fn.bind;   // old jQuery bind function
//$.fn.bind = function(evt,data,fn){
//    var cb,nodata = false;
//    if (typeof fn!='undefined') cb = fn;
//    else {nodata = true; cb = fn = data;}
//    if (typeof cb == 'object') fn = function(event,data){
//        event.args = cb[2]; // extra argument
//        return cb[0][cb[1]](event,data);
//    }
//    if (nodata) return this.__bindo(evt,fn);
//    else return this.__bindo(evt,data,fn);
//}

(function($) {

  var addMethods = function(source) {
    var ancestor = this.superclass && this.superclass.prototype;
    var properties = $.keys(source);

    if (!$.keys({ toString: true }).length) properties.push("toString", "valueOf");

    for (var i = 0, length = properties.length; i < length; i++) {
      var property = properties[i], value = source[property];
      if (ancestor && $.isFunction(value) && $.argumentNames(value)[0] == "$super") {

        var method = value, value = $.extend($.wrap((function(m) {
          return function() { return ancestor[m].apply(this, arguments) };
        })(property), method), {
          valueOf: function() { return method },
          toString: function() { return method.toString() }
        });
      }
      this.prototype[property] = value;
    }

    return this;
  }


  $.extend({
    keys: function(obj) {
      var keys = [];
      for (var key in obj) keys.push(key);
      return keys;
    },

    argumentNames: function(func) {
      var names = func.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(/, ?/);
      return names.length == 1 && !names[0] ? [] : names;
    },

    bind: function(func, scope) {
      return function() {
        return func.apply(scope, $.makeArray(arguments));
      }
    },

    wrap: function(func, wrapper) {
      var __method = func;
      return function() {
        return wrapper.apply(this, [$.bind(__method, this)].concat($.makeArray(arguments)));
      }
    },

    klass: function() {
      var parent = null, properties = $.makeArray(arguments);
      if ($.isFunction(properties[0])) parent = properties.shift();

      var klass = function() {
        this.initialize.apply(this, arguments);
      };

      klass.superclass = parent;
      klass.subclasses = [];
      klass.addMethods = addMethods;

      if (parent) {
        var subclass = function() { };
        subclass.prototype = parent.prototype;
        klass.prototype = new subclass;
        parent.subclasses.push(klass);
      }

      for (var i = 0; i < properties.length; i++)
        klass.addMethods(properties[i]);

      if (!klass.prototype.initialize)
        klass.prototype.initialize = function() {};

      klass.prototype.constructor = klass;

      return klass;
    },
    delegate: function(rules) {
      return function(e) {
        var target = $(e.target), parent = null;
        for (var selector in rules) {
          if (target.is(selector) || ((parent = target.parents(selector)) && parent.length > 0)) {
            return rules[selector].apply(this, [parent || target].concat($.makeArray(arguments)));
          }
          parent = null;
        }
      }
    }
  });

  var bindEvents = function(instance) {
    for (var member in instance) {
      if (member.match(/^on(.+)/) && typeof instance[member] == 'function') {
        instance.element.bind(RegExp.$1, $.bind(instance[member], instance));
      }
    }
  }

  var behaviorWrapper = function(behavior) {
    return $.klass(behavior, {
      initialize: function($super, element, args) {
        this.element = $(element);
        if ($super) $super.apply(this, args);
      }
    });
  }

  var attachBehavior = function(el, behavior, args) {
      var wrapper = behaviorWrapper(behavior);
      instance = new wrapper(el, args);

      bindEvents(instance);

      if (!behavior.instances) behavior.instances = [];

      behavior.instances.push(instance);

      return instance;
  };


  $.fn.extend({
    attach: function() {
      var args = $.makeArray(arguments), behavior = args.shift();

      if ($.livequery && this.selector) {
        return this.livequery(function() {
          attachBehavior(this, behavior, args);
        });
      } else {
        return this.each(function() {
          attachBehavior(this, behavior, args);
        });
      }
    },
    attachAndReturn: function() {
      var args = $.makeArray(arguments), behavior = args.shift();

      return $.map(this, function(el) {
        return attachBehavior(el, behavior, args);
      });
    },
    delegate: function(type, rules) {
      return this.bind(type, $.delegate(rules));
    },
    attached: function(behavior) {
      var instances = [];

      if (!behavior.instances) return instances;

      this.each(function(i, element) {
        $.each(behavior.instances, function(i, instance) {
          if (instance.element.get(0) == element) instances.push(instance);
        });
      });

      return instances;
    },
    firstAttached: function(behavior) {
      return this.attached(behavior)[0];
    }
  });

  Remote = $.klass({
    initialize: function(options) {
      if (this.element.attr('nodeName') == 'FORM') this.element.attach(Remote.Form, options);
      else this.element.attach(Remote.Link, options);
    }
  });

  Remote.Base = $.klass({
    initialize : function(options) {
      this.options = $.extend({

      }, options || {});
    },
    _makeRequest : function(options) {
      $.ajax(options);
      return false;
    }
  });

  Remote.Link = $.klass(Remote.Base, {
    onclick: function() {
      var options = $.extend({ url: this.element.attr('href'), type: 'GET' }, this.options);
      return this._makeRequest(options);
    }
  });

  Remote.Form = $.klass(Remote.Base, {
    onclick: function(e) {
      var target = e.target;

      if ($.inArray(target.nodeName.toLowerCase(), ['input', 'button']) >= 0 && target.type.match(/submit|image/))
        this._submitButton = target;
    },
    onsubmit: function() {
      var data = this.element.serializeArray();

      if (this._submitButton) data.push({ name: this._submitButton.name, value: this._submitButton.value });

      var options = $.extend({
        url : this.element.attr('action'),
        type : this.element.attr('method') || 'GET',
        data : data
      }, this.options);

      this._makeRequest(options);

      return false;
    }
  });

  $.ajaxSetup({
    beforeSend: function(xhr) {
      xhr.setRequestHeader("Accept", "text/javascript, text/html, application/xml, text/xml, */*");
    }
  });

})(jQuery);


//----------------------------
// basisfunktionen
//----------------------------


// begrenzung von zeichen in einer textarea auf maximal-laenge
function checkMax(field, max) {
	var fieldLength = field.value.length;
	if (fieldLength>max) {
		field.value = field.value.substr(0,max);
		alert('Es sind max. '+max+' Zeichen erlaubt.');
	}
}

// begrenzung von zeichen in einer textarea auf maximal-laenge unter einbeziehung eines textes aus einem pulldown
function checkMaxMulti(f, fieldTXT, fieldPD, max) {
	var FieldTXT = f.elements[fieldTXT];
	var FieldPD = f.elements[fieldPD];
	var txtFieldLength = FieldTXT.value.length;
	var pdFieldLength = FieldPD.options[FieldPD.options.selectedIndex].value.length+1;
	if (pdFieldLength+txtFieldLength>max) {
		FieldTXT.value = FieldTXT.value.substr(0,max-pdFieldLength);
		alert('Es sind max. '+max+' Zeichen erlaubt.');
	}
}

// neue text textaerea maximallaenge
// maxlength for textareas => START
function setMaxLength()
{
	var x = document.getElementsByTagName('textarea');
	var counter = document.createElement('div');
	counter.className = 'counter';

	for (var i=0;i<x.length;i++)
	{
		if (x[i].getAttribute('maxlength'))
		{
			var counterClone = counter.cloneNode(true);
			counterClone.relatedElement = x[i];

			counterClone.innerHTML = '<span>0</span>/'+x[i].getAttribute('maxlength');
			x[i].parentNode.insertBefore(counterClone,x[i].nextSibling);
			x[i].relatedElement = counterClone.getElementsByTagName('span')[0];
			x[i].onkeyup = x[i].onchange = checkMaxLength;
			x[i].onkeyup();
		}
	}
}

function checkMaxLength()
{
	var maxLength = this.getAttribute('maxlength');
	var currentLength = this.value.length;

	if (currentLength > maxLength)
	{
		//this.relatedElement.className = 'toomuch';
		this.value=this.value.slice(0, maxLength);
	}
	else
		this.relatedElement.className = '';
	this.relatedElement.firstChild.nodeValue = currentLength;
	// not innerHTML
}
// maxlength for textareas => END


// url parsen
function parseHost(u) {
	uw = u.replace(/:\/\//, "/");
	parts = uw.split("/");
	return(parts[1]);
}

// neues fenster
function newWin(h,t) {
	 var newwin=window.open(h, t);
	 newwin.focus();
}

// dsi-tracking
function trackIntern(l) {
	self.location.href=rel2rootweb+'div/linktrack.php'+insertsid+'linkurl='+escape(l.href);
}

// dom-object
function oid(n) {
    return (document.getElementById?(document.getElementById(n)?document.getElementById(n):false):(document.all?(document.all(n)?document.all(n):false):false));
}
function otn(n) {
    return (document.getElementsByTagName?(document.getElementsByTagName(n)?document.getElementsByTagName(n):false):(document.all?(document.all(n)?document.all(n):false):false));
}

// timeout-cleaner
function cto(to){
	if (to!=false) window.clearTimeout(to);
}


function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function addEvent(obj, typ, fun) {
	if (obj.addEventListener) {
		obj.addEventListener( typ, fun, false);
		return true;
	} else if (obj.attachEvent) {
		return obj.attachEvent("on"+typ, fun);
	}
	return false;
}

/**
  * Stellt Debug-Messages für Firefox, IE8, Opera, Safari, Chrome (Konsole) und IE<8 (alert) zur Verfügung.
 * @param string text
 */
function lg(text) {
	/* if (typeof (opera) != "undefined" && opera != null) {
		opera.postError(text);
		return;
	} else if (typeof (console) != "undefined" && console != null) {
		console.log(text);
		return;
	} else {
		alert(text);
	}*/
}

Ampel = $.klass({
	initialize: function() {

		this.tooltip = this.element.children('.tooltip')
							.remove()
							.appendTo($(document.body))
							.hide();

		this.tooltip.append('<div class="arrow"></div>')

		$(this.element.children('.info'))
			.css('display', 'block')
			.bind('mouseover', {tooltip: this.tooltip, h5: $(this.element.find('h5'))}, this.hover)
			.bind('mouseout', {tooltip: this.tooltip}, this.unhover);
	},
	hover: function(e) {
		//lg({ peter: 15, stefan: {haare: "blau", schuhgroesse: 45}});
		if (tracking.nettracker) {
			ntptEventTag(escape('ev=infobox_'+e.data.h5.text()));
		}
		this.tooltip = e.data.tooltip.fadeIn();
		this.tooltip
			.css("left", $(this).offset().left)
			.css("top", $(this).offset().top - this.tooltip.height()-27);
	},
	unhover: function(e) {
		this.tooltip = e.data.tooltip.fadeOut();
	}
});


Tooltip = $.klass({
	initialize: function() {
		var par = $(this.element);
		var text = par.attr('title');
		par.attr('title', '').css('cursor', 'pointer');

		var tt = document.createElement('div');
		$(document.body).append(tt);
		$(tt)
			.addClass("tooltip")
			.text(text)
			.append('<div class="arrow"></div>')
			.hide();


		par.hover(
			function() {
				$(tt)
					.css({
						top:	par.offset().top - $(tt).height()-27,
						left:	par.offset().left
					})
					.fadeIn()
			},
			function() {
				$(tt).fadeOut();
			}
		);

	}
});

// wird nach dem Laden der Seite aufgerufen
$(function() {
	// markiert den Body mit Spezialklasse, um gewisse CSS-Selektoren zu aktivieren
	$(document.body).addClass('dynd');

	// versieht die Ampelseite "Übertragungswege" mit JS-Funktionalität (siehe auch Klasse "Ampel")
	$('.ampel').attach(Ampel);

	// versieht zu Tooltipende Elemente mit JS-Funktionalität (siehe auch Klasse "Tooltip")
	$('.tipme').attach(Tooltip);

	$('.tabbox').dabs()
	// bring die Reiter der Tabboxen auf die gleiche Breite
	.each(function(){
		// Anzahl der Reiter rausfinden
		var len = $(this).find(".tabboxnavi a").length;
		// zu füllende Breite rausfinden
		var fullWidth = $(this).width();
		
		$(this).find(".tabboxnavi li").each(function(index, li) {
			// Hol das Padding der Reiter
			var padding = parseInt($(li).find("a").css("padding-left"), 10) + parseInt($(li).find("a").css("padding-right"), 10);
			// setze die Reiter auf ihre neue Breite mit eingerechnetem Padding
			$(li).find("a").width(Math.floor(fullWidth/len -  padding)).css("left", ((fullWidth/len - padding)*index + "px"));
		});
	});

	// prüft, ob wir auf der Motivdetailseite sind und ermöglicht JS-Funktionalität von Bildinfo und Kommentaren statt des Seitenreloads
	if ($('.liebesorte-detail .dock').length > 0) {

		// Code zum Ein- und Ausblenden der Bildinfos
		$('#link-bildinfos, #link-rating').attr("href", "javascript:void(0);");
		$('.liebesorte-detail .bildinfo .close a').attr("href", "javascript:void(0);");

		$('#link-bildinfos, #link-rating').click(function(){
			if (tracking.nettracker) {
				ntptEventTag('lc='+escape(tracking.nt_prefix+'liebesorte/galerie/bildinfos'));
			}

			$('.liebesorte-detail .kommentare').fadeOut();
			$('.liebesorte-detail .bildinfo').fadeIn();
			if ($('.liebesorte-detail .overlay').css('display')=='none') {
				$('.liebesorte-detail .overlay').css('opacity', 0).show();
			}
			$('.liebesorte-detail .overlay').fadeTo("normal", 0.4);		});

		$('.liebesorte-detail .bildinfo .close a').click(function() {
			$('.liebesorte-detail .bildinfo').fadeOut();
			$('.liebesorte-detail .overlay').fadeOut();
		});

		// Code zum Ein- und Ausblenden der Kommentare
		$('#link-kommentare').attr("href", "javascript:void(0);");
		$('.liebesorte-detail .kommentare .close a').attr("href", "javascript:void(0);");
		$('#btn-abbrechen').attr("href", "javascript:void(0);");

		$('#link-kommentare').click(function(){
			if (tracking.nettracker) {
				ntptEventTag('lc='+escape(tracking.nt_prefix+'liebesorte/galerie/kommentare'));
			}

			$('.liebesorte-detail .bildinfo').fadeOut();
			$('.liebesorte-detail .kommentare').fadeIn();
			if ($('.liebesorte-detail .overlay').css('display')=='none') {
				$('.liebesorte-detail .overlay').css('opacity', 0).show();
			}
			$('.liebesorte-detail .overlay').fadeTo("normal", 0.4);
		});

		$('.liebesorte-detail .kommentare .close a, #btn-abbrechen').click(function() {
			$('.liebesorte-detail .kommentare').fadeOut();
			$('.liebesorte-detail .overlay').fadeOut();
		});


		// Code für den Pinöpel
		$('.dockwrapper .pinoepel').click(function(){
			if (!$(this).hasClass('unten')) {
				$(this).parent().animate({
					bottom:"-32px",
					clip: "rect(0px 722px 26px 0px)"
				}, 400);
			} else {
				$(this).parent().animate({
					bottom:"0px",
					clip: "rect(0px 722px 58px 0px)"
				}, 400);
			}
			$(this).toggleClass('unten');

		});
	}

	// prüft, ob wir eine Galerie haben sind und versieht die Galerie mit AJAX-Funktionalität
	if ($('.textarea .fotogal').length > 0) {
		$('.textarea .fotogal').each(function(i) {
			$("#"+this.id+' a')
				.attr("href", "javascript:void(0);")
				.click(function() {
					var show			= $(this).attr("class");
					var id				= $(this).parent().attr("id");
					var current			= $($("#"+id+' .counter span')[0]).text();

					$.getJSON('../../media/fotogalerie/getAjaxContent.php?show='+show+"&current="+current+"&id="+id, function(data) {
						var par = $($("#"+data.id)[0]);
						par.find(".image img").attr('src', data.url);
						par.find(".image img").attr('alt', data.alt);
						par.find(".subline").html(data.title);
						par.find(".counter span").html(data.num);

						//lg('lc='+escape(tracking.nt_prefix+'/fotogalerie/'+id+"/bild-"+data.num));
						if (tracking.nettracker) {
							ntptEventTag('lc='+escape(tracking.nt_prefix+'/fotogalerie/'+id+"/bild-"+data.num));
						}
					});
				});;
		});
	}

	// prüft, ob wir auf der Medien- und Motiv-Seite sind und versieht die Überschriften mit JS-Einklapp-Funktionalität
	$('.textarea h3.switchlink').each(function(i) {
		$(this)
			.addClass('inactive')
			.html('<a href="javascript:void(0);">'+$(this).text()+'</a>')
			.parent().find("div.content").hide().end()
			.find('a').click(function(){
				$(this).parent().toggleClass('inactive');
				$(this).parent().parent().find("div.content").toggle();

				//lg('lc='+escape(tracking.nt_prefix+'kampagne/medien/'+$(this).text()));
				if (tracking.nettracker) {
					ntptEventTag('lc='+escape(tracking.nt_prefix+'kampagne/medien/'+$(this).text()));
				}
			});
		if ($(this).hasClass('active')) {
			$(this)
				.removeClass('active')
				.removeClass('inactive')
				.parent().find("div.content").show();
		}
	});
	
	// erstellt die Subnavigation bei den Tabs
	$('.tabnavi .subnav').hide();
	$('.tabnavi .subnav-trigger').hover(function(event){
		$(this).children('div.subnav').stop(true, true).fadeIn(100);
		$(this).addClass('hovered');
	}, function(event){
		$(this).children('div.subnav').stop(true, true).fadeOut(100);
		$(this).removeClass('hovered');
	});

});
// fertig von "wird nach dem Laden der Seite aufgerufen"


//----------------------------
// LightBox
//----------------------------

function openLightbox(params) {
	/**
	 * THIRD FUNCTION
	 * getPageScroll() by quirksmode.com
	 *
	 * @return Array Return an array with x,y page scroll values.
	 */
	function ___getPageScroll() {
		var xScroll, yScroll;
		if (self.pageYOffset) {
			yScroll = self.pageYOffset;
			xScroll = self.pageXOffset;
		} else if (document.documentElement && document.documentElement.scrollTop) {	 // Explorer 6 Strict
			yScroll = document.documentElement.scrollTop;
			xScroll = document.documentElement.scrollLeft;
		} else if (document.body) {// all other Explorers
			yScroll = document.body.scrollTop;
			xScroll = document.body.scrollLeft;
		}
		arrayPageScroll = new Array(xScroll,yScroll);
		return arrayPageScroll;
	};

	var index = params.index;
	var count = params.array.length;

	// erzeuge Markup für die Lightbox
	var closeBtn = '<a id="lb-close" href="javascript:closeLightbox();">Schließen</a>';
	var info = '<div class="info"><span>'+(params.index+1) + "</span>/"+ count+'</div>';
	var navi = '<div class="navi clearfix"><a href="javascript:void(0);" class="prev"></a>'+info+'<a href="javascript:void(0);" class="next"></a></div>'

	// Markup wird an <body> angehängt
	$(document.body).append('<div id="lb-overlay" style="opacity:0;"></div>');
	$(document.body).append('<div id="lb-wrapper" style="opacity:0;">'+ closeBtn +'<img src="'+params.array[index].url+'" width="'+params.array[index].width+'" />' + navi + '</div>')

	// Lightbox wird horizontal zentriert und 20px unterm Viewport-Rand angezeigt
	$('#lb-wrapper').css({
		width: params.array[index].width+2,
		top: (___getPageScroll()[1]+20) + "px"
	}).css("left", ($(document).width() / 2 - $('#lb-wrapper').width() / 2) + "px");

	$('#lb-overlay')
		// Overlay wird so groß wie die Seite
		.css({
			height: $(document).height(),
			width: $(document).width()
		})
		//Overlay wird eingeblendet, danach wird Lightbox eingeblendet
		.fadeTo(400, 0.4, function() {
			$('#lb-wrapper').fadeTo(800, 1);
		})
		// beim Klick aufs Overlay wird die Lightbox geschlossen
		.click(function() {
			closeLightbox();
		});

	// Tracking des Öffnens
	var url = params.array[index].url;
	//lg('lc='+escape(tracking.nt_prefix+'kampagne/medien/'+params.array[index].trackLoc+'/grossansicht/'+url.substring(url.lastIndexOf('/')+1,url.length)));
	if (tracking.nettracker) {
		ntptEventTag('lc='+escape(tracking.nt_prefix+'kampagne/medien/'+params.array[index].trackLoc+'/grossansicht/'+url.substring(url.lastIndexOf('/')+1,url.length)));
	}

	// beim Klick auf den Next-Button und das Bild wird das nächste Bild angezeigt
	$('#lb-wrapper a.next, #lb-wrapper img')
		.click(function() {
			if (index < count-1) {
				index++;
			} else {
				index = 0;
			}
			$('#lb-wrapper img').attr('src', params.array[index].url);

			$('#lb-wrapper .info span').html(index+1);

			// Tracking des Weiterklickens
			var url = params.array[index].url;
			//lg('lc='+escape(tracking.nt_prefix+'kampagne/medien/Plakate_und_Postkarten/grossansicht/'+url.substring(url.lastIndexOf('/')+1,url.length)));
			if (tracking.nettracker) {
				ntptEventTag('lc='+escape(tracking.nt_prefix+'kampagne/medien/Plakate_und_Postkarten/grossansicht/'+url.substring(url.lastIndexOf('/')+1,url.length)));
			}
		});

	// Beim Klick auf den Prev-Button wird das vorherige Bild angezeigt
	$('#lb-wrapper a.prev')
		.click(function() {
			if (index > 0) {
				index--;
			} else {
				index = count-1;
			}
			$('#lb-wrapper img').attr('src', params.array[index].url);

			$('#lb-wrapper .info span').html(index+1);

			// Tracking des Zurückklickens
			var url = params.array[index].url;
			//lg('lc='+escape(tracking.nt_prefix+'kampagne/medien/Plakate_und_Postkarten/grossansicht/'+url.substring(url.lastIndexOf('/')+1,url.length)));
			if (tracking.nettracker) {
				ntptEventTag('lc='+escape(tracking.nt_prefix+'kampagne/medien/Plakate_und_Postkarten/grossansicht/'+url.substring(url.lastIndexOf('/')+1,url.length)));
			}
		});
}

function closeLightbox() {
	$('#lb-wrapper').stop().fadeOut(300, function() {
		$(this).remove();
		$('#lb-overlay').stop().fadeOut(700, function() {
			$(this).remove();
		});
	});
}


/*
 * Eigenes Tabs-Plugin / Reiter
 *
 */
(function($){
	var Dabs = function(element, options){
		var config;
		
		// private Initialisierungs-Funktion, wird nicht automatisch sondern am Ende des Objekts aufgerufen
		var initialize = $.proxy(function(element, options){
			// Default Optionen
			config = $.extend({
				ajax:false,
				active:$(element).find('.tabboxnavi li.active').prevAll().length,
				ajaxPostVars: {}
			}, options || {});
			
			this.element = $(element);
			this.active = false;
			// Alle Trigger-Links finden und cachen
			this.triggers = this.element.find('.tabboxnavi a');
			// Alle Inhaltscontainer finden und cachen
			this.containers = this.element.find('.tabcontent');
			
			// den initial sichtbaren aktivieren
			this.activate(config.active);
			
			// Klick-Event binden
			this.triggers.click($.proxy(this.click, this));
		}, this);
		
		
		this.click = function(event){
			// Klick-Ausführung stoppen
			event.preventDefault();
			
			// geklickten Link-Index ermitteln
			var index = $(event.target).parents("li").prevAll().length;
			
			// wenn der aktuell aktive Tab nochmal geklickt wurde, nix wie raus hier
			if (index == this.active) return;
			
			if (!config.ajax) {
				// wenn keine AJAX-Tabbox, einfach den geklickten aktivieren
				this.activate(index);
			} else {
				// wenn es eine AJAX-Tabbox ist, überprüfen, ob der Inhalt des
				// geklickten Containers bereits geladen ist
				if ($(this.containers.get(index)).html() != "") {
					// wenn der Inhalt schon da war, einfach anzeigen
					this.activate(index);
				} else {
					// wenn der Inhalt noch nicht da war, hol ihn per POST-request
					$.post(
						this.triggers.get(index).href,
						config.ajaxPostVars,
						$.proxy(function(data) {
							// wenn der Request erfolgreich war,
							// füge den Inhalt der Response in den entspr. Container
							$(this.containers.get(index)).html(data);
							// und aktiviere den Reiter und Container
							this.activate(index);
						}, this)
					);
				}
			}
		}
		
		this.activate = function(index) {
			// Alle Container verstecken und den geklickten zeigen
			$(this.containers.hide().get(index)).show();
			
			// aktiv-Klasse des derzeit aktiven Triggers entfernen
			$(this.triggers.get(this.active)).parents('li').removeClass("active");
			
			// dem aktiven Trigger-Link die aktiv-Klasse verpassen
			$(this.triggers.get(index)).parents('li').addClass("active");
			
			// internen Aktiv-Speicher setzen
			this.active = index;
		};
		
		initialize(element, options);
	};
	
	$.fn.dabs = function(options){
		return this.each(function(){
			var element = $(this);
			
			// Nichts weiter machen, wenn das Element schon mal initialisiert wurde
			if (element.data('dabs')) 
				return;
			
			var dabs = new Dabs(this, options);
			
			// am Element was einspeichern, damit wir erkennen koennen, ob es schonmal initialisiert wurde
			element.data('dabs', dabs);
		});
	};
})(jQuery);

//----------------------------
// FLASH-STUFF
//----------------------------

function blurFlash(flobjid) {
	//if (!$.browser.msie) 
		$('#'+flobjid+' embed').blur();
	//else $('#'+flobjid+' embed').focus();
}
function flashCallBlur() { 
	return !$.browser.msie;
}


//----------------------------
// BANNER-STUFF
//----------------------------

generateBannerCode = function (f, rw) {
	var banner = $('#onlinebanner input:checked').attr('value');
	var code = "";
	if (banner) {
		var size = banner.split(/_/)[0].split(/x/);
		code = 	'<a href="http://www.machsmit.de/jumpin/banner_' + banner +'" target="_blank">';
		code += '<img src="' + rw + 'media/banner/' + banner + '.jpg" ';
		code += 'width="' + size[0] + '" ';
		code += 'height="' + size[1] + '" ';
		code += 'style="border: 0;" ';
		code += 'alt="mach\'s mit" />';
		code += '</a>';

		if (tracking.nettracker) {
			ntptEventTag('lc='+escape(tracking.nt_prefix+'kampagne/medien/Onlinebanner/codegenerieren'));
		}
	};
	f.bannercode.value = code;
	return false;
}


//----------------------------
// ARIA-STUFF NEW
//----------------------------

/* jQuery-version */
addAriaSupport = function () {
	var ariaIdent = "aria";
	var ariaPrefx = "aria-";
	var ariaNoPfx = ["role"];
	$("."+ariaIdent).each(function (i, elem) {
		jQuery.each($(this).attr("class").split(/ /), function(){
			var aAtt = this.split(/--/);
			if (aAtt[1]) $(elem).attr((jQuery.inArray(aAtt[0], ariaNoPfx)>=0?"":ariaPrefx)+aAtt[0],aAtt[1]);
		});
	});
}

/* prototype-version */
addAriaSupportP = function () {
	var ariaIdent = "aria";
	var ariaPrefx = "aria-";
	var ariaNoPfx = ["role"];
	$$("."+ariaIdent).collect(function(e) {
		e.classNames().toArray().collect(function(c) {
			var aAtt = c.split(/--/);
			if (aAtt[1]) e.writeAttribute((ariaNoPfx.indexOf(aAtt[0])>=0?"":ariaPrefx)+aAtt[0], aAtt[1]);
		});
	});
}

$(function(){
	addAriaSupport();
});


/*
$(function(){
	$('form .aria-required').attr("aria-required","true");
	$('form .aria-invalid').attr("aria-invalid","true");
	var ariaRoles = new Array('banner', 'navigation', 'main', 'complementary', 'contentinfo');
	$(".aria-role").each(function(){
		for (a=0;a<ariaRoles.length;a++) {
			if ($(this).hasClass("aria-role-"+ariaRoles[a])) {
				$(this).attr("role",ariaRoles[a]);
			}
		}
	});

});
*/



//----------------------------
// ARIA-STUFF OLD
//----------------------------
/*
function getAttributeValue(o,a) {
	if (o.getAttribute(a)) {
		return o.getAttribute(a);
	} else if (o.attributes[a]) {
		return o.attributes[a].value;
	}
}
function setAttributeValue(o,a,v) {
	if (o.setAttribute(a,v,0)) {
		o.setAttribute(a,v,0);
	} else {
		o.attributes[a].value=v;
	}
}

function ariaSetRequired() {
	var allLabels = otn("label");
	for (l=0; l<allLabels.length; l++) {
		var labelText = allLabels[l].innerHTML;
		if (labelText.indexOf('Pflichtfeld')>0) {
			var fieldId = getAttributeValue(allLabels[l], "for");
			//alert(fieldId);
			if (fieldId) setAttributeValue(oid(fieldId), "aria-required", "true");
		}
	}
}
*/

//----------------------------
// main init/deinit
//----------------------------
/*
init = function() {
	//ariaSetRequired();
}
deinit = function() {
}
window.onunload=deinit;
window.onload=init;
*/

