function getPosWord(sTxt, getFirstWord)
{
  var sWord = top.removeDelimiters(sTxt, ' ');
  if (getFirstWord)
  {
    var indOfSpace = sWord.indexOf(' ');
    if (indOfSpace > -1)
      sWord = sWord.substr(0, indOfSpace);
  }
  return sWord;
}

function showWordlistButton(sId)
{
  var objTxt = document.getElementById(sId);

  var sTxt = objTxt ? objTxt.value : "";
  sTxt = getPosWord(sTxt, false);
  var bShowButton = objTxt && sTxt.length >= 1;

  return bShowButton;
}

function keyUpTextInput(evt, sGroupNr, objTxt)
{                     
  var sId = objTxt.id;

  var bSWL = showWordlistButton(sId);
  if (bSWL)
  {
    var bReloadList = false;
    if (isShowWordlist())
    {
      if (evt.keyCode == 40) //down
        browseWordList(false);
      else if (evt.keyCode == 38) //up
        browseWordList(true);
      else if (evt.keyCode == 13) //enter
        copySelectedWord();
      else if (evt.keyCode == 27) //escape
        hideWordlist(true);
      else if (  evt.keyCode == 16 /*shift*/
              || evt.keyCode == 17 /*ctrl*/
              || evt.keyCode == 18 /*alt*/
              || evt.keyCode == 19 /*pause*/
              || evt.keyCode == 20 /*caps lock*/
              || evt.keyCode == 33 /*pg up*/
              || evt.keyCode == 34 /*pg dn*/
              || evt.keyCode == 35 /*end*/
              || evt.keyCode == 36 /*home*/
              || evt.keyCode == 37 /*left*/
              || evt.keyCode == 39 /*right*/                            
              || evt.keyCode == 45 /*insert*/
              )
        ; //skip
      else
        bReloadList = true;
    }
    else //show wordlist
    {
      bReloadList = true;
    }
    
    if (bReloadList)
    {  
      showWordlist(sGroupNr, sId, evt, 0);
    }   
  }
  else
    hideWordlist(true);
  return true;
}

function showAllWordlistButtons(frmId)
{
  return; //don't show them anymore
  var aForm = document.getElementById(frmId);
  var aElms = aForm.elements;
  for (var i=0; i<aElms.length; i++)
  {
    if (aElms[i].type == 'text')
      showWordlistButton(aElms[i].id);
  }
}

var sWordlistGroupName = ""; //stores the name of current wordlist group

function isShowWordlist()
{
  var objDiv = document.getElementById('divWordlist');
  return objDiv.style.display == "block";
}

function hideWordlist(bHide)
{  
  if (bHide != undefined)
  {
    var objDiv = document.getElementById('divWordlist');
    objDiv.style.display = bHide ? "none" : "block";    
  }
}

function textBoxLostFocus()
{
  window.setTimeout('hideWordlist(true)', 200);
  //hideWordlist(true);
}

var wlRequest = 0;

var timeOutId = new Array();
          
var theGroupName = "";
var theObjectName = "";
var theDisplayName = "";
var theEvent = 0;
var theMinWordFrequency = null;
var objDivCss = "";
var objSelCss = "";

function cancelShowWordlist(evt)
{
  for (var i = 0; i < timeOutId.length; ++i)
    window.clearTimeout(timeOutId[i]);
  if (evt.keyCode == 13 && isShowWordlist()) //enter, is processed in key up
  {
    evt.cancelBubble = true;
    return false;
  }
  else if (evt.keyCode == 13)
  {
    evt.cancelBubble = false;
    return true;
  }
  evt.cancelBubble = true;
  return true;
}

function showWordlist(sGroupName, sObjectName, evt, iMinWordFrequency)
{
  var objectName = theObjectName;
  
  if (iMinWordFrequency)
    theMinWordFrequency = iMinWordFrequency;
  theObjectName = sObjectName
  theGroupName = sGroupName;

  sWordlistGroupName = theObjectName; //update group
  
	var objInput = document.getElementById(theObjectName);
  var posWord = objInput.value; //for now, change later
  posWord = getPosWord(posWord, !iMinWordFrequency);

  theEvent = evt;
  
  var oListBox = document.getElementById("selWordlist");
  var index = oListBox.options.length ? top.binSearch(oListBox, posWord) : -1;
  /* VN.2006.06.28, apostroph en binary search gaan fout, altijd herladen bij woorden met ' */
  if (/*(posWord.indexOf("'")<0) && */index >= 0 && objectName == theObjectName)
  {
    oListBox.selectedIndex = index;
    hideWordlist(false);        
  }
  else
  {        
    tmpTimeout = window.setTimeout('showWordListNow()', 300);
    timeOutId[timeOutId.length] = tmpTimeout;
  }

  return true;
}

function showWordListNow()
{
  displayWordlist(theGroupName, theDisplayName, theEvent, theMinWordFrequency);
}
      
