var t;
var len;
var wildcard;
var lenSrch;
var strSrch;
var strSearch;
var strSndSurname;
var lenCont0;
var lenCont1;
var strSearchCont0;
var strSearchCont1;
var xmlhttp=null;
var results=false;
var w=window;
var d=document;
var errMsg='Your internet browser is unable to search this database. Suitable browsers include recent versions of Microsoft Internet Explorer, Mozilla Firefox and Safari. JavaScript must be enabled.'
function deathDtaLoad(){
  if(w.ActiveXObject){
    try{
      xmlhttp=new ActiveXObject('Msxml2.XMLHTTP');
    }
    catch(e){
      try{
        xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
      }
      catch(e){
        xmlhttp=false;
        alert(errMsg);
        if(w.history.length)w.history.back();
        return;
      }
    }
  }
  else if(w.XMLHttpRequest){
    try{
      xmlhttp=new XMLHttpRequest();
      xmlhttp.overrideMimeType('text/xml');
    }
    catch(e){
      xmlhttp=false;
      alert(errMsg);
      if(w.history.length)w.history.back();
      return;
    }
  }
  else{
    alert(errMsg);
    if(w.history.length)w.history.back();
    return;
  }
  if(xmlhttp){
    xmlhttp.open('GET', 'gazettedeaths.xml', true);
    xmlhttp.send(null);
    d.getElementById('strQuery').value="";
    d.getElementById('btnGo').disabled=false;
    d.getElementById('strQuery').focus();
  }
  else{
    alert(errMsg);
    if(w.history.length)w.history.back();
    return;
  }
}
function findQuery(){
  d.getElementById('btnGo').disabled='disabled';
  lenSrch=d.getElementById('strQuery').value.length;
  if(lenSrch>24)lenSrch=24;
  strSrch=d.getElementById('strQuery').value.toUpperCase();
  len=0;
  lenCont0=0;
  lenCont1=0;
  strSearch="";
  strSearchCont0="";
  strSearchCont1="";
  wildcard=0;
  for(var i=0;i<lenSrch;i++){
    if((strSrch.charAt(i)>='A' && strSrch.charAt(i)<='Z') || strSrch.charAt(i)=="'" || strSrch.charAt(i)=="-" || strSrch.charAt(i)==" " || strSrch.charAt(i)=="*"){
      strSearch+=strSrch.charAt(i);
      len++;
    }
  }
  for(var i=0;i<len;i++){
    switch(wildcard){
      case 0:
        if(strSearch.charAt(i)=="*")break;
        strSearchCont0+=strSearch.charAt(i);
        lenCont0++;
        break;
      case 1:
        if(strSearch.charAt(i)=="*")break;
        strSearchCont1+=strSearch.charAt(i);
        lenCont1++;
        break;
      default:
        if(strSearch.charAt(i)=="*")break;
        strSearchCont1+=strSearch.charAt(i);
        lenCont1++;
        break;
    }
    if(strSearch.charAt(i)=="*")wildcard++;
  }
  len=lenCont0+lenCont1;
  if(len<2){
    d.getElementById('strResult').innerHTML="<table border='0' cellspacing='0'><tr><th class='error'>Data Entry Error</th></tr><tr><td class='error'>Fill in the <b>surname</b> box with at least 2 characters of the name to be found.<br />";
    d.getElementById('btnGo').disabled=false;
    d.getElementById('strQuery').focus();
    return;
  }
  else{
    d.getElementById('htmlProgress').innerHTML='Downloading the index ...';
    if(d.getElementById('blnSound').checked) strSearch=calculateSound(strSearch);
    xmlhttp.onreadystatechange=checkReadyState;
    if(xmlhttp.readyState==4 && xmlhttp.status=='200'){
      d.getElementById('htmlProgress').innerHTML='Searching ...';
      if(t)w.clearTimeout(t);
      t=w.setTimeout('runSearch()',200);
    }
  }
}
function checkReadyState(){
  if(xmlhttp.readyState==4 && xmlhttp.status=='200'){
    d.getElementById('htmlProgress').innerHTML='Searching ...';
    if(t)w.clearTimeout(t);
    t=w.setTimeout('runSearch()',200);
  }
  else if(xmlhttp.readyState==4 && xmlhttp.status !='200'){
    alert('An error occurred while loading the index');
    if(w.history.length)w.history.back();
    return;
  }
}
function runSearch(){
  var strName="";
  var strName2="";
  var strPrint="";
  var strArray=new Array();
  var dthDoc=xmlhttp.responseXML;
  var sList=dthDoc.getElementsByTagName('s');
  var gList=dthDoc.getElementsByTagName('g');
  var dList=dthDoc.getElementsByTagName('d');
  var rList=dthDoc.getElementsByTagName('r');
  var pList=dthDoc.getElementsByTagName('p');
  var aList=dthDoc.getElementsByTagName('a');
  var listLen=sList.length;
  var i=0;
  var count=0;
  while (i<listLen){
    strName=sList[i].firstChild.nodeValue;
    strName2=aList[i].firstChild.nodeValue.toLowerCase();
    var j=0;
    while(strName.charAt(j) != ' ' && strName.charAt(j) != '/' && strName.charAt(j))j++;
    if(d.getElementById('blnSound').checked){
      strName=calculateSound(strName.substr(0,j));
    }
    else if(d.getElementById('blnExact').checked){
      strName=strName.substr(0,j);
    }
    if(!wildcard)lenCont0=j;
    var m=strName.indexOf(strSearchCont0);
    if((d.getElementById('blnWildcards').checked && m>=0 && strName.indexOf(strSearchCont1, m+lenCont0-1)>=0) || (d.getElementById('blnExact').checked && strName.substr(0,lenCont0)==strSearchCont0 && strName.substr(j-lenCont1,lenCont1)==strSearchCont1) || (d.getElementById('blnSound').checked && strName==strSearch) || (strName2 !="" && !d.getElementById('blnExact').checked && strName2.indexOf(strSearch)>=0)){
      strArray [count]="<p><i>Surname: </i>"+sList[i].firstChild.nodeValue;
      if(gList[i].firstChild.nodeValue != '-')strArray[count] +="<br /><i>Given name(s): </i>"+gList[i].firstChild.nodeValue;
      if(aList[i].firstChild.nodeValue != '-')strArray[count] +="<br /><i>Alternative name(s): </i>"+aList[i].firstChild.nodeValue;
      if(dList[i].firstChild.nodeValue != '-')strArray[count] +="<br /><i>Death date: </i>"+dList[i].firstChild.nodeValue;
      if(pList[i].firstChild.nodeValue != '-')strArray[count] +="<br /><i>Death place: </i>"+pList[i].firstChild.nodeValue;
      if(rList[i].firstChild.nodeValue != '-')strArray[count] +="<br /><i>Date reported: </i>"+rList[i].firstChild.nodeValue;
      strArray[count] +="</p>";
      count++;
    }
    i++;
  }
  if(count){
    strArray.sort();
    strPrint='<h4 class="results">Search results <span style="font-size:13px; font-weight:normal;">(total of '+count+')</span></h4>';
    for(var i=0;i<count;i++)strPrint +=strArray[i];
    d.getElementById('strResult').innerHTML=strPrint;
    d.getElementById('htmlProgress').innerHTML='View the results below...';
    results=true;
  }
  else{d.getElementById('strResult').innerHTML="<h4 class='results'>Search results <span style='font-size:13px; font-weight:normal;'>(total of 0)</span></h4>The data you entered, <b><i>"+d.getElementById('strQuery').value+"</i></b>, is not in this database.";
  d.getElementById('htmlProgress').innerHTML='There are no results to view.';
  results=false;
  }
  if(!d.getElementById('strQuery').disabled)d.getElementById('strQuery').focus();
  d.getElementById('btnGo').disabled=false;
}
function calculateSound(strString){
  var strModSound="";
  var strSound="";
  var intStrLen=strString.length;
  for(var i=0;i<intStrLen;i++){
    if(strString.charAt(i)=='P' || strString.charAt(i)=='F' || strString.charAt(i)=='V')strSound +='1';
    else if(strString.charAt(i)=='B'){
      if(strString.substr(intStrLen-2,2)!='MB' && strString.substr(intStrLen-3,3)!='MBE' && strString.substr(intStrLen-4,4)!='MBES' && strString.substr(intStrLen-3,3)!='MBS')strSound +='1';
    }
    else if(strString.charAt(i)=='C' || (strString.charAt(i)=='S') || strString.charAt(i)=='K' || (strString.charAt(i)=='G' && i != intStrLen-1 && (!(i == intStrLen-2 && strString.charAt(intStrLen-1)=='N'))) || strString.charAt(i)=='J' || strString.charAt(i)=='Q' || strString.charAt(i)=='X' || strString.charAt(i)=='Z')strSound +='2';
    else if(strString.charAt(i)=='D' || strString.charAt(i)=='T') strSound +='3';
    else if(strString.charAt(i)=='L') strSound +='4';
    else if(strString.charAt(i)=='M' || strString.charAt(i)=='N'){
      if(i==1 && strString.charAt(1)=='N' && (strString.charAt(0)=='G' || strString.charAt(0)=='K' || strString.charAt(0)=='P'))strSound='5';
      else strSound +='5';
      if(i==0 && strString.charAt(1)=='C' && strString.charAt(0)=='M')strSound += '0';
    }
    else if(strString.charAt(i)=='R')strSound +='6';
    else if(strString.charAt(i)=='H'){
      if(i>1 && strString.charAt(i-1)=='G' && (strString.charAt(i-2)=='A' || strString.charAt(i-2)=='I' || strString.charAt(i-2)=='O' || strString.charAt(i-2)=='U'))strSound=strSound.substring(0,strSound.length-1);
    }
    else if(strString.charAt(i)=='W' || strString.charAt(i)=='Y'){
      if(i==0 && ((strString.charAt(0)=='W' && strString.charAt(1)!='R') || strString.charAt(0)=='Y'))strSound +='9';
      else if(strString.charAt(i)=='Y')strSound +='0';
    }
    else if(((strString.charAt(i)=='A' || strString.charAt(i)=='I' || strString.charAt(i)=='O') && (i>0 || (i==0 && strString.charAt(1)!="'"))) || (i != intStrLen-1 && strString.charAt(i)=='E') || strString.charAt(i)=='I' || strString.charAt(i)=='U')strSound +='0';
  }
  strModSound=strSound.charAt(0);
  for(i=1;i<strSound.length;i++){
    if(strSound.charAt(i)!=strSound.charAt(i-1))strModSound +=strSound.charAt(i);
  }
  return strModSound;
}
function clearForm(){
  d.getElementById('htmlProgress').innerHTML="";
  d.getElementById('strResult').innerHTML="<h4 class='results' style='padding-bottom:0.2em;'>Using the death database</h4><p>Enter the person's surname into the box.<br />Click the [ <b>Go</b> ] button to begin the search.</p>";
}
function displayHelp(){
  var htmlResults="";
  if(results)htmlResults="<br /><br />"+d.getElementById('strResult').innerHTML;
  else htmlResults="";
  d.getElementById('strResult').innerHTML+="<h5>Text entry</h5><p>At least 2 allowed characters must be entered into the surname box before a search can proceed.<br />The search is not case sensitive.<br />The only characters allowed are letters of the alphabet, hyphens, spaces, apostrophes and no more than one * wildcard. &nbsp;Any other entered characters are ignored. In particular, the ? wildcard and the logical operators (and, or, not, &, |, &lt;, >, +, -) cannot be used.</p><h5>Searching for a name</h5><p>The default (and generally most satisfactory) method of searching for a name is the wildcards method. Select [Wildcards] by clicking it, if necessary. Then enter into the surname box, sufficient letters to define the name to be found. Click the [ <b>Go</b> ] button to begin the search. If the name you wish to find is not in the database, take into account possible spelling variations, as the people and the officials recording their information were often illiterate or semiliterate.<br />It is advisable to omit surname prefixes such as O' and Mac so that the usual variations of spelling these names are all found. <br />The search behaves as though you have entered a * wildcard at each end of your search text. That is, the search engine looks for the exact text you have entered anywhere within the name. For example, if you search for <b>hill</b>, several different names will be found, including <b>hill</b>, <b>hill</b>yard, ca<b>hill</b> and p<b>hill</b>ips, amongst others. This feature has the annoyance of giving some unwanted names but can be very useful. For example, searching for <b>phil</b> may give philp, philip and phillips, amongst others. This allows you to take into account some likely mis-spellings or variations of the name of interest. If required, one * wildcard can be added within the text to replace zero or more unknown or doubtful characters. For example, searching for r<b>e*</b>d will give r<b>ea</b>d, r<b>ee</b>d and r<b>ei</b>d, together with others. Searching for sm<b>*</b>th may give sm<b>i</b>th, sm<b>y</b>th and sm<b>y</b>the, amongst others.<br />The [<b>Clear</b>] button clears the box ready for your next search.</p><h5>Searching for names using exact matching</h5><p>If you only wish to find surnames with exactly the same spelling as you have entered, select [Exact] by clicking it, if necessary. If required, one * wildcard can be added in any position to replace zero or more unknown or doubtful characters.<br />Exact matching is not available for the alternative names field. This field is searched by the wildcards method.</p><h5>Searching for names using sound matching</h5>If the above techniques fail, as a last resort you may wish to try the sound method of matching. This will allow you to find more variations of spelling and also take into account the pronunciation of the surname. For example, searching on the name <b>smith</b> will find names such as smith, smyth, smythe, smidt and schmidt. The method used here is a heavily modified version of Soundex code matching which doesn't require the 1st letter of the name to be known and takes into account such pronunciation variations as dropped h's and g's. It also takes account of significant vowels, h and y which are all ignored by Soundex if not the name's 1st letter. You must be prepared to scan the results and reject those which are poor matches. For some shorter names, ones with mainly vowels, and names containing spaces, all the results may be unsatisfactory. Also, the search takes about twice as long because there is considerably more processing to be done.<br />To use sound matching, select [Sound] before clicking [ <b>Go</b> ]. You <b>must enter the full surname</b> required. <b>Wildcards are not permitted</b>.<br />Sound matching is not available for the alternative names field. This field is searched by the wildcards method."+htmlResults;
  if(!d.getElementById('strQuery').disabled)d.getElementById('strQuery').focus();
}//Copyright(c)2003-2009 B Leadbeater, Australia