var ccWordlistTimeoutIds = new Array();
var ccEmptyText = " Selecteer items uit bovenstaande lijst";
var ccEmptyTextBranches = " Selecteer branches uit bovenstaande lijst";
var ccCheckboxCheckTimeoutIds = new Array();

function ccGetElementById(id)
{
  var obj=document.getElementById(id);
  if (!obj)
  {
    obj = document.getElementById("CtrlBrancheSelectieAlfa_"+id);
    if (!obj)
    {
      obj = document.getElementById("CtrlBrancheSelectieZoeken_"+id);
    }
  }
  return obj;
}
function ccEscapeQuotes(text)
{
  var escaped_text = "";
  try
  {
    var text_length = text.length;
    var i = 0;
    escaped_text = new String();
    while (i < text_length)
    {
      if ((text.charAt(i) == '"') || (text.charAt(i) == '\\'))
        escaped_text += '\\';
      escaped_text += text.charAt(i);
      ++i;
    }
  }
  catch (excp)
  {
    escaped_text = "";
  }
  
  return escaped_text;
}

function ccRemoveQuotes(text)
{
  if (text)
  {
    text = new String(text);
    return text.replace(/"/g, "");
  }
  else 
    return "";
}
/* Als standaardbegintext er nog staat -> maak leeg */
function ccSetEmptySearchCommand(edit)
{
  if (edit.value == ccEmptyText)
    edit.value = "";
  if (edit.value == ccEmptyTextBranches)
    edit.value = "";
  edit.className = "formsblack";
}
function ccClearEdit(id)
{
  var query_edit=ccGetElementById(id);
  if (query_edit)
    query_edit.value="";
}
function AllCheckboxesEmpty()
{
  var oFrm = document.forms['frmMain'];
  
  for (var i=0;i<oFrm.elements.length;++i)
  {
    if (oFrm.elements[i].id.indexOf('cb_') > -1)
    {
      if (oFrm.elements[i].checked)
        return false;
    }
  }
  return true;
}
var oMSQuery = null;
/* ccQueryChanged
 * Aangeroepen in ccQueryAdd en ccQueryRemove, na aanvinken/uitvinken checkbox
 * - Voeg code van het aan/uitgevinkte item toe aan oMSQuery object
 *   en vraag nieuw geconstrueerde queryString op aan dit object
 * - roep updateCheckboxes. Als bijv. branche 01 aangevinkt wordt, 
 *   dan moeten ook 011, 012, 0111, 1112 enz. aangevinkt worden
 * -------
 * in geval van een lijst: word_nr == nummer van de checkbox
 * in geval van de boom  : word_nr == code
 * -------
 */
function ccQueryChanged(word_nr, add)
{
  try
  {
    var word_id = "wrd_" + word_nr;
    var word   = ccGetElementById(word_id);
    if (word) // is lijst
    {
      var term = ccRemoveQuotes(word.innerText);
      var query_edit = getTxtSearch(); 
      if (query_edit)
      {
        ccSetEmptySearchCommand(query_edit);
        if (add)
          oMSQuery.addTerm(term);
        else
          oMSQuery.removeTerm(term);

        query_edit.value = oMSQuery.queryString();
        sSearchCommandContent = query_edit.value;
      }
      updateCheckboxes(); //
    }
    else // is boom
    {
      var code = ccRemoveQuotes(word_nr);
      var query_edit = getTxtSearch(); // de editbox met query
      if (query_edit)
      {
        ccSetEmptySearchCommand(query_edit);
        if (add)
          oMSQuery.addTerm(code);
        else
          oMSQuery.removeTerm(code);
          
        query_edit.value = oMSQuery.queryString();
        sSearchCommandContent = query_edit.value;
      }
      updateCheckboxes();     
      if (AllCheckboxesEmpty())
        query_edit.value = "";
    }
  }
  catch(exc)
  {
    alert(exc.message); //
  }
}
/* ccQueryAdd
 * wordt aangeroepen bij aanvinken checkbox
 */
function ccQueryAdd(nr)
{
  if (oMSQuery._type == 'branchetree')
  {
      /* Bij branches wordt hetvolgende gedaan:
       * Checkbox aan - checkbox uit - checkbox aan
       * Dit gebeurt voor bijvoorbeeld:
       *   Aangevinkt  0113
       *    - query == 0113
       *   Vink aan 01
       *    - query == "0113", "01"
       * Je wilt dat query == "01" ("0113" valt hieronder)
       * Dus:
       *   vink uit 01: (alle codes onder node "01" worden verwijderd uit de query boom in msparser)
       *    - query == 
       *   vink aan 01:
       *    - query == "01"
       */
      if (sSearchCommandContent)
      {
        var code="";
        if (document.getElementById("ulTocRoot")) // Brancheboom scherm
            code = new String(nr);
        else // alfabetisch/zoeken branche scherm
        {
            var word_id = "wrd_" + nr;
            var word   = ccGetElementById(word_id);
            if (word)
              code=word.innerHTML;
        }
        if (sSearchCommandContent.indexOf(code)>-1)
        {   // de code van het zojuist aangevinkte item komt voor in de huidige query 
            // (de indexOf-check is te ruim, maar voldoet)
            // dus -> aanvinken - uitvinken - aanvinken
            ccQueryChanged(nr, true);
            ccQueryChanged(nr, false);
        }
      }
  }
  ccQueryChanged(nr, true);
}

/* ccQueryRemove
 * wordt aangeroepen bij uitvinken checkbox
 */
function ccQueryRemove(nr)
{
  ccQueryChanged(nr, false);
}

/* ccSelectWordTree
 * Wordt aangeroepen bij aanvinken/uitvinken checkbox in Brancheboom scherm
 */
function ccSelectWordTree(code, i_type)
{
    var cb_id = "cb_" + code;
    var cb = ccGetElementById(cb_id);
    if (cb)
    {
      ccClearEdit("txtBrancheSelectie");
      if(i_type==1) // link clicked
        cb.checked = !cb.checked;
  
      if (cb.checked)
        ccQueryAdd(code);  
      else 
        ccQueryRemove(code);
    }
}
/* ccSelectWord
 * Wordt aangeroepen bij aanvinken/uitvinken checkbox in branchelijsten / woordenlijsten
 */
function ccSelectWord(word_nr, i_type)
{
  try
  {
    var cb_id = "cb_" + word_nr;
    
    var cb = ccGetElementById(cb_id);
    if (cb)
    {
      ccClearEdit("txtSearch_command");
      if(i_type==1) // link clicked
        cb.checked = !cb.checked;
      
      if (cb.checked)
        ccQueryAdd(word_nr);  
      else 
        ccQueryRemove(word_nr);
    }
    else // geen checkboxen -> deze lijsten bestaan niet meer
      ccQueryAdd(word_nr);  
  }
  catch (excp)
  {
    alert(excp.message); //
  }
  return false;
}

function ccInitialLetterKeyDown(evt, obj)
{
  try
  {
    for (var i = 0; i < ccWordlistTimeoutIds.length; ++i)
      window.clearTimeout(ccWordlistTimeoutIds[i]);
  }
  catch (excp)
  {
    ;//skip
  }
  
  return true;
}
function ClearSearchCommandTimeouts()
{
  try
  {
    for (var i = 0; i < ccCheckboxCheckTimeoutIds.length; ++i)
      window.clearTimeout(ccCheckboxCheckTimeoutIds[i]);
  }
  catch (excp)
  {
    ;//skip
  }
  
  return true;
}
function ccSearchCommandKeyDown(evt, obj)
{
  return ClearSearchCommandTimeouts();
}
function RemovePrefix(str, prefix)
{
  var _index=str.indexOf(prefix);
  if (_index > -1)
  {
    return str.substr(_index);
  }
  return str;
}
function getTxtSearch()
{
   var _oTxtSearch = document.getElementById("txtSearch_command");     
   if (!_oTxtSearch)
   {
       _oTxtSearch = document.getElementById("txtBrancheSelectie");
   }
   return _oTxtSearch;
}
function updateCheckboxes()
{
    var oTxtSearch = getTxtSearch();
    if (oTxtSearch)
    {
      ccSetEmptySearchCommand(oTxtSearch); // verwijder standaard tekst
      sSearchCommandContent = oTxtSearch.value;
      var oQuery = CreateMSQueryObject(oTxtSearch.value);
      if (oQuery && oQuery.errorOccured)
        oQuery = null;
      oMSQuery = oQuery;
      if (oQuery)
      {
        if (document.getElementById("ulTocRoot")) // in Brancheboomscherm
        { // doorloop alle checkboxen en controleer a.d.h.v. oQuery of ze aan- of uitgevinkt moeten zijn
          var oFrm = document.forms['frmMain'];
          for (var i=0;i<oFrm.elements.length;++i)
          {
            var _id=oFrm.elements[i].id;
            var _index=_id.indexOf('cb_');
            if (_index > -1)
            {
              var code=_id.substr(_index+3);
              if (oQuery.termInSelection(code))
                oFrm.elements[i].checked = true;
              else
                oFrm.elements[i].checked = false;
            }
          }
        }
        else // andere lijsten
        {
            // doorloop alle elementen wrd_0, wrd_1, ... 
            // en controleer a.d.h.v oQuery of ze aan- of uitgevinkt moeten zijn
            var i=0;
            var oTD=ccGetElementById("wrd_" + i);
            while (oTD)
            {
              var code=" "+ oTD.innerHTML + " ";
              code=code.toLowerCase();
              if (oQuery.termInSelection(code))
              {
                var cb = ccGetElementById("cb_" + i); 
                cb.checked = true;
              }
              else
              {
                var cb = ccGetElementById("cb_" + i); 
                cb.checked = false;
              }
              ++i;
              oTD=ccGetElementById("wrd_" + i);
            }
        }
      }
    }
}
function ccSearchCommandChanged()
{
    var tmpTimeout0 = window.setTimeout('updateCheckboxes();', 600);
    ccCheckboxCheckTimeoutIds[ccCheckboxCheckTimeoutIds.length] = tmpTimeout0;
}
/* CheckSearchCommandContent
 * Als editbox met query veranderd -> updateCheckboxes
 */
function CheckSearchCommandContent()
{
    ClearSearchCommandTimeouts();
    var oTxtSearch = getTxtSearch(); //document.getElementById("txtSearch_command");
    
    if (oTxtSearch)
    {
      ccSetEmptySearchCommand(oTxtSearch);
      var curValue = oTxtSearch.value;
      if (curValue != sSearchCommandContent)
      {
        updateCheckboxes();
        sSearchCommandContent = curValue;
      }
    }
    setTimeout("CheckSearchCommandContent();", 1500);
}
var sSearchCommandContent = "";
function ccInit()
{
  try
  {
    if (document.getElementById("txtInitial_letters"))
    {
      var val = document.getElementById("txtInitial_letters").value;
      document.getElementById("txtInitial_letters").focus();
      document.getElementById("txtInitial_letters").value = val;
    }
    //brancheselectie
    if (document.getElementById("CtrlBrancheSelectieAlfa$txtInitial_letters"))
    {
      var val = document.getElementById("CtrlBrancheSelectieAlfa$txtInitial_letters").value;
      document.getElementById("CtrlBrancheSelectieAlfa$txtInitial_letters").focus();
      document.getElementById("CtrlBrancheSelectieAlfa$txtInitial_letters").value = val;
    }
    updateCheckboxes();
    oMSQuery.buildTree();
    setTimeout("CheckSearchCommandContent();", 1000);
  }
  catch (excp)
  {
    ;//skip
  }
}

function ccInitialLetterKeyUp(evt, obj)
{
  try
  {
    ccInitialLetterKeyDown(evt, obj);
    if (  evt.keyCode == 16 /*shift*/
       || evt.keyCode == 17 /*ctrl*/
       || evt.keyCode == 18 /*alt*/
       || evt.keyCode == 19 /*pause*/
       || evt.keyCode == 20 /*caps lock*/
       || evt.keyCode == 27 /*esc*/ /* VN.2006.08.31.php.1246 */
       || 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.shiftKey && evt.keyCode == 45) /*insert*/
       )
      ; //skip
    else
    {
      tmpTimeout = window.setTimeout('ccInitialLetterChangedSubmitNow()', 600);
      ccWordlistTimeoutIds[ccWordlistTimeoutIds.length] = tmpTimeout;
    }
  }
  catch (excp)
  {
    ;//skip
  }
  
  return true;
}

