//Global vars
var xmlArray = new Array();
var arrayLen=0;
var showlist=true;

function getdefs(letter) {
var xmlDoc;
var defname="smiths"+letter+".xml";
if (window.XMLHttpRequest)
  {
  xmlDoc=new window.XMLHttpRequest();
  xmlDoc.open("GET",defname,false);
  xmlDoc.send("");
  xmlDoc=xmlDoc.responseXML;
  }
// IE 5 and IE 6
else if (ActiveXObject("Microsoft.XMLDOM"))
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async=false;
  xmlDoc.load(defname);
  }
var innerstr="";
innerstr="Select a word from the list below:<br />";
var x=xmlDoc.getElementsByTagName("nameset");
var len = x.length;
arrayLen = len;
var i, j;
for (i=0;i<len;i++)
  {
  var defChildNodes = x[i].getElementsByTagName("def")[0].childNodes.length;

  xmlArray[i]=new Array( x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue, x[i].getElementsByTagName("def")[0].childNodes[0].nodeValue );
   for (j = 1; j < defChildNodes ; j++) {
     xmlArray[i][1] += x[i].getElementsByTagName("def")[0].childNodes[j].nodeValue ;
   }
postprocess(i);
}
if (showlist) {
if (len==0) innerstr += "No entries for "+ letter;
else {
for (i=0;i<len;i++)
  {
  innerstr+="<a href=\"#\" onclick=\"showword(";
  innerstr+=i.toString();
  innerstr+=")\">";
  innerstr+=xmlArray[i][0]+"</a>";
  if ((i+1) != len)innerstr+=", ";
  }
}
document.getElementById("showarea").innerHTML=innerstr;
}
}

function wrd(name){
var letter = name.substring(0, 1);
if ( letter != xmlArray[1][0].substring(0,1) ) {
showlist=false;
getdefs(letter);
showlist=true;
}

var i;
//alert("name = "+name+" arrayLen = "+arrayLen);
var len = arrayLen;
for (i=0;i<len;i++){
  if (xmlArray[i][0] == name){
    showword(i);
    break;
  }
}
}

function showword(element) {
//  var xmlDoc=function opendoc(letter);

var innerstr="";
innerstr+="<table width='100%'><tr valign='top'><td width='33%'>";
if(element != 0) {
  i = element - 1;
  innerstr+="/__ <a href=\"#\" onclick=\"showword(";
  innerstr+=i.toString();
  innerstr+=")\">";
  innerstr+=xmlArray[i][0]+"</a>";
}
  innerstr+="</td><td width='34%' align='center'><h3>"+xmlArray[element][0]+ "</h3></td><td width='33%' align='right'>";
if( element != arrayLen-1 ) {
  i = element + 1;
  innerstr+="<a href=\"#\" onclick=\"showword(";
  innerstr+=i.toString();
  innerstr+=")\">";
  innerstr+=xmlArray[i][0]+"</a> __\\";
}
innerstr+= "</td></tr><tr><td align='left' colspan='3'>" ;
innerstr+= processelement( xmlArray[element][1] ) +"</td></tr></table>";
	document.getElementById("showarea").innerHTML=innerstr;
}

function showref(url, scrollh, scrollv) {
}

function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

