$(document).ready(function() {
	$('body').removeClass('noscript').get(0).onselectstart = function() {
		return false;
	}

	var nuessler = new Page();
		nuessler.options.tooltip = {};
		nuessler.options.tooltip.limitX = 0;
		nuessler.options.tooltip.limitY = 0;
		nuessler.elements = {}
		nuessler.elements.wrapper = $('#wrapper');
		nuessler.elements.left = $('#left').css('left', '-355px');
		nuessler.elements.header = $('#header');
		nuessler.elements.container = $('#container');
		nuessler.elements.main = $('#main').hide();
		nuessler.elements.scrollWrap = nuessler.elements.container.find('.scrollWrap');
		nuessler.elements.scrollDrag = nuessler.elements.scrollWrap.find('.scrollDrag');
		nuessler.elements.footer = $('#footer').css('bottom', '-30px');
		nuessler.elements.bgimgs = $('#bgImg');
		nuessler.elements.imgReal = nuessler.elements.bgimgs.find('img.real').hide().first();
		//nuessler.elements.imgBlur = nuessler.elements.bgimgs.find('img.blur').hide().first();
		nuessler.elements.tooltip = $('body').append('<div id="tooltip"><div class="tooltip-arrow" /><div class="tooltip-content"><h2>INFO</h2><p>Für weitere Bilder auf das Bild klicken.</p></div></div>').find('#tooltip').hide();
		nuessler.autoindex = 0;
		nuessler.identify = function() {
			return nuessler.autoindex++;
		}
		nuessler.prepareLinks = function(link) {
//			$('.active > a, .trail > a').parent().removeClass('active');
//			$('a[href~=' + link.attr('href') + ']').parent().addClass('active');
		}
		nuessler.onloadbegin = function(callback) {
			var self = this,
				blurloaded = true,
				firstloaded = false;
			this.elements.tooltip.fadeOut(300);
			this.elements.main.fadeOut(600, callback);
			//this.elements.bgimgs.removedragscroll().animate({ 'scrollLeft': 0 }, 600);
		}
		nuessler._onloadfinish = function(response) {
			var self = this,
				ready = function() {
					self.elements.main.fadeIn(600, function() {
						$(response).filter('script').each(function() { $.globalEval($(this).html()); });
						self.elements.main.setupScroll({ 'handle': self.elements.scrollDrag });
						self.unidle();
					});
				}
				
			if (this.elements.left.css('left') == '-355px') {
				this.elements.footer.stop(true, true).animate({ 'bottom': 0 }, 600, function() {
					self.elements.left.stop(true, true).animate({ 'left': 0 }, 600, function() {
						$(response).filter('script').each(function() { $.globalEval($(this).html()); });
						ready();
					});
				});
			} else ready();
		}
		nuessler.onloadfinish = function(response, xhr, callback) {
			var self = this;
			this.elements.header.html($(response).find('#header').html());
			this.elements.footer.html($(response).find('#footer').html());
			this.elements.main.html($(response).find('#main').html());

			// !Setup header height
			this.elements.header.css('height', xhr.getResponseHeader('Navigation'));
			this.elements.container.css('top', xhr.getResponseHeader('Navigation'));

			// !Switch blured image
			this.switchBluredImages(response, xhr, callback);

			// !Show contents
			self._onloadfinish(response);
		}
		nuessler.switchBluredImages = function(respose, xhr, callback) {
			var self = this;
			var arrImgs = (xhr.getResponseHeader('Image-Gallery') || self.elements.imgReal.attr('src')).split('#');
			var newFirst = new Image();
				newFirst.onload = function() {
					self.elements.imgReal.removeClass('linked').attr('src', newFirst.src).unbind('click').click(function() {
						$('.newsContent .info .ctrl[rev="2"]').click();
					}).show().fullscreen();
					callback(respose, xhr);

					// !Prepare gallery, preload
					if (arrImgs.length > 1) {
						var imgs = []
							moved = false,
							ctrls = '<dd>';
							for (var i = 1; i <= arrImgs.length; i++) {
								imgs[i - 1] = new Image();
								imgs[i - 1].src = arrImgs[i - 1];
								ctrls+= '<a class="ctrl' + (i == 1 ? ' active' : '') + '" href="" rel="' + arrImgs[i - 1] + '" rev="' + i + '">' + i + '</a>';
							}
							ctrls += '</dd><hr>';

						$('.newsContent .info').append(ctrls).find('.ctrl').click(function(ev) {
							ev.preventDefault();
							var link = this,
								cache = new Image();
								cache.onload = function() {
									$(link).addClass('active').siblings('.ctrl').removeClass('active');
									self.elements.imgReal.attr('src', link.rel).show().fullscreen();
									self.elements.imgReal.unbind('click').click(function() {
										var curr = parseInt($('.newsContent .info .ctrl.active').attr('rev')),
											next = curr == arrImgs.length ? 1 : curr + 1,
											ctrl = $('.newsContent .info .ctrl[rev="' + next + '"]').click();
									});
									$(window).resize();
								}
								cache.src = link.rel;

							self.elements.tooltip.fadeOut(300);
							$('body').unbind(moved);
						});
						self.elements.imgReal.addClass('linked');

						$('body').unbind('mousemove').mousemove(function(ev) {
							self.options.tooltip.limitX = $(this).is('.animate-left')
														? self.options.tooltip.limitX
														: 355 + self.elements.left.offset().left;
							self.options.tooltip.limitY = $(this).is('.animate-left')
														? self.options.tooltip.limitY
														: self.elements.bgimgs.height() - self.elements.tooltip.height() - 50;
							self.elements.tooltip.css({
								'left': ev.pageX > self.options.tooltip.limitX ? ev.pageX : self.options.tooltip.limitX,
								'top': ev.pageY < self.options.tooltip.limitY ? ev.pageY + 20 : self.options.tooltip.limitY + 20
							});
							if (!moved) {
								self.elements.tooltip.fadeIn(300);
								moved = ev;
							}
						});
					}
				}
				newFirst.src = arrImgs[0];
		}
		nuessler.setup = function(self) {
			// !prevent image drag
			$('img').get(0).ondragstart =
			$('img').get(0).onselectstart = function(ev) {
				ev.preventDefault();
			}

			// !Forms
			$('form').unbind('submit').submit(function(ev) {
				ev.preventDefault();
				var form = $(this);
				var href = form.attr('action').replace(/^\/*#+\/*/g, '');
				if (href[0] != '#') {
					form.attr({ 'rev': href.replace(self.urlBase, '') });
					form.attr({ 'action': '/#/' + href.replace(self.urlBase, '') });
				}
				if (!self.isIdle()) {
					self.idle();
					//location.href = form.attr('action');
					$.post(form.attr('rev'), form.serialize() + '&ajax=true', function(response, status, xhr) {
						if ($(response).find('#' + form.attr('id') + ' .error').length) {
							form.replaceWith($(response).find('#' + form.attr('id')));
							self.setup(tjg);
							self.unidle();
						} else {
							self.unidle();
							var oldhref = self.environment.relativize(location.href),
								newhref = self.environment.relativize(xhr.getResponseHeader('Referer'));
							if (oldhref == newhref)
								location.reload();
							else location.href = '/#/' + newhref;
						}
					});
				}
				return false;
			});

			// !Gallery thumbs
			if (!$('#galleryTitle').length)
				$('.galleryWrap:not(.galleryWrap > .galleryWrap)').before('<span id="galleryTitle" />');
			$('.galleryWrap > a').hover(
				function(ev) {
					ev.preventDefault();
					$('#galleryTitle').text($(this).find('img.rgb').stop(true).fadeTo(300, 1).attr('alt'));
				},
				function(ev) {
					ev.preventDefault();
					$('#galleryTitle').text('');
					$(this).find('img.rgb').stop(true).fadeTo(300, 0);
				}
			);

			// !News toggle
			var oldone = self.elements.imgReal.attr('src');
			$('.mod_newslist .newsContent').hide();
			$('.mod_newslist .newsHeader').click(function(ev) {
				ev.preventDefault();
				self.elements.imgReal.attr('src', $(this).is('.active') ? oldone : $(this).data('ttl')).show().fullscreen();
				$(window).resize();

				if ($(this).is('.active'))
					$(this).mouseleave();
				$(this).toggleClass('active').parent().siblings().find('.newsHeader').removeClass('active');
				$(this).next('.newsContent').slideToggle(500, function() {
					self.elements.main.setupScroll({ 'handle': self.elements.scrollDrag });
				}).parent().siblings().find('.newsContent').slideUp(500);
			})/* .css('visibility', 'hidden') */.each(function(i) {
				var image = new Image();
					image.src = $(this).attr('title');
				$(this).data('ttl', $(this).attr('title'));
				$(this).removeAttr('title');
			});
		}
		nuessler.prepare = function() {
			var self = this,
				loaded = false,
				prepared = false,
				initialize = function() {
					// !animation 2 - hide loadscreen, show elements
					self.elements.imgReal.show().fullscreen();
					self._onloadfinish();		
				},
				imgReal = new Image();
				imgReal.onload = function() {
					initialize();
				}
				imgReal.src = self.elements.imgReal.attr('src');
		}
		nuessler.initialize();
		nuessler.prepare();

	$(window).resize(function() {
		nuessler.elements.main.setupScroll({ 'handle': nuessler.elements.scrollDrag });
	});
	$('#closeBtn').live('click', function() {
				console.log(nuessler)
		$('body').addClass('animate-left');
		$('#left').stop(true).animate({ 'left': -355 }, {
			'duration': 400,
			'step': function(s) {
				nuessler.options.tooltip.limitX = 355 + s;
			},
			'complete': function() {
				$('body').removeClass('animate-left');
				$('#openBtn').stop(true).css('left', 312).show().animate({ 'left': 355 }, 200);
			}
		});
	});
	$('#openBtn').live('click', function(ev) {
		$('#openBtn').stop(true).animate({ 'left': 312 }, 200, function() {
			$(this).hide();
			$('body').addClass('animate-left');
			$('#left').stop(true).animate({ 'left': 0 }, {
				'duration': 400,
				'step': function(s) {
					nuessler.options.tooltip.limitX = 355 + s;
					nuessler.options.tooltip.limitY = ev.pageY;
					$('body').mousemove();
				},
				'complete': function() {
					$('body').removeClass('animate-left');
				}
			});
		});
	});
});
