(function () {
	var getPos = function(parent, el){
		var axes = ['x', 'y'];
		var scroll = parent.getScroll();
		var position = Object.map(document.id(el).getPosition(parent), function(value, axis){
			return axes.contains(axis) ? value + scroll[axis] : false;
		});
		return [position.x, position.y];
	}, first = true, _urls = {}, _segmentContainer = {}, _galleryImages = {}, _galleryCurrent, Navigation = new Class({
		initialize: function (baseURI) {
			this.baseURI = baseURI;
			document.id('wrapper')
				.addEvent('click:relay(.prev-link a, .next-link a, #footer a, #up-menu a)', this.clicked.bind(this));
			
			this.scroller = new Fx.Scroll(document.id('content'), {
				duration: 1500,
				transition: 'quad:in',
				link: 'cancel'
			});
			
			var menuNav = document.getElements('#footer .menu ul').setStyles({
				height: 0,
				overflow: 'hidden',
				display: 'block'
			}).set('tween', {link: 'cancel'}), b = function (evt) {
				var el = this.getElement('ul');
				if (evt && evt.target && el.contains(evt.target)) return;
				if (evt && evt.type == 'click' && this.hasClass('menu-zentrale'))
					return;
				if (evt) evt.preventDefault();
				if (el.getSize().y > 0) return;
				menuNav.tween('height', 0);
				var height = el.retrieve(':height')||el.getScrollSize().y;
				el.tween('height', height);
				el.store(':height', height);
			};
			document.getElements('#footer .menu').addEvents({
				mouseenter: b,
				click: b
			});
			
			document.id('content')
				.addEvent('click:relay(div.content-toggler)', this.toggleContent.bind(this));
			History.addEvent('change', this.histChanged.bind(this));
			if (!History.handleInitialState(this.baseURI)) {
				this.histChanged(location.hash.substr(1)||location.pathname);
			}
			
			document.id('content').addEvent('click:relay(div.image-prev-next a)', this.changeImage.bind(this));
		},
		histChanged: function (url) {
			if (url.indexOf('/') !== 0)
				url = '/' + url;
			if (this._current && this._current.url == url)
				return;
			this.change(url);
			this._currentURL = url;
		},
		clicked: function (evt, link) {
			if (link.getParent('.menu-zentrale')) return;
			if (evt) evt.preventDefault();
			var url = link.get('href');
			History.push(url);
		},
		change: function (url) {
			try {
			var segment = url.replace(this.baseURI, '')
				.replace(/^([^.\/]+).*$/, '$1');
			try {
				(document.getElement('div.menu-'+segment)||document.getElement('div.menu-fehr'))
					.fireEvent('mouseenter');
				document.getElements('#footer li, #up-menu a').removeClass('active');
				document.getElements('#footer a[href='+url+'] !> li, #up-menu a[href='+url+']').addClass('active');
				piwikTracker.setCustomUrl('http://'+(document.domain+'/'+url).replace(/\/+/g, '/'));
				piwikTracker.setDocumentTitle(document.title);
				piwikTracker.trackPageView();
			} catch (e) {if (window.console) console.error(e);}
			
			if (_urls[url] && _urls[url].node) {
				var r = _urls[url];

				if (segment == 'gallery')
					_galleryCurrent = r;
				
				if (first) first = !document.id('content').empty();
				if (!_segmentContainer[segment])
					_segmentContainer[segment] = new Element('div.segment-container.'+segment)
						.inject(document.id('content'))
						.adopt(new Element('div.clear'));
				
				if (!_segmentContainer[segment].contains(r.node)) {
					_segmentContainer[segment].setStyle('width', _segmentContainer[segment].getSize().x + 1020);
					r.node.setStyle('float', 'left');
					//if (r.next)
					//	r.node.inject(r.next.node, 'before');
					//else //

					if (!r.prev)
						r.node.inject(_segmentContainer[segment], 'top');
					else if (!r.next)
						r.node.inject(_segmentContainer[segment], 'bottom');
					else if (r.prev && _segmentContainer[segment].contains(r.prev.node))
						r.node.inject(r.prev.node, 'after');
					else if (r.next && _segmentContainer[segment].contains(r.next.node))
						r.node.inject(r.next.node, 'before');
					else
						r.node.inject(_segmentContainer[segment], 'top');
					if (this._current) 
						this.scroller.set(getPos(document.id('content'), this._current.node));
					
					_segmentContainer[segment].getElement('div.clear')
						.inject(_segmentContainer[segment]);
				}
				
				if (r.title)
					document.title = "Fehr Lackierungen - " + r.title;

				this.scroller.toElement(r.node);
				this._current = r;
			}
			else {
				var self = this;
				new Request.JSON({
					url: url,
					onSuccess: function (response) {
						self.prepareContent(response, this.options.url);
					}
				}).post({format: 'json'});
			}
			} catch (e) {
				//console.error(e);
				throw e;
			}
		},
		prepareContent: function (r, url) {
			
			if (!Object.some(_urls, function (v, uri) {
				if (v.sec == r.sec && v.id == r.id) {
					_urls[url] = v;
					v.next = r.next, v.prev = r.prev;
					this.createPrevNext(v);
					return true;
				}
			}, this))  {
				r.node = new Element('div.teh-content');
				if (r.bg_image) {
					r.node.setStyle('backgroundImage', 'url('+this.baseURI + r.bg_image+')');
					Asset.image(this.baseURI + r.bg_image);
				}
				r.url = url;
				
				if (r.content_no_class)
					r.node.adopt(new Element('div', {html: r.content}));
				else
					r.node.adopt(
						new Element('div.inner-content', {
							html: r.content
						}),
						new Element('div.content-toggler', {text: 'Text ausblenden'})
					);
				_urls[url] = r;
				this.createPrevNext(r);
			}
			if (this._currentURL == url)
				this.change(url);
		},
		createPrevNext: function (o) {
			var link, l, self = this;
			for (var type in {prev: null, next: null}) {
				if (!o[type]) continue;
				link = this.baseURI + o[type].link;
				if (!o.node.retrieve(':link-'+type)) {
					l =new Element('div.'+type+'-link')
						.inject(o.node)
						.adopt(new Element('a', {
							href: link,
							html: '<img src="'+this.baseURI+o[type].image+'" alt="'+o[type].text+'" />'
						}));
					o.node.store(':link-'+type, l);
				}
				delete o[type];
				if (!_urls[link]) {
					new Request.JSON({
						url: link,
						onSuccess: function (response) {
							self.prepareContent(response, this.options.url);
						}
					}).post({format: 'json'});
				}
				Object.each(_urls, function (v, uri) {
					if (uri == link) {
						o[type] = v;
						v[type == 'prev' ? 'next' : 'prev'] = o;
					}
				});
			}
		},
		toggleContent: function (evt, toggler) {
			var c = toggler.getParent().getElement('.inner-content');
			var val = {top: 50, height: 243, width: 352}, text = 'Text ausblenden';
			if (!c.retrieve(':folded')) {
				c.set('morph', {link: 'cancel'});
				c.setStyle('overflow', 'hidden');
				val = {top: 293, width: 110, height: 0};
				text = 'Text einblenden';
				c.store(':folded', true);
			}
			else
				c.store(':folded', false);
			c.morph(val);
			toggler.set('text', text);
			
		},
		changeImage: function(evt, link) {
			if (evt) evt.preventDefault();
			var href = link.get('href');
			if (!href) return;
			if (!_galleryImages[href]) {
				var self = this;
				new Request.JSON({
					url: href+'?format=json',
					data: {format: 'json'},
					onSuccess: function (response) {
						_galleryImages[href] = response;
						self.changeImage(null, link);
					}
				}).send();
				return;
			}
			var conti = link.getParent('.teh-content');
			for (var type in {next: 1, prev: 1 }) {
				if (link.hasClass(type+'-image') && _galleryCurrent.id != _galleryImages[href].id) {
					var l = conti.getElement('.'+type+'-link a');
					if (!l) return;
					return this.clicked(null, l);
				}
			}
			Asset.image(this.baseURI + _galleryImages[href].bg_image, {
				onLoad: function (img) {
					if (_galleryCurrent && _galleryImages[href].image_id != _galleryCurrent.image_id)
						return;
					var meh = new Element('div', {styles: {
						backgroundImage: 'url('+ this.baseURI + _galleryImages[href].bg_image+')',
						backgroundPosition: 'center bottom',
						position: 'absolute',
						left: 0,
						top: 0,
						width: '100%',
						height: '100%',
						zIndex: 1
					}})
						.set('tween', {onComplete: function () {  
							conti.setStyle('backgroundImage', meh.getStyle('backgroundImage'));
							meh.destroy();
						}})
					.fade('hide')
					.inject(conti)
					.fade('in');
				}.bind(this)
			});
			
			_galleryCurrent = _galleryImages[href];
			
			conti.getElements('.image-prev-next a').addClass('hidden');
			for (var type in {next: 1, prev: 1 }) {
				if (_galleryCurrent[type+'_image'])
					conti.getElement('.image-prev-next a.'+type+'-image')
						.removeClass('hidden').set('href', _galleryCurrent[type+'_image']);
			}
		}
	});
	
	window._fehrURLS = _urls;
	
	window.addEvent('domready', function () {
		if (Browser.ie && Browser.version <= 6)
			alert(
				"Bitte benutzen Sie einen anderen Browser (wie z.B. Safari, Google Chrome, Firefox, Opera, etc) oder installieren Sie ein Update\n"+
				"Internet Explorer 6 oder älter ist nicht sicher!\n" +
				"Please install another browser (e.g. to Safari, Google Chrome, Firefox, Opera, etc) or update it to a higher version\n"+
				"Internet Explorer 6 ore older is not safe!\n"
			);
		if (!document.id('no-action'))
			new Navigation(document.id('base-uri').get('text'));
		
		// try teh canvas
		var logo = document.id('logo'), canvasStyles = {}, //top: 0, left: 0, position: 'absolute'},
			img = logo.getStyle('backgroundImage').replace(/url\("?'?([^"')]+)'?"?\)/, '$1'),
			canvas = logo.getElement('canvas'),
			ctx = canvas.getContext && canvas.getContext('2d');
		
		var append = function () {
			canvas.width = 190;
			canvas.height = logo.getSize().y;
			//new Element('canvas', {width: 190, height: logo.getSize().y, styles: canvasStyles}
			/*
			new Element('a', {href: logo.getElement('a').get('href')}).adopt(canvas)
			.inject(logo.setStyle('backgroundImage', 'none'))
			.setStyles({
				display: 'block',
				position: 'absolute',
				top: 0,
				left: 0,
				width: canvas.width,
				height: canvas.height
			});
			*/
		};
		
		if (!ctx && Browser.ie) {
			//append();
			//canvas.width = 190;
			//canvas.height = logo.getSize().y;
			G_vmlCanvasManager.initElement(canvas);
			//canvas.width = 190;
			//canvas.height = logo.getSize().y;
			ctx = canvas.getContext('2d');
			ctx.fillStyle = '#00ffff';
			ctx.rect(0, 0, canvas.width, canvas.height);
			ctx.fill();
		}
		if (!ctx) return;
			
		
		Asset.image(img, {onLoad: function (img) {
			var step = 4, current = 1, interval;
			/*
			canvas.setStyles({
				position: 'absolute',
				top: 0,
				left: 0
			}).set({
				width: canvas.width,
				
			});
			*/
			

			ctx.clearRect(0, 0, canvas.width, canvas.height);
			ctx.fillStyle = '#fff';
			ctx.rect(0, 0, canvas.width, canvas.height);
			ctx.fill();
			ctx.drawImage(img, 0, 0);
			var animate = function () {
				//ctx.clearRect(0, 0, canvas.width, canvas.height);
				ctx.fillStyle = '#fff';
				ctx.rect(0, 0, canvas.width, canvas.height);
				ctx.fill();
				ctx.drawImage(img, 0, 0);
				
				var objGradient = ctx.createLinearGradient(-1 * img.get('width') + current, img.get('height'), 0+current, 0);
				//console.log(-1 * img.get('width') + current, 0, img.get('width')+current, img.get('height'));
				objGradient.addColorStop(0, 'rgba(255,255,255,0)');
				objGradient.addColorStop(0.3, 'rgba(255,255,255,0)');
				objGradient.addColorStop(0.5, 'rgba(255,255,255,0.8)');
				objGradient.addColorStop(0.6, 'rgba(255,255,255,0)');
				objGradient.addColorStop(1, 'rgba(255,255,255,0)');
		
				// Füll-Style mit Gradient auszeichnen
				ctx.fillStyle = objGradient;
		
				// Rechteck zeichnen
				ctx.fillRect(0, 0, img.get('width')*2, img.get('height'));
				current += step;
				if (current > (img.get('width') * 4))  {
					clearInterval(interval);
					setTimeout(_start, Math.random()*30000);
					current = 0;
				}
			};
			
			var _start = function () {
				interval = setInterval(animate, 30);
			};
			setTimeout(_start, Math.random()*6000);
		
		}});
	});

})();

