function maximizeElement(elm) {
	var maxheight = getMaxHeight(elm) - 25;

	var n = $(elm);

	n.style.height = maxheight + 'px';
}

function getMaxHeight(elm) {
	var n = $(elm);
	if(!n)
		return 0;

	var posy = n.offsetTop;

	while((n = n.offsetParent) != null)
		posy += n.offsetTop;

	var innerHeight = window.innerHeight || document.documentElement.clientHeight;

	return (innerHeight - posy);
}

function $(n) {
	if(typeof(n) == 'object')
		return n;

	if(typeof(n) != 'string')
		return null;

	return document.getElementById(n);
}

function display(node, type) {
	var n = $(node);

	if(!n)
		return;

	n.style.display = type;
}

function toggleplatform(box) {
	var platform = box.value;

	// Die aktuelle Platform wegnehmen
	for(var i = 0; i < platforms.length; i++)
		hideCategories(platforms[i]);

	// Alle Checkboxen disablen
	disablePlatforms();

	if(box.checked == true)
		selectPlatform(platform);
	else
		unselectPlatform(platform);

	return;
}

function selectPlatform(platform) {
	// Alle anderen Platformen unselecten
	for(var i = 0; i < platforms.length; i++) {
		if(platforms[i] == platform)
			continue;

		// Deren Unterkategorien wegnehmen
		// Deren Contents wegnehmen
		if($('platform_' + platforms[i]).checked == true)
			unselectPlatform(platforms[i]);
	}

	// Alle Checkboxen disablen
	disablePlatforms();

	display('info_' + platform, '');

	// Die Platformdaten laden
	map.selectPlatform(platform, function(res, data) {
		$('platform_' + data).checked = true;

		showCategories(data);

		if(data == 'gastrotipps')
			map.setMapType('street');

		display('info_' + platform, 'none');
		display('extra_' + platform, '');

		// Alle Checkboxen wieder enablen
		enablePlatforms();
	}, platform);
}

function unselectPlatform(platform) {
	$('platform_' + platform).checked = false;

	// Die Unterkategorien wegnehmen (display: none)
	hideCategories(platform);

	display('extra_' + platform, 'none');

	// Alle Checkboxen disablen
	disablePlatforms();

	// Den Content von der Karte nehmen
	map.unselectPlatform();

	// Alle Checkboxen wieder enablen
	enablePlatforms();
}

function disablePlatforms() {
	for(var i = 0; i < platforms.length; i++)
		$('platform_' + platforms[i]).disabled = 'true';

	return;
}

function enablePlatforms() {
	for(var i = 0; i < platforms.length; i++)
		$('platform_' + platforms[i]).disabled = '';

	return;
}

function showCategories(platform) {
	var n = $('categories_' + platform);

	// Zählen, wieviele Unterkategorien nicht ausgewählt sind
	var c = 0;
	var categories = [];
	for(var i = 0; i < n.childNodes.length; i++) {
		if(n.childNodes[i].nodeName.toLowerCase() != 'input')
			continue;

		if(n.childNodes[i].checked == true)
			categories.push(n.childNodes[i].value);
		else
			c++;
	}

	if(c != 0)
		map.showCategories(categories);
	else
		map.showCategories();

	n.style.display = '';

	return;
}

function hideCategories(platform) {
	var n = $('categories_' + platform).style.display = 'none';
}

function togglecategory(box) {
	var values = [];

	values.push(box.value);

	var sub = box.getAttribute('subid');
	if(typeof(sub) == 'string')
		values = values.concat(sub.split(','));

	if(box.checked == true)
		map.showCategories(values);
	else
		map.hideCategories(values);
}