/**
 * EOL Ajax Foreign Key
 */
function toggleImgEl(aImg, aElem){
  if (aElem.style.display == "none"){
    aElem.style.display = "block";
    aImg.src = "images/collapse.gif";
  } else {
    aElem.style.display = "none";
    aImg.src = "images/expand.gif";
  }
}

function leftTrim(sString){
  while (sString.substring(0,1) == ' '){
    sString = sString.substring(1, sString.length);
  }
  return sString;
}

function rightTrim(sString){
  while (sString.substring(sString.length-1, sString.length) == ' '){
    sString = sString.substring(0,sString.length-1);
  }
  return sString;
}

function trimAll(sString){
  sString = leftTrim(sString);
  sString = rightTrim(sString);
  return sString;
}

var searchFKxmlHttpReq = null;
var searchFKexpiryTimer = null;
var searchFKelem = null;
var directSearch = false;
function displayFKDD(searchdivid, label, rText, params){
  searchdivid_ln = searchdivid + '_ln';  
  document.getElementById(searchdivid).innerHTML = rText;
  document.getElementById(searchdivid).style.display="block";
  document.getElementById(searchdivid_ln).style.display="inline";
  document.getElementById(label).disabled = false;
  document.getElementById(label).className = 'ajaxfksearch';  
  if (document.getElementById(searchdivid+"i_1") && (!document.getElementById(searchdivid+"i_2") || params[3] == 'Y') && params[1] == 'Y'){
    // only one
    document.getElementById(searchdivid+"i_1").onclick();
    if (params[4] == 'N'){
      doTab(document.getElementById(label));    
    }
  } else {  
    document.getElementById(searchdivid).focus();
    document.getElementById(label).focus();
  }  
}

function searchFK(searchdivid, label, query){
  var rText = '';
  if (trimAll(this.searchFKelem) == '') {
    document.getElementById(searchdivid).style.display = "none";
    return false;
  }
  params = document.getElementById(searchdivid+"_m").value.split(',');
  document.getElementById(label).className = 'ajaxfksearch_loading';  
  searchdivid_ln = searchdivid + '_ln';
  searchdivid_m = searchdivid + '_m';
  document.getElementById(searchdivid_ln).style.display="none";
  document.getElementById(label).disabled=true;  
  searchFKxmlHttpReq = initRequester(searchFKxmlHttpReq);  
  searchFKxmlHttpReq.open("POST", "ajax.php", true);
  searchFKxmlHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");  
  var searchFKTimeOut = setTimeout(function(){searchFKxmlHttpReq.abort();rText = eoltrans['Timeout'];displayFKDD(searchdivid, label, rText);}, 5000);    
  searchFKxmlHttpReq.onreadystatechange = function() {        
    if (searchFKxmlHttpReq.readyState == 4){      
      clearTimeout(searchFKTimeOut);
      if (searchFKxmlHttpReq.status == 200){        
        rText = searchFKxmlHttpReq.responseText; 
      }
      displayFKDD(searchdivid, label, rText, params);
    }
  }
  query  = query + "&search=" + this.searchFKelem + "&mode=" + params[0];
  searchFKxmlHttpReq.send(query);
}

function updateMouseNav(aElem, nr){  
  sd = parseInt(document.getElementById('nav_'+aElem).value);
  if (sd != nr && document.getElementById(aElem+'i_'+sd)){
    document.getElementById(aElem+'i_'+sd).onmouseout();
  }  
  document.getElementById('nav_'+aElem).value = nr;
}

function isNavEnter(searchdivid){
  aId = searchdivid+"i_"+parseInt(document.getElementById('nav_'+searchdivid).value);
  return (
    document.getElementById(searchdivid).style.display == "block" &&
    document.getElementById(aId)
  );
}

