/*
######################## Keybord-Steuerung V 2.1 ############################
#                                                                           #
#			                 (c) 2004 Ralf Mittermüller                           #
#                          info@crosslance.de                               #
#                           V 2.2  2004/07/24                               #
#                                                                           #
#   Dieses Script darf und soll frei kopiert und genutzt werden, solange    #
#                 die Copyright-Angabe erhalten bleibt                      #
#                                                                           #
# Der Autor übernimmt keinerlei Haftung gegen evtl. Störungen oder Schäden, #
#           die durch die Benutzung des Scriptes entstehen                  #
#                                                                           #
#    Über ein kurze Info, wo und von wem dieses Script eingesetzt wird,     #
#                           wäre ich dankbar.                               #
#                                                                           #
#############################################################################


############################ Funktionalität #################################
# 																																	        #
# Die Keyboard-Steuerung wurde dazu entwickelt, Menschen mit körperlichen   #
# Beeinträchtigungen (früher gemeinhin 'Behinderte' genannt)	              #
# die Möglichkeit zu bieten, Seiten ohne Mausklickerei zu durchsurfen.      #
# Die erste Fassung entstand vor vielen Jahren und wurde mit dieser Version #
# umgeschrieben, verbessert und erweitert.																	#
#                                                                           #
# was bietet die Keyboard-Steuerung?:                                       #
# o in der Konfiguration kann festgelegt werden,                            #
#   - welche Links bzw. Aktionen mit einem einzigen Tastendruck             #
#      erreicht bzw. ausgelöst werden können                                #
#    - eingestellt werden, ob zwischen Gross- und Kleinschreibung           #
#      eines Buchstaben unterschieden wird                                  #
#    - ob die Keyboardsteuerung beim Betrteten einer Site                   #
#      ein- oder ausgeschaltet ist                                          #
#    - mit welchem Buchstaben bzw. Zeichen die Keyboardsteuerung            #
#      aus- bzw. eingeschaltet werden kann                                  #
#                                                                           #
# o Alle Links und Funktionen, die in der Konfiguration definiert sind,     #
#   gelten für alle Seiten, in das Script eingebaut wird									  #
# o Links u. Aktionen, die nur auf einer Seiten gelten sollen, können       #
#   auf einfache Art und Weise dort eingefügt werden                        #
#                                                                           #
# weitere Funktionalitäten:                                                 #
# die Keyboradsteuerung                                                     #
# - ist abgeschaltet, wenn gleichzeitig STRG oder ALT gedrückt werden       #
#   (es sei denn Links/AKtionen wurden dafür definiert                      #
# - ist  abgeschaltet, wenn in einem Formularfeld geschrieben wird          #
# - durch das Setzen von Cookies werden Einstellungen über eine Seite       #
#   hinaus gehalten                                                         #
#                                                                           #
# Zusatzfunktionen dieser Version:                                          #
# - Schriftvergrösserung bei '+'                                            #
# - Schriftverkleinerung bei '-'                                            #
# - Zurücksetzen der Schriftgrösse auf 'Standard' bei 'n'                   #
#	(Diese Funktionen müssen allerdings von Ihnen 'von Hand' angepasst werden #
#                                                                           # 
#############################################################################

############################## Benutzung ####################################
# 																																	        #
# o auf jeder Seite, in der das Script eingesetzt werden soll,              #
#   muss das Script	verlinkt werden                                         #
# o in den <body>-Tag muss eingrfügt werden:                                #
#   onLoad="initStart()"                                                    #
# o nicht zentrale Links o. Funktionen werden einfach durch hinzufügen      #
#   einer entsprechenden Array-Zeile direkt auf der Seite aktiviert         #
#   (die Zeile muss innerhalb eines <script>-Tags HINTER                    #
#   der Verlinkung zu diesem Script dem Scriptaufruf eingefügt werden       #
#   z.B.:																																		#
#    <script>																																#
#      kbLNorm['1'] = Array('/index.html','_self');                         #
#    </script>                                                              #
# o An- bzw. Abschalten in Formularfeldern erfolgt mit:                     #
#   - onFocus = "setkb('off')" (Abschalten)                                 #
#   - onBlur  = "setkb('on')"  (Einschalten) 															  #
#                                                                           #
# Alles weitere steht im Konfigurations-Abschnitt                           #
#                                                                           # 
#############################################################################
*/

/* Konfiguration */

// zentrales aktivieren/deaktivieren der Keyboardfunktionen beim Start
// (wird von gesetzten Cookies evtl. überschrieben)
// mögliche Werte: enabled, disabled
keyb      = 'enabled';

