   var maxitems=100000;
   
   function clearfilters()
   {
      var el;
      var mt="empty";
      for (var i=1; i<=8; i++)
      {
         el=document.getElementsByName("matchword" + i)[0];
         if (el)
         {
           el.value="";
           // el.className=mt;
           el.style.backgroundColor="#FFFFFF";
         }

         el=document.getElementsByName("matchpos" + i)[0];
         if (el)
         {
            el.value="";
            el.style.backgroundColor="#FFFFFF";
         }

         el=document.getElementsByName("poscodes" + i)[0];
         if (el) {el.selectedIndex=0;}
         el=document.getElementsByName("excludeword" + i)[0];
         if (el) {el.checked=false;}
         el=document.getElementsByName("excludepos" + i)[0];
         if (el) {el.checked=false;}
      }
   }
   var maxnum=0;
	
   function showwordfilters(n)
   {
      // add read cookie!
      if (!n) {n=2;}
     maxnum=n;
     var state="";
     for (var i=1;i<=8;i++)
     {
       if (i>n)
       {
         state="none";
       }
       // applied to <li>
       el = document.getElementById("wordli" + i);
       if (el) { el.style.display=state;}
       document.getElementById("posli" + i).style.display=state;
     }
     if (window.location.href.indexOf("frame")>0) { n--; }
     document.getElementById("num").selectedIndex=--n;
     document.getElementById("renum").selectedIndex=n;
   }

   function makeDefault()
   {alert("Feature not implemented yet");}
   function loadDefault()
   {alert("Feature not implemented yet");}

   function showempty(elname)
   {
	   // alert(elname + "\n" + elname.substr(5));
     var ex=document.getElementsByName("exclude" + elname.substr(5))[0];
     var el=document.getElementsByName(elname)[0];
     if (el.value=="")
     {
       el.style.backgroundColor="#FFFFFF";
     }
     else
     {
        if (ex.checked) 
        {
          el.style.backgroundColor="#FFA0A0";
        }
        else
        {
          el.style.backgroundColor="#90EE90";
        }
     }
   }

   function showinclude(el)
   { //alert(el.className);
     if (el.className=="exclude") 
     {
       el.className="include";
     }
     else
     {
       el.className="exclude";
     }
   }