function handleFKNav(searchdivid, key){
  document.getElementById(searchdivid).style.display="block";
  var sd = parseInt(document.getElementById('nav_'+searchdivid).value);  
  aId = searchdivid+"i_"+sd;
  if (key == ENTER && document.getElementById(aId)){
    document.getElementById('nav_'+searchdivid).value = 0;
    document.getElementById(aId).onmouseout();
    document.getElementById(aId).onclick();        
  } else if (key == KEYUP){
    if (sd - 1 >= 1){
      if (document.getElementById(aId)){
        document.getElementById(aId).onmouseout();
      }
      aId = searchdivid+"i_"+ (sd - 1);
      if (document.getElementById(aId)){
        document.getElementById(aId).onmouseover();
        document.getElementById('nav_'+searchdivid).value = sd - 1;
      }      
    }
    if (sd == 0 || sd == 1){
      document.getElementById(searchdivid).style.display="none";
      document.getElementById('nav_'+searchdivid).value = 0;
    }
  } else if (key == KEYDN){    
    aIdt = searchdivid+"i_"+ (sd + 1);
    if (document.getElementById(aIdt)){
      if (document.getElementById(aId)){  
        document.getElementById(aId).onmouseout();
      }
      document.getElementById(aIdt).onmouseover();
      document.getElementById('nav_'+searchdivid).value = sd + 1;
    }
  }  
  sd = parseInt(document.getElementById('nav_'+searchdivid).value);  
  if (document.getElementById(searchdivid+'i_'+sd)){
    if (document.getElementById(searchdivid+'i_'+sd).offsetTop > (document.getElementById(searchdivid).offsetHeight / 2)){      
      document.getElementById(searchdivid).scrollTop = document.getElementById(searchdivid+'i_'+sd).offsetTop - 150;
    } else {
      document.getElementById(searchdivid).scrollTop = 0; 
    }
  }
}

function searchFKKeyPress(e, searchterm, searchdivid, timeout, label, query) {
  var key = getKeyCode(e);
  switch(key)	{
    case SHFT:
    case TAB:
      return false;
    case ESC:
      document.getElementById(searchdivid).style.display="none";
      return false;
    case ENTER:
      if (!isNavEnter(searchdivid)){
        params = document.getElementById(searchdivid+"_m").value.split(',');
        if (params[2] == 'Y'){
          doTab(document.getElementById(label));
        } else {
          clearTimeout(this.searchFKexpiryTimer);
          searchFKelem = searchterm;
          searchFK(searchdivid, label, query);
        }
        return false;
      }
    case KEYUP:
    case KEYDN:
      handleFKNav(searchdivid, key);
      return false;
    default:
      params = document.getElementById(searchdivid+"_m").value.split(',');
      document.getElementById(searchdivid+"_m").value = params[0]+','+params[1]+',N,'+params[3]+','+params[4];
      searchFKelem = searchterm;  
      document.getElementById(searchdivid).style.display="none";
      if (directSearch){
        searchFK(searchdivid, label, query);
      } else {
        clearTimeout(this.searchFKexpiryTimer);  
        this.searchFKexpiryTimer = setTimeout(function(){searchFK(searchdivid, label, query);}, timeout);
      }
  }
}

function searchFKTROnClick(editorlabel, suffix, aId, aValue){
  editorlabel_suffix = editorlabel + suffix;
  editorlabel_sd = editorlabel + '_sd';
  document.getElementById(editorlabel_suffix).value = aValue;
  document.getElementById(editorlabel).value = aId;
  if (document.getElementById(editorlabel).onchange){
    document.getElementById(editorlabel).onchange();
  }
  document.getElementById(editorlabel_sd).style.display = 'none';  
  params = document.getElementById(editorlabel_sd+"_m").value.split(',');
  document.getElementById(editorlabel_sd+"_m").value = params[0]+','+params[1]+',Y,'+params[3]+','+params[4];
  if (params[4] == 'Y'){
    document.getElementById(editorlabel_suffix).focus();
    document.getElementById(editorlabel_suffix).select();
  }
}

