
// TextBox OnBlur
function handleblur() { 
  suggestDiv.style.display='none';
}
function handleKeyUp(oEvent) {
	oEvent=window.event || oEvent;
  	iKeyCode=oEvent.keyCode;
	if(iKeyCode == 38) {  //up arrow
          suggestListMoveUp();
   	}else if(iKeyCode == 40){ //down arrow
          suggestListMoveDown();
    }else if(iKeyCode == 13 || iKeyCode == 27) { //return or escape
			suggestDiv.style.display='none';
			return false;
    }else if( iKeyCode==8 || (iKeyCode>=45 && iKeyCode<=57) || (iKeyCode>=65 && iKeyCode<=90) || (iKeyCode>=95 && iKeyCode<=122)) {
  		var txt = this.value; 
  		if( txt.length > 0 ) {
  			//ajax call
			var url = "/autosuggest.php?table="+autotable+"&str="+txt; //alert(url);
			callAHAHautos(url, 'get', '', callComplete)
  		} else {
			suggestDiv.style.display='none';
		}
	} else { //ignore
    	return;
  	}	
}
function suggestListMoveDown() { //alert(this.Div.childNodes.length);
    if(suggestDiv.childNodes.length>0 && curpos < (suggestDiv.childNodes.length-1)) {
       ++curpos;
       for(var i=0;i<suggestDiv.childNodes.length;i++) {
          if(i==curpos) {
             suggestDiv.childNodes[i].className="ListItemHover";
             textBox.value=suggestDiv.childNodes[i].innerHTML;
			 val = suggestDiv.childNodes[i].innerHTML; //alert(val);
          }
          else {
             suggestDiv.childNodes[i].className="";
          }
       }
    }
 }
 
function suggestListMoveUp()
 {
    if(suggestDiv.childNodes.length>0 && curpos>0) {
       --curpos;
       for(var i=0;i<suggestDiv.childNodes.length;i++) {
          if(i==curpos) {
             suggestDiv.childNodes[i].className="ListItemHover";
            textBox.value=suggestDiv.childNodes[i].innerHTML;
			val = suggestDiv.childNodes[i].innerHTML;
          }
          else {
             suggestDiv.childNodes[i].className="";
          }
       }
    }
}
function callComplete(req) { //alert(req.responseText);
  curpos=-1;
  setPosition(suggestDiv);
  while ( suggestDiv.hasChildNodes() )
    suggestDiv.removeChild(suggestDiv.firstChild);

  var aStr = req.responseText.split('|');
  var i;
  if( aStr[0] != "" )   { 
    	for ( i = 0; i < aStr.length; i++ ) {
      		var oDiv = document.createElement('div');
      		suggestDiv.appendChild(oDiv);
      		oDiv.innerHTML    = aStr[i];
            oDiv.noWrap       = true;
      		oDiv.onmousedown  = Div_MouseDown;
      		oDiv.onmouseover  = Div_MouseOver;
      		oDiv.onmouseout   = Div_MouseOut;           
    	}
    	suggestDiv.style.display = 'block';
  } else {
    suggestDiv.innerHTML = '';
    suggestDiv.style.display='none';
  }
}
function Div_MouseDown() {
  textBox.value = this.innerHTML;
}

function Div_MouseOver() {
    this.className = 'ListItemHover';
}

function Div_MouseOut() {
	this.className = '';
}

function setPosition(divElem) {
	var c = GetCoords(textBox);
  	var n = textBox.style.pixelHeight;
  	if( !n ) {  n = 25; }  else { n += 2; }
  	suggestDiv.style.left = c.x;
  	suggestDiv.style.top = c.y + n;
  	suggestDiv.style.display = 'none';
  	suggestDiv.style.position = 'absolute';
  	// Set some default styles
    suggestDiv.className = 'suggestDivClass';
}
function GetCoords(obj /*:object*/) {   
  var newObj = new Object();
  newObj.x = obj.offsetLeft;
  newObj.y = obj.offsetTop;
  theParent = obj.offsetParent;
  while(theParent != null)
  {
    newObj.y += theParent.offsetTop;
    newObj.x += theParent.offsetLeft;
    theParent = theParent.offsetParent;
  }
  return newObj;
}


function callAHAHautos(url, type, parameters, fname){ 
	try {
		req = new XMLHttpRequest(); /* e.g. Firefox */
	} catch(e) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP"); /* some versions IE */
		} catch (e) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP"); /* some versions IE */ }
			catch (E) {
				req = false;
			}
		}
	}
	req.onreadystatechange = function() {
		responseAHAHautos(fname);
	};
	req.open(type,url,true);
    req.setRequestHeader("Content-length", parameters.length);
	if(parameters == '') parameters = null;
	req.send(parameters);
}

function responseAHAHautos(fname) {
	if(req.readyState == 4) {
		if(req.status == 200) {
			 fname(req);		
			//alert(output);
		} else {
			alert("Ooops Error! Call 911");
		}
	}
}

function initialise_autosuggest(tbl) {

	textBox = document.getElementById('autoTextBox'); 
	textBox.onkeyup = handleKeyUp;
	textBox.onblur = handleblur;
	suggestDiv = document.getElementById('suggest');
	autotable =  tbl;
}
//global variables
var textBox, suggestDiv,curpos=-1;
var autotable, val =''; 
