function callXmlHttp ( url, target ) {
//xmlhttp = new XMLHttpRequest( ); -- call in standard way fails with IE. Use
//http://jibbering.com/2002/4/httprequest.html , which apparently degrades
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
 try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) { xmlhttp = false; } }
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
	try { xmlhttp = new XMLHttpRequest();
	} catch (e) { xmlhttp=false; }      }
if (!xmlhttp && window.createRequest) {
	try { xmlhttp = window.createRequest();
	} catch (e) { xmlhttp=false; }      }

//alert (target);
  xmlhttp.open("GET", url, true);
  xmlhttp.setRequestHeader
   ('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
  xmlhttp.send(''); 	// call it
  document.getElementById(target).innerHTML =  "<i>loading . . .</i>";
  xmlhttp.onreadystatechange = function( ) {
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      var response=xmlhttp.responseText;
      document.getElementById(target).innerHTML = xmlhttp.responseText; 
	// get the response and assign to innerHTML of <span id=target .. >
    }//xmlhttp.readystate
  }//xmlhttp.onreadystatechange
}//callXmlHttp

function nullXmlHttp ( url ) {
//xmlhttp = new XMLHttpRequest( ); -- call in standard way fails with IE. Use
//http://jibbering.com/2002/4/httprequest.html , which apparently degrades
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
 try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) { xmlhttp = false; } }
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
	try { xmlhttp = new XMLHttpRequest();
	} catch (e) { xmlhttp=false; }      }
if (!xmlhttp && window.createRequest) {
	try { xmlhttp = window.createRequest();
	} catch (e) { xmlhttp=false; }      }

  xmlhttp.open("GET", url, true);
  xmlhttp.setRequestHeader
   ('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
  xmlhttp.send(''); 	// call it
/*
  xmlhttp.onreadystatechange = function( ) {
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    }//xmlhttp.readystate
  }//xmlhttp.onreadystatechange
*/
}//nullXmlHttp

function alertXmlHttp ( url, params ) { //call, use return in an alert
//xmlhttp = new XMLHttpRequest( ); -- call in standard way fails with IE. Use
//http://jibbering.com/2002/4/httprequest.html , which apparently degrades
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
 try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) { xmlhttp = false; } }
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
	try { xmlhttp = new XMLHttpRequest();
	} catch (e) { xmlhttp=false; }      }
if (!xmlhttp && window.createRequest) {
	try { xmlhttp = window.createRequest();
	} catch (e) { xmlhttp=false; }      }

//set up to use POST for longer arguments
//alert ('here ' + url + ' ' + params);
  xmlhttp.open("POST", url, true);
  xmlhttp.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
//  xmlhttp.setRequestHeader ("Content-length", params.length);
//  xmlhttp.setRequestHeader ('Connection', 'close');
  xmlhttp.send(params); 	// call it
//  xmlhttp.send("arg=" + argument); 
//  xmlhttp.send(''); 	// call it
  xmlhttp.onreadystatechange = function( ) {
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      alert (xmlhttp.responseText);
    }//xmlhttp.readystate
  }//xmlhttp.onreadystatechange
}//alertXmlHttp

function postValueXmlHttp ( url, params, target ) { //call, use return in an alert
//xmlhttp = new XMLHttpRequest( ); -- call in standard way fails with IE. Use
//http://jibbering.com/2002/4/httprequest.html , which apparently degrades
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
 try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) { xmlhttp = false; } }
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
	try { xmlhttp = new XMLHttpRequest();
	} catch (e) { xmlhttp=false; }      }
if (!xmlhttp && window.createRequest) {
	try { xmlhttp = window.createRequest();
	} catch (e) { xmlhttp=false; }      }

//set up to use POST for longer arguments
  xmlhttp.open("POST", url, true);
  xmlhttp.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
  xmlhttp.send(params); 	// call it
  xmlhttp.onreadystatechange = function( ) {
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      document.getElementById(target).value =  xmlhttp.responseText; 
    }//xmlhttp.readystate
  }//xmlhttp.onreadystatechange
}//postValueXmlHttp