// Definition der Arrays -> hier nichts ändern
kbLNorm   = Array();	// Array mit Links ohne Zusatztasten
kbFNorm   = Array();	// Array mit Funktionen ohne Zusatztasten
kbLAlt		= Array();	// Array mit Links unter Benutzung der ALT-Taste
kbFAlt		= Array();	// Array mit Funktionen unter Benutzung der ALT-Taste
kbLCtrl		= Array();	// Array mit Links unter Benutzung der CTRL(STRG)-Taste
kbFCtrl		= Array();	// Array mit Funktionen unter Benutzung der CTRL(STRG)-Taste
kbswitch  = Array();	// Array zum An/Auschalten der Keyboard-Funktion

// case Sensitivity
// 0 = 'off' -> keine Unterscheidung zwischen Gross- und Kleinschreibung
// 1 = 'on'  -> Unterscheidung zwischen Gross- und Kleinschreibung
kbcs			  = 0;

// signs to watch
// 1 -> nur ein Buchstabe/eine Ziffer löst die gewünschte Aktion aus
// 2 -> eine Kombination aus zwei Buchstaben und/oder Ziffern löst eine Aktion aus
kbtowatch	  = 1;
// Zeit in Millisekunden, in der auf das zweite Zeichen gewartet wird
kbwatchtime = 2000; 

// Key zum ein/ausschalten der Keyboard-Funktion
// Da der IE (mal wieder) Proleme hat manche Sonderzeichen umzusetzen,
// muss für ihn der KeyCode angegeben werden
var myswitch = '=';
var myswcode = '61';
kbswitch[myswitch]  = 'switchkb()';

// Links
// Benutzung: kbLNorm['Key'] = Array('Link','target')
// zur Zeit mögliche Targets sind: '_self' und '_blank'

kbLNorm['h'] = Array('/index.htm','_self');
kbLNorm['k'] = Array('/kontakt/index.htm','_self');
kbLNorm['i'] = Array('/impressum.htm','_self');
kbLNorm['b'] = Array('/info/index.htm','_self');
kbLNorm['l'] = Array('/content/links.htm','_self');
kbLNorm['d'] = Array('/content/downloads.htm','_self');

kbLNorm['v'] = Array('/content/verein.htm','_self');
kbLNorm['e'] = Array('/content/leistungen.htm','_self');
kbLNorm['z'] = Array('/content/zivildienst.htm','_self');
kbLNorm['s'] = Array('/content/fsj.htm','_self');
kbLNorm['a'] = Array('/content/arbeit.htm','_self');

// Funktionen
// Benutzung: kbLNorm['Key'] = 'FUNKTION'
kbLNorm['m'] = 'sendit()';				// Anti-Spam-Sende-Funktion
kbLNorm['o'] = 'open_belegung()';
kbLNorm['<'] = 'history.back()';
kbLNorm['+'] = 'grSize()';				// vergroessert Font-Size
kbLNorm['-'] = 'smSize()';				// verkleinert Font-Size
kbLNorm['n'] = 'nSize()';					// stellt Font-Size auf Normalgroesse ein

// Spezial-Funktionen -> funktionieren zusammen mit ALT-Taste
//kbLAlt[]  = '';
//kbFAlt[]  = '';

// Spezial-Funktionen -> funktionieren zusammen mit CTRL(STRG)-Taste
//kbLCtrl[]  = '';
//kbFCtrl[]  = '';

// keyboard-Flag -> Nicht ändern!
// dient zur automatischen Aktivierung/Deaktivierung in Formularfeldern
kb = 'on';
// firstsign -> Nicht ändern!
firstsign = '';
//
myto = '';

// Hauptfunktion
function keyboard(e)
{
	// Keybord-Funktion eingeschaltet ?	
	if (kb == 'on')
	{
		var tmparr  = fetchKey(e);
		var keyChar = tmparr['keyChar']
		var mod     = tmparr['mod'];
		
		// Switcher
		if (mod == 'switcher') switchkb();
		
		if (keyb == 'enabled')
		{
			if (kbtowatch == 1) doyourWork(keyChar,mod);
			else
			{
				if (firstsign != '') 
				{
					var twosigns = firstsign + keyChar;
					firstsign = '';
					clearTimeout(myto);
					doyourWork(twosigns,mod);
				}
				else 
				{
					firstsign = keyChar;
					myto = setTimeout('stopwatching("' + firstsign + '")',kbwatchtime);
				}
			}
		}	
	}
}


// start Event-Funktion
document.onkeypress = keyboard;