String.prototype.trim = function()
{
  // Use a regular expression to normalize the string
  var s = this.replace (/\s+/g, " ");
  return s.replace(/(^\s+)|(\s+$)/g, "");
}
String.prototype.clean = function()
{
  // Use a regular expression to normalize the string
  var s = this.toLowerCase();
  s = s.replace (/\s+/g, " ")
  s = s.replace (/\d+/g, "#")
  s = s.replace(/(^\s+)|(\s+$)/g, "");
  s = s.replace (/[^a-z'_\*\-\? #]/g, "")
  return s.replace (/#+/g, "#")
}

function cleanWords()
{
  var thisel, s;
  for (var i=1; i<=maxnum; i++)
  {
    thisel=document.getElementById("matchword" + i);
    if (thisel) {thisel.value = thisel.value.clean()};
  }
  return true;
}
function adjustFilters(el, other, addl)
{
  if (!addl) {addl=0;}
  showwordfilters(el.selectedIndex + 1 + addl);
  document.getElementById(other).selectedIndex=el.selectedIndex;
  
}

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 saveRadio(radioName, noshowflag) 
{ 
  createCookie(radioName+"-saved",getRadioIndex(radioName),2000);
  if (noshowflag) return;
  showOptions();
}  

function restoreRadio(radioName)
{  
   var idx = readCookie(radioName+"-saved"); 
   if (idx!=null) { setRadio(radioName,idx)}; 
}


function getRadioValue(radioName) 
{
  var radios = document.getElementsByName(radioName);  
  for (var i=0;i<radios.length;i++) 
  {
    if (radios[i].checked)
    {
       return radios[i].value;
    }
  }
}

function setRadioValue(radioName, radioValue) 
{
  var radios = document.getElementsByName(radioName);  
  for (var i=0;i<radios.length;i++) 
  {
    if (radios[i].value==radioValue)
    {
       radios[i].checked=true;
    }
  }
}

function getRadioIndex(radioName) 
{
  var radios = document.getElementsByName(radioName);  
  for (var i=0;i<radios.length;i++) 
  {
    if (radios[i].checked)
    {  
       return i;
    }
  }
}

function setRadio(radioName, index) 
{ 
  var radios = document.getElementsByName(radioName);
  radios[index].checked = true;
}


function showtab(n, subflag)
{
  var sect;
  var tab;
  var maxtab=5; // (subflag)? 2 : 5;
  var s = (subflag)? "s" : "";
  for (var i=0; i < maxtab; i++) 
  {
    // alert(s + "tab" + i + " - " + s + "sect" + i);
    tab = document.getElementById(s + "tab" + i);
    sect = document.getElementById(s + "sect" + i);
    if (n==i)
    {
      tab.className="tab activeTab";
      sect.className="shown";
    }
    else
    {
      tab.className="tab";
      sect.className="hidden";
    }
  }
  /* determine which table radio button was checked 
     and check the corresponding number on the active tab */
  if (subflag)
  {
    sect = tablestem[n];
    tab  = getRadioValue("table"); 
    if (tab.indexOf(sect) < 0) // i.e. not currently displayed
    {
       i = tab.slice(0,1);
       if (n==1 && i==1) // 2006 corpus, 1-grams
       {
         i +=dirtyflag; // MAKE SURE WE ARE KEEPING TRACK OF THIS
       }
       setRadioValue("table",i+sect); 
       saveRadio("table");
    }
  }  
} 

  function setSelect(src)
  { var value="";
    if (!src.multiple)
    {
      value=src.selectedIndex;
      if (src.name=='lang')
      {
        document.getElementsByName('language')[0].value = src.options[src.selectedIndex].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 restoreSelects()
  { 
    var selects="lang|anyall|count|matches|context|safesearch|country[]".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();
  }
function copycode(src)
{
  var idx=src.name;
  idx = idx.slice(idx.length-1);
  var target= "matchpos" + idx;
  document.getElementsByName(target)[0].value=src.options[src.selectedIndex].value;
  showempty(target);
}

function posblock(which, maxn)
{
  if (!maxn) { maxn=8; }
  document.write('<div id="posfilters"><ol>');
  for (var j=1; j<=maxn; j++)
  { 
    document.write('<li id="posli' + j + '"><select onchange="copycode(this);" name="poscodes' + j + '"><option value="" selected>&rarr; choose or enter code</option><option value="AJ?">adjectives: all</option><option value="AJ0">adjectives: general</option><option value="AV?">adverbs: all</option><option value="AV0">adverbs: general</option><option value="12-15">determiners: all</option><option value="XX0">negative NOT</option><option value="N??">nouns: all</option><option value="NN?">nouns: common</option><option value="NP0">nouns: proper</option><option value="?RD">numerals: all</option><option value="CRD">numerals: cardinal</option><option value="ORD">numerals: ordinal</option><option value="POS">possessive \'s | \'</option><option value="PR?">prepositions: all</option><option value="PRF">prepositions: OF</option><option value="PRP">prepositions: not OF</option><option value="PN?">pronouns: all</option><option value="PNI">pronouns: indefinite</option><option value="PNP">pronouns: personal</option><option value="PNX">pronouns: reflexive</option><option value="V*">verbs: all</option><option value="VV?">verbs: lexical</option><option value="VB?">verbs: BE</option><option value="VD?">verbs: DO</option><option value="VH?">verbs: HAVE</option><option value="VM0">verbs: modal (all tenses)</option><option value="V?I">verbs: infinitive</option><option value="TO0">verbs: infinitive marker TO</option><option value="V?B">verbs: present</option><option value="V?Z">verbs: present -s</option><option value="V?G">verbs: -ing form</option><option value="V?D">verbs: past</option><option value="V?N">verbs: past participle</option><option value="6 15 22">wh- interrogatives</option><option value="ZZ0">alphabetical symbols</option><option value="ITJ">interjections</option><option value="UNC">unclassified</option>');
    if (which=="Frames") { document.write('<option value="-*-">wildword</option>'); }
    document.write('</select> <input size="10" name="matchpos' + j + '" onkeyup="showempty(this.name);" class="empty"><span class="include"><input type="checkbox" name="excludepos' + j + '" onclick="showempty(\'matchpos' + j + '\');" value="ON" />exclude</span></li>');
  }
  document.write('</ol></div></td></tr></tbody></table></div></form>');  
}

function writefilters(which, min, maxn)
{
  if (!maxn) { maxn=8; }
  document.write('<div id="filters" class="filters"><a name="filterdiv"></a><h3>Optional Word and PoS Filters</h3>');
  document.write('<p style="margin-left:1em;" ><a href="#top">&lt; Top</a><input style="margin-left:1em;" onclick="clearfilters();" type="button" value="Clear Filters"></p>');
  document.write('<table cellPadding="6"><tbody><tr>');
  document.write('<td colSpan="2">Specify Word patterns or PoS tags to match or exclude from your results.<br />&rarr; To match or exclude more than one word or code in a given position, separate alternatives with spaces.<br />&rarr; Enter "<a href="fused_n_mwu.html" target="_blank">multiword expressions</a>" as a single one word, replacing spaces with <b>_</b>: <i>of_course</i>.<br />&rarr; Separate "<a href="fused_n_mwu.html" target="_blank">fused forms</a>" into their components and enter each in a separate word field, e.g. word 1 - <i>are</i> word 2 - <i>n\'t</i>.');
  document.write('<br />&rarr; PoS codes may also be specified by <a href="POScodes.html#tags" target=PoS>number</a> or range(s) of numbers (e.g. <i>1-6</i> matches any adjective or adverb).<br />Wildcards: <br /><b class="indent-left">*</b> matches 0 or more characters <br /><b class="indent-left">?</b> matches exactly one character.');
  document.write('<br /><select name="renum" id="renum" onchange="adjustFilters(this,\'num\'');
  if (which=="Grams") 
  { 
    document.write(');"><option value="1">1</option>');
  }
  else
  {
    document.write(', 1);">');
  }
  document.write('<option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option></select><b>-' + which + '</b> <i>(n = ' + min + '-8)</i></td></tr>');

  document.write('<tr><td size="25%"><b>Word patterns</b><input type="submit" value="Query" class="indent-left">'); 
  document.write('<div id="wordfilters"><ol>');
  for (var j=1; j<=maxn; j++)
  {
    document.write('<li id="wordli' + j + '"><input size="15" name="matchword' + j + '" onkeyup="showempty(this.name);" class="empty"><span class="include"><input type="checkbox" name="excludeword' + j + '" onclick="showempty(\'matchword' + j + '\');" value="ON" />exclude</span></li>');
  }
  document.write('</ol></td>'); 
  document.write('<td size="75%"><b>PoS tags</b> <a target="PoS" href="POScodes.html?shrink=true#tags">show codes</a><input style="margin-left:1em" type="submit" value="Query">'); 
  posblock(which, maxn);
}