/* setzt fest wo gesucht werden soll
   wenn die zu ersetzenden Links nur in einem bestimmten Bereich
   ersetzt werden sollen, geben Sie diesem bereich eine ID und tragen
   die ID hier ein
*/
to_search = 'content';

/* setzt fest, wie die Hotkeys formatiert bzw. angezeigt werden sollen */
hk_e_before = ' <strong>{';
hk_e_after  = '}</strong>';
hk_i_before = '<em>';
hk_i_after  = '</em>';

/* setzt fest, wo der Hotkey zu erscheinen hat */
hk_place = 'extern'					// setzt Hotkey immer EXTERN; wenn schon ein Hotkey definiert ist, wird dieser benutzt
//hk_place = 'i_strict';			// setzt Hotkey immer INTERN; wenn schon ein Hotkey definiert ist, wird trotzdem ein neuer Hotkey benutzt
//hk_place = 'i_regular';			// setzt Hotkey immer INTERN; wenn schon ein Hotkey definiert ist, wird dieser benutzt, ansonsten ein neuer
//hk_place = 'i_loose';				// setzt Hotkey INTERN dort, wo noch kein Hotkey definiert ist, ansonsten EXTERN


/* FUNKTIONEN */

function processit()
{		
	// zum Messen der Umbaudauer - Start
	var xl_stime = new Date();
	var xl_start_s = xl_stime.getSeconds();
	var xl_start_ms = xl_stime.getMilliseconds();
	// Ende zum Messen der Umbaudauer - Start
	
	// Ersetzungsbereich für Links festlegen
	if (to_search) var hk_links = document.getElementById(to_search).getElementsByTagName('a');
	else var hk_links = document.getElementsByTagName('a');
	
	// gefundene Links verarbeiten
	for (var i=0;i<hk_links.length;i++)
	{

		
		/* dient nur zur Uebersichtlichkeit */
		hk_href   = hk_links[i].getAttribute('href');
		hk_title  = hk_links[i].getAttribute('title');
		hk_target = hk_links[i].getAttribute('target');
		/* dient nur zur Uebersichtlichkeit ENDE */
		
		
		if (hk_href)
		{
			// check auf javascript-aufruf
			var re = /javascript:/
			if(hk_href.indexOf('javascript:') == 0)
				var script_test = true;
			else var script_test = false;
			var script_aufruf = hk_href.replace(re,'');
			
			// kein javascript
			if(script_test == false) {
				// findet schon benutzte Hotkeys in Links
				if (in_kbLNorm(hk_href,hk_target)) var old_hotkey = get_kbLNormKey(hk_href);
			  else var old_hotkey = '';
			}
			// ist javascript
			else 
			{
				// findet schon benutzte Hotkeys in Javascripts
				if (in_kbLNorm_js(script_aufruf)) 
				{
					var old_hotkey = get_kbLNormKey_js(script_aufruf);
				}
			  else var old_hotkey = '';
			}
		  	
		  
			// findet unbenutzte hotkeys
			var new_hotkey = find_newhotkey(hk_links[i].innerHTML);	
			
			// checken, ob old_hotkey im Linktext vorkommt
			if (kbcs == 0) var hklih =  hk_links[i].innerHTML.toLowerCase()
		  else var hklih =  hk_links[i].innerHTML;
				
			if (old_hotkey != '' && ((hk_place != 'i_strict' && hklih.indexOf(old_hotkey) > -1) || hk_place == 'extern' || hk_place == 'i_loose') ) var hotkey = old_hotkey;
			else var hotkey = new_hotkey; 

			// Hotkey einbauen
			if (hk_place != 'extern')
			{
				// hotkey als Buchstaben finden, checken, ob er NICHT in einem Tag liegt und ersetzen
				var hk_prio = 0
				var hk_ff   = 0;
				var hk_not_found = 1;
				var tg   = 'go';
				var last_letter = ' ';
				var ll = ' ';
				var stmp = new Array();		
				// splitten in einzelne Buchstaben
				for (var j=0;j<hk_links[i].innerHTML.length;j++)
				{
					stmp[j] = hk_links[i].innerHTML.substr(j,1);
				}
				for (var j=0;j<stmp.length;j++)
				{
					if (stmp[j] == '<') tg = 'stop';
					if (stmp[j] == '>') tg = 'go';
					if (tg == 'stop' || stmp[j] == '>') continue;
					var ll = stmp[j];
					if ((kbcs==0 && isLetter(hotkey)) ? stmp[j].toLowerCase() == hotkey.toLowerCase() : stmp[j] == hotkey)
					{
						hk_not_found = 0;
						if (last_letter == ' ')
						{
							stmp[j] = hk_i_before + stmp[j] + hk_i_after;
							hk_prio = 1;
							break;
						}
					  else
					  {
					  	hk_backup = hk_i_before + stmp[j] + hk_i_after;
					  	hk_ff = j;
					  }
					}
					last_letter = ll;
				}
				if (hk_prio == 0 && hk_ff != 0) stmp[hk_ff] = hk_backup;
				hk_links[i].innerHTML = stmp.join('');
			}
			if (hk_place == 'extern' || hk_not_found)
			{
				hk_links[i].innerHTML = hk_links[i].innerHTML + hk_e_before + hotkey + hk_e_after;
			}
			
			// kbLNorm erweitern
			if (hk_target) kbLNorm[hotkey] = Array(hk_href,hk_target);
			else kbLNorm[hotkey] = Array(hk_href,'_self');
			// Title verändern
			if (hk_title) hk_links[i].title = hk_title + ' | Hotkey: ' + hotkey;
		  else hk_links[i].title = 'Hotkey: ' + hotkey;
		}
		
	}
	// zum Messen der Umbaudauer - Ende
	var xl_etime = new Date();
	var xl_ende_s = xl_etime.getSeconds();
	var xl_ende_ms = xl_etime.getMilliseconds();
	// Ende zum Messen der Umbaudauer - Ende
	// Berechnung der Dauer
	if (xl_start_s > xl_ende_s) xl_start_s = xl_ende_s + 60;
	xl_start = xl_start_s * 1000 + xl_start_ms;
	xl_ende  = xl_ende_s  * 1000 + xl_ende_ms;
	xl_dauer = (xl_ende - xl_start) / 1000;
	if (document.getElementById('info_div'))
		document.getElementById('info_div').innerHTML = '<strong>Dauer des automatischen Umbaus: ' + xl_dauer + ' Sekunden</strong>';
}