function ccInitialLetterChangedSubmitNow()
{
  try
  {
    var form = document.forms['frmMain'];
    if (form)
    {
      if (form.elements['txtInitial_letters'])
      {
        if (form.elements['txtInitial_letters'].value != '')
          form.submit();
      }
      else
        form.submit();
    }
  }
  catch (excp)
  {
    ;//skip
  }
}

/* NOT USED */
function _ccAddWordToEdit(word_nr)
{
  try
  {
    var word_id = "wrd_" + word_nr;
    var word   = ccGetElementById(word_id);
    if (word)
    {
      var text = ccRemoveQuotes(word.innerText);
      var query_edit = getTxtSearch();
      if (query_edit)
      {
        ccSetEmptySearchCommand(query_edit);
          
        var query          = new String(query_edit.value);
        var query_length   = query.length;
        var search_command = new String('');
        
        var i = 0;          
        while (i < query_length && query.charAt(i) == ' ')
          ++i;
        var ii = query_length;
        while (ii > 0 && query.charAt(ii - 1) == ' ')
          --ii;
        if (i < ii)
          search_command += query.substring(i, ii) + ', ';
        search_command += '"' + text + '"';
        
        query_edit.value = search_command;
      }
    }
  }
  catch(exc)
  {
    alert(exc.message); //
  }
}
function _ccSearchCommandFirstKeyDown(evt, obj)
{
  try
  {      
    var query_edit = getTxtSearch();
    if (query_edit)
    {
      ccSetEmptySearchCommand(query_edit);
    }
  }
  catch (excp)
  {
    ;//skip
  }
  
  return true;
}
