// The itanda online dictionary 
// The contents of this file are Copyright (c) JHC Technology Limited, 2006-2008 
// Version 1.2 
// Modified version to support addtional career 8888 requirements

var nLimit;
var strDictionary;
var strCharset;

var objReq;
var strUrl = "dictionarySearch.php?Key=";
var strHost = "";
var nFirstTermId = 0;
var nLastTermId = 0;
var aFrom;
var aTo;
var iSet;
var nMatched;
var strKeyword = "";
var strHelp = "dictionaryHelp.html";
var strItemLabel = "Terms";
var bChangeCursor = false;
var nCursorTimeout = 1000;

function setParameters(pLimit, pDictionary, pCharset) {
  nLimit = pLimit;
  strDictionary = pDictionary;
  strCharset = pCharset;
}   

function setKeyword(pKeyword) {
  if (trim(pKeyword) != "") {
    strKeyword = unescape(trim(pKeyword));
  }
}

function setHelp(pHelp) {
  strHelp = pHelp;
}

function setSearchUrl(pUrl) {
  if (pUrl.indexOf("?") != -1) {
    strUrl = pUrl + "&Key=";  
  }
  else {
    strUrl = pUrl + "?Key=";
  }
}

function setItemLabel(pItemLabel) {
  strItemLabel = pItemLabel;
}

function setHost(pHost) {
  strHost = pHost;
}

function setCursor(pChangeCursor, pCursorTimeout) {
  bChangeCursor = pChangeCursor;
  nCursorTimeout = pCursorTimeout;
}