function chkParm(){
var name = "";
var innerstr="";
name = gup('name'); 
if (name != "")
  {
    // get first letter
    letter = name.substring(0, 1);
    // read corresponding xml
var xmlDoc;
var defname="smiths"+letter+".xml";
if (window.XMLHttpRequest)
  {
  xmlDoc=new window.XMLHttpRequest();
  xmlDoc.open("GET",defname,false);
  xmlDoc.send("");
  xmlDoc=xmlDoc.responseXML;
  }
// IE 5 and IE 6
else if (ActiveXObject("Microsoft.XMLDOM"))
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async=false;
  xmlDoc.load(defname);
  }
    // scan for word and load xmlArray
var x=xmlDoc.getElementsByTagName("nameset");
var len = x.length;
arrayLen = len;
var wordmatch = null;
var ptrn = new RegExp("^"+name,"i");
var i, j;
for (i=0;i<len;i++)
  {
  var defChildNodes = x[i].getElementsByTagName("def")[0].childNodes.length;

  xmlArray[i]=new Array( x[i].getElementsByTagName("name")[0].childNodes[0].nodeValue, x[i].getElementsByTagName("def")[0].childNodes[0].nodeValue );
   for (j = 1; j < defChildNodes ; j++) {
     xmlArray[i][1] += x[i].getElementsByTagName("def")[0].childNodes[j].nodeValue ;
   }
//xmlArray[i][1] = xmlArray[i][1].replace(/\n/gi, "<br />");
postprocess(i);
if( ptrn.test(xmlArray[i][0]) && wordmatch == null) wordmatch = i;
}
    // display word
if (wordmatch != null) showword(wordmatch);
else {
innerstr += "No matches for: "+name;
document.getElementById("showarea").innerHTML=innerstr;
}
  }

}

function postprocess(item)
{
xmlArray[item][1] = xmlArray[item][1].replace(/\n/gi, "<br /><br />");
// Convert "[---]WORD" into "WORD" linking to the WORD
var srcstr = xmlArray[item][1];
var wrkstr = "";
var tmp = "";
var patt1 = /\x5b/; //left sq. bracket
var patt2 = /\x5d/; //right sq. bracket
var aword = /[\w-]*/; //series of alphanumerics and underscores
var result = "";
while (/\x5b\d+\x5d(?=[\w-]*)/.exec(srcstr) != null){
wrkstr += RegExp.leftContext; 
wrkstr += "<a href=\"#\" onclick=\"wrd(\'";
//result = patt2.exec(srcstr); //skip past [---]
srcstr = RegExp.rightContext; // save that which is after [---]
tmp = aword.exec(srcstr); //get the word to link to
srcstr = RegExp.rightContext; // save that which is after WORD
wrkstr += tmp +"\')\">" +tmp+"</a>";
}
xmlArray[item][1] = wrkstr + srcstr;
}

function processelement(str)
{
// Convert bible ref XX #:#-# etc, into ref linking to scripture
var wrkstr = "";
var tmp = "";
var patt2 = /\d*:\d*((-\d+)?(,\d+){0,}){0,}|\d+(?=;)|\d+(?= )|\d+(?=\r)/; //get chapter and verse
//find book that has chapter
var patt1 = /(\d )?[A-z]{1,}(?= \d+:\d*)|(\d )?[A-z]{1,}(?= \d+;)/;
var result = "";
var book = "";
while (patt1.exec(str) != null){
wrkstr += RegExp.leftContext;
str = RegExp.rightContext;
book = RegExp.lastMatch; // the book
wrkstr += "<a href=\"http://www.biblegateway.com/cgi-bin/bible?language=English&version=NIV&passage="+book+" ";
tmp = "";
patt2.exec(str);
tmp += RegExp.lastMatch; // get chapter verse
str = RegExp.rightContext;
wrkstr += tmp;
wrkstr += "\" target=\"_blank\">"+book+" "+RegExp.lastMatch+"</a>";
str = RegExp.rightContext; // save that which is after verse


while (/^(; )(?=\d)/.exec(str) != null){ //find any other trailers
wrkstr += RegExp.lastMatch;
str = RegExp.rightContext;
if (/(?=^(\d*:\d*))|(?=^(\d+;))|(?=^(\d+\r))/.exec(str) == null)break; // no others
patt2.exec(str);
tmp = RegExp.lastMatch; // get chapter verse(s)
str = RegExp.rightContext;
wrkstr += RegExp.leftContext;
wrkstr += "<a href=\"http://www.biblegateway.com/cgi-bin/bible?language=English&version=NIV&passage="+book+" ";
wrkstr += tmp;
wrkstr += "\" target=\"_blank\"> "+tmp+"</a>";
str = RegExp.rightContext; // save that which is after verse
}
}return wrkstr + str;
}
