var http_request = false;
var keys_array = new Array();

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}


addLoadEvent(function() {
  makeRequest('/_common/js/keys.xml');
});

function makeRequest(url) {

  http_request = false;

  if (window.XMLHttpRequest) { // Mozilla, Safari,...
      http_request = new XMLHttpRequest();
      if (http_request.overrideMimeType) {
          http_request.overrideMimeType('text/xml');
          // zu dieser Zeile siehe weiter unten
      }
  } else if (window.ActiveXObject) { // IE
      try {
          http_request = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
          try {
              http_request = new ActiveXObject("Microsoft.XMLHTTP");
          } catch (e) {}
      }
  }

  if (!http_request) {
      alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
      return false;
  }
  http_request.onreadystatechange = generateKeylist;
  http_request.open('GET', url, true);
  http_request.send(null);

}

function generateKeylist() {
  if (http_request.readyState == 4) {
      if (http_request.status == 200) {
        var xmldoc = http_request.responseXML;
        for(var i=0; i<xmldoc.getElementsByTagName('key').length; i++) {
          var ausgabe = xmldoc.getElementsByTagName('key')[i].firstChild.nodeValue;
          if (ausgabe != '') {
            keys_array[i] = ausgabe;
          }
        }      
      } else {
          alert('Bei dem Request ist ein Problem aufgetreten.');
      }
  }
}

var press_count = 0;
var element_count = 0;

if (document.captureEvents) 
	document.captureEvents(Event.KEYDOWN);

document.onkeydown = listDown;
document.onkeyup = listUp;
document.onclick = closeList;

function closeList(evt) {
	try {
	  if (!evt) evt = window.event; // for IE
		if (evt.button == 0) document.getElementById('search_suggest').style.visibility = 'hidden';
		press_count = 0;
	}
	catch (exception) {}
}

function listDown(evt) {
	try {
		if (!evt) evt = window.event; // for IE
		var search_div = document.getElementById('search_suggest');
		var search_input = document.getElementById('txtSearch');
	
		if (evt.keyCode == 40 && search_div.style.visibility == 'visible') { // down arrow
			if (press_count != 0) var search_div_key_old = document.getElementById('key_' + press_count);
			if (press_count == element_count-1) { press_count = 1; } else { press_count++; }
			var search_div_key = document.getElementById('key_' + press_count);
			if (press_count != 1) { search_div_key_old.className = 'suggest_link'; } else { document.getElementById('key_' + (element_count-1)).className = 'suggest_link';	}
			search_div_key.className = 'suggest_link_over';
		} else if (evt.keyCode == 38 && search_div.style.visibility == 'visible') { // up arrow
			if (press_count != 0) var search_div_key_old = document.getElementById('key_' + press_count);
			if (press_count == element_count) { press_count = 1; }
			var search_div_key = document.getElementById('key_' + press_count);
			if (press_count != 0 && press_count > 0) search_div_key_old.className = 'suggest_link';
			if (press_count > 0) search_div_key.className = 'suggest_link_over';
			search_input.selectionStart = search_input.value.length;
		}	else if (evt.keyCode == 13 && search_div.style.visibility == 'visible') { // enter
			document.getElementById('txtSearch').value = document.getElementById('key_' + press_count).innerHTML;
			document.getElementById('search_suggest').innerHTML = '';
			document.getElementById('search_suggest').style.visibility = 'hidden';
			document.search.submit();
		}
	}
	catch (exception) {}
}