/* Unterfunktionen */
function fetchKey(e)
{
		var returner = new Array();
		var mod;
		/* Abfangen des Keys */
	  if(document.getElementById && document.all) // nerviger IE
		{
			// alert(event.altKey); // Test-Alert -> kein Ergebnis, wenn ALT-Taste gedrückt ist!
			// alert(event.keyCode)
			var keyChar = String.fromCharCode(event.keyCode);
			if (kbcs == 0) keyChar = keyChar.toLowerCase();
			if      (event.keyCode == myswcode) mod = 'switcher';
		  else if (event.ctrlKey)             mod = 'specStrg';
			else if (event.altKey)              mod = 'specAlt'
			else                                mod = 'normal';
		}
	  else
		{
			var keyChar = String.fromCharCode(e.which);
			if (kbcs == 0) keyChar = keyChar.toLowerCase();
			if      (keyChar == myswitch) mod = 'switcher';
			else if (e.ctrlKey)           mod = 'specStrg';
			else if (e.altKey)            mod = 'specAlt'
			else                          mod = 'normal';
		}
		returner['keyChar'] = keyChar;
		returner['mod']     = mod;
		return returner;
}

function doyourWork(keyChar,mod)
{
	if (mod == 'normal')
	{
		if (typeof(kbLNorm[keyChar]) == 'object') 
		{
			if     (kbLNorm[keyChar][1] == '_self')  document.location.href = kbLNorm[keyChar][0];
			else if(kbLNorm[keyChar][1] == '_blank') window.open(kbLNorm[keyChar][0]);
		}
		else if (typeof(kbLNorm[keyChar]) == 'string') eval(kbLNorm[keyChar]);
	} 
	// Spezialfunktionen mit ALT-Taste
	else if (mod == 'specAlt')
	{
		if (typeof(kbLAlt[keyChar]) == 'object') 
		{
			if     (kbLAlt[keyChar][1] == '_self')  document.location.href = kbLAlt[keyChar];
			else if(kbLAlt[keyChar][1] == '_blank') window.open(kbLAlt[keyChar][0]);
		}
		if (typeof(kbLAlt[keyChar]) == 'string') eval(kbLAlt[keyChar]);
	}
	// Spezialfunktionen mit ALT-Taste
	else if (mod == 'specStrg')
	{
		if (typeof(kbLCtrl[keyChar]) == 'object') 
		{
			if     (kbLCtrl[keyChar][1] == '_self')  document.location.href = kbLCtrl[keyChar][0];
		  else if(kbLCtrl[keyChar][1] == '_blank') window.open(kbLCtrl[keyChar][0]);
		}
		if (typeof(kbLCtrl[keyChar]) == 'string') eval(kbLCtrl[keyChar]);
	}
}
// beendet Warteaktion bei zwei-Zeichen-System

function stopwatching(mychar)
{
	firstsign = '';
	doyourWork(mychar,'normal');
}

/* Cookie-Funktionen zum Merken der gesetzten Werte */

function cookiesEnabled() 
{
 	var result=3;  // undefined, if the browser does not know the property
 	if (navigator.cookieEnabled!=null) 
 	{
  		if (navigator.cookieEnabled) result=1;
  		else result=2;
 	}
 	return result;
}

function setCookie(a_name, a_value, a_lifetime) // a_lifetime in Tagen
{  
 	var now = new Date();
 	var expiry = new Date(now.getTime() + a_lifetime*24*60*60*1000);
 	var a_path = '/';
 	if ((a_value != null) && (a_value != ""))
 	{
 		document.cookie=a_name + "=" + escape(a_value) + "; expires=" + expiry.toGMTString() + '; path=' + a_path;
 	}
 	return getCookie(a_name) != null; // Test, ob es geklappt hat
}

function getCookie(a_name) 
{
 	var a_start, aus_end;
 	if (document.cookie) 
 	{
  		a_start = document.cookie.indexOf(a_name+"=");
  		if (a_start < 0) return null;
  		a_start = document.cookie.indexOf("=", a_start) + 1;
  		aus_end = document.cookie.indexOf(";", a_start);
  		if (aus_end < 0) aus_end = document.cookie.length;
  		return unescape(document.cookie.substring(a_start, aus_end));
 	}
 	else return null;
}

function showCookie(a_name) 
{
 	var input = getCookie(a_name);
 	alert(input);
}

function deleteCookie(a_name) 
{
 	var now = new Date();
 	var expired = new Date(now.getTime() - 2*24*60*60*1000);  // 2 Tage zurueck
 	document.cookie=a_name + "=null; expires=" + expired.toGMTString();
}

