///////////////////////////////////////////////////////////////////
//	Global Variables
///////////////////////////////////////////////////////////////////

// strings of sections for .address
var currentPath = "";
var categorySlug = "";
var lightboxPath = "";
var imageName = "";
var categoryPath = "";

var slidesTargetX = 0;

// objects (not Strings!!!)
var currentSlide;

// the id of the currently active Image in an open slide
var loadCount = 0;
var currentLoadedImageID = 0;
var currentFocusImageID = 0;
var oldFocusImageID = 0;

// loading wheel animation
var loadingInterval;
var loadingXpos = 0;

var lightboxOpen = false;
var loadingWheels = new Array();
var teaserImgHeight;
var moving = false;
var moveDirection = "left";
var moveWhenLoaded = false;
var addressChange = false;

var browserNaviEnabled = false;

var infoEnabled = true;

var pdfImageString = '';
var options = { path: '/', expires: 1 };

// For address
var baseURL = $.address.baseURL();

// video
var muted = false;

var slidesScroll;
var lightboxScroll;
var infoScroller;

///////////////////////////////////////////////////////////////////
//	Init Function (called from header.php)
///////////////////////////////////////////////////////////////////
function initScript(){
	
	if(Modernizr.touch){
		
	}
	window.top.scrollTo(0, 1);
	// fading images in
	//adjustPDFPageItem();
	$('[title]').removeAttr('title');
	setTimeout(showMenu, 600);
	
	addSlidesNavigation();
	addMenuNavigation();
	addLightboxNavigation();
	$(window).resize(resizeHandler);
	fit();
	
	$(".slide img").one("load",function(){
		
	}).each(function(){
		if(this.complete || (jQuery.browser.msie && parseInt(jQuery.browser.version) == 6)) {
			$(this).trigger("load");
		}
	});
	deactivateImageDefaults();
	
	addSearch();
	
	if (Modernizr.touch){
		slidesScroll = new iScroll('slides-scroller', {hScrollbar:false});
		lightboxScroll = new iScroll('bigImagesHolder', {vScroll:false, hScrollbar:false, onScrollEnd:getCurrentBigImageID});
		document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
	} else {
		$('#slides-scroller').css('overflow-x', 'auto');
		$('#bigImagesHolder').scroll(function(){
			getCurrentBigImageID();
		})
		$('#lightboxFooter').css('z-index', 100);
	}
	
}
function getCurrentBigImageID(){
	$('.bigImage').each(function(i){
		if($(this).offset().left > -100 && $(this).offset().left < 400 && i != currentFocusImageID){
			currentFocusImageID = i;
			setCaptionInfo(currentFocusImageID);
			setActiveVideosToDefault();
			return false;
		}
	});
	
}
function refreshSlidesScroller(){
	if(slidesScroll != undefined){
		slidesScroll.refresh();
	}
}
function refreshLightboxScroller(){
	if(lightboxScroll != undefined){
		lightboxScroll.refresh();
	}
}
function addSearch(){
	setSearchDefault();
	$('.search_item .searchinput').focus(function(e){
		$(this).attr('value', '');
		setSearchText('_');
		fitSlides();
		$('#searchreplace').css('opacity', '1');
	});
	$('.search_item .searchinput').blur(function(e){
		$(this).attr('value', 'Type to search...');
		if($('#searchreplace').text() == "_" || $('#slides-wrapper .slide').length < 1){
			setSearchDefault();
			if(categorySlug != ""){
				filterSlidesByCategory();
			}
		}
		$('#searchreplace').css('opacity', '.5');
	});
	$('.search_item .searchinput').keyup(function(e){
		e.preventDefault();
		filterByString($(this).attr('value'));
		setSearchText($(this).attr('value') + '_');
		adjustSlidesNavigation();
	});
}
function setSearchDefault(){
	setSearchText('Search_');
	$('#searchreplace').css('opacity', '.5');
}
function filterByString(s){
	$('#slides').css('display', 'block');
	$('#slides').css('opacity', '1');
	hideInfo();
	var parts = s.toLowerCase().split(' ');
	$('.slide').each(function(){
		var containsSearchString = true;
		for(var i=0; i<parts.length; i++){
			if($(this).text().toLowerCase().indexOf(parts[i]) == -1){
				containsSearchString = false;
			}
		}
		if(containsSearchString == true){
			$('#slides-wrapper').append($(this));
		} else {
			$('#slides-invisible').append($(this));
		}
	});
}
function setSearchText(t){
	$('#searchreplace').text(t);
	Cufon.replace('#searchreplace');
}
function deactivateImageDefaults(){
	$('img').click(function(e){
		e.preventDefault();
	});
	$('img').mousedown(function(e){
		e.preventDefault();
	});
	$('#bigImages img').mousedown(function(e){
		e.preventDefault();
	})
	$('#bigImages img').click(function(e){
		e.preventDefault();
	})
}
function showMenu(){
	$('#menu').css('display', 'block');
	$('#menu').css('opacity', '0');
	$('#menu').animate({
		opacity: 1
	}, 1200, 'easeInOutQuint', function(){
		initAddress();
	});
}
///////////////////////////////////////////////////////////////////
//	browser functions
///////////////////////////////////////////////////////////////////
function filterSlidesByCategory(){
	$('#slides').css('display', 'block');
	setSearchDefault();
	infoEnabled = false;
	$('#slides').animate({
		opacity: 0
	}, 200, function(){
		if(categorySlug == 'pdf-selection'){
			showPDFSelection();
		} else {
			$('#pdf-instructions').remove();
		}
		
		$('.slide').each(function(){
			if($(this).hasClass(categorySlug)){
				$('#slides-wrapper').append($(this));
				Cufon.replace($(this).find('.captionTitle'));
				Cufon.replace($(this).find('.anzahl'));
			} else {
				$('#slides-invisible').append($(this));
			}
		});
		if($('.' + categorySlug).find('.teaser').length == 0){
			if(categorySlug == 'pdf-selection'){
				showNoImagesText('Please select images from the categories to download them as PDF.');
			} else {
				showNoImagesText('No images in this category yet...');
			}
		} else {
			$('.no-images').remove();
		}
		
		fit();
		if(slidesScroll != undefined){
			slidesScroll.scrollTo(0, 0);
		} else {
			$('#slides-scroller').animate({
				scrollLeft: '0px'
			}, 0);
		}
		slidesTargetX = 0;
		adjustSlidesNavigation();
		setTimeout(function(){
			$('#slides').animate({
				opacity: 1
			},500);
		}, 200);
	});
}
function showNoImagesText(t){
	$('.no-images').remove();
	$('#slides').prepend('<span class="no-images">'+t+'</span>');
	$('.no-images').css('margin-left', '27px');
}
///////////////////////////////////////////////////////////////////
//	jquery address
///////////////////////////////////////////////////////////////////
function initAddress(){
	addAddressLinks();
	reactToAddress($.address.path());
	$.address.change(function(event) {
		reactToAddress(event.value);
	});
}
function addAddressLinks(){
	$('#menu a').click(function(e){
		e.preventDefault();
		$.address.value($(this).attr('href').split(baseURL)[1]);
	});
}
function showPDFSelection(){
	var titles = new Array();
	var links = new Array();
	var i = 0;
	var items = pdfImageString.split(',');
	refreshPDFInstructions(items.length-1);
	$('.pdf-selection').remove();
	for(var i=0; i<items.length-1; i++){
		links.push(items[i].split(':')[0]);
		titles.push(items[i].split(':')[1]);
	}
	for(var i=0; i<links.length; i++){
		$('#slides-invisible').append('<div class="slide pdf-selection"><div class="imgWrapper"><span class="teaser" href="#"><a href="#" class="remove-from-pdf"></a><img src="'+uploadBaseURL+links[i]+'" alt="'+titles[i]+'" /></span></div><p class="imglinks"></p></div>');
	}
	$('.pdf-selection .remove-from-pdf').mouseenter(function(){
		$(this).parent().find('img:first').animate({
			opacity: '0.4'
		}, 200);
	});
	$('.pdf-selection .remove-from-pdf').mouseleave(function(){
		$(this).parent().find('img:first').animate({
			opacity: '1'
		}, 200);
	});
	$('.pdf-selection .remove-from-pdf').click(function(e){
		e.preventDefault();
		var currentImageLink = $(this).parent().find('img:first').attr('src').replace(uploadBaseURL, '');
		var currentTitle = $(this).parent().find('img:first').attr('alt');
		var currentImageString = currentImageLink + ":" + currentTitle + ",";
		pdfImageString = pdfImageString.replace(currentImageString, '');
		setPDFCookie(pdfImageString);
		items = pdfImageString.split(',');
		refreshPDFInstructions(items.length-1);
		$(this).parent().find('img').animate({
			width: 0,
			opacity: 0
		}, 200, function(){
			$(this).parent().parent().parent().remove();
		});
	})
	Cufon.replace('.captionTitle');
}
function refreshPDFInstructions(amount){
	$('#pdf-instructions').remove();
	var preNumber = 'There are';
	var postNumber = 'images';
	if(amount < 2){
		preNumber = 'There is';
		postNumber = 'image';
	}
	$('#slides').append('<span class="caption" id="pdf-instructions"><span class="captionTitle"><a href="http://www.alexandergnaedinger.de/pdf/" id="pdf-download">Download PDF</a></span><span class="anzahl">'+ preNumber + ' ' + amount + ' '+ postNumber +' in your PDF. Clicking on an image removes it from the selection.</span></span>')
	$('#pdf-instructions').css({
		'position': 'absolute',
		'left': '25px',
		'margin-top': '0px',
		'top': teaserImgHeight + 5 + 'px'
	});
	Cufon.refresh();
	if(amount == 0){
		$('#pdf-instructions').hide();
		showNoImagesText('Please select images from the categories to download them as PDF...');
	} else {
		$('.no-images').remove();
	}
}
function reactToAddress(_path){
	hideInfo();
	// do something depending on the event.value property, e.g.
	currentPath = _path;
	if(currentPath.split('/').length <= 2){
		$.address.title('Alexander Gnädinger');
	} else {
		var title = currentPath.split('/').join(' | ');
		title = title.substr(0, title.lastIndexOf('|'));
		//$.address.title('Alexander Gnädinger ' + title);
	}
	if(currentPath.indexOf('/pdf-selection') != -1){
		//showPDFSelection();
		categoryPath = _path;
		categorySlug = 'pdf-selection';
		filterSlidesByCategory();
	} else if(currentPath.indexOf("/category/") != -1){
		categoryPath = _path;
		categorySlug = _path.split("/")[2];
		adjustMenuHover(categorySlug, true);
		if(lightboxOpen == true){
			closeLightbox();
		} else {
			filterSlidesByCategory();
		}
	} else if(_path.indexOf("/lightbox/") != -1) {
		lightboxPath = _path.substr(0, _path.lastIndexOf("/")+1);
		loadCount = 0;
		currentLoadedImageID = 0;
		if(lightboxOpen != true){
			openLightbox('easeInOutQuint');
		} else {
			switchLightbox();
		}
	} else if(_path != "/"){
		var slug = _path.split("/").join("");
		adjustMenuHover(slug, true);
		loadInfo(slug);
		
	} else {
		if(lightboxOpen != true){
			var slug = 'news';
			loadInfo(slug);
		}
		closeLightbox();
	}
}
function hideInfo(){
	if($("#info").css('display') == 'block'){
		$("#info").fadeOut(200);
		$('#browser').css('overflow-y', 'hidden');
		$('body').css('overflow-y', 'hidden');
		if(infoScroller != undefined){
			infoScroller.destroy();
		}
		
	}
}
function loadInfo(slug){
	infoEnabled = true;
	$("#info").load(rootURL + "/" + slug + " #pageEntry", function(response, status, xhr) {
		if (status == "error") {
			//alert("Sorry but there was an error: " + xhr.status + " " + xhr.statusText);
		}
		if(infoEnabled == true){
			$('#slides').animate({
				opacity: 0
			} ,400, function(){
				$('#slides').css('display', 'none');
			});
			$('#info').css('display', 'block');
			$('#info').fadeOut(0);
			if(slug != 'news' && !Modernizr.touch){
				$('#info').css('left', $('.currentMenuItem').offset().left + 'px');
			} else {
				$('#info').css('left', '25px');
			}
			$('#info').css('top', $('.page_item:last').offset().top + 50 + 'px');
			$('#info').fadeIn(400);
			deactivateImageDefaults();
			
			
			if(Modernizr.touch){
				$('#info').height($(window).height() - $('#info').offset().top - 20);
				infoScroller = new iScroll('info', {zoom:true});
			} else {
				$('#browser').css('overflow-y', 'visible');
				$('body, html').css('overflow-y', 'auto');
			}
			//
			
		}
		
		
	});
}
///////////////////////////////////////////////////////////////////
//	Menu Functions
///////////////////////////////////////////////////////////////////
function addMenuNavigation(){
	$('#menu li a').mouseenter(function(){
		adjustMenuHover($(this).attr('href').split(baseURL)[1], false);
	});
	$('#menu').mouseleave(function(){
		adjustMenuHover(currentPath, false);
	});
}
function adjustMenuHover(text, setCurrentItem){
	var targetOpacity;
	var speed;
	$('#menu li a').each(function(){
		var href = $(this).attr('href').split(baseURL)[1];
		if(href.indexOf(text) != -1 || text == ""){
			targetOpacity = 1;
			speed = 100;
			if(setCurrentItem == true){
				$(this).parent().addClass('currentMenuItem');
			}
		} else {
			targetOpacity = 0.5;
			speed = 300;
			if(setCurrentItem == true){
				$(this).parent().removeClass('currentMenuItem');
			}
		}
		$(this).stop(true).animate({
			opacity: targetOpacity
		}, speed);
	});
}
///////////////////////////////////////////////////////////////////
//	Fitting
///////////////////////////////////////////////////////////////////
function resizeHandler(){
	fit();
	$('#slides-wrapper').css('left', '0px');
}
function fit(){
	$('#lightbox').css('display', 'block');
	$('#page').width($(window).width() * 2);
	$('#browser').width($(window).width());
	$('#lightbox').width($(window).width());
	$('#lightbox').height($(window).height());
	$('.hotArea').height($(window).height() - 85);
	$('#bigImagesHolder').height(($(window).height()) + 'px');
	if(lightboxOpen == true){
		$('#page').css('left', -$(window).width() + 'px');
		fitImages();
	} else {
		$('#page').css('left', '0px');
	}
	fitSlides();
	adjustSlidesNavigation();
}
function fitSlides(){
	teaserImgHeight = $(window).height() - $('#top').height() - 120;
	$('#slides').height($(window).height() - $('#slides').position().top);
	if(teaserImgHeight > 500){
		teaserImgHeight = 500;
	} else if(teaserImgHeight < 100){
		teaserImgHeight = 100;
	}
	$('.slide img').height(teaserImgHeight);
	$('#pdf-instructions').css('top', teaserImgHeight + 5 + 'px');
	$('.teaser img').css('width','auto');
	adjustSlidesWrapperWidth();
	refreshSlidesScroller();
	$('#slides-scroller').css('height', ($(window).height() - $('#slides-scroller').offset().top + 20) + 'px');
}
function adjustSlidesWrapperWidth(){
	if($('#slides-wrapper .slide').length > 0){
		//$('#slides-wrapper').width($('#slides-wrapper .slide:last').position().left + $('#slides-wrapper .slide:last').width() + 80);
		$('#slides-wrapper').width($('#slides-wrapper .slide:last').position().left + $(window).width() - 75);
	}
}
function fitImages(){
	var i=0;
	$('.bigImage').each(function(){
		var img = $(this).find('img');
		setExactFit(img, $('#bigImagesFrame'));
		$(this).width(img.width());
		$(this).height(img.height());
	});
	if($('.bigImage').length > 0){
		var offset = 80;
		if(Modernizr.touch){
			offset = 0;
		}
		$('#bigImages').css('width', ($('.bigImage:last').position().left + $(window).width() - offset) + 'px');
	}
	adjustHotAreas();
	refreshLightboxScroller();
}
function adjustHotAreas(){
	if(currentSlide != undefined && currentSlide.find('.imglinks a').length > 0){
		$('.hotArea').show();
	} else {
		$('.hotArea').hide();
	}
}
function setExactFit(image, container){
	var crop = false;
	containerRatio = container.width() / container.height();
	imageRatio = image.attr('width') / image.attr('height');
	
	var firstRatio;
	var secondRatio;
	
	if(crop == "false"){
		firstRatio = containerRatio;
		secondRatio = imageRatio;
	} else {
		firstRatio = imageRatio;
		secondRatio = containerRatio;
	}
	//
	image.css('height', container.height() - 2);
	image.css('width', 'auto');
	image.css('top', '1px');
	//image.css('top', (container.height() / 2 - image.height() / 2) + 'px')
}
///////////////////////////////////////////////////////////////////
//	Slides Navigation
///////////////////////////////////////////////////////////////////
function addSlidesNavigation(){
	//$('.slide').css('opacity', '.99');
	if(!Modernizr.touch){
		$('.slide .teaser').css('opacity', '.5');
		$('.slide .teaser').mouseenter(function(){
			$(this).css('opacity', '1');
		});
		$('.slide .teaser').mouseleave(function(){
			$(this).css('opacity', '.5');
		});
	}
	
	$('#slides .next').click(function(e){
		moveToNextSlides();
		e.preventDefault();
	})
	$('#slides .prev').click(function(e){
		moveToPreviousSlides();
		e.preventDefault();
	})
	$('.slide .teaser').click(function(e){
		e.preventDefault();
		$.address.value($(this).attr('href').split(baseURL)[1]);
	});
};
function moveToNextSlides(){
	slidesTargetX = 0;
	$('#slides-wrapper .slide').each(function(){
		if($(this).offset().left < $(window).width() && $(this).offset().left + $(this).width() > $(window).width()){
			slidesTargetX = -$(this).position().left + 25;
		}
	})
	if(slidesScroll != undefined){
		slidesScroll.scrollTo(slidesTargetX, 0, 500);
	} else {
		$('#slides-scroller').animate({
			scrollLeft: -slidesTargetX + 'px'
		}, 500);
	}
	adjustSlidesNavigation();
}
function moveToPreviousSlides(){
	slidesTargetX = 0;
	$('#slides-wrapper .slide').each(function(){
		if($(this).offset().left < -$(window).width() && $(this).offset().left + $(this).width() > -$(window).width()){
			slidesTargetX = -$(this).position().left + 25;
		}
	})
	if(slidesScroll != undefined){
		slidesScroll.scrollTo(slidesTargetX, 0, 500);
	} else {
		$('#slides-scroller').animate({
			scrollLeft: -slidesTargetX + 'px'
		}, 500);
	}
	adjustSlidesNavigation();
}
function adjustSlidesNavigation(){
	if(slidesTargetX < 0){
		$('#slides .prev').show();
	} else {
		$('#slides .prev').hide();
	}
	if($('#slides-wrapper .slide').length > 0 && $('#slides-wrapper .slide:last').position().left + $('#slides-wrapper .slide:last').width() > $(window).width()){
		$('#slides .next').show();
		browserNaviEnabled = true;
	} else {
		$('#slides .next').hide();
		browserNaviEnabled = false;
	}
	$('#slides .prev').height(teaserImgHeight);
	$('#slides .next').height(teaserImgHeight);
}
///////////////////////////////////////////////////////////////////
//	Lightbox functions
///////////////////////////////////////////////////////////////////
function openLightbox(easing){
	
	addLoadingWheel($('#lightboxLoadingWheel'));
	$('a.next').hide();
	// vorbereiten
	currentLoadedImageID = 0;
	currentFocusImageID = 0;
	$('.bigImage').remove();
	$('#bigImages').css('left', '0px');
	findCurrentSlide();
	loadImage(0);
	setCaption(currentFocusImageID);
	setCaptionInfo(currentFocusImageID);
	
	$('#bigImagesHolder').animate({
		scrollLeft: '0px'
	}, 0)
	
	// einfaden
	lightboxOpen = true;
	$('#page').animate({
		left: (-$('#browser').width()) + 'px'
	}, 400, easing, function(){
		$('#browser').css('opacity', '0');
		//checkForVideo();
	});
};
function switchLightbox(){
	lightboxOpen = false;
	if(moveDirection == "left"){
		$('#page').stop(true).animate({
			left: -$('#page').width() + 'px'
		}, 400, 'easeInQuint', function(){
			$('#page').css('left', '0px');
			openLightbox('easeOutQuint');
		});
	} else {
		$('#page').stop(true).animate({
			left: '0px'
		}, 400, 'easeInQuint', function(){
			$('#page').css('left', -$('#page').width() + 'px');
			openLightbox('easeOutQuint');
		});
	}
}
function closeLightbox(){
	$('#browser').css('opacity', '1');
	lightboxOpen = false;
	$('#page').stop(true).animate({
		left: '0px'
	}, 400, 'easeInOutQuint', function(){
		removeVideos();
	});
}
function addLightboxNavigation(){
	$('.hotArea .prev').click(function(e){
		e.preventDefault();
		moveToPreviousImage();
	});
	$('.hotArea .next').click(function(e){
		e.preventDefault();
		moveToNextImage();
	});
	$('#lightboxClose').click(function(e){
		e.preventDefault();
		if(categorySlug == ""){
			$.address.value("/");
		} else {
			$.address.value("/category/"+categorySlug+"/");
		}
	})
	$('body').keydown(function(e) {
		if(lightboxOpen == true){
			if(e.keyCode == "39"){
				moveToNextImage();
			} else if(e.keyCode == "37"){
				if(addressChange != true){
					moveToPreviousImage();
				}
			} else if(e.keyCode == "91"){
				addressChange = true;
			}
		}
	});
	$('body').keyup(function(e){
		if(e.keyCode == "91"){
			addressChange = false;
		}
	});
	$('#pdfButton').mouseenter(function(e){
		e.preventDefault();
		higlightPDFImage();
	})
	$('#pdfButton').mouseleave(function(e){
		e.preventDefault();
		unhiglightPDFImage();
	})
	$('#pdfButton').click(function(e){
		e.preventDefault();
		if(currentSlide.find('.imglinks a').eq(currentFocusImageID).attr('href').indexOf('.mov') != -1){
			playVideo($('.bigImage').eq(currentFocusImageID))
		} else {
			toggleCurrentImagePDF();
		}
	})
	$('#soundButton').click(function(e){
		e.preventDefault();
		toggleVideoVolume();
	})
}
function getCurrentFocusImageIdByPosition(){
	var i=0;
	$('.bigImage').each(function(){
		if(Math.abs($(this).offset().left - $('#bigImagesHolder').offset().left) < 100){
			currentFocusImageID = i;
		}
		i ++;
	});
}
function loadNextImage(){
	if(loadCount < currentSlide.find('.imglinks a').length-1){
		loadCount ++;
		loadImage(loadCount);
	} else {
		$('.bigImage:last').addClass('lastBigImage');
		fitImages();
	}
}
function loadImage(_id){
	var hasVideo = false;
	hasVideo = currentSlide.find('.imglinks a').eq(_id).attr('href').indexOf('.mov') != -1 ? true : false;
	moveWhenLoaded = false;
	var image = new Image();
	$(image).load(function(){
		if($(this).attr('alt') == lightboxPath){
			currentLoadedImageID ++;
			$('#bigImages').append('<div class="bigImage"></div>');
			$('.bigImage:last').append($(this));
			if(hasVideo == true){
				$('.bigImage:last').addClass('hasVideo');
				var posterSrc = $(this).attr('src');
				var videoSrc = posterSrc.replace('.jpg', '.mov');
				addVideo($('.bigImage:last'), posterSrc, videoSrc);
			}
			
			fitImages();
			if(!Modernizr.touch){
				$(this).click(function(e){
					e.preventDefault();
					currentFocusImageID = parseInt($(this).attr('id').split('-')[1]);
					moveToImageById(currentFocusImageID);
				})
				$(this).css('opacity', '0');
				$(this).animate({
					opacity: 1
				}, 400, function(){
					loadNextImage();
				});
			} else {
				loadNextImage();
			}
			
			if(currentFocusImageID < currentLoadedImageID-1 || currentSlide.find('.imglinks a').length < 2){
				removeLoadingWheel($('#lightboxLoadingWheel'));
				$('a.next').show();
			}
			
			if(moveWhenLoaded == true){
				moveToNextImage();
			}
		}
		deactivateImageDefaults();
	}).attr({
		alt: lightboxPath,
		src: currentSlide.find('.imglinks a').eq(_id).attr('href').replace('.mov', '.jpg'),
		id: "bigImage-" + _id
	});
};
function moveToPreviousImage(){
	currentFocusImageID --;
	if(currentFocusImageID >= 0){
		moveToImageById(currentFocusImageID);
	} else {
		findPreviousSlide();
	}
}
function moveToNextImage(){
	if(currentFocusImageID+1 < currentLoadedImageID){
		currentFocusImageID ++;
		moveToImageById(currentFocusImageID);
		//
	} else if(currentFocusImageID >= currentSlide.find('.imglinks a').length-1) {
		findNextSlide();
	} else {
		addLoadingWheel($('#lightboxLoadingWheel'));
		$('a.next').hide();
		moveWhenLoaded = true;
	}
}
function moveToImageById(_id){
	if($('.bigImage').length > 0){
		moving = true;
		setActiveVideosToDefault();
		var newLeft = -$('.bigImage').eq(_id).position().left;
		
		if(Modernizr.touch){
			lightboxScroll.scrollTo(newLeft, 0, 200);
		} else {
			$('#bigImagesHolder').animate({
				scrollLeft: -newLeft + 'px'
			}, 300)
		}
		setTimeout(function(){
			setCaptionInfo(_id);
		}, 200);
	} else {
		lightboxScroll.refresh();
	}
}
function setCaption(_id){
	var currentCaption = currentSlide.find('.captionTitle:first').text();
	if($('#lightboxCaption').text() != currentCaption){
		$('#lightboxCaption').text(currentCaption);
		$.address.title('Alexander Gnädinger | ' + $('#lightboxCaption').text());
	};
	Cufon.refresh('#lightboxCaption');
}
function setCaptionInfo(_id){
	var preNumber = "";
	var postNumber = "&nbsp;&nbsp;Add image to PDF";
	var leer = '&nbsp;';
	if(pdfImageString.indexOf(currentSlide.find('.imglinks a').eq(_id).attr('href').replace(uploadBaseURL, '')) != -1){
		preNumber = "";
		postNumber = "&nbsp;&nbsp;Remove image from PDF";
	}
	$('#lightboxNavi #index').html(addZero(_id+1) + " / " + addZero(currentSlide.find('.imglinks a').length));
	if(currentSlide.find('.imglinks a').eq(_id).attr('href').indexOf('.mov') != -1){
		$('#pdfButton').html('&nbsp;&nbsp;Click on the Video to play');
	} else {
		$('#pdfButton').html(postNumber);
	}
	Cufon.refresh('#lightboxNavi');
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 
//	ALL THE VIDEOS
// 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

var useHtml5Video = canPlayMP4() && Modernizr.touch;

function addVideo(container, posterSrc, videoSrc){
	container.append("<a class='videoPlayButton' href='"+videoSrc+"'>Play Video</a>");
	container.append("<div class='videoDiv'></div>");
	if(useHtml5Video){
		addHTML5Video(container, videoSrc);
	} else {
		addFlashVideo(container, videoSrc);
	}
}
function removeVideos(){
	$(".bigImage").each(function(){
		$(this).find('.videoPlayButton').remove();
		$(this).find('.videoDiv').remove();
	})
}
function setActiveVideosToDefault(){
	if(useHtml5Video){
		setActiveHTML5VideosToDefault();
	} else {
		setActiveFlashVideosToDefault();
	}
}
function canPlayMP4() {
    var v = document.createElement('video');
    return !!(v.canPlayType && v.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/, ''));
}
///////////////////////////////////////////////////////////////////////
// HTML 5 VIDEO
///////////////////////////////////////////////////////////////////////
function addHTML5Video(container, videoSrc){
	var settings = {
		width:container.find('img:first').width(),
		height:container.find('img:first').height()
	};
	
	var videoDiv = container.find('.videoDiv:first');
	var videoPlayButton = container.find('.videoPlayButton:first');
	if(Modernizr.touch){
		videoDiv.css('z-index', '3');
	} else {
		videoDiv.css('z-index', '1');
	}
	
	var videoHtml = "";
	var unique = "video-" + Math.random() * Math.pow(10,17);
	videoHtml += "<video id='"+unique+"' src='"+videoSrc+"' width='"+settings.width+"' height='"+settings.height+"'>";
	videoHtml += "<source src='"+videoSrc+"'  type='video/mp4' />";
	videoHtml += "</video>";
	
	videoDiv.html(videoHtml);
	
	var video = videoDiv.find('video').get(0);
	video.load();
	
	videoDiv.css("opacity", "0");
	videoPlayButton.click(function(e){
		e.preventDefault();
		startHTML5VideoPlaybackByClick(videoDiv);
		videoDiv.css('z-index', '4');
	})
	addHTML5VideoControl(videoDiv);
	addHTML5VideoHandlers(videoDiv);
}
function addHTML5VideoControl(videoDiv){
	///////////////////////////////////////////////////////
	// Click on the video itself
	var videoElement = videoDiv.find('video');
	var video = videoElement.get(0);
	video.addEventListener()
	
	///////////////////////////////////////////////////////
	// The Video Control
	videoDiv.append("<div class='html5VideoControl'></div>");
	
	// DAS HIER FUNKTIONIERT NOCH NICHT!
	var fadeOutTimeout;
	videoDiv.mousedown(function(e){
		e.preventDefault();
		showControl($(this));
		clearTimeout(fadeOutTimeout)
		fadeOutTimeout = setTimeout(hideControl, 3000, videoDiv);
		console.log('mousedown');
	})
	function showControl(videoDiv){
		videoDiv.find('.html5VideoControl').fadeIn('fast');
	}
	function hideControl(videoDiv){
		videoDiv.find('.html5VideoControl').fadeOut('slow');
	}
	///////////////////////////////////////////////////////
	// The Control Wrapper
	var control = videoDiv.find('.html5VideoControl');
	control.css({
		color: "white",
		position: "absolute",
		bottom: "0",
		width: "100%",
		background: "rgba(0,0,0,.7)",
		height: "44px",
		zIndex: "30",
		fontSize: "11px",
		fonFamily: "Lucida Grande, Arial, sans-serif"
	})
	///////////////////////////////////////////////////////
	// The Play/Pause Button
	control.append("<a href='#' class='controlPlayPause'>Play/Pause</a>");
	var controlPlayPause = control.find(".controlPlayPause");
	controlPlayPause.css({
		position: "absolute",
		height: "44px",
		width: "44px",
		overflow: "hidden",
		top: "0px",
		left: "10px",
		textIndent: "-1000px",
		background: "url(" + stylesheetURL + "/img/play-pause.png) no-repeat top left"
	});
	controlPlayPause.click(function(e){
		e.preventDefault();
		toggleHTML5VideoPlay($(this).parents('.videoDiv'));
	})
	///////////////////////////////////////////////////////
	// The Fullscreen Button
	control.append("<a href='#' class='controlFullScreen'>Fullscreen</a>");
	var controlFullScreen = control.find(".controlFullScreen");
	controlFullScreen.css({
		position: "absolute",
		height: "44px",
		width: "44px",
		overflow: "hidden",
		top: "0px",
		left: "54px",
		textIndent: "-1000px",
		background: "url(" + stylesheetURL + "/img/fullscreen.png) no-repeat top left",
		display: "none"
	});
	controlFullScreen.click(function(e){
		e.preventDefault();
		var video = $(this).parents('.videoDiv').find('video:first').get(0);
		if(video.webkitSupportsFullscreen){
			video.webkitEnterFullscreen();
		}
	})
	///////////////////////////////////////////////////////
	// The Progress Bar Wrapper
	control.append("<div class='controlProgressWrapper'></div>");
	var controlProgressWrapper = control.find('.controlProgressWrapper');
	controlProgressWrapper.css({
		position: "absolute",
		left: "70px",
		top: "0px",
		right: "30px",
		bottom: "0px",
		cursor: "pointer"
	});
	///////////////////////////////////////////////////////
	// Seeking
	var downEvent = "mousedown";
	var moveEvent = "mousemove";
	var upEvent = "mouseup";
	if(Modernizr.touch){
		downEvent = "touchstart";
		moveEvent = "touchmove";
		upEvent = "touchend";
	}
	controlProgressWrapper.bind(downEvent, function(e){
		e.preventDefault();
		$(this).addClass('seekingControlProgress');
		
		seekHTML5Video(getEvent(e).pageX);
		
		$('body').bind(moveEvent, function(e){
			e.preventDefault();
			seekHTML5Video(getEvent(e).pageX);
		})
		$('body').bind(upEvent, function(e){
			e.preventDefault();
			$('body').unbind(moveEvent);
			$(window).unbind(upEvent);
			$('.seekingControlProgress').removeClass('seekingControlProgress');
		})
	})
	function getEvent(e){
		if(Modernizr.touch){
			return e.originalEvent.targetTouches[0];
		} 
		return e;
	}
	function seekHTML5Video(mousePageX){
		var mouseX = mousePageX - $('.seekingControlProgress').offset().left;
		var mousePercent = mouseX / $('.seekingControlProgress').width();
		if(mousePercent < 0){
			mousePercent = 0;
		} else if(mousePercent > 1){
			mousePercent = 1;
		}
		$('.seekingControlProgress').find(".controlPlayingProgress").css('width', (Math.round(mousePercent * 100)) + '%');
		
		var video = $('.seekingControlProgress').parents('.videoDiv').find('video').get(0);
		var seekSecond = Math.floor(video.duration * mousePercent);
		video.currentTime = seekSecond;
	}
	///////////////////////////////////////////////////////
	// The Progress
	controlProgressWrapper.append("<div class='controlProgress'></div>");
	var controlProgress = control.find(".controlProgress");
	controlProgress.css({
		position: "absolute",
		height: "6px",
		top: "20px",
		right: "0px",
		left: "0px",
		overflow: "hidden",
		background: "rgba(255,255,255,.3)",
		borderRadius: "3px 3px 3px 3px"
	})
	///////////////////////////////////////////////////////
	// The Playing Progress
	controlProgress.append("<div class='controlPlayingProgress'></div>");
	var controlPlayingProgress = control.find(".controlPlayingProgress");
	controlPlayingProgress.css({
		position: "absolute",
		height: "6px",
		top: "0px",
		left: "0px",
		background: "rgba(255,255,255,1)",
		width: "0px",
		overflow: "hidden",
		borderRadius: "3px 3px 3px 3px"
	})
	
	///////////////////////////////////////////////////////
	// Computing the progress
	videoElement.bind("timeupdate", function(){
		var currentTime = $(this).get(0).currentTime;
		var duration = $(this).get(0).duration;
		var controlPlayingProgress = $(this).parents('.videoDiv').find('.controlPlayingProgress');
		if(!controlPlayingProgress.parents('.controlProgress').hasClass("seekingControlProgress")){
			controlPlayingProgress.css("width", currentTime / duration * 100 + "%");
		}
	});
	
}
function addHTML5VideoHandlers(videoDiv){
	var videoElement = videoDiv.find('video');
	var video = videoElement.get(0);
	
	videoElement.bind('touchstart', function(e){
		var video = $(this).get(0);
		if(video.paused){
			e.preventDefault();
			video.play();
			$(this).unbind('touchstart');
		}
	})
	
	video.addEventListener("playing",function(e) {
		if(!$(this).parents(".videoDiv").hasClass("activeVideoDiv")){
			computeHTML5VideoStart($(this));
		}
		var controlPlayPause = $(this).parents(".videoDiv").find('.controlPlayPause');
		controlPlayPause.css('background-position', '0px 0px');
	}, true);
	
	video.addEventListener("pause", function(e){
		var controlPlayPause = $(this).parents(".videoDiv").find('.controlPlayPause');
		controlPlayPause.css('background-position', '0px -44px');
	})
	
	video.addEventListener('ended',function(e) {
		this.play();
	}, true);
}
function startHTML5VideoPlaybackByClick(videoDiv){
	videoDiv.unbind('click');
	var videoElement = videoDiv.find('video');
	var video = videoElement.get(0);
	video.play();
}
function toggleHTML5VideoPlay(videoDiv){
	var video = videoDiv.find('video').get(0);
	
	if(video.paused){
		video.play();
		
	} else {
		video.pause();
		
	}
}
function computeHTML5VideoStart(videoElement){
	setActiveHTML5VideosToDefault();
	videoElement.parents(".videoDiv").addClass("activeVideoDiv");
	$(".activeVideoDiv").css('opacity', '1');
}
function setActiveHTML5VideosToDefault(){
	$('.activeVideoDiv').each(function(index){
		var videoSrc = $(this).siblings('.videoPlayButton').attr('href');
		$(this).find('video').remove();
		$(this).removeClass('activeVideoDiv');
		addHTML5Video($(this).parent(), videoSrc);
	});
}
///////////////////////////////////////////////////////////////////////
// FLASH VIDEO
///////////////////////////////////////////////////////////////////////
var flashVideoCounter = 0;
function addFlashVideo(container, videoSrc){
	
	var playButton = container.find('.videoPlayButton');
	playButton.css('z-index', '3');
	playButton.click(function(e){
		e.preventDefault();
		startFlashVideo($(this).siblings('.videoDiv'));
	})
	
	var settings = {
		width:container.find('img:first').width(),
		height:container.find('img:first').height()
	};
	
	var videoDiv = container.find('.videoDiv:first');
	var flashVideoId = "flashVideo-" + flashVideoCounter;
	videoDiv.append("<div id='"+flashVideoId+"'><p style='font-size: 12px; font-weight:bold; font-family: sans-serif; margin:0px; padding: 5px; color: white; background: red;'>YOU NEED TO HAVE FLASH INSTALLED TO VIEW VIDEOS!</p></div>");
	
	var flashvars = {};
		flashvars.mediaURL = videoSrc;
		flashvars.teaserURL = videoSrc.replace('.mov', '.jpg');
		flashvars.allowSmoothing = "true";
		flashvars.autoPlay = "false";
		flashvars.buffer = "6";
		flashvars.showTimecode = "true";
		flashvars.loop = "true";
		flashvars.controlColor = "0xffffff";
		flashvars.controlBackColor = "0x000000";
		flashvars.scaleIfFullScreen = "true";
		flashvars.showScalingButton = "true";
		flashvars.defaultVolume = "100";
		flashvars.crop = "false";
		//flashvars.onClick = "toggleFullScreen";

	var params = {};
		params.menu = "false";
		params.allowFullScreen = "true";
		params.allowScriptAccess = "always";
		params.wmode = "transparent";
	
	var attributes = {};
		attributes.id = flashVideoId;
		attributes.bgcolor = "#000000"
	
	swfobject.embedSWF(
		stylesheetURL + "/swf/NonverBlaster.swf", 
		flashVideoId, 
		settings.width, 
		settings.height, 
		"9", 
		"js/expressinstall.swf", 
		flashvars, 
		params, 
		attributes
	);
	flashVideoCounter ++;
	videoDiv.css("width", "1px");
	videoDiv.css("height", "1px");
}
function startFlashVideo(videoDiv){
	setActiveFlashVideosToDefault();
	videoDiv.addClass('activeVideoDiv');
	videoDiv.siblings('.videoPlayButton').css('z-index', '1');
	var flashVideo = videoDiv.find('object:first');
	flashVideo.get(0).sendToActionScript('play');
	videoDiv.css("width", "100%");
	videoDiv.css("height", "100%");
}
function setActiveFlashVideosToDefault(){
	$('.activeVideoDiv').each(function(){
		$(this).siblings('.videoPlayButton').css('z-index', '3');
		var flashVideo = $(this).find('object:first');
		flashVideo.get(0).sendToActionScript('resetAll');
		$(this).css("width", "1px");
		$(this).css("height", "1px");
		$(this).removeClass('activeVideoDiv');
	})
}