/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/*                                       */
/*           Test-Funktionen             */
/*                                       */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */

// testet, ob ein Hotkey schon vergeben ist
function hk_inUse(hotkey)
{
	for (my_key in kbLNorm)
	{
		if (kbcs == 0 && isLetter(hotkey)) 
		{
			hotkey = hotkey.toLowerCase();
			my_key = my_key.toLowerCase();
		}
		if (my_key == hotkey) return 1;
	}
	return 0;
}

// testet, ob ein Link schon genutzt wird
function in_kbLNorm(my_link,my_target)
{
	for (my_key in kbLNorm)
	{
		if (typeof(kbLNorm[my_key]) == 'object')
		{
			//alert(kbLNorm[my_key][0]);
			var kbLNormPath = get_abspath(kbLNorm[my_key][0]);
			
			//alert(kbLNormPath);
			
			var myUrlPath		= get_abspath(my_link);
			// checken der targets 
			var kbLNormTarget = kbLNorm[my_key][1];
			if (!my_target) my_target = '_self';
			
			if (kbLNormPath == myUrlPath && kbLNormTarget == my_target) return 1;
		}
	}
	return 0;
}

// testet, ob ein javascript schon genutzt wird
function in_kbLNorm_js(my_link)
{
	for (my_key in kbLNorm)
	{
		if (typeof(kbLNorm[my_key]) == 'string')
		{
			if(kbLNorm[my_key] == my_link) return 1;
		}
	}
	return 0;
}

/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/*                                       */
/*         Rueckgabe-Funktionen          */
/*                                       */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */

// gibt einen kbLNormKey zurück
function get_kbLNormKey(my_url)
{
	//alert(my_url);
	for (my_key in kbLNorm)
	{
		if (typeof(kbLNorm[my_key]) == 'object')
		{

			var kbLNormPath = get_abspath(kbLNorm[my_key][0]);
			var myUrlPath		= get_abspath(my_url);

			if (kbLNormPath == myUrlPath) return my_key;
		}
	  else if (typeof(kbLNorm[my_key]) == 'string')
	  {
	  	if (kbLNorm[my_key] == my_url) return my_key;
	  }
	}
}

function get_kbLNormKey_js(my_url)
{
	for (my_key in kbLNorm)
	{
		if (typeof(kbLNorm[my_key]) == 'string')
		{
	  	if (kbLNorm[my_key] == my_url) return my_key;
	  }
	}
}

/* sucht einen passenden Hotkey */
function find_newhotkey(mytext)
{
	// Tags herausfiltern
	var re = /<\/?[^>]*>/g;
	mytext = mytext.replace(re,'');

	// 1.Option: Anfangsbuchstabe eines Teilwortes
	var fl = mytext.split(' ');
	for (var i=0;i<fl.length;i++) 
	{
		if(!hk_inUse(fl[i].substr(0,1)) && isLetter(fl[i].substr(0,1))) 
		{
			if (kbcs == 0) return fl[i].substr(0,1).toLowerCase();
			else return fl[i].substr(0,1);
		}
	}
	// 2.Option: irgendein Buchstabe des Wortes 
	for (var i=0;i<mytext.length;i++) if (!hk_inUse(mytext.substr(i,1)) && mytext.substr(i,1) != ' ' && isLetter(mytext.substr(i,1))) return mytext.substr(i,1).toLowerCase();

	// 3.Option: Ziffer
	for (var i=0;i<10;i++) if (!hk_inUse(i)) return i;
}