function returnXmlHttp ( url, argument ) {
//xmlhttp = new XMLHttpRequest( ); -- call in standard way fails with IE. Use
//http://jibbering.com/2002/4/httprequest.html , which apparently degrades
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
 try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) { xmlhttp = false; } }
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
	try { xmlhttp = new XMLHttpRequest();
	} catch (e) { xmlhttp=false; }      }
if (!xmlhttp && window.createRequest) {
	try { xmlhttp = window.createRequest();
	} catch (e) { xmlhttp=false; }      }
  xmlhttp.open("POST", url, true);
  xmlhttp.setRequestHeader
   ('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
  xmlhttp.send("arg=" + argument); 	// call it
  xmlhttp.onreadystatechange = function( ) {
    if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
       top.location.replace(xmlhttp.responseText);
//       top.location.href = xmlhttp.responseText;
    }//xmlhttp.readystate
  }//xmlhttp.onreadystatechange
}//returnXmlHttp

function setContent() {

var content = new String();

/*
document.write ('<div id="content">ready</div>');
*/
document.write ('\
<div style="padding:0em 2em;margin:0.5em;border-left:thin dotted black;">\
  <div id="content" style="border:0;padding:0.5em 0.5em 0 0;border-top:thin groove black">\
  </div>\
</div>');


//get the current page
  var l = location.href;
//see if it has an argument.  It will if a 'member' page called it with check-caller.js.
  var lastQ = l.lastIndexOf("?");
//if it did, set 'caller' to the page name.  This will be used by index.htm's onLoad call
  if (lastQ > -1) {
    var lastS = l.substr(lastQ+1);
    content = lastS;
  } else {
    var lastSlash = l.lastIndexOf("/");
    var lastDot = l.lastIndexOf(".");
    if (lastDot > -1 && lastDot > lastSlash) { //there was a trailing . (htm), so assume we have a lead as well.
      var prefix = l.substring(lastSlash+1, lastDot);
      if (prefix == "index") {
        content = "intro.htm";
      } else {
        content = prefix + "-intro.htm";
      }
    } else {
       content = "intro.htm";
    }
  }
  callXmlHttp(content, 'content');
}

function submitenter(myfield,e) {  //submit for enter on text field
//alert ('in submitenter');
  var keycode;
  if (window.event) keycode = window.event.keyCode;
    else if (e) keycode = e.which;
    else return true;
    if (keycode == 13) {
//alert (keycode);
      myfield.form.submit();
      myfield.blur();    //this dismisses the jQuery dropdown, but is otherwise a no-op
      myfield.focus();
      return false;
    } else return true;
  }//submitenter


function blockenter(myfield,e) {  //return false on enter
  var keycode;
  if (window.event) keycode = window.event.keyCode;
    else if (e) keycode = e.which;
    else return true;
    if (keycode == 13) {
      return false;
    } else return true;
  }//blockenter


function submitSelectionOrEntry(myfield,where) { //return selection, or entry if none
var temp = where.window.getSelection().toString().length;
    //note that getSelection() is sometimes, but not always, coerced to String
  if (temp > 0) {
    myfield.form.target.value=where.window.getSelection();
  }
  myfield.form.submit();
} //submitSelectionOrEntry

function submitXtarget(myfield,where) { //return selection, or entry if none
var temp = where.window.getSelection().toString().length;
    //note that getSelection() is sometimes, but not always, coerced to String
  if (temp > 0) {
    myfield.form.xtarget.value=where.window.getSelection();
  }
  myfield.form.submit();
} //submitXtarget

function handleArgs() {
  var l = location.href;  //get the current caller's name
  l = decodeURI(l);      //handle any %EO nonsense
//  alert (l);
  var lastQ = l.lastIndexOf("?"); //find the ? if any
  if (lastQ >= 0) { //there was an argument
    var lastS = l.substr(lastQ+1);  //get the string
    menu.document.getElementById('orth').value=lastS;  //stuff it into orthography
    menu.document.getElementById('form0').submit();    //launch
  }
}

