// Set of functions for searching bibtex data bases
// The functions contained in this file are INVOKED FROM INDEX.HTML.
// At the end of this file the iframe of index.html is filled and some
// values are defined.

/////////////////////// FUNCTIONS USED IN INDEX FILE ///////////////////////////

function showAllBibItems() {
// DISPLAY ALL BIB ITEMS EACH ONE IN A BLOCK-LAYER
   // Read content of relevant fields
   getFieldContent();
   // Display all bib entries
   for (i = 0; i<=nEntries; i++){
      str = 'fr.document.getElementById(\''+i.toString()+'\').style.display=\'block\';';
      isVisible[i] = 1;
      isVisibleBak[i] = 1;
      eval(str);
   }
   // Hide "Refine" button
   document.getElementById("ref").style.display='none';
   document.getElementById("nsi").innerHTML = "<b>" + nEntries1.toString() + "</b> / " + nEntries1.toString();
}

function hideUselectedItems(iflag) {
// HIDE LAYERS OF NON SELECTED BIB ITEMS AND SHOW "REFINE" BUTTON
// "Search" -> iflag = 0 , "Refine" -> iflag = 1
   // Save layer visibility for undo
   for (i = 0; i<=nEntries; i++){
      isVisibleBak[i] = isVisible[i];
   }
   // Don't reset display to all entries if "Refine" button was clicked
   if (iflag == 0) showAllBibItems(); // contains an update of kwArray
   if (iflag == 1) getFieldContent(); // in case of search in new bib fields
   // Analyse keywords
   xxx = document.getElementById('kw').value;
   yyy = document.getElementById('anykw').value;
   if (xxx.length > 0 & yyy.length > 0) {
       ifStr = '!kwArray0[i].match(/' + xxx + '/i) || !kwArray[i].match(/' + yyy + '/)';
       if (!document.getElementById('case').checked) ifStr = '!kwArray[i].match(/' + xxx + '/i) || !kwArray[i].match(/' + yyy + '/i)';
   } else if (xxx.length > 0 & yyy.length == 0) {
       ifStr = '!kwArray0[i].match(/' + xxx + '/i)';
   } else if (xxx.length == 0 & yyy.length > 0) {
       ifStr = '!kwArray[i].match(/' + yyy + '/)';
       if (!document.getElementById('case').checked)  ifStr = '!kwArray[i].match(/' + yyy + '/i)';
   } else {
       return;
   }
   // Hide irrelevant bib items
   for (i = 0; i<=nEntries; i++){
      if (eval(ifStr)) {
          str = 'fr.document.getElementById(\''+i.toString()+'\').style.display=\'none\';';
          eval(str);
      }
   }
   // Number of visible layers and define isVisible
   nDispItems = 0;
   for (i = 0; i<=nEntries; i++){
      eval('str = fr.document.getElementById(\''+i.toString()+'\').style.display;');
      if(!str.match('none')) {
         nDispItems++;
         isVisible[i] = 1;
      } else {
         isVisible[i] = 0;
      }
   }
   // Show or hide "Refine" button
   if (nDispItems < nEntries1 & nDispItems > 10) {
      document.getElementById("ref").style.display='inline';
   } else {
      document.getElementById("ref").style.display='none';
   }
   // Other
   document.getElementById("nsi").innerHTML = "<b>" + nDispItems.toString() + "</b> / " + nEntries1.toString();
   document.getElementById("anykw").select();
   if (iflag == 1) document.getElementById("undo").style.display='inline';
   if (iflag == 0) document.getElementById("undo").style.display='none';
}

function undoRefinedSearch(){
// UNDO LAST REFINED SEARCH (IF ANY)
   nDispItems = 0;
   for (i = 0; i<=nEntries; i++){
      if (isVisibleBak[i] == 1) {
          str = 'fr.document.getElementById(\''+i.toString()+'\').style.display=\'block\';';
          eval(str);
          nDispItems++;
      } else {
          str = 'fr.document.getElementById(\''+i.toString()+'\').style.display=\'none\';';
          eval(str);
      }
   }
   // Show or hide "Refine" button
   if (nDispItems < nEntries1 & nDispItems > 10) {
      document.getElementById("ref").style.display='inline';
   } else {
      document.getElementById("ref").style.display='none';
   }
   // Update isVisible
   for (i = 0; i<=nEntries; i++){
      isVisible[i] = isVisibleBak[i];
   }
   // Other
   document.getElementById("nsi").innerHTML = "<b>" + nDispItems.toString() + "</b> / " + nEntries1.toString();
   document.getElementById("undo").style.display='none';
   document.getElementById("anykw").select();
}

function defineFirstMenu(){
// DEFINE FIRST MENU FROM COOKIES
   var cookValue = "" ;
   var i_eq1 = document.cookie.indexOf("=");
   var i_eq2 = document.cookie.indexOf(";");
   if(i_eq2 == -1) {i_eq2 = document.cookie.length}
   cookValue = document.cookie.substring (i_eq1+1,i_eq2);
   if (!cookValue) {
      strWarn = "\"alert(\'To use this menu you must first define your prefered keywords,\\nclick the *My keywords* button\')\";";
      //strWarn ="";
      optionListHtml  = '<select onMouseOver = '+strWarn+' id = "kw" class="selection" size="1">';
      optionListHtml += '<option value="" label="none">no keyword</option>';
      optionListHtml += '</select>';
   } else {
      // Build menu from existing cookies
      kwList = cookValue.split(/%+/);
      // Caution:split -> different result in (IE+Konqueror) and (Firefox+Opera)
      optionListHtml  = '<select id = "kw" class="selection" size="1">';
      optionListHtml += '<option value="" label="none">no keyword</option>';
      for (i=0; i < kwList.length; i++) {
         if (kwList[i].length > 1) { // keywords of only one character ignored
            optionListHtml += '<option value="'+kwList[i]+'" label="'+kwList[i]+'">'+kwList[i]+'</option>';
         }
      };
      optionListHtml += '</select>';
   }
   document.getElementById("menu").innerHTML = optionListHtml;
   document.getElementById("menu").style.display='inline';
}

