// ver 8 June 2010
function toInput(idx)
{  // ensure input field has focus upon tab
  var which = (idx==0) ? "query" : "queries";
  document.getElementsByName(which)[0].focus();
}
function toggledetails(src, what, divid)
{
  var details=document.getElementById(divid);
  if (typeof(src)=='string') 
  { 
    src = document.getElementById(src); 
  }
  if (details.className=="shown") 
  {
    details.className="hidden";
    src.innerHTML="show " + what + " details";
  }
  else
  {
    details.className="shown";
    src.innerHTML="hide " + what + " details";
    // details.scrollIntoView();    
  }
// if (flag) { showtab(10); }
}
function showtab(n)
{
  var sect;
  var tab;
  var act = "tab activeTab";
  var inact = "tab";
  if (n==1)
  {
    getDetails('detailnotes');
  }
  if (n>9)
  {
    if (n==10) 
    {
      sect='simple'
      other='11';
    }
    else
    {
      sect='advanced';
      other="10";
    }
    document.getElementsByName("querytype")[0].value=sect; 
    document.getElementById("sub" + n).className='shown';
    document.getElementById("sub" + other).className='hidden';
    document.getElementById("sect0").className='shown';
    document.getElementById("tab" + n).className=act;
    document.getElementById("tab" + other).className=inact;  
    toInput(n-10);
  }
  else
  {
    document.getElementById('sect0').className='hidden';
    document.getElementById("tab10").className=inact;
    document.getElementById("tab11").className=inact;  
  }
  for (var i=1; i < 4; i++) 
  {
    tab = document.getElementById("tab" + i);
    sect = document.getElementById("sect" + i);
    if (n==i)
    {
      tab.className="tab activeTab";
      sect.className="shown";
    }
    else
    {
      tab.className="tab";
      sect.className="hidden";
    }
  }
} 
function createCookie(name,value,days) 
{
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) 
{
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}
function doClick()
{ var a = "to:fletcher";
  var d = "kwicfinder" + '.' + 'com';
  var s =  "?subject=Web as Corpus Search";
  var nw=open("mail" + a + "@" + d + s);
} 
function setSelect(src)
{ var value="";
  if (!src.multiple)
  {
    value=src.selectedIndex;
    text = src.options[value].text;
    createCookie(src.name + "-text", text, 2000);
    if (src.name=='lang')
    {
      document.getElementsByName('language')[0].value = text;
    }
  }
  else
  { 
    for (var o=0;o<src.options.length;o++)
    { 
      if (src.options[o].selected)
      {
        if (value)
        {
          value += ",";
        }
        value += o;
      }
    }
  }
  cname= src.name.replace(/\[\]/g, "") +"-saved";
  createCookie(cname, value, 2000);
  showOptions();
}
function truncate(s,len)
{ // remove len chars from s
  return s.substring(0,s.length-len);
}
function showOptions()
{
  var selects="lang|count|matches|context|safesearch|country[]|targetencoding".split("|");
  var texts="Language|Max. webpages|Max. matches each|Context to show|SafeSearch|Countr|Convert text to".split("|");
  var table="<table class='details'><tr><td colspan='2'>Source options</td></tr>";
  var countrynames="<input type='hidden' name='countrynames' value='";
  for (entry in selects)
  {
    thisname=selects[entry];
    thisitem=document.getElementsByName(thisname);        
    thisitem=thisitem[0];
    if (thisname=='targetencoding') 
    {  
      table+= "<tr><td colspan='2'>Options for downloadable textfiles</td></tr>"; 
      var textoptions=thisitem.value;        
    }
    if (!thisitem.multiple)
    {
      table += "<tr><td>" + texts[entry] + "</td><td>" + thisitem.options[thisitem.selectedIndex].text + "</td></tr>";
    }
    else
    {
      var countselected=0;
      var selections="";
      for (var o=0; o<thisitem.options.length;o++)
      { 
        if (thisitem.options[o].selected)
        {
          selections+= thisitem.options[o].text + "<br>";
          countrynames+=thisitem.options[o].text + ", ";  // country is the only multiselect
          countselected++;
        }
      }
      var s=(countselected>1)?"ies":"y";
      table+= "<tr><td>" + texts[entry] + s + "</td><td>" + selections + "</td></tr>";
    }
  } 
  // Now get other options if specified
  texts="minwords|maxwords|minparas|maxparas|minmean|maxmean|removesourcedata|combinetextfiles".split("|");
  var field="";
  var cutoffs="";
  var textoptions="";
  for (entry in texts)
  {
    field = document.getElementsByName(texts[entry])[0];
    if (field.type.toLowerCase()=='checkbox')
    {
      if (field.checked) 
      { 
        table+= "<tr><td colspan='2'>" + field.title + "</td></tr>"; 
      } 
    }
    else
    {
      if (field.value) 
      { 
        
        table+= "<tr><td>" + field.title + "</td><td>" + field.value + "</td></tr>"; 
        cutoffs+= field.title.toLowerCase() +"&ndash;" + field.value + "; ";  
        textoptions+=field.title.toLowerCase() +": " + field.value + "||";  
      }             
    }
  } 
  createCookie('textoptions-text', textoptions, 2000);
  if (cutoffs)  
  { 
    cutoffs = "<br>Cutoffs for automatic selection of textfile for download: " + cutoffs; 
  }
  textoptions='<input type="hidden" name="textoptions" value="' + textoptions + '">';
  // alert(textoptions);
  // alert(textoptions.replace('\\',''));
  document.getElementById('optionsselected').innerHTML= truncate(countrynames,2) + "'>" + table + "</table><div class='details'>" + textoptions + "<a href='javascript:showtab(2)'>Change Source options</a> | <a href='javascript:showtab(3)'>Change Download options</a></div>";
}
function restoreSelects()
{ 
  var selects="lang|anyall|count|matches|context|safesearch|country[]|targetencoding".split("|");
  var idx=""
  for (entry in selects)
  {
    thisname=selects[entry];
    cname= thisname.replace(/\[\]/g, "") +"-saved";
    idx = readCookie(cname);
    if (idx!=null)
    {
      thisitem=document.getElementsByName(thisname);        
      thisitem=thisitem[0];
      if (!thisitem.multiple)
      {
        thisitem.selectedIndex=idx;
        if (thisname=='lang')
        { 
          document.getElementsByName('language')[0].value = thisitem.options[idx].text;
        }
      }
      else
      {
        idx = idx.split(",");
        for (var o=0; o<idx.length;o++)
        { 
          thisitem.options[idx[o]].selected = true;
        }
      }
    }
  }
  showOptions();
}
String.prototype.trim = function()
{
  // Use a regular expression to normalize the string
  var s = this.replace (/\s+/g, " ");
  return s.replace(/(^\s+)|(\s+$)/g, "");
}
function checkNumberField(field) 
{  
  var entry = field.value.replace(/[ -]/g,'');
  field.value=entry;
  var name=field.name;
  if (entry.indexOf(",") >-1) 
  {
    if (name.indexOf('mean')>-1)
    {
      alert("'" + entry + "' in " + field.title + "\nmay have a decimal point ('.')\nbut not a comma (',') .\n\nPlease re-enter or erase.");
      field.focus();
      return false;
    }
    else
    {           
      entry=entry.replace(",", "");
      field.value=entry;
    }
  }
  else if (entry.indexOf(".") >-1 && name.indexOf('mean')==-1) 
  {
    entry=entry.replace(".", "");
    field.value=entry;
  }
  if (entry.length>0 && isNaN(entry)) 
  {
    alert("'" + entry + "' in " + field.title + "\nis not a valid number.\n\nPlease re-enter or erase.");
    field.focus();
    return false;
  }
  else
  {
    showOptions();
  }
  createCookie(name+"-saved", entry, 2000);
}
function saveCheck(field)
{
  var value=(field.checked)? "checked" : "";
  createCookie(field.name+"-saved", value, 2000);
  showOptions();
}
function checkQuery(which)
{
  showOptions();  // ensure hidden fields are populated
  var text = which.value.trim();
  var changed = text.replace(/[\%\*\?\_]/g, "");
  if (changed!=text)
  {
    alert("Bing (and, consequently, Web as Corpus)\ndoes not support wildcard expressions.");
  }
  changed = text.replace(/"/g,"");
  if (changed!=text)
  {
    alert('Web as Corpus inserts " "\naround phrases automatically.');
    which.value=changed;
  }
  return true;
}
function queryok()
{
  // dummy for future implementation
  return true;
}
function getDetails(target)
{
  var which=document.getElementById(target);
  // 
  if (which.innerHTML.indexOf("fetching")>-1)
  {
    var httpRequest;
    if (window.XMLHttpRequest) 
    { // Mozilla, Safari, ...
      httpRequest = new XMLHttpRequest();
    } else if (window.ActiveXObject) 
    { // IE
      httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
    httpRequest.open("GET", target+".txt", true);
    httpRequest.send(null);
    // register callback function to process feedback asynchronously
  httpRequest.onreadystatechange = function() { showDetails(httpRequest, which); };
  }
}
function showDetails(httpRequest, which)
{
  if (httpRequest.readyState == 4) 
  {
    if (true || httpRequest.status == 200)
    {
      which.innerHTML=httpRequest.responseText;
    }
    httpRequest=null;
  }
}
function restoreTexts()
{
  var texts="minwords|maxwords|minparas|maxparas|minmean|maxmean".split("|");
  for (entry in texts)
  {
    if (val=readCookie(texts[entry]+"-saved"))
    {
      document.getElementsByName(texts[entry])[0].value=val;        
    }
  }
}
function restoreChecks()
{
  var checks="removesourcedata|combinetextfiles".split("|");
  for (entry in checks)
  {
    document.getElementsByName(checks[entry])[0].checked=(readCookie(checks[entry]+"-saved")=="checked");        
  }
}
function restoreValues()
{
  restoreTexts();
  restoreChecks();
  restoreSelects(); // this calls showOptions()
  toInput(0); // should actually depend on which pane is shown
}