function listUp(evt) {
	try {
		if (!evt) evt = window.event; // for IE
		var search_div = document.getElementById('search_suggest');
		var search_input = document.getElementById('txtSearch');
		if (press_count != 0) var search_div_key_old = document.getElementById('key_' + press_count);
	
		if (evt.keyCode == 40 && search_div.style.visibility == 'visible') { // down arrow
			var search_div_key = document.getElementById('key_' + press_count);
			if (press_count != 1) search_div_key_old.className = 'suggest_link';
			search_div_key.className = 'suggest_link_over';
		} else if (evt.keyCode == 38 && search_div.style.visibility == 'visible') { // up arrow
			if (press_count == element_count) { press_count = 1; } else if (press_count == 0) {} else { press_count--; }
			if (press_count != 0 && press_count > 0) var search_div_key = document.getElementById('key_' + press_count);
			if (press_count > 0) search_div_key_old.className = 'suggest_link';
			if (press_count != 0 && press_count > 0) search_div_key.className = 'suggest_link_over';
			search_input.selectionStart = search_input.value.length;
		}
	}
	catch (exception) {}
}

//called from keyup on the search textbox
function searchSuggest(evt) {
    var value = keys_array;
		if (!evt) evt = window.event; // for IE
		element_count = 1;
		var suggest = '';
		var tmp_suggest = '';
		var search_input = document.getElementById('txtSearch').value;
		var search_div = document.getElementById('search_suggest');
		search_div.innerHTML = '';

		var search_pattern = eval('/^' + document.getElementById('txtSearch').value + '(.*)/i');	
		for(var i=0; i < value.length; i++) {
			var wort = value[i];
			var search_result = wort.match(search_pattern);
			
			if (search_result) {
				if (search_input != '' && element_count <= 10) {
					suggest = wort;

					var option = document.createElement("div");
					option_txt = document.createTextNode(wort.replace(/^(.*)&amp;(.*)$/,'&'));
					//if (i == 59) alert(option_txt.innerHTML);
					option.appendChild(option_txt);

					if (document.all) {
						option.className   = 'suggest_link';
						option.onmouseout  = suggestOutIE;
						option.onmouseover = suggestOverIE;
						option.onclick     = setSearchIE;
					} else {
						option.setAttribute("class", "suggest_link");
						option.setAttribute("onMouseOut", 'suggestOut(this);');
						option.setAttribute("onMouseOver", 'suggestOver(this);');
						option.setAttribute("onClick", 'setSearch(this.innerHTML);');
					}
					option.setAttribute("id", "key_" + element_count);
					search_div.appendChild(option);
					element_count++;
				}
			}
		}

		if (search_input == '' || suggest == '') {
			search_div.style.visibility = 'hidden';
			element_count = 0;
		} else {
			search_div.size = element_count;
			if (evt.keyCode != 13) search_div.style.visibility = 'visible';
			if (evt.keyCode != 13 && evt.keyCode != 40 && evt.keyCode != 38) press_count = 0;
		}		
}

//mouseover function
function suggestOver(div_value) {
	div_value.className = 'suggest_link_over';
}
//mouseout function
function suggestOut(div_value) {
	div_value.className = 'suggest_link';
}
//onclick function
function setSearch(strValue) {
	document.getElementById('txtSearch').value = strValue.replace(/&amp;/g,'&');
	document.getElementById('search_suggest').innerHTML = '';
	document.getElementById('search_suggest').style.visibility = 'hidden';
	element_count = 0;
	document.search.submit();	
}

//for IE
function suggestOverIE() {
	this.className = 'suggest_link_over';
}
function suggestOutIE() {
	this.className = 'suggest_link';
}
function setSearchIE() {
	document.getElementById('txtSearch').value = this.innerHTML.replace(/&amp;/g,'&');
	document.getElementById('search_suggest').innerHTML = '';
	document.getElementById('search_suggest').style.visibility = 'hidden';
	element_count = 0;
	document.search.submit();	
}

function changeNumber() {
	document.search.submit();
}

function clearSearchField(inputField) {
	if (document.getElementById(inputField).value == 'Suchbegriff') {
		document.getElementById(inputField).value = '';
		document.getElementById(inputField).style.color = '#000';
	} else if (document.getElementById(inputField).value == '') {
		document.getElementById(inputField).value = 'Suchbegriff';
		document.getElementById(inputField).style.color = '#999';
	}
}
