 var v_oldValues = new Array();
 var v_selectListContainers = new Array();

 var v_appItemTable   = new Array();
 var v_appItemColumn  = new Array();
 var v_matchcolor     = new Array();
 var v_nomatchcolor   = new Array();

 var v_enterFunctions = new Array();
 var c_SelectListSize = 8;
 
function register(p_TextFieldName, p_TableName, p_ColumnName, p_matchColor, p_noMatchColor, p_enterFunction) {
   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.zIndex = 1000;

   v_selectListContainers[p_TextFieldName].style.position = "relative";
   v_selectListContainers[p_TextFieldName].style.left = "0px";
   v_selectListContainers[p_TextFieldName].style.top = "0px";

   html_GetElement(p_TextFieldName).parentNode.appendChild(v_selectListContainers[p_TextFieldName]);
// move the text field into the new div
   v_selectListContainers[p_TextFieldName].appendChild(html_GetElement(p_TextFieldName));	

   if (document.all) {
     html_GetElement(p_TextFieldName).onkeyup = function () {return showSelectList(event);};
     html_GetElement(p_TextFieldName).onkeypress = function () {return stopRKey(event);};

   } else {
     html_GetElement(p_TextFieldName).onkeyup = function (e) {return showSelectList(e);};
     html_GetElement(p_TextFieldName).onkeypress = function (e) {return stopRKey(e);};
  }
   
   v_appItemTable[p_TextFieldName] = p_TableName;
   v_appItemColumn[p_TextFieldName] = p_ColumnName;
   v_matchcolor[p_TextFieldName] = p_matchColor;
   v_nomatchcolor[p_TextFieldName] = p_noMatchColor;
   v_enterFunctions[p_TextFieldName] = p_enterFunction;
 }

function stopRKey(evt) {
  var evt = (evt) ? evt : ((event) ? event : null);
  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
  if ((evt.keyCode == 13) && (node.type=="text"))  {return false;}
} 

 function showSelectList(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) {
     v_oldValues[p_TextFieldName] = html_GetElement(p_TextFieldName).value;
     if (html_GetElement(p_TextFieldName).value != "") {
       do_showSelectList(p_TextFieldName);
     } else {
       removeSelectList(p_TextFieldName);
     }
   } else {
     if (keynum == 40 || keynum == 38 || keynum == 9) {
       if (!e.shiftKey) {
         if (html_GetElement("_"+p_TextFieldName+"SELECTLIST")) {
           html_GetElement("_"+p_TextFieldName+"SELECTLIST").focus();
         }
       }
     } 
     if (keynum == 13) {
       do_pushBackValue(p_TextFieldName);
     }
   }
   return false;
 }


 function do_showSelectList(p_TextFieldName) { 
   var l_Return = null;
   var l_SelectList = html_GetElement("_"+p_TextFieldName+"SELECTLIST");
   if (!l_SelectList) {
     l_SelectList = createSelectList(p_TextFieldName);
   } else {
     l_SelectList.disabled = false;
     l_SelectList.style.visibility="visible";
   }
  
   var get = new htmldb_Get(
     null,html_GetElement('pFlowId').value,'APPLICATION_PROCESS=getSearchList',0
   );
   get.add('TF_SL_SEARCH', html_GetElement(p_TextFieldName).value);
   get.add('TF_SL_TABLE', v_appItemTable[p_TextFieldName]);
   get.add('TF_SL_COLUMN', v_appItemColumn[p_TextFieldName]);
   gReturn = get.get('XML');

   if(gReturn && l_SelectList){
     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;
       }
       for(var i=0;i<l_Count;i++){
         var l_ReturnedItem = gReturn.getElementsByTagName("row")[i];
          appendToSelect(l_SelectList, l_ReturnedItem.firstChild.nodeValue, l_ReturnedItem.firstChild.nodeValue);
       }
       setFieldColor(p_TextFieldName, v_matchcolor[p_TextFieldName]);
       l_SelectList.options[0].selected=true;

     } else if (l_Count == 0) {
       removeSelectList(p_TextFieldName);
       setFieldColor(p_TextFieldName, v_nomatchcolor[p_TextFieldName]);
     } 
   }
 }

 function setFieldColor(pField, pColor) {
   html_GetElement(pField).style.color = pColor;
 }

 function createSelectList(p_TextFieldName) {
   var v_SelectList = document.createElement("select");
   v_SelectList.setAttribute("id", "_" + p_TextFieldName + "SELECTLIST");
   v_SelectList.style.position = "absolute";
   v_SelectList.style.display = "block";
   v_SelectList.style.width = "100%";
   v_SelectList.style.left = "0px";
   v_SelectList.style.top = "20px";
   v_SelectList.size = c_SelectListSize;
   if (document.all) {
     v_SelectList.onclick = function () {return pushBackValue(event);};
     v_SelectList.onkeyup = function () {return pushBackValueReturn(event);};
   } else {
     v_SelectList.onclick = function (e) {return pushBackValue(e);};
     v_SelectList.onkeyup = function (e) {return pushBackValueReturn(e);};
  }

   v_selectListContainers[p_TextFieldName].appendChild(v_SelectList);

   return v_SelectList;
 }


 function removeSelectList(p_TextFieldName) {
   var v_SelectList = html_GetElement("_" + p_TextFieldName + "SELECTLIST");
   v_SelectList.style.visibility="hidden";
   html_GetElement(p_TextFieldName).focus();
   v_SelectList.disabled = true;

 }
  
 function do_pushBackValue(p_TextFieldName) {

   var v_SelectList = html_GetElement("_" + p_TextFieldName + "SELECTLIST");
   if (v_SelectList && v_SelectList.style.visibility!="hidden") {
       html_GetElement(p_TextFieldName).value = html_GetElement("_" + p_TextFieldName + "SELECTLIST").value;

       v_oldValues[p_TextFieldName] = html_GetElement(p_TextFieldName).value;

       setFieldColor(p_TextFieldName, v_matchcolor[p_TextFieldName]);
       removeSelectList(p_TextFieldName);
       html_GetElement(p_TextFieldName).focus();
   }
   else {
       var enterFunction = v_enterFunctions[p_TextFieldName];
       if (enterFunction) {
          enterFunction();
       }
   }
 }

 function pushBackValue(e) {
   var p_TextFieldName;
   if(document.all)  {
     p_TextFieldName = e.srcElement.getAttribute("id");
   } else {
     p_TextFieldName = e.target.parentNode.getAttribute("id");
   }
   if (p_TextFieldName) {
     if (p_TextFieldName.lastIndexOf("_CONTAINER") == p_TextFieldName.length - "_CONTAINER".length) {
         do_pushBackValue(p_TextFieldName.substring(1, p_TextFieldName.indexOf("_CONTAINER")));
     }
     else {
         do_pushBackValue(p_TextFieldName.substring(1, p_TextFieldName.indexOf("SELECTLIST")));
     }
   }
 }

 function pushBackValueReturn(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  ) {
     do_pushBackValue(p_TextFieldName.substring(1, p_TextFieldName.indexOf("SELECTLIST")));
   
   }
 }


 function appendToSelect(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);
   }
 }
 
