(function(){
	// main setup function, calls all other setup functions
	var setup = function() {
		setupNavigation();
		setupHeaderSlides();
		setupTeamScroll();
		setupSimpleModal();
		setupLightbox();
		setupScrollTeaser();
		setupNewItems();
		setupFaq();
		setupContactForm();
	};
	// navigation setup
	var setupNavigation = function() {
		var mainitems = $(".navigation .mainitem");
		var animates = false;
		for (var i=0; i<mainitems.length; i++) {
			mainitems[i]._over = false;
			mainitems[i]._open = false;
			var sub = $(".sub", mainitems[i])[0];
			mainitems[i]._hassubs = ($("a", sub).length > 0);
			sub.style.display = "block";
			var a = mainitems[i].getElementsByTagName("a")[0];
			var iedelta = sub.offsetWidth - a.offsetWidth;
			if (iedelta > 0) {
				a.style.paddingRight = 18 + iedelta + "px";
			}
			sub.style.width = mainitems[i].offsetWidth;
			sub.style.height = "auto";
			mainitems[i]._subheight = sub.offsetHeight - 1;
			sub.style.height = "0";
			sub.scrollTop = 10000;
		}
		var hover = function(e) {
			var mainitem = this;
			for (var i=0; i<mainitems.length; i++) {
				if (mainitems[i]._over && mainitems[i] !== mainitem) {
					mainitems[i]._over = false;
					unhovered(mainitems[i]);
				}
			}
			mainitem._over = true;
			showHighlight(mainitem);
			if (!mainitem._hassubs) return;
			mainitem._overto = window.setTimeout(function() {hovered(mainitem)}, 100);
			if (mainitem._unoverto) {
				window.clearTimeout(mainitem._unoverto);
			}
		}
		var hovered = function(mainitem) {
			if (mainitem._over) {
				showSubmenu(mainitem);
			}
		}
		var unhover = function(e) {
			var mainitem = this;
			mainitem._over = false;
			if (mainitem._overto) {
				window.clearTimeout(mainitem._overto);
				mainitem._overto = null;
			}
			this._unoverto = window.setTimeout(function() {unhovered(mainitem)}, 50);
		}
		var unhovered = function(mainitem) {
			if (mainitem._unoverto) {
				window.clearTimeout(mainitem._unoverto);
				mainitem._unoverto = null;
			}
			if (mainitem._over) {
				return;
			}
			hideHighlight(mainitem);
			if (!mainitem._hassubs) return;
			hideSubmenu(mainitem);
		}
		var showHighlight = function(mainitem) {
			$(mainitem).addClass("over");
		}
		var hideHighlight = function(mainitem) {
			if (mainitem._open || mainitem._over || mainitem._animates) return;
			$(mainitem).removeClass("over");
		}
		var showSubmenu = function(mainitem) {
			mainitem._open = true;
			mainitem._animates = true;
			doAnimate();
		}
		var hideSubmenu = function(mainitem) {
			mainitem._open = false;
			mainitem._animates = true;
			doAnimate();
		}
		var animates = false;
		var doAnimate = function() {
			if (animates) return;
			animates = window.setInterval(animate, 20);
		}
		var animate = function() {
			var fin = true;
			for (var i=0; i<mainitems.length; i++) {
				var item = mainitems[i];
				if (item._animates) {
					var sub = item.getElementsByTagName("div")[0];
					var subheight = sub.style.height;
					var height = subheight.substring(0, subheight.indexOf("px")) * 1;
					if (item._open) {
						if (height < item._subheight) {
							height+= 5;
							if (height > item._subheight) height = item._subheight;
							sub.style.height = height + "px";
							sub.scrollTop = height;
							fin = false;
						} else {
							item._animates = false;
						}
					} else {
						if (height > 0) {
							height-= 5;
							if (height < 0) height = 0;
							sub.style.height = height + "px";
							sub.scrollTop = height;
							fin = false;
						} else {
							item._animates = false;
							hideHighlight(item);
						}
					}
				}
			}
			if (fin) {
				animates = window.clearInterval(animates);
				animates = false;
			}
		}
		mainitems.bind("mouseover", hover);
		mainitems.bind("mouseout", unhover);
	};
	// header slides setup
	var setupHeaderSlides = function() {
		var container = $(".headerimage")[0];
		var image = $("img", container)[0];
		var moreimages = $(".more-headerimages img");
		if (moreimages.length < 1) return;
		var images = [image.src];
		for (var i=0; i<moreimages.length; i++) {
			images[images.length] = moreimages[i].src;
		}
		var anchor = document.createElement("div");
		anchor.style.position = "relative"
		var overlay = document.createElement("div");
		overlay.style.position = "absolute";
		overlay.style.overflow = "hidden";
		overlay.style.display = "none";
		overlay.style.width = container.offsetWidth + "px";
		overlay.style.height = container.offsetHeight + "px";
		var overimg = document.createElement("img");
		overlay.appendChild(overimg);
		anchor.appendChild(overlay);
		container.insertBefore(anchor, image);
		var jqo = $(overlay);
		var index = 0;
		var doSlide = function() {
			index++;
			if (index>=images.length) index = 0;
			overimg.src = images[index];
			jqo.css("opacity", 0);
			jqo.css("display", "block");
			jqo.animate({
				opacity:1
			}, 1500, function(){
				image.src = images[index];
				jqo.css("display", "none");
			});
			slide();
		}
		var slide = function() {
			window.setTimeout(doSlide, 5000);
		}
		slide();
	};
	// setup team scroll
	var setupTeamScroll = function() {
		var jqcontainerscroller = $(".container-scroller");
		var containerscroller = jqcontainerscroller[0];
		if (!containerscroller) return;
		var container = containerscroller.parentNode;
		var items = $(".container-scrollitem", containerscroller);
		var owidth = containerscroller.offsetWidth;
		if (!owidth) return;
		var iwidth = 0;
		for (var i=0; i<items.length; i++) {
			iwidth+= items[i].offsetWidth;
		}
		var scrollstops = [0];
		
		while (scrollstops[scrollstops.length-1] < iwidth - owidth - items[items.length-1].offsetWidth) {
			scrollstops[scrollstops.length] = scrollstops[scrollstops.length-1] + items[scrollstops.length].offsetWidth;
		}
		
		var jqsl = $(".scrolltoleft", container);
		var jqsr = $(".scrolltoright", container);
		
		var current = 0;
		var updatecontrols = function() {
			if (current > 0) {
				jqsl.removeClass("disabled");
				jqsl.addClass("enabled");
			} else {
				jqsl.removeClass("enabled");
				jqsl.addClass("disabled");
			}
			if (current < scrollstops.length-1) {
				jqsr.removeClass("disabled");
				jqsr.addClass("enabled");
			} else {
				jqsr.removeClass("enabled");
				jqsr.addClass("disabled");
			}
		}
		
		jqsl.bind("mouseover", function() {
			jqsl._over = true;
			doscroll(false);
		});
		jqsl.bind("click", function() {
			jqsl._over = false;
			doscroll(false);
		});
		jqsl.bind("mouseout", function() {
			jqsl._over = false;
		});
		jqsr.bind("mouseover", function() {
			jqsr._over = true;
			doscroll(true);
		});
		jqsr.bind("click", function() {
			jqsr._over = false;
			doscroll(true);
		});
		jqsr.bind("mouseout", function() {
			jqsr._over = false;
		});
		
		var doscroll = function(toright) {
			if (toright) {
				current++;
				if (current >= scrollstops.length) {
					current = scrollstops.length-1;
					return;
				}
				jqsr.addClass("scrolltorightactive");
			} else {
				current--;
				if (current < 0) {
					current = 0;
					return;
				}
				jqsl.addClass("scrolltoleftactive");
			}
			window.setTimeout(function() {
				jqsl.removeClass("scrolltoleftactive");
				jqsr.removeClass("scrolltorightactive");
				updatecontrols();
			},250);
			jqcontainerscroller.stop();
			var x = scrollstops[current];
			jqcontainerscroller.animate({scrollLeft:x}, 750, function(){
				if ((toright && jqsr._over) || (!toright && jqsl._over)) {
					window.setTimeout(function(){
						doscroll(toright);
					}, 100);
				}
			});
		}
		updatecontrols();
	};
	// var setup simple modal
	var setupSimpleModal = function() {
		if (!$.fn.modal) return;
		$(".container-teamscroll a[rel~=simplemodal]").bind("click", function(e) {
			var a = $(this);
			a.blur();
			var link = a.attr("href");
			if (!link) return false;
			var ih = link.indexOf("#");
			if (ih < 0) return false;
			link = link.substring(ih+1);
			var anchor = $("a[rev~=simplemodal][name="+link+"]");
			if (!anchor[0]) return false;
			var box = anchor.parents(".simplemodal");
			if (!box[0]) return false;
			var classnames = box.attr("className").split(/ /);
			var closeClass = "close";
			for (var i=0; i<classnames.length; i++) {
				if (classnames[i].indexOf("container") == 0) {
					closeClass = classnames[i]+ "-close";
				}
			}
			box.modal({closeClass:closeClass,
				overlayCss:{backgroundColor:"#000000"},
				onOpen: function (dialog) {
					dialog.overlay.fadeIn('slow', function () {
						dialog.data.show();
						dialog.container.fadeIn('slow');
					});
				},
				onClose: function (dialog) {
					dialog.container.fadeOut('slow');
					dialog.overlay.fadeOut('slow', function() {
						$.modal.close();
					});
				}
			});
			return false;
		});
	};
	// setup lightbox links
	var setupLightbox = function() {
		if (!$.fn.lightBox) return;
		var lbanchors = $("a[rel~=lightbox]");
		var group, groups = {global:[]};
		for (var i=0; i<lbanchors.length; i++) {
			var rels = $(lbanchors[i]).attr("rel").split(/ /);
			group = null;
			for (var o=0; o<rels.length; o++) {
				if (rels[o].indexOf("lightboxgroup-") == 0) {
					group = rels[o];
				}
			}
			if (group) {
				if (!groups[group]) groups[group] = [];
				groups[group].push(lbanchors[i]);
			} else {
				groups.global.push(lbanchors[i]);
			}
		}
		var imagesfolder = "images_jquery.lightbox/";
		for (group in groups) {
			$(groups[group]).lightBox({
				imageLoading: imagesfolder + "lightbox-ico-loading.gif",
				imageBtnPrev: imagesfolder + "lightbox-btn-prev.gif",
				imageBtnNext: imagesfolder + "lightbox-btn-next.gif",
				imageBtnClose: imagesfolder + "lightbox-btn-close.gif",
				imageBlank: imagesfolder + "lightbox-blank.gif"
			});
		}
	}
	// setup scrollteaser
	var scrollTeaserAjustHeight = null;
	var setupScrollTeaser = function() {
		if (!$.fn.jScrollPane) return;
		var contentcontainer = $(".container-content");
		if (!contentcontainer.hasClass("hasteaser")) return;
		var content = $(".content", contentcontainer);
		if (!content[0]) return;
		var scrollteaser = $(".scrollteaser");
		if (!scrollteaser[0]) return;
		scrollTeaserAjustHeight = function() {
			scrollteaser.css("height", (content[0].offsetHeight+19) + "px");
			scrollteaser.jScrollPane();
		}
		$("img", scrollteaser).load(scrollTeaserAjustHeight);
		scrollTeaserAjustHeight();
		scrollteaser.bind("click", function() {
			$(":focus").blur();
		});
	}
	// setup news
	var setupNewItems = function() {
		var newsheadline = $(".teasercontent h4");
		newsheadline.bind("mouseover", function() {
			$(this).addClass("hover");
		});
		newsheadline.bind("mouseout", function() {
			$(this).removeClass("hover");
		});
		newsheadline.bind("click", function() {
			var newsitem = $(this).parents(".newsitem");
			var newstext = $("p", newsitem);
			if (newsitem.hasClass("open")) {
				newstext.slideUp("slow", function() {
					newsitem.removeClass("open");
					if (scrollTeaserAjustHeight) scrollTeaserAjustHeight();
				});
			} else {
				newstext.slideDown("slow", function() {
					newsitem.addClass("open");
					if (scrollTeaserAjustHeight) scrollTeaserAjustHeight();
				});
			}
		});
	}
	// setup faq
	var setupFaq = function() {
		var faqcontainer = $(".faq");
		faqcontainer.bind("click", function() {
			$(":focus").blur();
		});
		if (!faqcontainer[0]) return;
		var faqquestion = $(".faq-section h3", faqcontainer);
		faqquestion.each(function(i, q){
			var answer = $(q).next(".faq-answer");
			answer.show();
			answer.css("height", answer.height() + "px");
			answer.hide();
		});
		faqquestion.bind("mouseover", function() {
			$(this).addClass("hover");
		});
		faqquestion.bind("mouseout", function() {
			$(this).removeClass("hover");
		});
		faqquestion.bind("click", function() {
			var answer = $(this).next(".faq-answer");
			if (answer.hasClass("open")) {
				answer.slideUp("slow", function() {
					answer.removeClass("open");
					if (scrollTeaserAjustHeight) scrollTeaserAjustHeight();
				});
			} else {
				answer.slideDown("slow", function() {
					answer.addClass("open");
					if (scrollTeaserAjustHeight) scrollTeaserAjustHeight();
				});
			}
		});
	}
	var setupContactForm = function() {
		var form = $("form.contact");
		if (!form[0]) return;
		var sending = false;
		var resetImg = function() {
			var vfyimg = $(".verifyimg img", form);
			vfyimg.attr("src", "contactform/verifyimg.php?d=" + new Date().getTime());
		}
		var reset = function() {
			form[0].reset();
			resetImg();
		}
		$("a.reload", form).bind("click", function() {
			resetImg();
			return false;
		});
		form.bind("submit", function() {
			if (sending) return false;
			sending = true;
			var msgs = [];
			if (!$("#anrede").val()) msgs.push("Anrede");
			if (!$("#vorname").val()) msgs.push("Vorname");
			if (!$("#nachname").val()) msgs.push("Nachname");
			if (!$("#email").val()) msgs.push("E-Mail Adresse");
			if (!$("#betreff").val()) msgs.push("Betreff");
			if (!$("#nachricht").val()) msgs.push("Nachricht");
			if (!$("#captcha").val()) msgs.push("Zeichen aus dem Bild");
			if (msgs.length > 0) {
				messagebox(msgs.join(", "));
				return false;
			}
			$(".indicatortext", form).html("sende formular...");
			$.ajax({url:"contactform/formmail.php",
				data:form.serialize(),
				type:"POST",
				success:function(data) {
					messagebox(data);
				},
				error:function() {
					messagebox("error");
				}
			});
			return false;
		});
		var messagebox = function(msg) {
			$(".indicatortext", form).html("&nbsp;");
			var box = null, doreset = false;
			if (msg == "ok") {
				box = $(".message-thankyou");
				doreset = true;
			} else if (msg == "error") {
				box = $(".message-error");
			} else if (msg == "verifyimg") {
				box = $(".message-verifyimg");
			} else {
				box = $(".message-missing");
				$(".missingfields", box).html(msg);
			}
			box.modal({closeClass:"container-contactform-message-close",
				overlayCss:{backgroundColor:"#000000"},
				onOpen: function (dialog) {
					dialog.overlay.fadeIn('slow', function () {
						dialog.data.show();
						dialog.container.fadeIn('slow');
					});
				},
				onClose: function (dialog) {
					dialog.container.fadeOut('slow');
					dialog.overlay.fadeOut('slow', function() {
						$.modal.close();
						if (doreset) {
							reset();
						}
						sending = false;
					});
				}
			});
		}
		reset();
	}
	$(setup);
}());

