EOT;
	if (isset($CONFIG['page_refresh']) && is_numeric($CONFIG['page_refresh'])) {
		echo <<
EOT;
	}
	if ($CONFIG['graph_type'] == 'canvas') {
		echo <<
	
	
	
	
	
	
	
	
	
EOT;
	}
echo <<
EOT;
}
function html_end() {
	global $CONFIG;
	$git = '/usr/bin/git';
	$changelog = $CONFIG['webdir'].'/doc/CHANGELOG';
	$version = 'v?';
	if (file_exists($git) && is_dir($CONFIG['webdir'].'/.git')) {
		chdir($CONFIG['webdir']);
		$version = exec($git.' describe --tags');
	} elseif (file_exists($changelog)) {
		$changelog = file($changelog);
		$version = explode(' ', $changelog[0]);
		$version = 'v'.$version[0];
	}
	echo <<
EOT;
	if ($CONFIG['graph_type'] == 'canvas') {
		echo <<
EOT;
		if ($CONFIG['rrd_fetch_method'] == 'async') {
		echo <<
EOT;
		} else {
		echo <<
EOT;
		}
	}
echo <<
EOT;
}
function plugin_header($host, $plugin) {
	global $CONFIG;
	return printf("\n", $CONFIG['weburl'], $host, $plugin, $plugin);
}
function plugins_list($host, $selected_plugins = array()) {
	global $CONFIG;
	$plugins = collectd_plugins($host);
	echo '';
	echo '
Plugins ';
	echo '
';
	printf("overview %4\$s %4\$s  ';
	echo '
', $cat);
	printf('%s ', $cat);
	echo "\n";
	$row_style = array(0 => "even", 1 => "odd");
	$host_counter = 0;
	foreach($hosts as $host) {
		$host_counter++;
		printf('', $row_style[$host_counter % 2]);
		printf('%s %.2f ', $class, $rrd_info[$info]);
				}
			}
		}
		if ($CONFIG['showmem']) {
			$rrd_info_mu = $rrd->rrd_info($CONFIG['datadir'].'/'.$host.'/memory/memory-used.rrd');
			$rrd_info_mf = $rrd->rrd_info($CONFIG['datadir'].'/'.$host.'/memory/memory-free.rrd');
			$rrd_info_bf = $rrd->rrd_info($CONFIG['datadir'].'/'.$host.'/memory/memory-buffered.rrd');
			$rrd_info_ca = $rrd->rrd_info($CONFIG['datadir'].'/'.$host.'/memory/memory-cached.rrd');
			# ignore if file does not exist
			if (!$rrd_info_mu || !$rrd_info_mf || !$rrd_info_bf || !$rrd_info_ca)
				continue;
			$info='ds[value].last_ds';
			if (isset($rrd_info_mu[$info]) && isset($rrd_info_mf[$info]) && isset($rrd_info_bf[$info]) && isset($rrd_info_ca[$info]) ) {
				$percent_mem =	$rrd_info_mu[$info] * 100 / ($rrd_info_mu[$info] + $rrd_info_mf[$info] + $rrd_info_bf[$info] + $rrd_info_ca[$info]);
				$class = '';
				if ($percent_mem > 90)
					$class = ' class="crit"';
				elseif ($percent_mem > 70)
					$class = ' class="warn"';
				printf('%d%% ', $class, $percent_mem);
			}
		}
		print " \n";
	}
	echo "
\n";
	echo " \n";
}
function breadcrumbs() {
	$path = '';
	if (validate_get(GET('h'), 'host'))
		$path .= ' - '.ucfirst(GET('h'));
	if (validate_get(GET('p'), 'plugin'))
		$path .= ' - '.ucfirst(GET('p'));
	if (validate_get(GET('pi'), 'pinstance'))
		$path .= ' - '.GET('pi');
	if (validate_get(GET('t'), 'type') && validate_get(GET('p'), 'plugin') && GET('t') != GET('p'))
		$path .= ' - '.GET('t');
	if (validate_get(GET('ti'), 'tinstance'))
		$path .= ' - '.GET('ti');
	return $path;
}
# generate graph url's for a plugin of a host
function graphs_from_plugin($host, $plugin, $overview=false) {
	global $CONFIG;
	if (!$plugindata = collectd_plugindata($host, $plugin))
		return false;
	if (!$plugindata = group_plugindata($plugindata))
		return false;
	if (!$plugindata = plugin_sort($plugindata))
		return false;
	foreach ($plugindata as $items) {
		if (
			$overview && isset($CONFIG['overview_filter'][$plugin]) &&
			$CONFIG['overview_filter'][$plugin] !== array_intersect_assoc($CONFIG['overview_filter'][$plugin], $items)
		) {
			continue;
		}
		$items['h'] = $host;
		$time = array_key_exists($plugin, $CONFIG['time_range'])
			? $CONFIG['time_range'][$plugin]
			: $CONFIG['time_range']['default'];
		if ($CONFIG['graph_type'] == 'canvas') {
			chdir($CONFIG['webdir']);
			isset($items['p']) ? $_GET['p'] = $items['p'] : $_GET['p'] = '';
			isset($items['pi']) ? $_GET['pi'] = $items['pi'] : $_GET['pi'] = '';
			isset($items['t']) ? $_GET['t'] = $items['t'] : $_GET['t'] = '';
			isset($items['ti']) ? $_GET['ti'] = $items['ti'] : $_GET['ti'] = '';
			$_GET['s'] = $time;
			include $CONFIG['webdir'].'/graph.php';
		} else {
			printf('