function checkForArgs(where) {
  var l = location.href;  //get the current caller's name
  var lastQ = l.lastIndexOf("?"); //find the ? if any
  if (!where) { where = "../resolve?"; }
  if (lastQ >= 0) { //there was an argument
    var lastS = l.substr(lastQ+1);  //get the string
//    top.location.replace("http://sealang.net/thai?" + lastS);
// index.htm is hardwired to here.  We re-pass the query string to resolve/resolve.pl
//   top.location.replace("../resolve?" + lastS);
    top.location.replace(where + lastS);
  }
}

function returnArgs() {
  var l = location.href;  //get the current caller's name
  var lastQ = l.lastIndexOf("?"); //find the ? if any
  if (lastQ >= 0) { //there was an argument
    var lastS = l.substr(lastQ+1);  //get the string
    return lastS;
  }
}//returnArgs

var size=2;  // must be the same as the stored variable default
function sizeChange (amount, where) {
  size = size+amount;
//alert (size);
  where.document.body.style.fontSize = size + 'em';
} //sizeChange

var size=1;
function saveSize (from, to) {
  to.value=from.document.body.style.fontSize;
}

function setFont (fontName, where) {
  where.document.body.style.fontFamily=fontName;
  size = 2; //reset the size on font change
  where.document.body.style.fontSize = '2em';
  where.document.body.style.lineHeight= '120%';  //
} //setFont

function saveFont (from, to) {
  to.value=from.document.body.style.fontFamily;
}

function resetFontSize(where, cSize) {
  where.document.body.style.fontSize=document.getElementById("form0").cSize.value;
  where.document.body.style.fontName=document.getElementById("form0").cFont.value;
}

