
window.addEventListener('load', function() {
	var login = document.getElementById('login');
	var loginLinks = document.getElementsByClassName('login');
	var doNotClose = false;
	function openTheLogin() {
		if(doNotClose) {
			return;
		}
		login.className = 'open';
		doNotClose = true;
		window.setTimeout(function() {
			doNotClose = false;
		}, 10);
	}
	function closeTheLogin() {
		if(doNotClose) {
			return;
		}
		login.className = '';
	}
	window.addEventListener('click', closeTheLogin);
	for(var i = 0; i < loginLinks.length; i++) {
		loginLinks[i].addEventListener('mouseover', openTheLogin);
		loginLinks[i].addEventListener('click', openTheLogin);
	}
});
/////////////////////////////////////////////////////
// Show fullscreen icon for Applications like NextFlu
document.addEventListener('DOMContentLoaded', function() {
	var fullscreenElements = document.querySelectorAll('.canfullscreen');
	var i;
	for (i = 0; i < fullscreenElements.length; i++) {
		(function(element) {
			var activateIcon = document.createElement('img');
			activateIcon.classList.add('fullscreenon');
			activateIcon.src = 'fileadmin/gisaid/img/fullscreenon.svg';
			activateIcon.alt = 'Fullscreen';
			activateIcon.title = 'Fullscreen';
			activateIcon.addEventListener('click', function(e) {
				activateFullscreen(element);
				e.preventDefault();
			});
			element.appendChild(activateIcon);
			var deactivateIcon = document.createElement('img');
			deactivateIcon.classList.add('fullscreenoff');
			deactivateIcon.src = 'fileadmin/gisaid/img/fullscreenoff.svg';
			deactivateIcon.alt = 'Disable Fullscreen';
			deactivateIcon.title = 'Disable Fullscreen';
			deactivateIcon.addEventListener('click', function(e) {
				deactivateFullscreen();
				e.preventDefault();
			});
			element.appendChild(deactivateIcon);
		})(fullscreenElements[i]);
	}
	function canDisplayFullscreen() {
		return document.fullscreenEnabled ||
			document.msFullscreenEnabled ||
			document.mozFullScreenEnabled ||
			document.webkitFullscreenEnabled;
	}
	function refreshFullscreenAvailability() {
		if(canDisplayFullscreen()) {
			document.body.classList.remove('fullscreenincapable');
		} else {
			document.body.classList.add('fullscreenincapable');
		}
	}
	function activateFullscreen(element) {
		if (element.requestFullscreen) {
			element.requestFullscreen();
		} else if (element.msRequestFullscreen) {
			element.msRequestFullscreen();
		} else if (element.mozRequestFullScreen) {
			element.mozRequestFullScreen();
		} else if (element.webkitRequestFullscreen) {
			element.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
		}
	}
	function deactivateFullscreen() {
		if (document.exitFullscreen) {
			document.exitFullscreen();
		} else if (document.msExitFullscreen) {
			document.msExitFullscreen();
		} else if (document.mozCancelFullScreen) {
			document.mozCancelFullScreen();
		} else if (document.webkitExitFullscreen) {
			document.webkitExitFullscreen();
		}
	}
	refreshFullscreenAvailability();
});
// document.addEventListener('DOMContentLoaded', function() {
// 	var e = document.querySelectorAll('.loader'),
// 	    i;
// 	for (i = 0; i < e.length; i++) {
// 		(function(elLoader) {
// 			elLoader.querySelector('iframe').addEventListener('load', function() {
// 				elLoader.classList.remove('loader');
// 			});
// 		})(e[i]);
// 	}
// });

// Prepend this to all files, using the a7 object:
if (typeof window.a7 === 'undefined') {
	window.a7 = {};
}