function initialize() {
  try {
    objReq = new ActiveXObject("Msxml2.XMLHTTP");
  }
  catch(e) {
    try	{
      objReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch(e2) {
      objReq = null;
    }
  }
  if (!objReq && typeof XMLHttpRequest!="undefined") {
    objReq = new XMLHttpRequest();
  }
}

function sendRequest(strKey, strMode, nFrom, nTo) {
  var strRequest;
  if (bChangeCursor) {
    document.body.style.cursor = 'wait';
    if (nCursorTimeout > 0) {
      window.setTimeout("document.body.style.cursor = 'auto'", nCursorTimeout);
    }
  }
  initialize();
  strKey = escape(strKey).replace("+", "%2B");
  if (objReq != null) {
    objReq.onreadystatechange = processReturn;
    strRequest = strHost + strUrl + strKey + 
                 '&Mode=' + strMode + '&Limit=' + nLimit + 
                 '&Dictionary=' + strDictionary + '&Charset=' + strCharset;
    if (arguments.length > 2) {
      strRequest += '&From=' + nFrom;
    }
    else {
      nMatched = -1;
    }
    if (arguments.length > 3) {
      strRequest += '&To=' + nTo;
    }
    if (nMatched != -1) {
      strRequest += '&Count=' + nMatched;
    }
    objReq.open("GET", strRequest, true);
    objReq.send(null);
  }
}

function processReturn() {
  var nReturned;
  var nTotal;
  var strCounts;
  var strTermIds;
  var nIndexOf;
  var nLastIndexOf;
  var aCounts;
  var strStatus;
  if (objReq.readyState == 4) {
    if (objReq.status == 200) {
      showDiv("divStatus");
      if (objReq.responseText == "") {
        document.getElementById("divStatus").innerHTML =
          "<small><font color='#CCCCCC'>There were no results from your search</font></small>";
        document.getElementById("divResult").innerHTML = "";
        hideDiv("divResult");
      }
      else {
        nIndexOf = objReq.responseText.indexOf("|");
        strCounts = objReq.responseText.substr(0, nIndexOf);
        aCounts = strCounts.split(","); 
        nReturned = aCounts[0];
        nTotal = aCounts[1];
        nLastIndexOf = objReq.responseText.lastIndexOf("|");
        strTermIds = objReq.responseText.substring(nLastIndexOf + 1);
        aTerms = strTermIds.split(",");
        nFirstTermId = aTerms[0];
        nLastTermId = aTerms[1];
        if (aTerms.length > 2) {
          if (aTerms[2] != "") {
            nLimit = aTerms[2];
          }
        }  
        if (aCounts.length == 3) {
          // Next
          iSet++;
          aFrom[iSet] = nFirstTermId;
          aTo[iSet] = nLastTermId; 
        }
        else if (aCounts.length == 4) {
          // Previous
          iSet--;
        } 
        else {
          // New search
          if (nTotal != -1) {
            nSet = Math.ceil(nTotal / nLimit);
          }
          else {
            nSet = 1000;  //  Add proper checks and array copies/resizing later 
          }
          aFrom = new Array(nSet);
          aTo = new Array(nSet);
          iSet = 0;
          aFrom[iSet] = nFirstTermId;
          aTo[iSet] = nLastTermId;
          nMatched = nTotal;  
        }    
        if (nTotal == 0 || 
           (nTotal == -1 && nReturned == 0 && aCounts.length == 2)) {
          document.getElementById("divStatus").innerHTML = 
             "<small><font color='#CCCCCC'>There were no results from your search</font></small>";
          document.getElementById("divResult").innerHTML = "";
          hideDiv("divResult");
        }
        else if (nTotal == -1 && nReturned == 0) {
           strStatus = "<small><font color='#CCCCCC'>" + 
                       "<a href='javascript:previous_onClick()'>&#171; previous</a>" +
                       "</font></small>";
           document.getElementById("divStatus").innerHTML = strStatus;
           document.getElementById("divResult").innerHTML = "";        
           hideDiv("divResult");
       }
        else {
          strStatus = "<small><font color='#CCCCCC'>" + strItemLabel + " " + 
                      (iSet * nLimit + 1) + " to " + (iSet * nLimit + parseInt(nReturned));
          if (nTotal != -1) {            
             strStatus += " of " + nMatched + "</font>&nbsp;&nbsp;";
          }
          if (iSet != 0) {
            strStatus += "&nbsp;&nbsp;<a href='javascript:previous_onClick()'>&#171; previous</a>";
          }
          if (iSet + 1 < aTo.length) {
            strStatus += "&nbsp;&nbsp;<a href='javascript:next_onClick()'>next &#187;</a>";
          }  
          strStatus += "</small>";
          document.getElementById("divStatus").innerHTML = strStatus; 
          showDiv("divResult");
          document.getElementById("divResult").innerHTML = 
            objReq.responseText.substring(nIndexOf + 1, nLastIndexOf);
        } 
      }
    }
    else {
      showDiv("divStatus");
      document.getElementById("divStatus").innerHTML = 
        "There was a problem retrieving data:<br>" + objReq.statusText;
      hideDiv("divResult");
    }
  }
  // Second navigation area
  if (document.getElementById("divNavigate")) {
    strNavigate = document.getElementById("divStatus").innerHTML;
    if (document.getElementById("divStatus").style.visibility == "hidden") {
      hideDiv("divNavigate");
    } 
    else if (strNavigate.indexOf("There were no") >= 0) {  
      hideDiv("divNavigate");
      document.getElementById("divNavigate").innerHTML = "";
    }
    else {
      showDiv("divNavigate");  
      document.getElementById("divNavigate").innerHTML = strNavigate;
    }
  }
  if (bChangeCursor) {
    if (nCursorTimeout == 0) {
      document.body.style.cursor = 'auto';
    }
  }
}

function bodyOnLoad() {
  document.frmInput.txtKeyword.focus();
  if (strKeyword != "") {
    document.frmInput.txtKeyword.value = strKeyword;
  }
  if (trim(document.frmInput.txtKeyword.value) != '') {
    sendRequest(trim(document.frmInput.txtKeyword.value), 
                getSelectedRadioValue(document.frmMode.optMode));
  }
}

function optMode_onClick() {
  if (trim(document.frmInput.txtKeyword.value) != '') {
    sendRequest(trim(document.frmInput.txtKeyword.value), 
                getSelectedRadioValue(document.frmMode.optMode));
  }
}

function previous_onClick() {
  var strMode;
  strMode = getSelectedRadioValue(document.frmMode.optMode);
  if (typeof document.frmList != "undefined") {
    strMode = strMode + ":" + getSelectedRadioValue(document.frmList.optList); 
  }
  sendRequest(trim(document.frmInput.txtKeyword.value), 
              strMode, 
              aFrom[iSet - 1], aTo[iSet - 1]);
}

function next_onClick() {
  var strMode;
  strMode = getSelectedRadioValue(document.frmMode.optMode);
  if (typeof document.frmList != "undefined") {
    strMode = strMode + ":" + getSelectedRadioValue(document.frmList.optList); 
  }
  sendRequest(trim(document.frmInput.txtKeyword.value), 
              strMode,
              parseInt(aTo[iSet]) + 1);
}

function showHelp(pHeight) {
  var strFeatures;
  strFeatures = "channelmode=no," + 
                "directories=no," + 
                "fullscreen=no," +
                "left=100," +
                "location=no," +
                "member=no," +
                "resizable=yes," + 
                "scrollbars=no," +
                "status=no," + 
                "titlebar=no," + 
                "toolbar=no," +
                "top=100," + 
                "width=600,";
  if (arguments.length == 0) {
    strFeatures += "height=400";
  }
  else {
    strFeatures += "height=" + pHeight;
  }    
  window.open(strHost + strHelp, "dictHelp", strFeatures);
}

function dictionaryLink_onMouseDown(objLink) {
  var strHref = objLink.href;
  var strKeyword = trim(document.frmInput.txtKeyword.value);
  if (strKeyword != "") {
    strKeyword = escape(strKeyword).replace("+", "%2B");  
    if (strHref.indexOf("&Keyword") != -1) {
      strHref = strHref.substring(0, strHref.indexOf("&Keyword"));
    }
    strHref = strHref + "&Keyword=" + strKeyword;
    objLink.href = strHref;
  }
}