/* Auslesen der Cookies + Setzen der Werte */
function initStart()
{
	if (cookiesEnabled() == 1) 
	{
		keybtmp = getCookie("keyboarding");
		if (keybtmp == null) keyb = keyb;
		else keyb = keybtmp;
		
		fs   = getCookie("fontsize");
		if(fs == null) fs = 100;
	}
	else 
	{
			fs = 100;
			keyb = keyb;
	}
	if (fs != 100) setFontSize(fs);
	
	// Automatisierung aufrufen
	processit();
}


// wird in Formularfelder mit onFocus bzw onBlur aufgerufen
function setkb(on_or_off)
{
	kb = on_or_off;
}

function switchkb()
{
	if (keyb == 'enabled') 
	{
		var test = confirm("Soll die Keyboard-Steuerung deaktiviert werden?\n(Aktivieren mit STRG + " + myswitch +")");
		if (test == true)
		{
			keyb = 'disabled';
			if (cookiesEnabled() == 1) setCookie("keyboarding", 'disabled', 1);
		}
	}
  else if(keyb == 'disabled') 
  {
  	var test = confirm ("Soll die Keyboard-Steuerung aktiviert werden?\n(Deaktivieren mit STRG + " + myswitch +")");
  	if (test == true)
  	{
  		keyb = 'enabled';
  		if (cookiesEnabled() == 1) setCookie("keyboarding", 'enabled', 1);
  	}
  }
}

/* Funktionen */

function grSize()
{
	fs  = parseInt(fs) + 10;
	fsn = fs - 20;
	document.getElementById('content').style.fontSize  = fs + "%";
	document.getElementById('topnavi').style.fontSize  = fsn + "%";
	document.getElementById('mainnavi').style.fontSize = fsn + "%";
	if (cookiesEnabled() == 1) setCookie("fontsize", fs, 1);
}
function smSize()
{
	fs  = parseInt(fs) - 10;
	fsn = fs - 20;
	document.getElementById('content').style.fontSize  = fs + "%";
	document.getElementById('topnavi').style.fontSize  = fsn + "%";
	document.getElementById('mainnavi').style.fontSize = fsn + "%";
	if (cookiesEnabled() == 1) setCookie("fontsize", fs, 1);
}

function nSize()
{
	fs  = 100;
	fsn = fs - 20;
	document.getElementById('content').style.fontSize  = "100%";
	document.getElementById('topnavi').style.fontSize  = fsn + "%";
	document.getElementById('mainnavi').style.fontSize = fsn + "%";
	if (cookiesEnabled() == 1) setCookie("fontsize", fs, 1);
}
function setFontSize(fs)
{
	fsn = parseInt(fs) - 20;
	document.getElementById('content').style.fontSize  = fs + "%";
	document.getElementById('topnavi').style.fontSize  = fsn + "%";
	document.getElementById('mainnavi').style.fontSize = fsn + "%";
}
function list_hotkeys()
{
	var j=0;
	var output = new Array();
	for (i in kbLNorm)
	{
		if (typeof(kbLNorm[i]) == 'object') output[j] = '<div class="hkdef">' + i + '</div>' + kbLNorm[i][0] + ' <i>(Link)</i>' ;
	  else output[j] = '<div class="hkdef">' + i + '</div>' + kbLNorm[i] + ' <i>(javascript)</i>';
		j++;
	}
	output[j] = '<div class="hkdef">' + myswitch  + '</div> Ein- und Ausschalten der Tastatursteuerung.';
	output[j+1] = '<br /><em>Einstellungen:</em><br />';
	output[j+2] = 'Tastatursteuerung ist ' + ((keyb == 'enabled') ? 'aktiviert.' : 'deaktiviert.');
	output[j+3] = 'Case Sensitivity ist '  + ((kbcs == 0) ? 'ausgeschaltet.' : 'eingeschaltet.');
	var fullOutput = output.join("<br />\n");
	return fullOutput;
}
function open_belegung()
{
	var features = 'toolbar=no,location=no,menubar=no,scrollbars=yes,width=400,height=400,resizable=yes'
	var win_belegung = window.open("","belegung",features);
	win_belegung.document.writeln('<style>');
	win_belegung.document.writeln('body {');
	win_belegung.document.writeln('font-family: Arial, Helvetica, sans-serif;');
	win_belegung.document.writeln('font-size: 10pt;');
	win_belegung.document.writeln('}');
	win_belegung.document.writeln('.hkdef {');
	win_belegung.document.writeln('font-weight: bold;');
	win_belegung.document.writeln('float: left;');
	win_belegung.document.writeln('width: 30px;');
	win_belegung.document.writeln('margin-left: 10px;');
	win_belegung.document.writeln('</style>');
	win_belegung.document.writeln('<em>Hotkey-Belegungsliste f&uuml;r ' + document.location.href + '</em><br /><br />');
  win_belegung.document.write(list_hotkeys());
}