// JavaScript Document
var selectedElement = null;
window.onload = initPage;

function initPage(){
  normInput = document.getElementById("normnr").getElementsByTagName("input")[0];
  somewhere =  document.getElementById("format");
  descript = document.getElementById("bezeichnung").getElementsByTagName("input")[0];
  
  addEventHandler(normInput,"keyup",getNormnummer);
  addEventHandler(somewhere,"click",removeElement);
  addEventHandler(descript,"focus",removeElement);
}

function getNormnummer(e){
  var keyCode = getKeyCode(e);
  if(keyCode!=40 && keyCode!=38){
    normNumberUser = normInput.value;
    normInst = document.getElementById("form_table").getElementsByTagName("select")[0].value;
    url = "http://www.david-dorfmueller.de/myphp/ajax_norm.php?ni=" + normInst +"&nr=" + escape(normNumberUser); 
    request=createRequest();
    request.onreadystatechange=showNormnummer;
    request.open("GET", url, true);
    request.send(null);
  }else{
    arrowNav(e);
  }
}

function showNormnummer(){
  if(request.readyState == 4)
    if(request.status == 200){
      if(normInput.value!=""){
        if(document.getElementById("autocomplete")==null && request.responseText!=""){
          div = document.createElement("div");
          div.setAttribute("id","autocomplete");
          document.getElementById("normnr").appendChild(div);
          div.innerHTML = request.responseText;
          normClick();
          selectedElement = null;
        } else {
          if(request.responseText=="" || request.responseText==null){
            removeElement(document.getElementById("autocomplete"));  
          }else{
            document.getElementById("autocomplete").innerHTML= request.responseText;
            normClick();
            selectedElement = null;
          }
        }
    }else{
      removeElement(document.getElementById("autocomplete"));
    }
  }
}

function normClick() {
  var normList = document.getElementById("normlist").getElementsByTagName("li");
  for (var i=0; i<normList.length; i++){
    addEventHandler(normList[i], "click", takeNumber);
    addEventHandler(normList[i], "mouseover", setActive);
    addEventHandler(normList[i], "mouseout", unsetActive);
  }
}

function takeNumber(e){
  var me = getActivatedObject(e);
  normInput.value = me.firstChild.nodeValue;
  removeElement(document.getElementById("autocomplete"));  
}

function setActive(e){
  var me = getActivatedObject(e);
  me.className = "active";
}

function unsetActive(e){
  var me = getActivatedObject(e);
  me.className = "";
}

function removeElement(){
  if (document.getElementById("autocomplete")!=null){
    parNode = document.getElementById("autocomplete").parentNode;
    parNode.removeChild(document.getElementById("autocomplete"));
  }
  return;
}

function arrowNav(e){
  if(document.getElementById("autocomplete")!=null){
    var normList = document.getElementById("normlist").getElementsByTagName("li");
    var normListLength = document.getElementById("normlist").getElementsByTagName("li").length;
    var keyCode = getKeyCode(e);
  
    switch (keyCode){
      case 40:
      if(selectedElement){
        if (selectedElement.nextSibling){
          selectedElement = selectedElement.nextSibling;
          for (var i=0; i<normListLength; i++){
            normList[i].className = "";
          }  
        }
        selectedElement.className = "active";
        normInput.value = selectedElement.firstChild.nodeValue;
      }
      if(!selectedElement){
        selectedElement = normList[0];
        for (var i=0; i<normListLength; i++){
          normList[i].className = "";  
        }
        selectedElement.className = "active";
        normInput.value = selectedElement.firstChild.nodeValue;
      }
      break;
      case 38:
      if (selectedElement.previousSibling){
        if(selectedElement){
          selectedElement = selectedElement.previousSibling;
          for (var i=0; i<normListLength; i++){
            normList[i].className = "";  
          }
          selectedElement.className = "active";
          normInput.value = selectedElement.firstChild.nodeValue;
        }
      }
      break;
  }

  }
}
