var selectedlevel = -1; //FOR THE KEYBOARD NAVIGATION AT THE keyDown(e) FUNCTION: GLOBAL
var items; //WILL HOLD AJAX XML RESULTS: GLOBAL FOR USE IN BOTH ajaxFunction() AND keyDown(e) FUNCTIONS
var keywordhits;
var key; //FOR BOTH ajaxFunctions AND keyDown FUNCTIONS

document.onkeydown = keyDown;

function ajaxLeftPos(){
  var obj = document.getElementById('keyword');
  var leftpos = 0;
  if (obj.offsetParent)
    do {
      leftpos += obj.offsetLeft;
    }while (obj = obj.offsetParent)
  return leftpos;
}
  
function ajaxTopPos(){
  var obj = document.getElementById('keyword');
  var toppos = 0;
  if (obj.offsetParent) 
    do {
      toppos += obj.offsetTop;
	} while (obj = obj.offsetParent)
  return toppos + 18;
}

function keyDown(e) { //IMPLEMENT NAVIGATION USING JAVSCRIPT KEY DOWN EVENT ON KEYS ARROW DOWN AND ARROW UP
  if (e) { //LOAD VARIABLE KEY
    key=e.which;
  }else{
    key=event.keyCode;
  }
  
  if(key==38){ //ARROW UP
    if(selectedlevel>0){
      selectedlevel -= 1;
	  selectItem(selectedlevel);
	  document.getElementById("keyword").value = items[selectedlevel].firstChild.nodeValue;
	}
	
	if(selectedlevel==0){
      selectedlevel -= 1;
	  selectItem(0);
	  document.getElementById("keyword").value = items[0].firstChild.nodeValue;
	}
	
	if(selectedlevel<0){
	  clearSelect();
    }
  }
  
  if(key==40 && selectedlevel<items.length-1){ //ARROW DOWN
    selectedlevel += 1;
	selectItem(selectedlevel);
	document.getElementById("keyword").value = items[selectedlevel].firstChild.nodeValue;
  }
  
  if(key==27){  //ESC KEY
    selectedlevel = -1;
	clearSelect();
	document.getElementById("suggestbx").style.display = "none";
  }
  
  if(key==8){ //BACKSPACE
    selectedlevel = -1;
    clearSelect();
  }
}

function ajaxFunction(){ //ACTUAL AJAX FUNCTION

  var ajax = getXMLHttpRequestObject(); //CREATES AN INSTANCE OF AJAX OBJECT USING A FUNCTION IMPORTED FROM ANOTHER FILE
  var keyword = document.getElementById("keyword");
  var inner = ""; //VARIABLE TO HOLD SELECT OPTIONS
  
  if(ajax){ //IF OBJECT WAS CREATED SUCCESSFULLY...
	ajax.onreadystatechange = function(){
	  if(ajax.readyState == 4){ //IF REQUEST IS COMPLETE... (NOTE: 0=NOT INITIALIZED, 1=SET UP, 2=SENT, 3=IN PROCESS, 4=COMPLETE)
	  
	    if((ajax.status == 200) || (ajax.status == 304)){ //HTTP STATUS CODE 200=EVERYTHING IS OK, 304=PAGE FOUND BUT NOT MODIFIED YET
		  var xmlitems, i;
		  xmlitems = ajax.responseXML;
		  
		  //POSITION THE HINT BOX UNDERNEATH THE SEARCH BOX
		  var curleft = ajaxLeftPos();
	      var curtop = ajaxTopPos();
		  
		  document.getElementById("suggestbx").style.top = curtop + "px";
	      document.getElementById("suggestbx").style.left = curleft + "px";
		  
		  //SHOW HINT BOX
		  document.getElementById("suggestbx").style.display = "block";
		  document.getElementById("suggestbx").style.border = "1px solid #000000"
		  document.getElementById("closesuggest").style.color = "#0000FF";
		  items = xmlitems.getElementsByTagName("item");
		  if(items.length>0){
		    for( i=0; i<items.length; i++ ){
		      document.getElementById("hint_" + i).style.display = "block";
			  document.getElementById("hint_" + i).innerHTML = items[i].firstChild.nodeValue;
		    }
		  }
		  if(items.length<10){
		    for(i=items.length;i<10;i++){
		      document.getElementById("hint_" + i).style.display = "none";
			  document.getElementById("hint_" + i).innerHTML = "";
			}
		  }
		  
		  if(items.length == 0){ document.getElementById("suggestbx").style.display = "none"; }
		  if(keyword.value == ""){ document.getElementById("suggestbx").style.display = "none"; }
		}
	  }
	}
    ajax.open('get','datagatherer.php?kwd='+keyword.value);
	if(key!=38 && key!=40){
      ajax.send(null);
	  selectedlevel = -1;
	}
  }
}

function clearSelect(){
  for(i=0; i<items.length; i++){
    document.getElementById("hint_" + i).style.background = "#FFFFFF";
    document.getElementById("hint_" + i).style.color = "#000000";
  }
}

function selectItem(inum){
  selectedlevel = inum;
  clearSelect();
  document.getElementById("hint_" + inum).style.background = "#3366CC";
  document.getElementById("hint_" + inum).style.color = "#FFFFFF";
}

function clickItem(){
  document.getElementById("keyword").value = items[selectedlevel].firstChild.nodeValue;
  document.getElementById("keyword").focus();
  clearSelect();
  document.getElementById("suggestbx").style.display = "none";
  document.quick_find_header.submit();
}

function clickClose(){
  document.getElementById("keyword").focus();
  clearSelect();
  document.getElementById("suggestbx").style.display = "none";
}