(function ($) {
	$.fn.lightBox = function (settings) {
		settings = jQuery.extend({
			overlayBgColor: '#000',
			overlayOpacity: 0.8,
			fixedNavigation: false,
			imageLoading: 'img/lightbox/lightbox-ico-loading.gif',
			imageBtnPrev: '', //siehe element.css
			imageBtnNext: '', //siehe element.css
			imageBtnClose: '', //siehe element.css
			imageBlank: 'img/lightbox/lightbox-blank.gif',
			containerBorderSize: 10,
			containerResizeSpeed: 400,
			txtImage: 'Bild',
			txtOf: 'von',
			keyToClose: 'c',
			keyToPrev: 'p',
			keyToNext: 'n',
			imageArray: [],
			activeImage: 0
		}, settings);
		var jQueryMatchedObj = this;

		function _initialize() {
			_start(this, jQueryMatchedObj);
			return false;
		}

		function _start(objClicked, jQueryMatchedObj) {
			$('embed, object, select').css({
				'visibility': 'hidden'
			});
			_set_interface();
			settings.imageArray.length = 0;
			settings.activeImage = 0;
			if (jQueryMatchedObj.length == 1) {
				settings.imageArray.push(new Array(objClicked.getAttribute('href'), objClicked.getAttribute('title')));
			} else {
				for (var i = 0; i < jQueryMatchedObj.length; i++) {
					settings.imageArray.push(new Array(jQueryMatchedObj[i].getAttribute('href'), jQueryMatchedObj[i].getAttribute('title')));
				}
			}
			while (settings.imageArray[settings.activeImage][0] != objClicked.getAttribute('href')) {
				settings.activeImage++;
			}
			_set_image_to_view();
		}

		function _set_interface() {
			//$('body').append('<div id="jquery-overlay"></div><div id="jquery-lightbox"><div id="lightbox-container-image-box"><div id="lightbox-container-image"><img id="lightbox-image"><div style="" id="lightbox-nav"><a href="#" id="lightbox-nav-btnPrev"></a><a href="#" id="lightbox-nav-btnNext"></a></div><div id="lightbox-loading"><a href="#" id="lightbox-loading-link"></a></div></div></div><div id="lightbox-container-image-data-box"><div id="lightbox-container-image-data"><div id="lightbox-image-details"><span id="lightbox-image-details-currentNumber"></span><span id="lightbox-image-details-caption"></span></div><div id="lightbox-secNav"><a href="#" id="lightbox-secNav-btnPrev"></a><a href="#" id="lightbox-secNav-btnNext"></a><a href="#" id="lightbox-secNav-btnClose"></a></div></div></div></div>');
			$('body').append('<div id="jquery-overlay"></div><div id="jquery-lightbox"><div id="lightbox-container-image-box"><div id="lightbox-container-image"><img id="lightbox-image"><div style="" id="lightbox-nav"><a href="#" id="lightbox-nav-btnPrev"></a><a href="#" id="lightbox-nav-btnNext"></a></div><div id="lightbox-loading"><a href="#" id="lightbox-loading-link"></a></div></div></div><div id="lightbox-container-image-data-box"><div id="lightbox-container-image-data"><div id="lightbox-image-details"><span id="lightbox-image-details-currentNumber"></span><span id="lightbox-image-details-caption"></span></div><div id="lightbox-secNav"><a href="#" id="lightbox-secNav-btnPrev"></a><a href="#" id="lightbox-secNav-btnNext"></a><a href="#" id="lightbox-secNav-btnClose"></a></div></div></div></div>');
			var arrPageSizes = ___getPageSize();
			$('#jquery-overlay').css({
				backgroundColor: settings.overlayBgColor,
				opacity: settings.overlayOpacity,
				width: arrPageSizes[0],
				height: arrPageSizes[1]
			}).fadeIn();
			var arrPageScroll = ___getPageScroll();
			$('#jquery-lightbox').css({
				top: arrPageScroll[1] + (arrPageSizes[3] / 10),
				left: arrPageScroll[0]
			}).show();
			$('#jquery-overlay,#jquery-lightbox').click(function () {
				_finish();
			});
			$('#lightbox-loading-link,#lightbox-secNav-btnClose').click(function () {
				_finish();
				return false;
			});
			$(window).resize(function () {
				var arrPageSizes = ___getPageSize();
				$('#jquery-overlay').css({
					width: arrPageSizes[0],
					height: arrPageSizes[1]
				});
				var arrPageScroll = ___getPageScroll();
				$('#jquery-lightbox').css({
					top: arrPageScroll[1] + (arrPageSizes[3] / 10),
					left: arrPageScroll[0]
				});
			});
		}

		function _set_image_to_view() {
			$('#lightbox-loading').show();
			if (settings.fixedNavigation) {
				$('#lightbox-image,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide();
			} else {
				$('#lightbox-image,#lightbox-nav,#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber,#lightbox-secNav-btnNext,#lightbox-secNav-btnPrev').hide();
			}
			var objImagePreloader = new Image();
			objImagePreloader.onload = function () {
				$('#lightbox-image').attr('src', settings.imageArray[settings.activeImage][0]);
				_resize_container_image_box(objImagePreloader.width, objImagePreloader.height);
				objImagePreloader.onload = function () {};
			};
			objImagePreloader.src = settings.imageArray[settings.activeImage][0];
		};

		function _resize_container_image_box(intImageWidth, intImageHeight) {
			var intCurrentWidth = $('#lightbox-container-image-box').width();
			var intCurrentHeight = $('#lightbox-container-image-box').height();
			var intWidth = (intImageWidth + (settings.containerBorderSize * 2));
			var intHeight = (intImageHeight + (settings.containerBorderSize * 2));
			var intDiffW = intCurrentWidth - intWidth;
			var intDiffH = intCurrentHeight - intHeight;
			$('#lightbox-container-image-box').animate({
				width: intWidth,
				height: intHeight
			}, settings.containerResizeSpeed, function () {
				_show_image();
			});
			if ((intDiffW == 0) && (intDiffH == 0)) {
				if ($.browser.msie) {
					___pause(250);
				} else {
					___pause(100);
				}
			}
			$('#lightbox-container-image-data-box').css({
				width: intImageWidth
			});
			$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-secNav-btnPrev,#lightbox-secNav-btnNext').css({
				height: intImageHeight + (settings.containerBorderSize * 2)
			});
		};

		function _show_image() {
			$('#lightbox-loading').hide();
			$('#lightbox-image').fadeIn(function () {
				_show_image_data();
				_set_navigation();
			});
			_preload_neighbor_images();
		};

		function _show_image_data() {
			$('#lightbox-container-image-data-box').slideDown('fast');
			$('#lightbox-image-details-caption').hide();
			if (settings.imageArray[settings.activeImage][1]) {
				$('#lightbox-image-details-caption').html(settings.imageArray[settings.activeImage][1]).show();
			}
			if (settings.imageArray.length > 1) {
				$('#lightbox-image-details-currentNumber').html(settings.txtImage + ' ' + (settings.activeImage + 1) + ' ' + settings.txtOf + ' ' + settings.imageArray.length).show();
			}
		}

		function _set_navigation() {
			$('#lightbox-nav').show();
			$('#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-secNav-btnPrev,#lightbox-secNav-btnNext').css({
				'background': 'transparent url(' + settings.imageBlank + ') no-repeat'
			});
			$('#lightbox-secNav-btnClose').css({
				'background': 'transparent url(' + settings.imageBtnClose + ') no-repeat'
			});
			if (settings.activeImage != 0) {
				if (settings.fixedNavigation) {
					$('#lightbox-nav-btnPrev,#lightbox-secNav-btnPrev').css({
						'background': 'url(' + settings.imageBtnPrev + ') left 15% no-repeat'
					}).unbind().bind('click', function () {
						settings.activeImage = settings.activeImage - 1;
						_set_image_to_view();
						return false;
					});
				} else {
					$('#lightbox-nav-btnPrev,#lightbox-secNav-btnPrev').unbind().hover(function () {
						$(this).css({
							'background': 'url(' + settings.imageBtnPrev + ') left 15% no-repeat'
						});
					}, function () {
						$(this).css({
							'background': 'transparent url(' + settings.imageBlank + ') no-repeat'
						});
					}).show().bind('click', function () {
						settings.activeImage = settings.activeImage - 1;
						_set_image_to_view();
						return false;
					});
				}
			}
			if (settings.activeImage != (settings.imageArray.length - 1)) {
				if (settings.fixedNavigation) {
					$('#lightbox-nav-btnNext,#lightbox-secNav-btnNext').css({
						'background': 'url(' + settings.imageBtnNext + ') right 15% no-repeat'
					}).unbind().bind('click', function () {
						settings.activeImage = settings.activeImage + 1;
						_set_image_to_view();
						return false;
					});
				} else {
					$('#lightbox-nav-btnNext,#lightbox-secNav-btnNext').unbind().hover(function () {
						$(this).css({
							'background': 'url(' + settings.imageBtnNext + ') right 15% no-repeat'
						});
					}, function () {
						$(this).css({
							'background': 'transparent url(' + settings.imageBlank + ') no-repeat'
						});
					}).show().bind('click', function () {
						settings.activeImage = settings.activeImage + 1;
						_set_image_to_view();
						return false;
					});
				}
			}
			_enable_keyboard_navigation();
		}

		function _enable_keyboard_navigation() {
			$(document).keydown(function (objEvent) {
				_keyboard_action(objEvent);
			});
		}

		function _disable_keyboard_navigation() {
			$(document).unbind();
		}

		function _keyboard_action(objEvent) {
			if (objEvent == null) {
				keycode = event.keyCode;
				escapeKey = 27;
			} else {
				keycode = objEvent.keyCode;
				escapeKey = objEvent.DOM_VK_ESCAPE;
			}
			key = String.fromCharCode(keycode).toLowerCase();
			if ((key == settings.keyToClose) || (key == 'x') || (keycode == escapeKey)) {
				_finish();
			}
			if ((key == settings.keyToPrev) || (keycode == 37)) {
				if (settings.activeImage != 0) {
					settings.activeImage = settings.activeImage - 1;
					_set_image_to_view();
					_disable_keyboard_navigation();
				}
			}
			if ((key == settings.keyToNext) || (keycode == 39)) {
				if (settings.activeImage != (settings.imageArray.length - 1)) {
					settings.activeImage = settings.activeImage + 1;
					_set_image_to_view();
					_disable_keyboard_navigation();
				}
			}
		}

		function _preload_neighbor_images() {
			if ((settings.imageArray.length - 1) > settings.activeImage) {
				objNext = new Image();
				objNext.src = settings.imageArray[settings.activeImage + 1][0];
			}
			if (settings.activeImage > 0) {
				objPrev = new Image();
				objPrev.src = settings.imageArray[settings.activeImage - 1][0];
			}
		}

		function _finish() {
			$('#jquery-lightbox').remove();
			$('#jquery-overlay').fadeOut(function () {
				$('#jquery-overlay').remove();
			});
			$('embed, object, select').css({
				'visibility': 'visible'
			});
		}

		function ___getPageSize() {
			var xScroll, yScroll;
			if (window.innerHeight && window.scrollMaxY) {
				xScroll = window.innerWidth + window.scrollMaxX;
				yScroll = window.innerHeight + window.scrollMaxY;
			} else if (document.body.scrollHeight > document.body.offsetHeight) {
				xScroll = document.body.scrollWidth;
				yScroll = document.body.scrollHeight;
			} else {
				xScroll = document.body.offsetWidth;
				yScroll = document.body.offsetHeight;
			}
			var windowWidth, windowHeight;
			if (self.innerHeight) {
				if (document.documentElement.clientWidth) {
					windowWidth = document.documentElement.clientWidth;
				} else {
					windowWidth = self.innerWidth;
				}
				windowHeight = self.innerHeight;
			} else if (document.documentElement && document.documentElement.clientHeight) {
				windowWidth = document.documentElement.clientWidth;
				windowHeight = document.documentElement.clientHeight;
			} else if (document.body) {
				windowWidth = document.body.clientWidth;
				windowHeight = document.body.clientHeight;
			}
			if (yScroll < windowHeight) {
				pageHeight = windowHeight;
			} else {
				pageHeight = yScroll;
			}
			if (xScroll < windowWidth) {
				pageWidth = xScroll;
			} else {
				pageWidth = windowWidth;
			}
			arrayPageSize = new Array(pageWidth, pageHeight, windowWidth, windowHeight);
			return arrayPageSize;
		};

		function ___getPageScroll() {
			var xScroll, yScroll;
			if (self.pageYOffset) {
				yScroll = self.pageYOffset;
				xScroll = self.pageXOffset;
			} else if (document.documentElement && document.documentElement.scrollTop) {
				yScroll = document.documentElement.scrollTop;
				xScroll = document.documentElement.scrollLeft;
			} else if (document.body) {
				yScroll = document.body.scrollTop;
				xScroll = document.body.scrollLeft;
			}
			arrayPageScroll = new Array(xScroll, yScroll);
			return arrayPageScroll;
		};

		function ___pause(ms) {
			var date = new Date();
			curDate = null;
			do {
				var curDate = new Date();
			}
			while (curDate - date < ms);
		};
		return this.unbind('click').click(_initialize);
	};
	$.fn.mouseoutDelay = function () {
		var delay_ms = arguments[0] || 2000;
		var delay_el = $(this).filter('.hover') || false;
		var delay_to = false;
		$(this).each(function (index, el) {
			var self = this;
			this.element = $(el);
			this.element.hover(function (ev) {
				ev.preventDefault();
				if (delay_to) clearTimeout(delay_to);
				if (delay_el) delay_el.removeClass('hover');
				$(this).addClass('hover');
			}, function (ev) {
				ev.preventDefault();
				delay_el = $(this);
				delay_to = setTimeout(function () {
					delay_el.removeClass('hover');
				}, delay_ms)
			});
		});
		return this;
	}
	$.fn.dropdown = function (opts) {
		$(this).each(function (index, el) {
			var self = this;
			this.timeout = false;
			this.element = $(el);
			this.options = jQuery.extend({
				'select': '.dropdown-select .selector',
				'options': '.dropdown-options',
				'animation': 'slideUp',
				'timeout': 1250,
				'duration': 250
			}, opts || {});
			this.element.find(this.options.select).click(function (ev) {
				ev.preventDefault();
				self.element.find(self.options.options).toggle();
			});
			this.element.find(this.options.options).hover(function () {
				if (self.timeout) window.clearTimeout(self.timeout);
			}, function () {
				self.timeout = window.setTimeout(function () {
					self.element.find(self.options.options)[self.options.animation](self.options.duration);
				}, self.options.timeout);
			});
		});
		return this;
	}
	$.fn.slider = function (opts) {
		$(this).each(function (index, el) {
			var self = this;
			this.idle = false;
			this.current = 0;
			this.element = $(el);
			this.options = jQuery.extend({
				'container': '.slider-inner',
				'item': '.item',
				'next': '.next',
				'prev': '.prev',
				'nums': '.number',
				'offset': 1,
				'onstart': function () {},
				'onstop': function () {}
			}, opts || {});
			this.items = this.element.find(self.options.container + ' ' + this.options.item).each(function (i, el) {
				$(el).addClass('item-' + i);
			});
			this.activateRelated = function () {
				this.element.find(this.options.nums).removeClass('active').eq(self.current).addClass('active');
			}
			this.scrollTo = function (offset) {
				if (!self.idle) {
					self.idle = true;
					self.options.onstart(self);
					self.activateRelated();
					self.element.find(self.options.container).animate({
						'scrollLeft': offset
					}, self.options.duration, function () {
						self.idle = false;
						self.options.onstop(self);
					});
				}
			}
			this.getOffset = function (index) {
				return self.element.find(self.options.container).scrollLeft() + $(self.items[index ? index : self.current]).position().left
			}
			this.scrollNext = function () {
				self.current = (self.current + self.options.offset >= self.items.size()) ? 0 : self.current + self.options.offset;
				self.scrollTo(self.getOffset());
			}
			this.scrollPrev = function () {
				self.current = (self.current - self.options.offset < 0) ? self.items.size() - self.options.offset : self.current - self.options.offset;
				self.scrollTo(self.getOffset());
			}
			this.element.find(this.options.next).click(function (ev) {
				ev.preventDefault();
				self.scrollNext();
			});
			this.element.find(this.options.prev).click(function (ev) {
				ev.preventDefault();
				self.scrollPrev();
			});
			this.element.find(this.options.nums).each(function (index, el) {
				$(el).addClass('number-' + index).removeClass('active').click(function (ev) {
					ev.preventDefault();
					self.current = index;
					self.scrollTo(self.getOffset());
				})
			});
			this.activateRelated();
		});
		return this;
	}
	$.fn.suggest = function (url, opts) {
		var url = url || location.href.replace(/(^\/#\/|^\/#|^#\/|^#|^\/)/, '');
		$(this).each(function (index, el) {
			var self = this;
			this.element = $(el);
			this.options = jQuery.extend({
				'search': 'input.searchterm',
				'result': 'ul.suggestions',
				'closer': 'li.close',
				'minLength': 3,
				'maxRows': 5
			}, opts || {});
			this.closer = this.options.closer ? this.element.find(this.options.closer).detach() : false;
			this.element.find(this.options.search).autocomplete({
				'source': url + '?q=' + self.element.find(self.options.search).val(),
				'minLength': self.options.minLength,
				'search': function (ev, ui) {
					self.element.find(self.options.result).show();
					return true;
				},
				'open': function (ev, ui) {
					self.element.find(self.options.result + ' li a').attr('src', 'javascript: void(0);').click(function (ev) {
						ev.preventDefault();
						self.element.find(self.options.search).val($(this).html());
						self.element.submit();
					});
					if (self.closer) self.closer.appendTo(self.element.find(self.options.result)).click(function (ev) {
						ev.preventDefault();
						self.element.find(self.options.result).slideUp(300);
					});
				}
			});
			this.element.find(this.options.search).data('autocomplete').menu.element.remove();
			this.element.find(this.options.search).data('autocomplete').menu.element = this.element.find(this.options.result);
			this.element.find(this.options.closer).click(function (ev) {
				ev.preventDefault();
				self.element.find(self.options.result).slideUp(300);
			});
		});
		return this;
	}
	$.fn.tabs = function (opts) {
		$(this).each(function (index, el) {
			var self = this;
			this.previous = 0;
			this.current = 0;
			this.element = $(el);
			this.options = jQuery.extend({
				'handlers': '.tab-list li',
				'contents': '.tab-content',
				'active': 'active',
				'preload': true,
				'direction': false,
				'leftside': 'left-border',
				'rightside': 'right-border',
				'leftsideactive': 'left-active',
				'rightsideactive': 'right-active',
				'current': false,
				'ajax': false,
				'adjustHeight': false,
				'callback': function () {}
			}, opts || {});
			this.setDirections = function () {
				self.handlers.removeClass(self.options.leftside + ' ' + self.options.rightside + ' ' + self.options.leftsideactive + ' ' + self.options.rightsideactive);
				self.handlers.filter(':lt(' + self.current + ')').addClass(self.options.leftside);
				self.handlers.filter(':gt(' + self.current + ')').addClass(self.options.rightside);
				switch (self.options.direction) {
				case 'ltr':
					if (self.current == 0) self.handlers.eq(self.current).addClass(self.options.leftsideactive);
					else self.handlers.eq(self.current).addClass(self.options.rightsideactive);
					break;
				case 'rtl':
					if (self.current == self.handlers.length - 1) self.handlers.eq(self.current).addClass(self.options.rightsideactive);
					else self.handlers.eq(self.current).addClass(self.options.leftsideactive);
					break;
				default:
					return;
				}
			}
			this.load = function (num) {
				var num = num || self.current;
				var lnk = self.handlers.eq(num).is('a') ? self.handlers.eq(num) : self.handlers.eq(num).find('a:first');
				var url = lnk.attr('rel') ? lnk.attr('rel') : lnk.attr('href');
				var height = self.options.adjustHeight ? (self.contents.eq(num).css('height') || '0px') : '0px';
				height = parseInt(height.replace(/px/g, '')) > 0 ? height : 'auto';
				self.contents.eq(num).addClass('loading').css('height', self.contents.eq(self.previous).height() + 'px').html('').load(self.options.ajax, {
					'tab': url
				}, function (res) {
					self.contents.eq(num).removeClass('loading').css('height', height);
					self.options.callback(self);
				});
			}
			this.activate = function (num) {
				self.handlers.removeClass(self.options.active);
				self.handlers.eq(num).addClass(self.options.active);
				self.contents.hide();
				self.contents.eq(num).show();
				self.previous = self.current;
				self.current = num;
				if (self.options.direction) self.setDirections();
				if (self.options.ajax) self.load(num);
				else self.options.callback(self);
			}
			this.activateHandler = function (ev) {
				ev.preventDefault();
				self.activate($(this).data('num'));
			}
			this.handlers = $.isFunction(this.options.handlers) ? this.options.handlers(this) : this.element.find(this.options.handlers).each(function (index) {
				$(this).addClass('num-' + index).data({
					'num': index
				});
			}).click(this.activateHandler);
			this.contents = $.isFunction(this.options.contents) ? this.options.contents(this) : this.element.find(this.options.contents).each(function (index) {
				$(this).addClass('num-' + index).data({
					'num': index
				});
			});
			if (this.options.preload && this.options.ajax) {
				this.current = this.handlers.filter('.' + this.options.active + ':first').data('num') || 0;
				this.activate(this.options.current ? this.options.current : this.current);
			}
			if (!this.options.ajax) {
				this.current = this.contents.index(this.contents.filter(':visible')) || 0;
				this.activate(this.options.current ? this.options.current : this.current);
			}
		});
		return this;
	}
	$.fn.feed = function (opts) {
		$(this).each(function (index, el) {
			var self = this;
			this.element = $(el);
			this.timeout = 0;
			this.options = jQuery.extend({
				'url': false,
				'refresh': false,
				'autoplay': false,
				'maxitems': 5
			}, opts || {});
			this.read = function (clbk) {
				self.element.load(self.options.url, clbk);
			}
			this.update = function () {
				if (self.timeout) clearTimeout(self.timeout);
				self.timeout = setTimeout(function () {
					self.read(self.update);
				}, self.options.autoplay);
			}
			if (this.options.autoplay) this.update();
			if (this.options.refresh) this.options.refresh.click(function (ev) {
				ev.preventDefault();
				if (self.options.autoplay) self.update();
				self.read();
			});
		});
	}
	$.fn.inputDefault = function () {
		$(this).each(function (index, el) {
			var self = this;
			this.element = $(el);
			this.element.data({
				'default': this.element.val()
			});
			this.element.focus(function () {
				if ($(this).val() == $(this).data('default')) $(this).val('');
			});
			this.element.blur(function () {
				if (/^\s*$/.test($(this).val() || ' ')) $(this).val($(this).data('default'));
			});
		});
		return this;
	}
	$.fn.toggleSearch = function (opts) {
		$(this).each(function (index, el) {
			var self = this;
			this.element = $(el);
			this.options = jQuery.extend({
				'handle': '.handle',
				'target': '.target',
				'onfinish': function () {}
			}, opts || {});
			this.element.find(this.options.handle).click(function (ev) {
				ev.preventDefault();
				self.element.find(self.options.target).toggle();
				self.options.onfinish(self);
			});
		});
		return this;
	}
	$.fn.selectView = function (opts) {
		$(this).each(function (index, el) {
			var self = this;
			this.current;
			this.element = $(el);
			this.options = jQuery.extend({
				'handle': '.select',
				'target': '.target',
				'prefix': 'area-',
				'current': false,
				'callback': function () {}
			}, opts || {});
			this.activate = function (num) {
				self.element.find(self.options.handle + ' option').map(function () {
					self.element.removeClass(self.options.prefix + $(this).val());
				});
				self.element.addClass(self.options.prefix + $(this).find('option:selected').val());
				self.targets.hide().eq(num).show();
				self.current = num;
				self.options.callback(self);
			}
			this.element.find(this.options.handle).addClass('selectView').change(function (ev) {
				ev.preventDefault();
				self.activate(self.element.find(self.options.handle + ' option').index($(this).find('option:selected')));
			});
			this.targets = this.element.find(this.options.target).each(function (index) {
				$(this).addClass('num-' + index).data({
					'num': index
				});
			});
			this.current = this.targets.index(this.targets.filter(':visible'));
			this.activate(!isNaN(parseInt(this.options.current)) ? this.options.current : $(this).find('option:selected').index());
		});
		return this;
	}
	$.fn.radioControlled = function (target) {
		$(this).each(function (index, el) {
			var self = this;
			this.element = $(el);
			//this.target = $(target);
			this.element.data('target', $(target));
			if (!this.element.data('target').data('rely')) this.element.data('target').data('rely', this.element);
			else this.element.data('target').data('rely', this.element.data('target').data('rely').add(this.element));
			this.element.data('target').unbind('change').addClass('radioControlled').change(function () {
				$('input:radio[name=' + $(this).attr('name') + ']:not(:checked)').data('rely').attr('disabled', 'disabled');
				$(this).data('rely').removeAttr('disabled', 'disabled');
			});
			this.element.change(function () {
				$(this).data('target').attr('checked', 'checked');
			});
		});
		if ($('input:radio[name=' + $(target).attr('name') + ']:not(:checked)').data('rely')) $('input:radio[name=' + $(target).attr('name') + ']:not(:checked)').data('rely').attr('disabled', 'disabled');
		return this;
	}
	$.Filter = $([]);
	$.fn.registerFilter = function (filterParent) {
		if ($.Filter = $.Filter.add($(this).data('filterParent', filterParent))) return $(this);
		else return false;
		return this;
	}
	$.fn.unregisterFilter = function (clbk) {
		var clbk = clbk ||
		function (f) {
			return f;
		};
		if ($.Filter = clbk($.Filter).remove($(this))) return $(this);
		else return false;
	}
	$.fn.filterReset = function (clbk) {
		var clbk = clbk ||
		function (f) {
			return f;
		};
		$(this).click(function (ev) {
			ev.preventDefault();
			clbk($.Filter).each(function (i, f) {
				if ($(f).data('filterParent')) $(f).data('filterParent').count = 1;
			}).remove();
		});
		return this;
	}
	$.fn.filterAdd = function (opts) {
		$(this).each(function (index, el) {
			var self = this;
			this.count = 1;
			this.element = $(el);
			this.getSource = function (handle) {
				return handle.parent();
			}
			this.order = function (handle) {
				var ec = self.options.getSource(handle).parent().children('.filter-set').removeClass('filter-set-first filter-set-last');
				ec.filter(':first').addClass('filter-set-first');
				ec.filter(':last').addClass('filter-set-last');
			}
			this.options = jQuery.extend({
				'handleAdd': 'a.filter.add',
				'handleRem': 'a.filter.remove',
				'source': ':parent',
				'limit': false,
				'getSource': self.getSource,
				'onunregister': function (f) {
					return f;
				}
			}, opts || {});
			this.element.find(this.options.handleAdd).click(function (ev) {
				ev.preventDefault();
				if (!self.options.limit || self.count < self.options.limit) {
					var el = self.options.getSource($(this)).addClass('filter-set');
					el.parent().append(el.clone(true)).children().last().registerFilter(self);
					self.count++;
					self.order($(this));
				}
			});
			this.element.find(this.options.handleRem).click(function (ev) {
				ev.preventDefault();
				if (self.count > 1) {
					$(this).parent().unregisterFilter(self.options.onunregister).remove();
					self.count--;
					self.order($(this));
				}
			});
			this.order(this.element.find(this.options.handleAdd));
		});
		return this;
	}
	$.fn.filterRemove = function (opts) {
		$(this).each(function (index, el) {
			var self = this;
			this.element = $(el);
			this.element.unregisterFilter().remove();
		});
		return this;
	}
	$.fn.tooltip = function (opts) {
		$(this).each(function (index, el) {
			var self = this;
			this.element = $(el);
			this.options = jQuery.extend({
				'pattern': '',
				'speed': 500,
				'delay': 500,
				'offsetX': function (obj) {
					return obj.tooltip.width();
				},
				'offsetY': function (obj) {
					return obj.tooltip.height();
				}
			}, opts || {});
			this.tooltip = $(this.options.pattern.replace(/\%s/g, this.element.attr('title'))).appendTo($('body'));
			this.element.removeAttr('title');
			this.element.mouseenter(function (ev) {
				ev.preventDefault();
				self.tooltip.delay(self.options.delay).fadeIn(self.options.speed);
				$('body').mousemove(function (ev) {
					self.tooltip.css({
						'left': ev.pageX - self.options.offsetX(self),
						'top': ev.pageY - self.options.offsetY(self)
					});
				});
			});
			this.element.mouseleave(function (ev) {
				ev.preventDefault();
				if (self.tooltip.is(':visible') || self.tooltip.is(':animated')) self.tooltip.stop(true, true).fadeOut(self.options.speed);
				else self.tooltip.stop(true, true);
				$('body').unbind('mousemove');
			});
			var destrFns = this.element.data('destroy') ? this.element.data('destroy') : [];
			if (destrFns[destrFns.length] = function () {
				self.tooltip.fadeOut(self.options.speed);
			}) this.element.data('destroy', destrFns);
		});
		return this;
	}
	$.fn.destroy = function () {
		$(this).each(function (index, el) {
			if ($(el).data('destroy')) for (i = 0; i < $(el).data('destroy').length; ++i) $(el).data('destroy')[i]();
		});
		return this;
	}
	$.fn.replaceSelect = function (fn) {
		$(this).each(function (index, el) {
			var self = this;
			this.element = $(el);
			this.callback = fn || $.noop;
			this.prepare = function () {
				var opt = this.element.find('option');
				var inp = '<div class="select-container">';
				inp += '<input type="hidden" name="' + this.element.attr('name') + '" value="' + this.element.val() + '" />';
				inp += '<div class="dropdown-container clearfix">';
				inp += '<div class="dropdown-select">';
				inp += '<a class="selector" href="#">' + opt.filter(':selected').text() + '</a>';
				inp += '</div>';
				inp += '<ul class="dropdown-options hide">';
				opt.each(function (i, o) {
					var c = '';
					if (i == 0) c += ' first';
					if (i == opt.length - 1) c += ' last';
					inp += '<li class="' + c + '"><a href="javascript: void(0);" rel="' + $(o).val() + '">' + $(o).text() + '&#160;</a></li>';
				});
				inp += '</ul>';
				inp += '</div>';
				inp += '</div>';
				return $(inp);
			}
			this.element = this.prepare().replaceAll(this.element).dropdown();
			this.element.find('li a').click(function () {
				self.element.find('input:hidden').val($(this).attr('val'));
				self.element.find('a.selector').text($(this).text());
				$(this).parents('.dropdown-options').hide();
				if ($(this).parents('li.select').attr('id') == 'enquiry_country_id_input') {
					if ($(this).attr('val') != 132) {
						$('#enquiry_zip_input, #enquiry_city_input').removeClass('required').find('abbr[title=required]').remove()
					}
					else {
						$('#enquiry_zip_input, #enquiry_city_input').addClass('required').find('label').append('<abbr title="required">*</abbr>')
					}
				}
				self.callback(self);
			});
		});
	}

	$.fn.dcvmap = function(pos) {
		var css = 'el-'+pos;
		var pos = pos * 260;
		$('#map-img').css('background-position', -pos);
		$('#de-map area').mouseout(function() {
			$('#map-img').css('background-position', '0');
			$('.de-map ul li a').removeClass('hover');
		});
		$('.de-map ul li').mouseout(function() {
			$('#map-img').css('background-position', '0')
		});
		$('.de-map ul li a').removeClass('hover');	
		$('.de-map ul li a.'+css).addClass('hover');
		$('.de-map ul li a').mouseout(function() {
			$(this).removeClass('hover')
		});
	}    

	$.fn.itemfilter = function(id) {
		if(id != '') {
			$('#map-list .item').hide();
			$('#map-list .'+id).show();
			$('#map-list .show_all').show();
			$('.map-links a').removeClass('hover');
			$('.map-links .'+id).addClass('hover');
		} else {
			$('#map-list .item').show();
			$('#map-list .show_all').hide();
			$('.map-links a').removeClass('hover');
		}
		
	}    
})(jQuery);
$(document).ready(function () {

	$('#li-print').show();
	$('#li-favorite').show();
	$('#social-function').show();

	$("#footer-bookmark").jBrowserBookmark();
	$("#social-bookmark").jBrowserBookmark();

	$('a[rel=lightbox]').lightBox();
	$('#nav').css({ 'height': $('.level_1 li.active ul.level_2').height() + 30 + 'px' });
	if (!typeof document.body.style.maxHeight === "undefined")
		$('#nav ul li.flyout').mouseoutDelay(500);
	$('.dropdown-container').dropdown();
	$('.slider:not(.gallery-slider,.gallery-slider-full,.gallery-slider-400), .shop-teaser').slider({
		'container': '.slider-container'
	});
	$('.gallery-slider').slider({
		'container': '.slider-container',
		'item': '.group'
	});
	$('.gallery-slider-full').slider({
		'container': '.slider-container',
		'item': '.group'
	});
	$('.gallery-slider-400').slider({
		'container': '.slider-container',
		'item': '.group'
	});
	$('textarea, input:text:not(:hidden)').inputDefault();
	if ($.fn.accordion) $('.accordion').accordion({
		'autoHeight': false,
		'collapsible': true,
		'active': false
	});
	$('.tab-folder:not(#MaSp_001)').tabs({
		'direction': 'center'
	});
//	$('#MaSp_001').tabs({
//		'ajax': 'js.tabs.php',
//		'active': 'active',
//		'preload': false,
//		'leftsideactive': 'active',
//		'rightsideactive': 'active',
//		'direction': 'ltr',
//		'callback': function (obj) {
//			if (obj.contents.eq(obj.current).attr('id') == 'MaSp_001_3') obj.contents.eq(obj.current).tabs({
//				'ajax': 'js.tabs.php',
//				'active': 'active',
//				'preload': false,
//				'handlers': '.glossar-alphabet li',
//				'contents': '.glossar-content'
//			});
//		}
//	});
	/*
	$('.glossar select').replaceSelect(function (el) {});
	$('.glossar').tabs({
	'ajax': 'js.tabs.php',
	'active': 'active',
	'preload': false,
	'handlers': '.dropdown-options li',
	'contents': '.tabs-sub',
	'adjustHeight': true,
	'callback': function (obj) {
	obj.contents.eq(obj.current).tabs({
	'ajax': 'js.tabs.php',
	'active': 'active',
	'preload': true,
	'handlers': '.glossar-list li',
	'contents': function (obj) {
	return obj.element.parent().parent().find('.glossar-content');
	}
	});
	}
	});
	$('.glossar > div').tabs({
	'ajax': 'js.tabs.php',
	'active': 'active',
	'preload': false,
	'handlers': '.glossar-list li',
	'contents': '.glossar-content'
	});
	
	$('#MaSp_001_3').tabs({
		'ajax': 'js.tabs.php',
		'active': 'active',
		'preload': false,
		'handlers': '.glossar-alphabet li',
		'contents': '.glossar-content'
	});
	*/
	$('.tabs-container.ltr:not(.tabs-container-ajax)').tabs({
		'handlers': '.tabs li',
		'contents': '.tabs-target-container',
		'active': 'active-tab ',
		'leftside': 'left left-ff',
		'rightside': 'right right-ff',
		'leftsideactive': 'left-active',
		'rightsideactive': 'right-active',
		'direction': 'ltr'
	});
	$('.tabs-container.rtl:not(.tabs-container-ajax)').tabs({
		'handlers': '.tabs li',
		'contents': '.tabs-target-container',
		'active': 'active-tab',
		'leftside': 'right',
		'rightside': 'left',
		'leftsideactive': 'right-active',
		'rightsideactive': 'left-active',
		'direction': 'ltr'
	});
	$('.dossier-tabs-container.ltr .tabs-sub:not(.dossier-tabs-container.ltr.ajax)').tabs({
		'handlers': '.tabs-target-subnavi li',
		'contents': '.tabs-target-container'
	});
	$('.dossier-tabs-container.ltr').tabs({
		'handlers': '.tabs li',
		'contents': '.tabs-target-subnavi',
		'active': 'active-tab ',
		'leftside': 'left left-ff',
		'rightside': 'right right-ff',
		'leftsideactive': 'left-active',
		'rightsideactive': 'right-active',
		'direction': 'ltr',
		'callback': function (obj) {
			obj.contents.eq(obj.current).find('li:first').addClass('active').click();
		}
	});
	$('.dossier-tabs-container.rtl .tabs-sub:not(.dossier-tabs-container.rtl.ajax)').tabs({
		'handlers': '.tabs-target-subnavi li',
		'contents': '.tabs-target-container'
	});
	$('.dossier-tabs-container.rtl').tabs({
		'handlers': '.tabs li',
		'contents': '.tabs-target-subnavi',
		'active': 'active-tab',
		'leftside': 'right',
		'rightside': 'left',
		'leftsideactive': 'right-active',
		'rightsideactive': 'left-active',
		'direction': 'ltr',
		'callback': function (obj) {
			obj.contents.eq(obj.current).find('li:first').addClass('active').click();
		}
	});
	/*
	$('.dossier-tabs-container.rtl.ajax .tabs-sub').tabs({
	'handlers': '.tabs-target-subnavi li',
	'contents': '.tabs-target-container',
	'ajax': 'js.tabs.php'
	});
	*/
	$('.search .search-bottom a').click(function (ev) {
		ev.preventDefault();
		$(this).parents('.search').toggleClass('closed').toggleClass('opened').find('.tabs li:first').click();
	});
	$('.search .tabs-target-container.area').selectView({
		'handle': '#select-area',
		'target': '.select-target-container',
		'current': 'selected',
		'callback': function (obj) {
			var c = obj.targets.eq(obj.current);
			if (!c.data('title')) c.data('title', c.attr('title'));
			c.removeAttr('title');
			$('.search h2').html(c.data('title'));
		}
	});
	$('.search .select-target-container.addresses > .subcolumns').selectView({
		'handle': '#sel-5-1',
		'target': '.sel-5-1-target .subcl'
	});
	$('.search .select-target-container.pressreport > .subcolumns').selectView({
		'handle': '#sel-10-1',
		'target': '.sel-10-1-target > div'
	});
	$('.search .select-target-container.projects > .subcolumns').selectView({
		'handle': '#sel-2-8-1',
		'target': '.sel-2-8-1-target'
	});
	$('.search .select-target-container.projects > .subcolumns .target-2-8-1-1').selectView({
		'handle': '#sel-2-8-3',
		'target': '.sel-2-8-3-target'
	});
	$('.search a.filter.add').tooltip({
		'pattern': '<div class="tooltip"><div class="tooltip-content">%s</div><div class="tooltip-bottom">&nbsp;</div></div>',
		'speed': 200,
		'delay': 500,
		'offsetX': function (obj) {
			return 160;
		},
		'offsetY': function (obj) {
			return obj.tooltip.height() + 5;
		}
	});
	$('.search a.filter.remove:not(:first)').tooltip({
		'pattern': '<div class="tooltip"><div class="tooltip-content">%s</div><div class="tooltip-bottom">&nbsp;</div></div>',
		'speed': 200,
		'delay': 500,
		'offsetX': function (obj) {
			return 160;
		},
		'offsetY': function (obj) {
			return obj.tooltip.height() + 5;
		}
	});
	$('.bookmark-links a').tooltip({
		'pattern': '<div class="tooltip tooltip-rtl"><div class="tooltip-content">%s</div><div class="tooltip-bottom">&nbsp;</div></div>',
		'speed': 200,
		'delay': 500,
		'offsetX': function (obj) {
			return 25;
		},
		'offsetY': function (obj) {
			return obj.tooltip.height() + 5;
		}
	});
	$('.article-functions a, a.download').tooltip({
		'pattern': '<div class="tooltip"><div class="tooltip-content">%s</div><div class="tooltip-bottom">&nbsp;</div></div>',
		'speed': 200,
		'delay': 500,
		'offsetX': function (obj) {
			return 160;
		},
		'offsetY': function (obj) {
			return obj.tooltip.height() + 5;
		}
	});
	$('#de-map area').tooltip({
		'pattern': '<div class="map-tooltip"><span>%s</span><div class="map-tooltip-right">&nbsp;</div></div>',
		'speed': 100,
		'delay': 300,
		'offsetX': function (obj) { return 5; },
		'offsetY': function (obj) { return obj.tooltip.height() + 5; }
	});
	// !!!!!!
	$('.search .filter.remove:first').filterReset(function (f) {
		var sel = $('#select-area option').index($('#select-area option:selected'));
		$('form').get(0).reset();
		$('form select.selectView, form input:radio').change();
		$('form input:radio').each(function (i, r) {
			if ($(r).data('rely')) {
				$(r).data('rely').attr('disabled', 'disabled');
				if ($(r).is(':checked'))
					$(r).data('rely').removeAttr('disabled', 'disabled');
			}
		});
		//console.log($('form input:radio').data('rely').attr('disabled', 'disabled'))
		$('#select-area option').eq(sel).attr('selected', true).parent().change();

		return f.map(function (i, filter) {
			$(filter).find('a.filter.add, a.filter.remove').destroy();
			return $(filter);
		});
	});
	$('.search .filter-set').not('.search .addresses .col-right .col-left .sel-5-1-source').each(function (i, el) {
		$(el).filterAdd({
			'limit': $(el).find('select option').size(),
			'onunregister': function (f) {
				return f.map(function (i, filter) {
					$(filter).find('a.filter.add, a.filter.remove').destroy();
					return $(filter).destroy();
				});
			}
		});
	});
	$('.search .addresses .col-right .col-left .sel-5-1-source').filterAdd({
		'getSource': function (handle) {
			return handle.parents('.subcolumns:first');
		},
		'onunregister': function (f) {
			return f.map(function (i, filter) {
				$(filter).find('a.filter.add, a.filter.remove').destroy();
				return $(filter).destroy();
			});
		}
	});
	$('.search .distance .col-left select').radioControlled('.search .distance .col-left input:radio');
	$('.search .distance .col-right select').radioControlled('.search .distance .col-right input:radio');
	$('.search .skills .col-right .first .col-right select').radioControlled('.search .skills .col-right .first .col-left input:radio');
	$('.search .skills .col-right .last .col-right select').radioControlled('.search .skills .col-right .last .col-left input:radio');
	$('.search .appointments .col-right .first .col-right select').radioControlled('.search .appointments .col-right .first .col-left input:radio');
	$('.search .appointments .col-right .last .col-right select').radioControlled('.search .appointments .col-right .last .col-left input:radio');
	$('.search .articles .col-right .first .col-right select').radioControlled('.search .articles .col-right .first .col-left input:radio');
	$('.search .articles .col-right .last .col-right select').radioControlled('.search .articles .col-right .last .col-left input:radio');
	$('.search .pressreport .col-right .first .col-right select').radioControlled('.search .pressreport .col-right .first .col-left input:radio');
	$('.search .pressreport .col-right .last .col-right select').radioControlled('.search .pressreport .col-right .last .col-left input:radio');
	$('.search .representation .col-right .first .col-right select').radioControlled('.search .representation .col-right .first .col-left input:radio');
	$('.search .representation .col-right .last .col-right select').radioControlled('.search .representation .col-right .last .col-left input:radio');
	$('.form1 select, .replace-select select').replaceSelect();

	// MarginalBox Checkboxlisten Toggle
	$('.searchtoggle .toggle-head a').click(function (ev) {
		ev.preventDefault();

		$(this).parents('.searchtoggle').toggleClass('closed').toggleClass('opened');
	});

});