// checkt, ob Character ein Buchstabe ist
function isLetter(my_char)
{
	var re = /[a-zA-ZäÄöÖüÜ]/;
	return re.test(my_char);
}


/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/*                                       */
/* Funktionen zum Vergleichen von Pfaden */
/*                                       */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */


function get_abspath(path)
{
		if (!parse_url(path,'host'))
		{
			var iamhere = parse_url(document.location.href);
			if (path.substr(0,1) == '/') path = iamhere['scheme'] + '://' + iamhere['host'] + path;
		  else path = iamhere['scheme'] + '://' + iamhere['host'] + iamhere['path'] + '/' + path;
		}
	  return real_path(path);
}

function parse_url(my_url,was)
{
	var url_parts = new Array();
	url_parts['scheme'] = '';
	url_parts['host']   = '';
	url_parts['port']   = '';
	url_parts['hash']   = '';
	url_parts['query']  = '';
	url_parts['file']   = '';
	url_parts['path']   = '';
	
	// scheme (protocol)
	if (my_url.indexOf('://') > -1)
	{
		var parts_1 = my_url.split('://');
		url_parts['scheme'] = parts_1[0];
		my_url = parts_1[1];
	}
	
	var parts_2 = my_url.split('/');
	if (url_parts['scheme'] != '')
	{
		// Port
		if (parts_2[0].indexOf(':') > -1)
		{
			var parts_3 = parts_2[0].split(':');
			url_parts['host'] = parts_3[0];
			url_parts['port'] = parts_3[1];
		}
		else url_parts['host'] = parts_2[0];
		parts_2.shift();
	}
	
  var last_element = parts_2.pop();
  if (last_element)
  {
	  if (last_element.indexOf('#') > -1)
	  {
	  	var parts_4 = last_element.split('#');
	  	if (parts_4[1].indexOf('?') > -1)
	  	{
	  		var parts_5 = parts_4[1].split('?');
	  		url_parts['hash']  = parts_5[0];
	  		url_parts['query'] = parts_5[1];
	  	}
	  	else url_parts['hash'] = parts_4[1];
	  	url_parts['file'] = parts_4[0];
	  }
	  
	  if (url_parts['query'] == '' && last_element.indexOf('?') > -1)
	  {
	  	var parts_5 = last_element.split('?');
	  	url_parts['query'] = parts_5[1];
	  	url_parts['file']	 = parts_5[0];
	  }
	}
	url_parts['path'] = parts_2.join('/');
	if (url_parts['host'] != '') url_parts['path'] = '/' + url_parts['path'];
	
	if (typeof(was) == 'undefined') return(url_parts);
	else if (typeof(url_parts[was]) == 'undefined') return(url_parts);
  else return (url_parts[was]);
}

function real_path(path)
{
  
   if (path == "") return false;

   var re = /\\\\/g;
   path = path.replace(re,'/');
   var re1 = new RegExp('(\.\w{1,4})$');
   var re2 = new RegExp('\\?[^\\/]+$');
   var re3 = new RegExp('\\/$');
   if (!re1.test(path) && !re2.test(path) && !re3.test(path)) path = path + '/';
   var re4 = new RegExp("^(\\/|\w:\\/|https?:\\/\\/[^\\/]+\\/)?(.*)$",'i');

   var matches = path.match(re4);

   var path_tok_1 = matches[1];
   var path_tok_2 = matches[2];

	 var re5 = new RegExp('^\\/+');
	 var re6 = new RegExp('\\/+','g');
	 
	 path_tok_2 = path_tok_2.replace(re5,'');
	 path_tok_2 = path_tok_2.replace(re6,'/');
	
	 var path_parts = path_tok_2.split('/'); 
	 var real_path_parts = new Array();
	 
	 for (i=0;i<path_parts.length;i++)
	 {
	 		if (path_parts[i] == '.' || path_parts[i] == '') continue;
	 		else if (path_parts[i] == '..')
	 		{
	 			if ( (typeof(real_path_parts[0]) != 'undefined'  &&  real_path_parts[0] != '..') || path_tok_1 != "")
	 			{
		 			real_path_parts.pop();
		 			continue;
	 			}
	 		}
	 		if (typeof(path_parts[i]) != 'undefined') real_path_parts.push(path_parts[i]);
	 }
	 if (typeof(path_tok_1) == 'undefined') path_tok_1 = '';
	 return path_tok_1 + real_path_parts.join('/');	
}

// Hilfsfunktion zur Ausgabe
function do_ausgabe(output)
{
	var ausgabe = document.getElementById('ausgabe');
	ausgabe.innerHTML = ausgabe.innerHTML + "<br>" + output;
}