// Mobile v2.1.1 (needed by some other scripts - has no effect by itself)
// Depends on:
//  - jQuery v1.7
function a7mobile(originalSettings) {
	var defaultSettings = {
		possibleResolutions : ['standard','mobile','tablet','phone']
	}, settings = jQuery.extend(defaultSettings, originalSettings);

	var currentResolutions = [];
	this.evalMobile = function() {
		var prevRes = currentResolutions.slice();
		currentResolutions = [];
		jQuery.each(settings.possibleResolutions, function(k, v) {
			if(jQuery('.resdetector.' + v + 'only').css('display') != 'none') {
				if(jQuery.inArray(v, prevRes) === -1)
					a7mobile.evalMobile.on[v].fire(true, v);
				currentResolutions.push(v);
			}else if(jQuery.inArray(v, prevRes) !== -1)
				a7mobile.evalMobile.on[v].fire(false, v);
		});
	};
	this.initializeMobile = function() {
		jQuery.each(settings.possibleResolutions, function(k, v) {
			var jDetector = jQuery(document.createElement('div'));
			jDetector.addClass(v + 'only resdetector');
			jDetector.attr('id', v + 'detector');
			jDetector.append(document.createTextNode(' '));
			jQuery('body').append(jDetector);
		});
		a7mobile.evalMobile.on.initialize.fire();
		jQuery(window).on('resize', a7mobile.evalMobile);
		a7mobile.evalMobile();
	};
	this.check = function(size) {
		return currentResolutions.indexOf(size) !== -1;
	};
	this.evalMobile.on = [];
	jQuery.each(settings.possibleResolutions, function(k, v) {
		a7mobile.evalMobile.on[v] = jQuery.Callbacks();
	});
	this.evalMobile.on.initialize = jQuery.Callbacks();
	jQuery(window).ready(this.initializeMobile);
}
a7mobile.apply(a7mobile, {});

// GetQsParameters v1.0.0 (needed by some other scripts - has no effect by itself)
// Depends on:
//  - Mobile v2.0.0
a7mobile.getQsParameters = function(fullQueryString) {
	var result = {}, tmp = [], queryString = fullQueryString.substr(1);
	if(typeof queryString != 'string' || !queryString.length)
		return result;
	queryString.split("&").forEach(function (item) {
		tmp = item.split("=");
		result[tmp[0]] = decodeURIComponent(tmp[1]);
	});
	return result;
};

// Plus v2.5.0 (adds a plus icon into mobile menus)
// Depends on:
//  - GetQsParameters v1.0.0
//  - Mobile v2.0.0
//  - jQuery v1.8
(function(originalSettings) {
	a7mobile.evalMobile.on.initialize.add(function() {
		var defaultQsParams = a7mobile.getQsParameters(location.search);
		defaultQsParams['type'] = 91;
		var defaultSettings = {
			liFilter : '*',
			resolutions : ['phone'],
			menue : '#menuehoch',
			getAjaxRequestModifications : null,
			subFilter : 'li.sub',
			autoSub : false,
			noAjaxMode : false,
			addPlusFunction : function(li) {
				var plus = jQuery(document.createElement('a')).text('+').addClass('plus');
				li.prepend(plus);
				return plus;
			}
		}, settings = jQuery.extend(defaultSettings, originalSettings);
		
		var mobileLoaded = false, mobileLoading = false;
		var jMenuehoch = null;
		jMenuehoch = jQuery(settings.menue);
		jMenuehoch = jMenuehoch.add(jMenuehoch.children('ul')).filter('ul');
		function plus(showPlus) {
			function onClick(ev) {
				jQuery(this).closest('li').children('ul.pluslist').toggleClass('inactive');
				if(jQuery(this).closest('li').children('ul.pluslist').is(':visible')) {
					jQuery(this).text('-').addClass('minus');
				} else {
					jQuery(this).text('+').removeClass('minus');
				}
			}
			function addPlus(li) {
				for(var i = 0; i < li.length; i++) {
					settings.addPlusFunction(li.eq(i)).on('click', onClick);
				}
			}
			if(!mobileLoaded && !mobileLoading && showPlus) {
				var originalRequest = {
					'url' : location.protocol + '//' + location.host + location.pathname,
					'type' : 'GET',
					'data' : defaultQsParams,
					//TODO: error handling
					'success' : function(data, status, xhr) {
						var newDom = jQuery.parseHTML(data);
						var jNewMenu = jQuery(newDom).add(jQuery(newDom).children('ul')).filter('ul');
						jNewMenu.find('>li').filter(settings.liFilter).each(function() {
							var jNli = jQuery(this).addClass('pluslist');
							var jOli = jMenuehoch.find('>li').filter(settings.liFilter).eq(jNli.index());
							var jNcul = jNli.children('ul');
							var jOcul = jOli.children('ul');
							var jNuls = jNcul.add(jNcul.find('ul'));
							// Add class "inactive" to all contained uls
							jNuls.addClass('inactive pluslist');
							jOcul.addClass('nonpluslist');
							if(jOli.length > 0) jOli.append(jNcul);
							else jMenuehoch.append(jNli);
						});
						var jLis, lis;
						if(settings.autoSub) {
							lis = [];
							jMenuehoch.find(settings.liFilter).each(function(idx, el) {
								if(jQuery(el).find('ul').length > 0) {
									lis.push(el);
								}
							});
							jLis = jQuery(lis);
						} else {
							jLis = jMenuehoch.find(settings.liFilter).filter(settings.subFilter);
						}
						addPlus(jLis);
						jLis.filter('.act, .cur').each(function(sk, sv) {
							onClick.call(jQuery(sv).children('.plus'), {});
						});
						mobileLoading = false;
						mobileLoaded = true;
					}
				}, request = originalRequest;
				if(typeof settings.getAjaxRequestModifications == 'function') {
					request = jQuery.extend(originalRequest, settings.getAjaxRequestModifications(originalRequest));
				}
				if(settings.noAjaxMode) {
					request.success(jMenuehoch.prop('outerHTML'));
				} else {
					jQuery.ajax(request);
				}
				mobileLoading = true;
			}
		}
		jQuery.each(settings.resolutions, function(k, v) {
			a7mobile.evalMobile.on[v].add(plus);
		});
	});
})({
	resolutions : ['mobile', 'tablet'],
	menue : '#menuehoch',
	liFilter : 'li',
	autoSub : true,
	noAjaxMode : true
});