function ipaToUnicode (where, lang) { //sub in Unicode for IPA
      var text = document.getElementById(where);

      var selStart = text.selectionStart;

      if (lang == 'java') {
        text.value = text.value.replace(/e\`/g, '\u00e8');  //e grave
        text.value = text.value.replace(/e\'/g, '\u00e9'); // e-acute
        text.focus();
        text.selectionStart = selStart;
        text.selectionEnd = selStart;
        return;
      }
      if (lang == 'indonesia') {
        text.value = text.value.replace(/e\'/g, '\u00e9'); // e-acute
        text.focus();
        text.selectionStart = selStart;
        text.selectionEnd = selStart;
        return;
      }

      if (lang == 'lwim') {
//alert ('in lwim');
        text.value = text.value.replace(/E\'/g, '\u00c9');  // E-acute

        text.value = text.value.replace(/A/g, '\u0101');  //a macron
        text.value = text.value.replace(/E/g, '\u0113');  //e macron
        text.value = text.value.replace(/I/g, '\u012b');  //i macron
        text.value = text.value.replace(/O/g, '\u014d');  //o macron
        text.value = text.value.replace(/U/g, '\u016b');  //u macron

        text.value = text.value.replace(/a\-/g, '\u0101');  //a macron
        text.value = text.value.replace(/e\-/g, '\u0113');  //e macron
        text.value = text.value.replace(/i\-/g, '\u012b');  //i macron
        text.value = text.value.replace(/o\-/g, '\u014d');  //o macron
        text.value = text.value.replace(/u\-/g, '\u016b');  //u macron

        text.value = text.value.replace(/l\./g, '\u1e37');  //l dot below
        text.value = text.value.replace(/l\_/g, '\u1e3b');  //l line below
        text.value = text.value.replace(/n\_/g, '\u1e49');  //n macron/line below
        text.value = text.value.replace(/r\_/g, '\u1e5f');  //r macron/line below

        text.value = text.value.replace(/m\'/g, '\u1e41');  //m dot above
        text.value = text.value.replace(/n\'/g, '\u1e45');  //n dot above
        text.value = text.value.replace(/n~/g, '\u00f1');  //n tilde
        text.value = text.value.replace(/S\'/g, '\u015a');  //S acute
        text.value = text.value.replace(/s\'/g, '\u015b');  //s acute
        text.value = text.value.replace(/d\./g, '\u1e0d');  //d dot below
        text.value = text.value.replace(/H\./g, '\u1e24');  //H dot below
        text.value = text.value.replace(/h\./g, '\u1e25');  //h dot below
        text.value = text.value.replace(/m\./g, '\u1e43');  //m dot below
        text.value = text.value.replace(/n\./g, '\u1e47');  //n dot below
        text.value = text.value.replace(/r\./g, '\u1e5b');  //r dot below
        text.value = text.value.replace(/s\./g, '\u1e63');  //s dot below
        text.value = text.value.replace(/t\./g, '\u1e6d');  //t dot below
        text.value = text.value.replace(/z\./g, '\u1e93');  //z dot below
        text.value = text.value.replace(/s\'/g, '\u015b');  //s acute
        text.value = text.value.replace(/\)/g, '\u02be');  //left half ring
        text.value = text.value.replace(/\(/g, '\u02bf');  //right half ring

        text.value = text.value.replace(/a\`/g, '\u00e0');  //a grave
        text.value = text.value.replace(/a\'/g, '\u00e1');  //a acute
        text.value = text.value.replace(/a\^/g, '\u00e2');  //a caret
        text.value = text.value.replace(/a\~/g, '\u00e3');  //a tilde

        text.value = text.value.replace(/c\,/g, '\u00e7');  //c cedilla

        text.value = text.value.replace(/e\`/g, '\u00e8');  //e grave
        text.value = text.value.replace(/e\'/g, '\u00e9'); // e-acute
        text.value = text.value.replace(/e\^/g, '\u00ea');  //e caret
        text.value = text.value.replace(/e\"/g, '\u00eb');  //e umlaut
        text.value = text.value.replace(/i\`/g, '\u00ec');  //i grave
        text.value = text.value.replace(/i\'/g, '\u00ed'); // i-acute
        text.value = text.value.replace(/i\^/g, '\u00ee');  //i caret
        text.value = text.value.replace(/i\"/g, '\u00ef');  //i umlaut
        text.value = text.value.replace(/o\`/g, '\u00f2');  //o grave
        text.value = text.value.replace(/o\'/g, '\u00f3'); // o-acute
        text.value = text.value.replace(/o\^/g, '\u00f4');  //o caret
        text.value = text.value.replace(/o\"/g, '\u00f6');  //o umlaut
        text.value = text.value.replace(/u\`/g, '\u00f9');  //u grave
        text.value = text.value.replace(/u\'/g, '\u00fa'); // u-acute
        text.value = text.value.replace(/u\^/g, '\u00fb');  //u caret
        text.value = text.value.replace(/u\"/g, '\u00fc');  //u umlaut


        text.focus();
        text.selectionStart = selStart;
        text.selectionEnd = selStart;
        return;
      }
      if (lang == 'tetun'){
        text.value = text.value.replace(/a''/g, '\u00E1'); 
        text.value = text.value.replace(/e''/g, '\u00E9'); 
        text.value = text.value.replace(/i''/g, '\u00ED'); 
        text.value = text.value.replace(/o''/g, '\u00F3'); 
        text.value = text.value.replace(/u''/g, '\u00FA'); 
        text.value = text.value.replace(/n~/g, '\u00F1'); 
      }

      if (lang == 'indonesian') { // where are we using this?
        text.value = text.value.replace(/I/g, '\u026a'); 
        text.value = text.value.replace(/S/g, '\u0283'); 
        text.value = text.value.replace(/U/g, '\u028A'); //small upsilon
        text.value = text.value.replace(/M/g, '\u0271'); 
        text.value = text.value.replace(/,/g, '\u0329'); 
      }

      if (lang == 'khmer') { //special handling
        text.value = text.value.replace(/U/g, '\u028A'); //small upsilon
      }
      if (lang != 'indonesian') {
        text.value = text.value.replace(/\?/g, '\u0294'); 
      }
      text.value = text.value.replace(/X/g, '\u0251'); 
      text.value = text.value.replace(/A/g, '\u0259'); 
      text.value = text.value.replace(/E/g, '\u025B'); 
      text.value = text.value.replace(/I/g, '\u0268'); 
      text.value = text.value.replace(/U/g, '\u0289'); 
      text.value = text.value.replace(/Y/g, '\u0272'); 

      text.value = text.value.replace(/O/g, '\u0254'); 
      text.value = text.value.replace(/N/g, '\u014b'); 
      text.value = text.value.replace(/~/g, '\u0303'); 
      text.value = text.value.replace(/:/g, '\u02d0'); 

      text.value = text.value.replace(/H/g, '\u02b0'); 
      text.focus();
      text.selectionStart = selStart;
      text.selectionEnd = selStart;
}

var hasFocus;
function setMyFocus (which) {
  if (hasFocus) {hasFocus.style.background='white';}
  which.style.background='yellow';
  hasFocus = which;
}//setFocus

function enter (arg)  { //Add arg to the current entry box
    if (document.forms.form0.hasFocus) { //make sure we're defined
      box = document.forms.form0.hasFocus.value; //hasFocus is my variable
             //note that now we also create hasFocus as a real var, above
    } else if (hasFocus) { box = hasFocus.name;} 
    if (!box) { box = 'phone';}  //make sure we're defined
    var text = document.getElementById(box);
    var selLength = text.textLength;    //establish current position
    var selStart = text.selectionStart;
    var selEnd = selStart
         //build leading (s1) and trailing (s3) strings
    var s1 = (text.value).substring(0,selStart);
    var s3 = (text.value).substring(selEnd, selLength);
    text.value = s1 + arg + s3;        //do the actual insertion
    text.focus();   //back to the text , and reposition the cursor
    text.selectionStart = s1.length + arg.length;
    text.selectionEnd = text.selectionStart;  //don't select anything
}//enter

function highlightWord(where, what) { //highlight tagged guys
//alert ('outside |' + what + '|');
    var elmsx1 = where.document.getElementsByTagName("x1"); //word
    for (var i = 0; i < elmsx1.length; i++) {
      elmsx1[i].style.color = ''; //start by turning everything off
      elmsx1[i].style.backgroundColor = '';
      elmsx1[i].style.textDecoration = '';
      elmsx1[i].style.fontWeight = '';
      elmsx1[i].style.fontStyle = '';
//      elmsx1[i].style.padding = 0;
      if (elmsx1[i].innerHTML==what) {
         elmsx1[i].style.color = 'blue';
         elmsx1[i].style.fontWeight='bolder';
      }
    }  //init
}//highlightWord

function highlightAttByValue(where, att, value, rel) { //highlight tagged guys
    var elmsx1 = where.document.getElementsByTagName("x1"); //word
    if (value == 6) { rel = '>='; }  //note that label on page is "6+"
    for (var i = 0; i < elmsx1.length; i++) {
      elmsx1[i].style.color = ''; //start by turning everything off
      elmsx1[i].style.backgroundColor = '';
      elmsx1[i].style.textDecoration = '';
      elmsx1[i].style.fontWeight = '';
      elmsx1[i].style.fontStyle = '';
//      elmsx1[i].style.padding = 0;
      if (rel == '==') {
        if (elmsx1[i].getAttribute(att) == value) { elmsx1[i].style.color = 'blue'; elmsx1[i].style.fontWeight='bolder'; }
      } else if (rel == '<=') {
        if (elmsx1[i].getAttribute(att) <= value) { elmsx1[i].style.color = 'blue'; elmsx1[i].style.fontWeight='bolder'; }
      } else if (rel == '>=') {
        if (elmsx1[i].getAttribute(att) >= value) { elmsx1[i].style.color = 'blue'; elmsx1[i].style.fontWeight='bolder'; }
      }
    }  //init
}//highlightAttByValue


function highlight(where, how, what) { //highlight tagged guys
    var elmsx1 = where.document.getElementsByTagName("x1"); //word
    var elmsx2 = where.document.getElementsByTagName("x2"); //compound
    var elmsx3 = where.document.getElementsByTagName("x3"); //phrase
    for (var i = 0; i < elmsx1.length; i++) {
      elmsx1[i].style.color = '';
      elmsx1[i].style.backgroundColor = '';
      elmsx1[i].style.textDecoration = '';
      elmsx1[i].style.fontWeight = '';
      elmsx1[i].style.fontStyle = '';
      elmsx1[i].style.padding = 0;
    }  //init
    for (var i = 0; i < elmsx2.length; i++) {
      elmsx2[i].style.color = '';
      elmsx2[i].style.backgroundColor = '';
      elmsx2[i].style.textDecoration = '';
      elmsx2[i].style.fontWeight = '';
      elmsx2[i].style.fontStyle = '';
      elmsx2[i].style.padding = 0;
    }  //init
    for (var i = 0; i < elmsx3.length; i++) {
      elmsx3[i].style.color = '';
      elmsx3[i].style.backgroundColor = '';
      elmsx3[i].style.textDecoration = '';
      elmsx3[i].style.fontWeight = '';
      elmsx3[i].style.fontStyle = '';
      elmsx3[i].style.padding = 0;
    }  //init

    if (what == 'restore') { return; }

    var elmsx;
    if (what == 'compound') {
      elmsx = elmsx2; 
    } else {
      elmsx = elmsx1; 
    }

//   for (var i = 0; i < elmsx.length; i++) { 
//     elmsx2[i].style.backgroundColor = 'white';
//     elmsx[i].style.textDecoration = 'underline';
//   }
//return;

    var att = 'ety';
    if (what == 'sight') { att = 'sight'; what = 1; }  //
    for (var i = 0; i < elmsx.length; i++) { 
      if (elmsx[i].getAttribute(att) == what || what == 'compound') {
        if (how == 'color') { elmsx[i].style.color = 'blue';}
        if (how == 'background') { elmsx[i].style.backgroundColor = 'white';}
        if (how == 'underline') { elmsx[i].style.textDecoration = 'underline';}
        if (how == 'overline') { elmsx[i].style.textDecoration = 'overline';}
        if (how == 'bold') { elmsx[i].style.fontWeight = 'bolder';}
        if (how == 'italic') { elmsx[i].style.fontStyle = 'italic';}
        if (how == 'space') { elmsx[i].style.paddingLeft = '0.5em';
                              elmsx[i].style.paddingRight = '0.5em';}
      }  
    }  //only 1 attribute is set
}

function spread(where, tag) { //Spread tagged guys in non-segmented text
    var pad = "0.2em";
       //get all the guys
    var elmsx1 = where.document.getElementsByTagName("x1"); //phrase
    var elmsx2 = where.document.getElementsByTagName("x2"); //compound
    var elmsx3 = where.document.getElementsByTagName("x3"); //word
       //reset to no spread
    for (var i = 0; i < elmsx1.length; i++)
      { elmsx1[i].style.paddingLeft = 0; elmsx1[i].style.paddingRight = 0; }
    for (var i = 0; i < elmsx2.length; i++)
      { elmsx2[i].style.paddingLeft = 0; elmsx2[i].style.paddingRight = 0; }
    for (var i = 0; i < elmsx3.length; i++)
      { elmsx3[i].style.paddingLeft = 0; elmsx3[i].style.paddingRight = 0; }

    if (tag == "x99") { return; }

    if (tag == "x3") {  //spread on phrases
      for (var i = 0; i < elmsx3.length; i++) {//do the phrases first
        elmsx3[i].style.paddingLeft = pad;
        elmsx3[i].style.paddingRight = pad;
      }
      for (var i = 0; i < elmsx2.length; i++) {//do compounds not in ...
        if (elmsx2[i].parentNode.tagName.toLowerCase() != "x3") {
          elmsx2[i].style.paddingLeft = pad;  //don't double-pad inside s0
          elmsx2[i].style.paddingRight = pad;
        }
      }
      for (var i = 0; i < elmsx1.length; i++) {
        if (elmsx1[i].parentNode.tagName.toLowerCase() != "x2") {
          if (elmsx1[i].parentNode.tagName.toLowerCase() != "x3") {
            elmsx1[i].style.paddingLeft = pad;
            elmsx1[i].style.paddingRight = pad;
          }
        }
      }
    }//x1

    if (tag == "x2") {  //spread on compounds
      for (var i = 0; i < elmsx2.length; i++) {//do compounds first
        elmsx2[i].style.paddingLeft = pad;
        elmsx2[i].style.paddingRight = pad;
      }
      for (var i = 0; i < elmsx1.length; i++) {//do words not in compounds
        if (elmsx1[i].parentNode.tagName.toLowerCase() != "x2") {
          elmsx1[i].style.paddingLeft = pad;  //don't double-pad inside s0
          elmsx1[i].style.paddingRight = pad;
        }
      }
    }//x2

    if (tag == "x1") {  //spread on words
      for (var i = 0; i < elmsx1.length; i++) {//
        elmsx1[i].style.paddingLeft = pad;
        elmsx1[i].style.paddingRight = pad;
      }
    }//handle x0
}//spread

/*
function changeFont(where, tag, font) { //change font, elm by elm
  var elms = where.document.getElementsByTagName(tag); //phrase
  for (var i = 0; i < elms.length; i++) {//do words not in compounds
    elms[i].style.fontFamily=font;
  }
}
*/


function textXtitle(where, tag) { //swap innerHTML with title for <tag>
  var elms = where.document.getElementsByTagName(tag); //phrase
  for (var i = 0; i < elms.length; i++) {//do words not in compounds
   temp = elms[i].innerHTML;
   elms[i].innerHTML = elms[i].title;
   elms[i].title = temp;
  }
}//textXtitle

function toggleTextBW(who) {
  if (who.style.color=='white') { who.style.color='black'; } else {who.style.color='white';}
} //toggleTextBW(who)

function toggleVisibility(which) {
  document.getElementById(which).style.visibility = 
    (document.getElementById(which).style.visibility=='hidden') ? 'visible' : 'hidden';
} //toggleVisibility

function toggleDisplay(which) {
  document.getElementById(which).style.display = 
    (document.getElementById(which).style.display=='none') ? 'block' : 'none';
} //toggleDisplay

function switchDisplayByTag(where, tag, what) {
  var elms = eval(where).document.getElementsByTagName(tag); 
  for (var i = 0; i < elms.length; i++) {
   elms[i].style.display=what;
 }
} // switchDisplayTag

function toggleDisplayByTag(where, tag) {
  var elms = eval(where).document.getElementsByTagName(tag); 
  for (var i = 0; i < elms.length; i++) 
    if (elms[i].style.display=='none')
       { elms[i].style.display='block'; } else { elms[i].style.display='none'; }
} // toggleDisplayByTag

function switchDisplayByClass(where, myClass, what) {  // set divs of a given class
  var elms = eval(where).document.getElementsByTagName('div'); 
  for (var i = 0; i < elms.length; i++) {
   if (elms[i].className==myClass) elms[i].style.display=what;
 }
} // switchDisplayByClass

function switchDisplayByClassAndEl(myClass, el, what) {  // toggle elements of a given class
  var elms = eval(where).document.getElementsByTagName(el); 
  for (var i = 0; i < elms.length; i++) {
   if (elms[i].className==myClass) elms[i].style.display=what;
  }
} // switchDisplayByClass

function toggleDisplayByWhereClassEl(where,myClass,el) {  // toggle elements of a given class
  var elms = eval(where).document.getElementsByTagName(el); 
  for (var i = 0; i < elms.length; i++) {
    if (elms[i].className==myClass) {
      if (elms[i].style.display=='none') { elms[i].style.display='block'; } else { elms[i].style.display='none'; }
    }
  }
} // toggleDisplayByWhereClassEl


function toggleDisplayNote(which) {
  self.innerHTML = (self.innerHTML=='show all') ? 'hide all' : 'show all';
  document.getElementById(which).style.display = (document.getElementById(which).style.display=='none') ? 'block' : 'none';
} //toggleVisibility