function chooseKwds(){
// DIALOG FOR MODIFYING COOKIES AND THEN THE FIRST MENU
   var end_valid = new Date();
   end_valid.setHours(end_valid.getHours()+6000); //cookie alive 10 hours

   var cookValue = "" ;
   var i_eq1 = document.cookie.indexOf("=");
   var i_eq2 = document.cookie.indexOf(";");
   if(i_eq2 == -1) {i_eq2 = document.cookie.length}
   cookValue = document.cookie.substring (i_eq1+1,i_eq2);

   newCookValue = prompt('Enter your list of permanent keywords separated by \"%\" e.g.,\n%Einstein%Planck%Heisenberg%\n(these keywords are non case sensitive regular expressions)',cookValue);
   if (!newCookValue) newCookValue = "";

   document.cookie = 'kwList =' + newCookValue + "; expires=" + end_valid.toGMTString();

   defineFirstMenu();
}

function getFieldContent() {
// READ THE STRING IN WHICH KEYWORDS ARE SEARCHED FOR EACH BIB-ITEM
   zzz = document.getElementById('fld').value;
   i = 0;
   for (i = 0; i<=nEntries; i++){
      str = 'kwArray0[i] = fr.document.getElementById(\''+i.toString()+'\').innerHTML;';
      eval(str);
      //kwArray0[i] = document.getElementById(i.toString()).innerHTML;
      //kwArray0[i] = document.getElementById(i).firstChild.nodeValue;
      if (zzz.length == 0) {
      // ALL bib-fields considered
         kwArray[i] = kwArray0[i];
      } else if (zzz.indexOf('label') >= 0) {
      // Only LABEL bib field considered
         str = 'kwArray[i] = fr.document.getElementById(\''+i.toString()+'\').getElementsByTagName("span").item(0).innerHTML;';
         eval(str);
      } else if (zzz.indexOf('author') >= 0) {
      // Only AUTHOR bib field considered
         str = 'kwArray[i] = fr.document.getElementById(\''+i.toString()+'\').getElementsByTagName("span").item(1).innerHTML;';
         eval(str);
      } else if (zzz.indexOf('year') >= 0) {
      // Only YEAR bib field considered
         str = 'kwArray[i] = fr.document.getElementById(\''+i.toString()+'\').getElementsByTagName("span").item(2).innerHTML;';
         eval(str);
      } else if (zzz.indexOf('title') >= 0) {
      // Only TITLE bib field considered
         str = 'kwArray[i] = fr.document.getElementById(\''+i.toString()+'\').getElementsByTagName("span").item(3).innerHTML;';
         eval(str);
      } else if (zzz.indexOf('journal') >= 0) {
      // Only JOURNAL bib field considered
         str = 'kwArray[i] = fr.document.getElementById(\''+i.toString()+'\').getElementsByTagName("span").item(4).innerHTML;';
         eval(str);
      } else {
         kwArray[i] = "";
      }
   }
}

////////////////////////////////////////////////////////////////////////////////
// TUNE THE PAGE INDEX.HTML

// Data manipulated by the various functions
var kwArray = new Array();       // Content of bib items
var kwArray0 = new Array();      // Content of bib items (independant of bib-fields)
var kwList = new Array();        // List of keywords read from cookie
var isVisible = new Array();     // entry = 1 if item visible
var isVisibleBak = new Array();  // backup of isVisible
var optionListHtml = "";         // Content of menu in HTML
var citations = "";              // Initialization related to the function addCitation()

// When the page is loaded, we can define the 1st menu from cookies
defineFirstMenu();

// Give a name to the iframe (used in above functions)
var fr = window.frames.moniframe;

// List of child files
var listOfFiles = new Array();
var lengthOfFiles = new Array();
listOfFiles = ['garteurbook','garteur'];
lengthOfFiles = [297,33];

// Initial bib-file
iFile = 0;

// Set some initial values
nEntries = lengthOfFiles[iFile];
nEntries1 = nEntries + 1;
nDispItems = nEntries1;
// Title of the main page
document.getElementById("fileName").innerHTML = "File " + listOfFiles[iFile] + ".bib";
// Number of selected bib-items
document.getElementById("nsi").innerHTML = "<b>" + nDispItems.toString() + "</b> / " + nEntries1.toString();
// Buttons for switching from file to file
butString = "";
j = 0;
for (i = 0; i < lengthOfFiles.length; i++){
   if (i != iFile) {
      butString += '&nbsp; &nbsp; <input type="button" onClick="javascript:window.frames.moniframe.location.href=\''+listOfFiles[i]+'.html\';" value="'+listOfFiles[i]+'">';
      if (j == 7) {butString += '<br><br>'; j=0} else {j++}
   }
}
if (butString.match(/<br><br>$/)){butString = butString.substring(0,butString.length-8)}
document.getElementById('buttons4files').innerHTML = butString;