// HtmlSwitcher v1.0.0 (moves HTML elements in specific resolutions to other locations)
// Depends on:
//  - Mobile v2.0.0
//  - jQuery
(function(originalSettings) {
	a7mobile.evalMobile.on.initialize.add(function() {
		var defaultSettings = {
			movements : []
		}, settings = jQuery.extend(defaultSettings, originalSettings);
		var jPlaceholder = jQuery(document.createElement('div'));
		jPlaceholder.addClass('htmlswitcher placeholder');
		jQuery.each(settings.movements, function(k, movement) {
			var jSource = jQuery(movement.source);
			var jTarget = jQuery(movement.target);
			var jThisPlaceholder = jPlaceholder.clone().addClass(movement.placeholderClass);
			jQuery.each(movement.resolutions, function(k, resolution) {
				a7mobile.evalMobile.on[resolution].add(function(on) {
					if(on) {
						jSource.before(jThisPlaceholder);
						switch(movement.insertionStrategy) {
							case 'after':
								jTarget.after(jSource);
								break;
							case 'before':
								jTarget.before(jSource);
								break;
						}
					} else {
						jThisPlaceholder.after(jSource);
						jThisPlaceholder.remove();
					}
				});
			});
		});
	});
})({
	movements : [
		{
			source : '#menuehoch',
			target : '#links',
			insertionStrategy : 'after',
			placeholderClass : 'menuehoch',
			resolutions : ['phone']
		}
	]
});