function displayWordlist(sGroupName, sDisplayName, evt, iMinWordFrequency)
{  
  var wlHeight = 5; //the number of visible words
  /* VN.2006.06.08 */
  var oDivOverflow = document.getElementById("divOverflow");
  var yScrollbar = oDivOverflow.scrollTop;
  
  if (sGroupName == "none")
  {
	  alert("Deze woordenlijst is nog niet beschikbaar");
	  return;
  }

  var sObjName = theObjectName; //the name of the input box
  
	var objInput = document.getElementById(sObjName);
  var posWord = objInput.value; //for now, change later
  posWord = getPosWord(posWord);
  
	//reset the words
	/*
	var objSel = document.getElementById("selWordlist");
	objSel.options.length = 0;
	objSel.options[0] = new Option("De woordenlijst wordt geladen");
  */
  
	//reposition and display the div
	var objTable = document.getElementById("tblSimpleSearch");
	var bSimpleSearch = objTable ? true : false;
	    
	var objDiv = document.getElementById('divWordlist');
	//advanced var distTop = 75 + objInput.parentNode.offsetTop + objInput.offsetTop;
	var objTopCell = document.getElementById("tdTopControl");	
	var distTop = 56 + objTopCell.offsetHeight + objInput.parentNode.offsetTop + objInput.offsetTop;	
	//alert(objTopCell.offsetHeight + "--" + objInput.parentNode.offsetTop + "--" + objInput.offsetTop + "--" + );
	if (bSimpleSearch)
    	distTop += objInput.parentNode.parentNode.parentNode.offsetTop 
	        + objInput.parentNode.parentNode.parentNode.parentNode.offsetTop 
	        + objInput.parentNode.parentNode.parentNode.parentNode.parentNode.offsetTop - 2;
	
	distTop -= yScrollbar; /* VN.2006.06.08, als gescrold -> positie aanpassen */
	var objLeftColumn = document.getElementById("leftColumn");
	//advanced var distLeft = 18 + objLeftColumn.offsetWidth + objInput.parentNode.offsetLeft + objInput.offsetLeft; 	
	var distLeft = 19 + objLeftColumn.offsetWidth + objInput.parentNode.offsetLeft + objInput.offsetLeft; 	
    if (sObjName == "AdvancedSearch_StraalVan_Txt")
    {
      /* VN.2006.06.19, fix voor eigenaardige afwijking van woordenlijstlocatie */
      /*distLeft += 195;
      distTop += 155;	*/
    }
	if (bSimpleSearch)
	    distLeft += objInput.parentNode.parentNode.parentNode.offsetLeft 
	        + objInput.parentNode.parentNode.parentNode.parentNode.offsetLeft 
	        + objInput.parentNode.parentNode.parentNode.parentNode.parentNode.offsetLeft - 2;
	
	//var objWidth = objInput.parentNode.offsetWidth;
	var objWidth = objInput.offsetWidth;
	objSelCss = 'width:' + objWidth + 'px; border:solid 1px #FF0000;';
	objDivCss = 'display:block; position:absolute; top:'+distTop+'px; left:'+distLeft+'px; width:' + objWidth + 'px;';		
	       
	//get the words
	var urrel = "wordlistdropxml.aspx?sPosition=" + escape(posWord) + "&sGroupName=" + sGroupName + "&sOrgWord=&sDisplayName=" + sDisplayName + (iMinWordFrequency ? "&iMinFrequency=" + iMinWordFrequency + "&nrOfWordsToDisplay=10": "");
  // branch for native XMLHttpRequest object
  wlRequest = 0;
  if (window.XMLHttpRequest) 
    wlRequest = new XMLHttpRequest();
  else if (window.ActiveXObject)
    wlRequest = new ActiveXObject("Microsoft.XMLHTTP");
  if (wlRequest)
  {
    wlRequest.onreadystatechange = copyWordsXML;
    wlRequest.open("GET", urrel, true);
    wlRequest.send(null);
  }
}

function copyWordsXML()
{  
  if (wlRequest.readyState == 4)
  {
    if (wlRequest.status == 200) 
    {
      var response  = wlRequest.responseXML.documentElement;      
      var words = response.getElementsByTagName("word");

      if (words.length)
      {
        var objSel = document.getElementById("selWordlist");
        objSel.options.length = 0;
        
        for (var i = 0; i < words.length; ++i)
        {        
          var theChildren = words[i].childNodes;
          var theWord = words[i].firstChild.data;
          var theFrequency = "";//theChildren.length >= 2 ? " (" + theChildren(1).firstChild.data + ")" : "";
          objSel.options[i] = new Option(theWord + theFrequency, theWord);
        }
        if (objSel.options.length > 0)
          objSel.options[0].selected = true;        
        
        objSelCss += 'height:' + (objSel.options.length*18 + 10) + 'px;';
        objSel.style.cssText = objSelCss;
        
        var objDiv = document.getElementById('divWordlist');
        objDiv.style.cssText = objDivCss;        
      }
      else
        hideWordlist(true);
    }
  }
  
}

function copySelectedWord()
{
  var oSelect = document.getElementById("selWordlist");        
  if (oSelect.selectedIndex > -1)
  {
    var sTerm = oSelect.options[oSelect.selectedIndex].value;
    if (copyWordFromWordlist)
      copyWordFromWordlist(sWordlistGroupName, sTerm);            
  }
  else
    ; //alert("U moet een woord selecteren");
  hideWordlist(true);
  return(false);    
}

function copyWordFromWordlist(sGroupName, sWord)
{
    var objInput = document.getElementById(sGroupName);
    if (objInput)
        objInput.value = "\"" + sWord + "\"";    
}

function browseWordList(bUp)
{
  var oSelect = document.getElementById("selWordlist");        
  if (oSelect.options.length)
  {        
    var index = oSelect.selectedIndex;
    if (index == -1)
      oSelect.selectedIndex = 0;
    else if (bUp)
    {
      if (index > 0)
        oSelect.selectedIndex = index-1;    
    }
    else 
    {
      if (index < (oSelect.options.length-1))
        oSelect.selectedIndex = index+1;
    }
  }
}

function keyUpWordlist(evt)
{
  return;
  if (evt.keyCode == 13) 
    return copySelectedWord(); 
  else if (evt.keyCode == 27)
  {
    hideWordlist(true);
    //get focus back
    setInputBoxFocus(sWordlistGroupName);
    return false;
  }
  else
    return true;
}