jQuery.globalEval = function(){}; 
$(window).load(function(){
	
	var isMobile = navigator.userAgent.match(/(Android|webOS|iPhone|iPod|iPad)/i);
	
	var initElements = function(root) {
	
		/**
		 * Accordions
		 */
		
		$('.accordion', root).click(function(ev) {
			if(!$(this).hasClass('open')) {
				$(this).siblings('.accordion.open').find('.accordionBody').slideToggle(500, function(asdf) {
					$(this).parent().removeClass('open');
				});
				$(this).addClass('open').find('.accordionBody').slideToggle(500);
			}
		});
		
		
		/**
		 * Greyscale images
		 */
		
		if(!$.browser.msie && !navigator.userAgent.match(/(Android|webOS|iPhone|iPod|iPad)/i)) {
		
			var fadeSpeed = 100;
		
			//create a greyscale image based on the image src
			function grayscale(src){
				var canvas = document.createElement('canvas');
				var ctx = canvas.getContext('2d');
				var imgObj = new Image();
				imgObj.src = src;
				canvas.width = imgObj.width;
				canvas.height = imgObj.height; 
				ctx.drawImage(imgObj, 0, 0); 
				var imgPixels = ctx.getImageData(0, 0, canvas.width, canvas.height);
				for(var y = 0; y < imgPixels.height; y++){
					for(var x = 0; x < imgPixels.width; x++){
						var i = (y * 4) * imgPixels.width + x * 4;
						var avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3;
						imgPixels.data[i] = avg; 
						imgPixels.data[i + 1] = avg; 
						imgPixels.data[i + 2] = avg;
					}
				}
				ctx.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height);
				return canvas.toDataURL();
			}
			
			//fade in images so there isn't a color "pop" document load and then on window load
			$('img:not(.noGreyscale)', root).fadeIn(fadeSpeed);
			
			//clone image
			$('img:not(.noGreyscale)', root).each(function(){
				var el = $(this);
				el.css({'position':'absolute'}).wrap('<div class="img_wrapper" style="display: inline-block">').clone().addClass('img_grayscale').css({'position':'absolute','z-index':'998','opacity':'0'}).insertBefore(el).queue(function(){
					var el = $(this);
					el.parent().css({'width':this.width,'height':this.height});
					el.dequeue();
				});
				this.src = grayscale(this.src);
			});
		
		} else {
			$('img:not(.noGreyscale)', root).show();
		}
		
		
		/**
		 * Gallery
		 */
		
		$('.gallery', root).each(function() {
			var $scrollArea = $(this).find('div.galleryScrollArea');
			var $images = $scrollArea.children('img, div');
			var totalWidth = 0;
			var ref = this;
			var currIndex = 0;
			var isDragging = false;
			var goToGalleryImage = function(index) {
				if(index < 0) {
					index = 0;
				} else if(index >= $images.length) {
					index = $images.length - 1;
				}
				var marginLeft = -1 * ($images.eq(index).position().left) + 'px';
				$scrollArea.animate({
					left: 0,
					marginLeft: marginLeft
				}, 1000, 'swing', function() {
					isDragging = false;
					currIndex = index;
				});
			};
			
			$scrollArea.children().each(function() {
				totalWidth += parseInt($(this).css('width'), 10) + 10;
			});
			$scrollArea.width(totalWidth).show();
			
			if(isMobile) {
				$scrollArea.swipe({
					swipeLeft: function() {
						goToGalleryImage(currIndex + 1);
					},
					swipeRight: function() {
						goToGalleryImage(currIndex - 1);
					},
					swipeUp: function(ev) {
						ev.preventDefault();
					},
					swipeDown: function(ev) {
						ev.preventDefault();
					},
					threshold: 1
				}).draggable({
					axis: 'x',
					distance: 10,
					start: function(ev, ui) {
						if(isDragging) {
							return false;
						}
						isDragging = true;
					}
				});
			}
			
			//arrow button handler
			$('a.next', this).click(function(ev) {
				ev.preventDefault();
				ev.stopPropagation();
				if(isDragging) {
					return;
				}
				goToGalleryImage(currIndex + 1);
			});
			
			$('a.back', this).click(function(ev) {
				ev.preventDefault();
				ev.stopPropagation();
				if(isDragging) {
					return;
				}
				currIndex = 0;
				goToGalleryImage(currIndex);
			});
			
			//image click handler
			$('a', this).prev().click(function(ev) {
				if(isDragging) {
					return;
				}
				$(this).next().trigger('click');
			});
		});
		
		
		/**
		 * Contact
		 */
		
		$('.contact', root).each(function() {
			$(this).mouseenter(function() {
				$(this).find('.name').stop().animate({
					bottom: '0px'
				}, 400, 'swing');
			}).mouseleave(function() {
				$(this).find('.name').stop().animate({
					bottom: '-50px'
				}, 400, 'swing');
			});
		});
		
		
	};
	initElements(document.body);
		
		
	/**
	 * Scroll to
	 */
	
	var $scrollToElement = $('.scrollTo');
	if($scrollToElement.length > 0) {
		$('html, body').animate({
			scrollTop: $scrollToElement.offset().top - 4
		}, 1000, 'swing');
	}
	
	
	/**
	 * Layer
	 */
	
	$('a.openInLayer').click(function(ev) {
		ev.preventDefault();
		
		var $layer = $('#layer').hide();
		var $layerBackground = $('#layerBackground').hide();
		var $closeButton = $('a.close', $layer);
		if($layer.length == 0) {
			$layer = $('<div id="layer"><a href="#" class="close"></a><section class="content"><p>Bitte warten. Inhalt wird geladen ...</p></section></div>').hide().appendTo('section#body');
			$closeButton = $('a.close', $layer).click(function(ev) {
				ev.preventDefault();
				$layer.fadeOut(500);
				$layerBackground.fadeOut(500);
			});
		}
		if($layerBackground.length == 0) {
			$layerBackground = $('<div id="layerBackground"></div>').click(function(ev) {
				$closeButton.trigger('click');
			}).hide().appendTo('section#body');
		}
		
		$.ajax({
			url: $(this).attr('href'),
			dataType: 'html',
			success: function(res) {

				$layer.find('.content').html(res);
				$layer.fadeIn(500, function() {
					initElements($layer);
				});
				$layerBackground.fadeIn(500);
				
			}
		});
	});
	
});