// Accordion Special Version (makes accordions work for elements of type .fulltext and .headeraccordion)
// Depends on:
// - jQuery 1.7
(function(originalSettings) {
	var defaultSettings = {
		emptyChecks : [],
		printEmptyClass : 'a7printempty',
		accordionOpenElementHtml : null,
		accordionCloseElementHtml : null,
		ignoreSelector : null,
	}, settings = jQuery.extend({}, defaultSettings, originalSettings);
	var self = {};
	document.addEventListener('DOMContentLoaded', function() {
		if (typeof self.fulltexts === 'undefined') self.fulltexts = [];
		function Fulltext(jFulltext) {
			var self = this;
			self.jFulltext = jFulltext.addClass('hidefulltext fulltext');
			self.jControlElements = jQuery([]);
			self.jAccordion = jQuery([]);
			self.createControlElement = function (jTemplate, actions) {
				var jEl = jTemplate.clone();
				self.convertToControlElement(jEl, actions);
				return jEl;
			};
			self.convertToControlElement = function (jEl, actions) {
				self.jControlElements = self.jControlElements.add(jEl);
				jEl.addClass('hidefulltext');
				var jClickables = jQuery([]);
				if ((actions & Fulltext.ACTION_OPEN) != 0)
					jClickables = jClickables.add(jEl.find('.more').add(jEl.filter('.more')));
				if ((actions & Fulltext.ACTION_CLOSE) != 0)
					jClickables = jClickables.add(jEl.find('.close').add(jEl.filter('.close')));
				jClickables.on('click', function () {
					var possibleActions = self.jFulltext.hasClass('showfulltext') ? Fulltext.ACTION_CLOSE : Fulltext.ACTION_OPEN;
					if (jQuery(this).hasClass('more') && (possibleActions & actions & Fulltext.ACTION_OPEN) != 0)
						self.open();
					if (jQuery(this).hasClass('close') && (possibleActions & actions & Fulltext.ACTION_CLOSE) != 0)
						self.close();
				});
			};
			self.close = function () {
				self.jFulltext.removeClass('showfulltext').addClass('hidefulltext');
				self.jControlElements.removeClass('showfulltext').addClass('hidefulltext');
				self.jAccordion.removeClass('accordionopened').addClass('accordionclosed');
				self.jFulltext.trigger('accordionclose', [self]);
			};
			self.open = function () {
				self.jFulltext.removeClass('hidefulltext').addClass('showfulltext');
				self.jControlElements.removeClass('hidefulltext').addClass('showfulltext');
				self.jAccordion.removeClass('accordionclosed').addClass('accordionopened');
				self.jFulltext.trigger('accordionopen', [self]);
			};
		}
		Fulltext.ACTION_OPEN = 0x01;
		Fulltext.ACTION_CLOSE = 0x02;
		self.Fulltext = Fulltext;
		var fulltext, i, jEl, jHeader, jContent;
		if (settings.accordionOpenElementHtml !== null) {
			var jOpenElementTemplate = jQuery(settings.accordionOpenElementHtml);
			var jCloseElementTemplate = null;
			var jSetMore;
			if (settings.accordionCloseElementHtml !== null)
				jCloseElementTemplate = jQuery(settings.accordionCloseElementHtml);
			var jFulltexts = jQuery('.fulltext');
			if (settings.ignoreSelector !== null)
				jFulltexts = jFulltexts.not(settings.ignoreSelector);
			for (i = 0; i < jFulltexts.length; i++) {
				fulltext = new Fulltext(jFulltexts.eq(i));
				jSetMore = fulltext.jFulltext.closest('.csc').find('.setmore');
				if (jSetMore.length > 0) {
					jSetMore.addClass('more');
					fulltext.convertToControlElement(jSetMore, Fulltext.ACTION_OPEN);
				} else {
					fulltext.createControlElement(jOpenElementTemplate, Fulltext.ACTION_OPEN).insertAfter(fulltext.jFulltext);
				}
				if (fulltext.jFulltext.find('.close').length > 0) {
					fulltext.convertToControlElement(fulltext.jFulltext.find('.close'), Fulltext.ACTION_CLOSE);
				}
				if (jCloseElementTemplate !== null)
					fulltext.createControlElement(jCloseElementTemplate, Fulltext.ACTION_CLOSE).insertAfter(fulltext.jFulltext);
				self.fulltexts.push(fulltext);
			}
		}
		var jAccordionStandaloneElements = jQuery('.dataaccordion'), jClose, jMore, jParent;
		for (i = 0; i < jAccordionStandaloneElements.length; i++) {
			jEl = jAccordionStandaloneElements.eq(i);
			jParent = jEl.closest(jEl.data('parent'));
			jMore = jParent.find(jEl.data('more'));
			jClose = jParent.find(jEl.data('close'));
			fulltext = new Fulltext(jEl);
			if (jMore.is(jClose)) {
				fulltext.convertToControlElement(jMore, Fulltext.ACTION_OPEN | Fulltext.ACTION_CLOSE);
			} else {
				if (jMore.length > 0)
					fulltext.convertToControlElement(jMore, Fulltext.ACTION_OPEN);
				if (jClose.length > 0)
					fulltext.convertToControlElement(jClose, Fulltext.ACTION_CLOSE);
			}
			fulltext.jAccordion = jEl.addClass('accordionclosed');
			self.fulltexts.push(fulltext);
		}
		var jAccordionContentElements = jQuery('.headeraccordion, .ceaccordion');
		for (i = 0; i < jAccordionContentElements.length; i++) {
			jEl = jAccordionContentElements.eq(i);
			jHeader = jEl.filter('.headeraccordion').find('.csc-header h1, .csc-header h2, .csc-header h3, .csc-header h4, .csc-header h5, .csc-header h6, .csc-header h7').first();
			jHeader = jHeader.add(jEl.filter('.ceaccordion').find('.csc').first());
			jHeader.addClass('more close');
			jContent = jEl.filter('.headeraccordion').find('.csc-header').parent().children().not('.csc-header');
			jContent = jContent.add(jEl.filter('.ceaccordion').find('.csc').not(jHeader));
			fulltext = new Fulltext(jContent);
			fulltext.convertToControlElement(jHeader, Fulltext.ACTION_OPEN | Fulltext.ACTION_CLOSE);
			fulltext.jAccordion = jEl.addClass('accordionclosed');
			self.fulltexts.push(fulltext);
		}
		setTimeout(function() {
			document.body.classList.add('animateaccordions');
		}, 1000);
	});
})({
	'accordionOpenElementHtml': '<a class="more bar"><img src="fileadmin/gisaid/img/accordion-open.svg" width="20" height="20" /></a>',
	'accordionCloseElementHtml': '<a class="close bar"><img src="fileadmin/gisaid/img/accordion-close.svg" width="20" height="20" /></a>',
	'ignoreSelector': '.accordion *',
});