///////////////////////////////////////////////////////////////////
//	Create PDF
///////////////////////////////////////////////////////////////////
function toggleCurrentImagePDF(){
	var currentImageLink = currentSlide.find('.imglinks a').eq(currentFocusImageID).attr('href').replace(uploadBaseURL, '');
	var currentImageString = currentImageLink + ":" + currentSlide.find('.captionTitle:first').text() + ",";
	if(pdfImageString.indexOf(currentImageLink) === -1){
		pdfImageString += currentImageString;
	} else {
		pdfImageString = pdfImageString.replace(currentImageString, '');
	}
	setPDFCookie(pdfImageString);
	//deleteCookie();
	//adjustPDFPageItem();
	unhiglightPDFImage();
	setCaptionInfo(currentFocusImageID);
}
function higlightPDFImage(){
	if($('.bigImage').length > 0){
		$('.bigImage img').eq(currentFocusImageID).css('outline', '1px solid');
		$('.bigImage').eq(currentFocusImageID).css('overflow', 'visible');
	}
}
function unhiglightPDFImage(){
	$('.bigImage img').css('outline', '0px none');
	$('.bigImage').css('overflow', 'hidden');
}
function adjustPDFPageItem(){
	if(pdfImageString.indexOf('.jpg') != -1){
		$('#pdf_page_item').show();
	} else {
		$('#pdf_page_item').hide();
	}
}
function addZero(n){
	var number = n;
	number < 10 ? number = "0"+number : 0;
	return number;
}
function findCurrentSlide(){
	var i = 0;
	var currentSlideID;
	$('.slide').has('a.teaser').each(function(){
		if($(this).find('a.teaser').attr('href').split(baseURL)[1] == lightboxPath){
			currentSlideID = i;
			currentSlide = $(this);
			return false;
		}
		i++;
	});
	$('.slide').removeClass('currentSlide');
	$('.slide').has('.teaser').eq(currentSlideID).addClass('currentSlide');
}
function findNextSlide(){
	var addressValue = "/category/"+categorySlug+"/";
	var afterCurrent = false;
	var i = 0;
	$('.slide:has(a.teaser)').each(function(){
		if($(this).hasClass(categorySlug)){
			var currentLink = $(this).find('.teaser').attr('href').replace(baseURL, '');
			if(currentLink == $.address.value()){
				afterCurrent = true;
			} else if(afterCurrent == true){
				addressValue = currentLink;
				return false;
			};
		}
		i ++;
	});
	moveDirection = "left";
	$.address.value(addressValue);
}
function findPreviousSlide(){
	var addressValue = "/category/"+categorySlug+"/";
	var afterCurrent = false;
	var lastLink = "";
	var i = 0;
	$('.slide:has(a.teaser)').each(function(){
		if($(this).hasClass(categorySlug)){
			var currentLink = $(this).find('.teaser').attr('href').replace(baseURL, '');
			if(currentLink == $.address.value()){
				addressValue = lastLink;
				return false;
			};
			lastLink = currentLink;
		}
		i ++;
	});
	moveDirection = "right";
	$.address.value(addressValue);
}

