 var v_oldValues = new Array
 var v_selectListContainers = new Array();

 var v_matchcolor     = new Array();
 var v_nomatchcolor   = new Array();

 var v_params = new Array();
 var v_var_lov = new Array();
 
 var v_rtrnField;
 var v_rtrnValue;
 
 var hlocalTab = false;
 var c_SelectListSize = 8;
 
 var v_registered_fields = new Array();
 var ind_focus_added = 0;
 var fromElement = "";
 var toElement = "";

 function f_register2(pvar_lov, p_TextFieldName, p_matchColor, p_noMatchColor) {
 	 if (!$x(p_TextFieldName)){
 		 return;	 
 	 }
 	 
// 	 alert(p_TextFieldName);
 	 
 	 var hindex = v_registered_fields.length;
 	 v_registered_fields[hindex] = p_TextFieldName;
 	 v_registered_fields[hindex + 1] = "_"+p_TextFieldName+"SELECTLIST";
 	 
 	 if(ind_focus_added == 0 ){
 	 	 addFocusEvent2();
 	 	 ind_focus_added = 1;
 	 }
   v_oldValues[p_TextFieldName] = html_GetElement(p_TextFieldName).value;

   v_selectListContainers[p_TextFieldName] = document.createElement("div");
   v_selectListContainers[p_TextFieldName].setAttribute("id", "_"+p_TextFieldName+"_CONTAINER");
   v_selectListContainers[p_TextFieldName].style.position = "relative";
   v_selectListContainers[p_TextFieldName].style.left = $x(p_TextFieldName).offsetLeft + "px";
   v_selectListContainers[p_TextFieldName].style.top = "0px";
   v_selectListContainers[p_TextFieldName].style.width = "10px";

   html_GetElement(p_TextFieldName).parentNode.appendChild(v_selectListContainers[p_TextFieldName]);

   if (document.all) {
     html_GetElement(p_TextFieldName).onkeyup = function () {return f_showSelectList2(event);};
     html_GetElement(p_TextFieldName).onkeydown = function () {return key_is_tab(event);};
   } else {
     html_GetElement(p_TextFieldName).onkeyup = function (e) {return f_showSelectList2(e);};
     html_GetElement(p_TextFieldName).onkeydown = function (e) {return key_is_tab(e);};
   }
 
 
   function key_is_tab(e){
  	//alert('is_tab')
     var keynum; 
     if(document.all)  {
       keynum = e.keyCode
     } else {
       keynum = e.which
     }
   
     //hlocalTab = keynum == 9 && !e.shiftKey?true:false;
	 hlocalTab = keynum == 9?true:false;
	 //alert(keynum + ' ' + hlocalTab)
   }

   v_matchcolor[p_TextFieldName] = p_matchColor;
   v_nomatchcolor[p_TextFieldName] = p_noMatchColor;
   v_params[p_TextFieldName] = new Array();
   
   for (var i=4; i < arguments.length; i++){
   	//alert(i + ' - ' + arguments[i])
       v_params[p_TextFieldName][i-4] = arguments[i];
   }
   v_var_lov[p_TextFieldName] = pvar_lov;
   
   f_createSelectList2(p_TextFieldName);
   f_removeSelectList2(p_TextFieldName);
 }

 function f_showSelectList2(e) {
	var keynum;
	var p_TextFieldName;
	if(document.all)  {
	  keynum = e.keyCode
	  p_TextFieldName = e.srcElement.getAttribute("id");
	} else {
	  keynum = e.which
	  p_TextFieldName = e.target.getAttribute("id");
	}

	
   if (v_oldValues[p_TextFieldName] != html_GetElement(p_TextFieldName).value) {
   	//alert('if'+keynum)
     if ((keynum != 13 && keynum != 9) || hlocalTab){ //keyup wordt immers getriggerd door de tab vanaf het voorgaande veld
     	 v_oldValues[p_TextFieldName] = html_GetElement(p_TextFieldName).value;
     	 if ($x(p_TextFieldName).value.length > 2 || $x(p_TextFieldName).value.length == 0) {
     	alert('do'+keynum)
         f_do_showSelectList2(p_TextFieldName);
       } else {
         f_removeSelectList2(p_TextFieldName);
       }
     }
   } else {
   	//alert('else'+keynum)
     if (keynum == 40 || keynum == 38 || keynum == 9) {   	
       if (!e.shiftKey) {
       	alert('showselect')
       	 var l_SelectList = html_GetElement("_"+p_TextFieldName+"SELECTLIST");
       	 alert(l_SelectList + ' - ' + l_SelectList.style.visibility)
         if (l_SelectList && l_SelectList.style.visibility == "visible") {
           html_GetElement("_"+p_TextFieldName+"SELECTLIST").focus();
           l_SelectList.options[0].selected=true;
         }
       }
     }
     /*if (keynum == 13) {
       f_do_pushBackValue2(p_TextFieldName);
     }*/
   }
   
 }


 function f_do_showSelectList2(p_TextFieldName) {
   var l_Return = null;
   var l_SelectList = html_GetElement("_"+p_TextFieldName+"SELECTLIST");
   if (!l_SelectList) {
     l_SelectList = f_createSelectList2(p_TextFieldName);
     l_SelectList.style.visibility="visible";
   } else {
     l_SelectList.style.visibility="visible";
   }

   var get = new htmldb_Get(
     null,html_GetElement('pFlowId').value,'APPLICATION_PROCESS=get_search_lov',page()
   );
  
   get.add('P201_CODE', v_var_lov[p_TextFieldName]);
   get.add('P201_ZOEK', html_GetElement(p_TextFieldName).value);
   get.add('TEMP_ZOEK', html_GetElement(p_TextFieldName).value);
   get.add('P201_TAAL', html_GetElement('P0_TAAL').value);
 
   //Aantal gebruikte parameters
   var paramCount = v_params[p_TextFieldName].length;
   //max aantal definiëerbare parameters
   var paramMaxCount = 6;
   //Variabelewaarden doorgeven
   for (var i=1; i <= paramCount; i++){
   	//alert(i + ' - ' + v_params[p_TextFieldName][i-1] + ' - ' + $x(v_params[p_TextFieldName][i-1]).value)
    get.add('P201_PAR_'+i, $x(v_params[p_TextFieldName][i-1]).value);
   }
   //Niet gebruikte variabelen herinitialiseren (kunnen nog waarden bevatten van andere P210-oproepen).
   for (var j = paramCount+1; j <= paramMaxCount; j++){
   //	alert(j + ' - ' + v_params[p_TextFieldName][j-1] + ' - ' + $x(v_params[p_TextFieldName][j-1]).value)
   	get.add('P201_PAR_'+j, $x(v_params[p_TextFieldName][j-1]).value);      
   }

 gReturn = get.get();     
 alert('Return: ' + gReturn)

   gReturn = get.get('XML');

   if(gReturn && l_SelectList){
     var err_Count = gReturn.getElementsByTagName("fout").length;
     if (err_Count > 0) {
        alert(decodeXML(gReturn.getElementsByTagName("fout")[0].text));
     } else {
       var l_Count = gReturn.getElementsByTagName("row").length;
	       l_SelectList.length = 0;
       if (l_Count > 0) {
         if (l_Count < c_SelectListSize) {
           l_SelectList.size = l_Count;
         } else {
           l_SelectList.size = c_SelectListSize;
         }
         v_rtrnField = new Array(l_Count);
 				 v_rtrnValue = new Array(l_Count);
         for(var i=0;i<l_Count;i++){
           var l_ReturnedRow = gReturn.getElementsByTagName("row")[i];

           //Eerst de keuzelijst bijwerken        
           var l_ReturnedDisplay = l_ReturnedRow.getElementsByTagName("col")[0];
					 if(document.all)  {
					   f_appendToSelect2(l_SelectList, decodeXML(l_ReturnedDisplay.text), decodeXML(l_ReturnedDisplay.text));
					 }else{
					   f_appendToSelect2(l_SelectList, decodeXML(l_ReturnedDisplay.textContent), decodeXML(l_ReturnedDisplay.textContent));
					 }
 				 
 				   //Vervolgens de return-waarden opvullen
           var c_Count = (l_ReturnedRow.getElementsByTagName("col").length -1) / 2;
           v_rtrnField[i] = new Array(c_Count);
 				   v_rtrnValue[i] = new Array(c_Count);
 				   
 				   //enkel de omschrijving wordt niet opgenomen in de veld/waarde tabellen
 				   var colnr = 1;
           for(var j = 0; j < c_Count; j++){
           	//We gebruiken de decodefunctie in samenwerking met de Oracle tegenhanger UTL_URL.ESCAPE (in isb.XML_STRIP)
             //v_rtrnValue[i][j] = l_ReturnedRow.getElementsByTagName("col")[colnr+1].firstChild?decodeXML($xml(l_ReturnedRow, "col")):"";
             if(document.all)  {
             	 v_rtrnField[i][j] = l_ReturnedRow.getElementsByTagName("col")[colnr].text;
					     v_rtrnValue[i][j] = l_ReturnedRow.getElementsByTagName("col")[colnr+1].firstChild?decodeXML(l_ReturnedRow.getElementsByTagName("col")[colnr+1].text):"";
					 	 }else{
					 	 	 v_rtrnField[i][j] = l_ReturnedRow.getElementsByTagName("col")[colnr].textContent;
					     v_rtrnValue[i][j] = l_ReturnedRow.getElementsByTagName("col")[colnr+1].firstChild?decodeXML(l_ReturnedRow.getElementsByTagName("col")[colnr+1].textContent):"";
					   }
             colnr += 2;
           }
					 f_setFieldColor2(p_TextFieldName, v_matchcolor[p_TextFieldName]);
         }
         
       	 if (l_ReturnedDisplay.text == 'INIT' || l_ReturnedDisplay.textContent == 'INIT'){
				 	 f_removeSelectList2(p_TextFieldName);
				 	 var hindex = 0;
				 	 var hitemCount = v_rtrnField[hindex].length;
				   for(var i = 0; i < hitemCount; i++){
				   	 //alert(v_rtrnField[hindex][i]+ ' - ' +  v_rtrnValue[hindex][i])
				   	 //alert(html_GetElement(v_rtrnField[hindex][i]).id + html_GetElement(v_rtrnField[hindex][i]).tagName)
				     html_GetElement(v_rtrnField[hindex][i]).value = v_rtrnValue[hindex][i];
				     if ($x(v_rtrnField[hindex][i]).tagName == 'SPAN'){
				   	 	  html_GetElement(v_rtrnField[hindex][i]).innerText = v_rtrnValue[hindex][i];
				     }
				   }
				   
				   if (typeof f_after_passBack=="function"){
     				 f_after_passBack(v_var_lov[p_TextFieldName])
   				 }
				 }
         f_setFieldColor2(p_TextFieldName, v_matchcolor[p_TextFieldName]);
       } else if (l_Count == 0) {
         f_removeSelectList2(p_TextFieldName);
         f_setFieldColor2(p_TextFieldName, v_nomatchcolor[p_TextFieldName]);
       }
     }
   }
 }

 function f_setFieldColor2(pField, pColor) {
   html_GetElement(pField).style.color = pColor;
 }

 function f_createSelectList2(p_TextFieldName) {
   var v_SelectList = document.createElement("select");
   v_SelectList.setAttribute("id", "_" + p_TextFieldName + "SELECTLIST");
   v_SelectList.style.position = "absolute";
   v_SelectList.style.left = "0px";
   v_SelectList.style.top = "0px";
   v_SelectList.size = c_SelectListSize;
   if (document.all) {
     v_SelectList.onclick = function () {return f_pushBackValue2(event);};
     v_SelectList.onkeyup = function () {return f_pushBackValueReturn2(event);};
   } else {
     v_SelectList.onclick = function (e) {return f_pushBackValue2(e);};
     v_SelectList.onkeyup = function (e) {return f_pushBackValueReturn2(e);};
  }

   v_selectListContainers[p_TextFieldName].appendChild(v_SelectList);

   return v_SelectList;
 }

 function f_removeSelectList2(p_TextFieldName) {
 	 if (html_GetElement("_" + p_TextFieldName + "SELECTLIST"))
     html_GetElement("_" + p_TextFieldName + "SELECTLIST").style.visibility="hidden";
 }


 function f_do_pushBackValue2(p_TextFieldName) {
   //html_GetElement(p_TextFieldName).value = html_GetElement("_" + p_TextFieldName + "SELECTLIST").childNodes[html_GetElement("_" + p_TextFieldName + "SELECTLIST").selectedIndex].innerText;
   var hindex = html_GetElement("_" + p_TextFieldName + "SELECTLIST").selectedIndex;
   var hitemCount = v_rtrnField[hindex].length;
   
   for(var i = 0; i < hitemCount; i++){
   	 //alert(v_rtrnField[hindex][i]+ ' - ' +  v_rtrnValue[hindex][i])
   	 //alert(html_GetElement(v_rtrnField[hindex][i]).id + html_GetElement(v_rtrnField[hindex][i]).tagName)
   	 //alert('index:' + hindex + ' - ' + v_rtrnField[hindex][i] + ' - ' + v_rtrnValue[hindex][i])
   	 html_GetElement(v_rtrnField[hindex][i]).value = v_rtrnValue[hindex][i];
   	 if ($x(v_rtrnField[hindex][i]).tagName == 'SPAN'){
   	 	 html_GetElement(v_rtrnField[hindex][i]).innerText = v_rtrnValue[hindex][i];
   	 }
   }
   f_setFieldColor2(p_TextFieldName, v_matchcolor[p_TextFieldName]);
   f_removeSelectList2(p_TextFieldName);
   html_GetElement(p_TextFieldName).focus();
 }

 function f_pushBackValue2(e) {
   var p_TextFieldName;
   if(document.all)  {
     p_TextFieldName = e.srcElement.getAttribute("id");
   } else {
     p_TextFieldName = e.target.parentNode.getAttribute("id");
   }
   if (p_TextFieldName) {
     f_do_pushBackValue2(p_TextFieldName.substring(1, p_TextFieldName.indexOf("SELECTLIST")));
     if (typeof f_after_passBack=="function"){
       f_after_passBack(v_var_lov[p_TextFieldName.substring(1, p_TextFieldName.indexOf("SELECTLIST"))])
     }
   }
 }

 function f_pushBackValueReturn2(e) {
   var keynum;
   var p_TextFieldName;
   if(document.all)  {
     keynum = e.keyCode
     p_TextFieldName = e.srcElement.getAttribute("id");
   } else {
     keynum = e.which
     p_TextFieldName = e.target.getAttribute("id");
   }
   if (keynum == 13  ) {
     f_do_pushBackValue2(p_TextFieldName.substring(1, p_TextFieldName.indexOf("SELECTLIST")));
     if (typeof f_after_passBack=="function"){
       f_after_passBack(v_var_lov[p_TextFieldName.substring(1, p_TextFieldName.indexOf("SELECTLIST"))])
     }
   }
 }


 function f_appendToSelect2(pSelect, pValue, pContent) {
   var l_Item = document.createElement("option");
   l_Item.value = pValue;
   if(document.all){
     pSelect.options.add(l_Item);
     l_Item.innerText = pContent;
   } else {
     l_Item.appendChild(document.createTextNode(pContent));
     pSelect.appendChild(l_Item);
   }
 }
 
 function addFocusEvent2(){
  var e, el, i = 0;

  if (document.addEventListener){
    document.addEventListener("focus", function(e){return f_hideSelectList2(e);},false);
  }
  
  while (el = document.getElementsByTagName('*')[i++]){
    if (el.addEventListener){
      el.addEventListener("focus", function(e){return f_hideSelectList2(e);},false);
    }else if(el.attachEvent){
      el.attachEvent("onfocus", function(){return f_hideSelectList2(event);});
    }
  }
}

function f_hideSelectList2(e){
  fromElement = nvl(toElement, '-1');
  hindRegistered = 0;

  if(document.all)  {
    keynum = e.keyCode
    toElement = nvl(e.srcElement.getAttribute("id"), '-2');
  } else {
    keynum = e.which
    var node = e.target;
    var hbail = 0;
    while(node.nodeType != node.ELEMENT_NODE && node.nodeType != node.DOCUMENT_NODE && hbail < 100){
      node = node.parentNode;
      hbail += 1;
    }
    if (node.nodeType == node.DOCUMENT_NODE){
      toElement = 'DOCUMENT';
    }else{
      toElement = nvl(node.id, '-2');
    } 
  }

  for (i= 0; i < v_registered_fields.length; i++){
    if (fromElement == v_registered_fields[i]){
      hindRegistered = 1;
    }
  }

  if(hindRegistered == 1){
   // alert(toElement +' * '+ fromElement)
    if (!fromElement.match(toElement) && !toElement.match(fromElement)){
      f_removeSelectList2(fromElement);
    }
  }
}