// AnchorJS v0.1.4
// a7MB, 25.06.15: Takes the hash of the current URI and sets the scroll position respecting the height of e.g. #fixo to an appropriate position.
function correctAnchorScroll(hash, forceJump) {
	var eFixo, height, eTarget, top, distance;
	if(typeof hash == 'undefined') {
		hash = location.hash;
	}
	if(hash.length < 2) {
		return true;
	}
	hash = "" + hash;
	eTarget = document.getElementById(hash.substring(1));
	if(eTarget === null || (anchorJS.currentHash == hash && (typeof forceJump == 'undefined' || !forceJump))) {
		return true;
	}
	eFixo = document.getElementById(anchorJS.settings.contentOverlappingElementIds[0]);
	if(window.getComputedStyle(eFixo).getPropertyValue('position') != 'fixed') {
		return true;
	}
	height = eFixo.offsetHeight;
	top = eTarget.getBoundingClientRect().top - document.body.getBoundingClientRect().top - height;
	window.scrollTo(0, top);
	anchorJS.currentHash = hash;
}
if(window.addEventListener) {
	window.addEventListener('hashchange', function() { correctAnchorScroll(void 0, true); });
	window.addEventListener('load', function() { correctAnchorScroll(void 0, true); });
	document.addEventListener('DOMContentLoaded', function() {
		document.removeEventListener('DOMContentLoaded', arguments.callee, false);
		correctAnchorScroll();
	}, false );
} else {
	window.attachEvent('hashchange', function() { correctAnchorScroll(void 0, true); });
	window.attachEvent('load', function() { correctAnchorScroll(void 0, true); });
}
if(typeof jQuery != 'undefined') {
	jQuery(document).on('click', 'a[href*="#"]', function(e) {
		if(correctAnchorScroll(this.href.substr(this.href.indexOf('#')), true) !== true) {
			e.preventDefault();
		}
	});
}

var anchorJS = {};
anchorJS.settings = {
	contentOverlappingElementIds: ['fixo']
};


			// decrypt helper function
		function decryptCharcode(n,start,end,offset) {
			n = n + offset;
			if (offset > 0 && n > end) {
				n = start + (n - end - 1);
			} else if (offset < 0 && n < start) {
				n = end - (start - n - 1);
			}
			return String.fromCharCode(n);
		}
			// decrypt string
		function decryptString(enc,offset) {
			var dec = "";
			var len = enc.length;
			for(var i=0; i < len; i++) {
				var n = enc.charCodeAt(i);
				if (n >= 0x2B && n <= 0x3A) {
					dec += decryptCharcode(n,0x2B,0x3A,offset);	// 0-9 . , - + / :
				} else if (n >= 0x40 && n <= 0x5A) {
					dec += decryptCharcode(n,0x40,0x5A,offset);	// A-Z @
				} else if (n >= 0x61 && n <= 0x7A) {
					dec += decryptCharcode(n,0x61,0x7A,offset);	// a-z
				} else {
					dec += enc.charAt(i);
				}
			}
			return dec;
		}
			// decrypt spam-protected emails
		function linkTo_UnCryptMailto(s) {
			location.href = decryptString(s,3);
		}
		