//
// (c) Tąth G bor www.gabry.hu 2007
// 

gAutoComplete = new Object();

gAutoComplete.foDiv="";
gAutoComplete.inputField="";
gAutoComplete.felulir="";
gAutoComplete.kurzor="";
gAutoComplete.oldvalue="";
gAutoComplete.url="";

var ablakmegnyitva = false;

var timerID = 0;

function gAutoCompleteInit(div,url,pars) {

  inputField = $(div);

//  inputField.autocomplete = false;

  Event.observe(inputField, 'keydown', gAutoCompleteFindNames, false);
  Event.observe(inputField, 'focus', gAutoCompleteFocus, false);
  Event.observe(inputField, 'blur', gAutoCompleteBlur, false);


  foDiv = document.createElement("DIV");
  foDiv.className="gautocompletetabla";
  document.body.appendChild(foDiv);
  foDiv.style.top = Position.cumulativeOffset(inputField)[1] + Element.getHeight(inputField)+"px";
  foDiv.style.left = Position.cumulativeOffset(inputField)[0] + "px";
  // foDiv.style.width = inputField.offsetWidth+"px";
  foDiv.style.width = "auto";

  gAutoComplete.foDiv=foDiv;
  gAutoComplete.inputField=inputField;
  gAutoComplete.url=url;
  gAutoComplete.urlpars=pars;
  gAutoComplete.felulir=false;
  gAutoComplete.kurzor=-1;
  gAutoComplete.oldvalue="";
}

function gAutoCompleteFindNames(e) {
  e = e||window.event;
  var o = (e.srcElement||e.target);

  var _eventKeycode=e.keyCode;
  if(timerID) { clearTimeout(timerID); timerID=0; }
  var ido=200;
  if ((_eventKeycode<48) && (_eventKeycode!=8)&&(_eventKeycode!=38)&&(_eventKeycode!=13)&&(_eventKeycode!=40)) return;
  if (_eventKeycode==0) return;
  if ((_eventKeycode==38) || (_eventKeycode==40) || (_eventKeycode==13)) ido=0;
  timerID  = setTimeout("findNames2('"+o.id+"', "+_eventKeycode+")", ido);
  if (ablakmegnyitva) {
    if ((_eventKeycode==13)) {

//      e.cancelBubble = true;
//      if (e.stopPropagation) e.stopPropagation();
//      return false;

    // We've handled this event. Don't let anybody else see it.
    if (e.stopPropagation) e.stopPropagation(); // DOM Level 2
    else e.cancelBubble = true;

    // Now prevent any default action.
    if (e.preventDefault) e.preventDefault(); // DOM Level 2
    else e.returnValue = false;  

//      alert(1);
    }
  }
}

function gAutoCompleteFocus(e) {
  e = e||window.event;
  var o = (e.srcElement||e.target);
  if (!o) return;
  fodiv = o.id;
}
function gAutoCompleteBlur(e) {
  setTimeout(
    function() {
      fodiv = "";
      clearNames();
    },
    100);
}

function stfocus(div) {
  if ((gAutoComplete.kurzor>=0) && (gAutoComplete.kurzor<foDiv.childNodes.length)) {
    foDiv.childNodes[gAutoComplete.kurzor].className="mouseOut";
    ablakmegnyitva = true;
  }
}
function clfocus(div) {
  if ((gAutoComplete.kurzor>=0) && (gAutoComplete.kurzor<foDiv.childNodes.length)) {
    foDiv.childNodes[gAutoComplete.kurzor].className="mouseOver";
    ablakmegnyitva = false;
  }
}

function findNames2(divid, e) {

  var _eventKeycode=e;
  if (_eventKeycode == 40) {
    felulir=false;

    var i=gAutoComplete.foDiv.childNodes.length;
    if (i>0) {
      clfocus(divid);
      if (gAutoComplete.kurzor+1<i) gAutoComplete.kurzor++;
      stfocus(divid);
    }
    return;
  }
  if (_eventKeycode == 38) {
    var i=gAutoComplete.foDiv.childNodes.length;
    if (i>0) {
      clfocus(divid);
      if (gAutoComplete.kurzor>-1) gAutoComplete.kurzor--;
      stfocus(divid);
    }
    return;
  }
  if (_eventKeycode == 13) {
    var i=gAutoComplete.foDiv.childNodes.length;
    if (i>0 && gAutoComplete.kurzor>=0 && gAutoComplete.kurzor<i) {
      gAutoComplete.inputField.value = gAutoComplete.foDiv.childNodes[gAutoComplete.kurzor].innerHTML;
    }
    clearNames();
    return;
  }
		
  if (gAutoComplete.inputField.value.length > 0) {
    var url = gAutoComplete.url;
    var pars = gAutoComplete.urlpars+escape(gAutoComplete.inputField.value)
    oldValue = gAutoComplete.inputField.value;
    var myAjax = new Ajax.Request(url, { method: 'get', parameters: pars, onComplete: showResponse});
    gAutoComplete.inputField.className = "gautocompletewaiting";
  } else {
    clearNames();
  }
}

function getXmlNodeValue(xmlNode){
  if (typeof xmlNode.text == 'undefined')
    return xmlNode.textContent
  else
    return xmlNode.text;
}

function populateName(cell) {
  gAutoComplete.inputField.value = cell.firstChild.nodeValue;
  clearNames();
}

function showResponse(originalRequest) {
  gAutoComplete.inputField.className = "";
  var xmlDoc = originalRequest.responseXML;
  var cs = xmlDoc.getElementsByTagName("name");
  var l = cs.length;
var h=0;
  ablakmegnyitva = false;
  clearNames();
  if (l>0) {
    for (var i = 0; i < l; i++) {
      var _c = document.createElement("DIV");
      _c.style.display = "block";
      _c.className='mouseOver';
      _c.onmouseout = function() {this.className='mouseOver';};
      _c.onmouseover = function() {this.className='mouseOut';};
//  populateName(this);
      foDiv.appendChild(_c);
      // _c.innerHTML="1212";
      Element.update(_c, getXmlNodeValue(cs[i]));
//      _c.onclick = populateName;
      // _c.onclick = function() { populateName(this); }
      _c.onclick = function() { populateName(this); };
    }
    foDiv.style.visibility= "visible";

    foDiv.style.width = "auto";
    if (foDiv.offsetWidth<200) {
      foDiv.style.width = "200px";
    } else {
        foDiv.style.width = "auto";
      }


    // findNames2("",40);
    felulir=true;
  } else {
      foDiv.style.visibility= "hidden";
      ablakmegnyitva = false;
    }
}

function clearNames() {
  var ind = foDiv.childNodes.length;
  gAutoComplete.kurzor = -1;
  for (var i = ind - 1; i >= 0 ; i--) {
    foDiv.removeChild(foDiv.childNodes[i]);
  }
  foDiv.style.visibility= "hidden";
  ablakmegnyitva = false;
}