///////////////////////////////////////////////////////////////////
//	Cookie
///////////////////////////////////////////////////////////////////
function setPDFCookie(s){
	setCookie(s);
	pdfImageString = getCookie();
	if(pdfImageString == null){
		alert('You need to have cookies enabled in order to use the PDF function!')
	}
}
function setCookie(s){
	$.cookie(COOKIE_NAME, s, options);
}
function getCookie(){
	return $.cookie(COOKIE_NAME);
}
function deleteCookie(){
	$.cookie(COOKIE_NAME, null, options);
}
pdfImageString = getCookie();
pdfImageString == null ? pdfImageString = '' : 0;
//deleteCookie();


///////////////////////////////////////////////////////////////////
//	Loading Wheel
///////////////////////////////////////////////////////////////////

function addLoadingWheel(wheel){
	removeLoadingWheel(wheel);
	wheel.show();
	loadingWheels.push(wheel);
	loadingInterval = setInterval(loadingLoop, 20);
}
function loadingLoop(){
	for(var i=0; i<loadingWheels.length; i++){
		var current = loadingWheels[i];
		var currentIMG = current.find('img');
		loadingXpos -= currentIMG.width() / 18;
		if(loadingXpos <= -currentIMG.width()){
			loadingXpos = 0;
		}
		currentIMG.css('margin-left', loadingXpos + "px");
	}
}
function removeLoadingWheel(wheel){
	wheel.hide();
	for(var i=0; i<loadingWheels.length; i++){
		if(loadingWheels[i].attr('id') == wheel.attr('id')){
			loadingWheels.splice(i, 1);
		}
	}
	if(loadingWheels.length == 0){
		clearInterval(loadingInterval);
	}
}
