
var m_errorText;
var m_xmlHttp = false;
var m_key = "";
var m_currentResultId;
var m_errorId;
var m_currentInfoId;
var m_book = "";
var m_currentScript = "";
var m_currentListId;
var m_chapterId ="1"
var m_pageId = "1";
var m_currentChapterNameId = "";
var m_currentChapterFormId = "";
var m_currentMaxChaptersId = "";
var m_currentBookNameId = "";
var m_currentLang = "fi";
var m_currentBookId = "";
var m_nbOfResultsTxt = "hakutulosta sanalle";
var m_txtNotFoundPart1 = "Sanaa";
var m_txtNotFoundPart2 = "ei löytynyt!";
var m_linkTitleTxt = "Klikkaa Raamattuun";
var m_browserSupportAlert = "Selaimesi ei tue funktiota XMLHttpRequests.";
var m_waitTxt = "Odota...";

/*  UT */
var m_utBookId = "ut";
var m_utIsLoaded = false;   
var m_utChapterList;
var m_utBook = "ut.xml";
var m_utChapterFormId;
var m_utMaxChaptersId;
var m_utBookNameId;
var m_utSearchResultId;
var m_utPageResultId;
var m_utInfoResultId;
var m_utLinkScript;
var m_utSearchListId;
var m_utChapterNameId;
var m_utKey = "";
var m_utLang = "fi";

/*  VT */
var m_vtBookId = "vt";
var m_vtIsLoaded = false;
var m_vtChapterList;
var m_vtBook = "vt.xml";
var m_vtChapterFormId;
var m_vtMaxChaptersId;
var m_vtBookNameId;
var m_vtSearchResultId;
var m_vtPageResultId;
var m_vtInfoResultId;
var m_vtLinkScript;
var m_vtSearchListId;
var m_vtChapterNameId;
var m_vtKey = "";
var m_vtLang = "fi";

/*  NT */
var m_ntBookId = "nt";
var m_ntIsLoaded = false;   
var m_ntChapterList;
var m_ntBook = "nt.xml";
var m_ntChapterFormId;
var m_ntMaxChaptersId;
var m_ntBookNameId;
var m_ntSearchResultId;
var m_ntPageResultId;
var m_ntInfoResultId;
var m_ntLinkScript;
var m_ntSearchListId;
var m_ntChapterNameId;
var m_ntKey = "";
var m_ntLang = "en";

/*  OT */
var m_otBookId = "ot";
var m_otIsLoaded = false;
var m_otChapterList;
var m_otBook = "ot.xml";
var m_otChapterFormId;
var m_otMaxChaptersId;
var m_otBookNameId;
var m_otSearchResultId;
var m_otPageResultId;
var m_otInfoResultId;
var m_otLinkScript;
var m_otSearchListId;
var m_otChapterNameId;
var m_otKey = "";
var m_otLang = "en";

function initBookCommon(p_errorId,
                        p_nbOfResultsTxt,
                        p_txtNotFoundPart1,
                        p_txtNotFoundPart2,
                        p_linkTitleTxt,
                        p_browserSupportAlert,
                        p_waitTxt)
{
  m_errorId = p_errorId;
  m_nbOfResultsTxt = p_nbOfResultsTxt;
  m_txtNotFoundPart1 = p_txtNotFoundPart1;
  m_txtNotFoundPart2 = p_txtNotFoundPart2;
  m_linkTitleTxt = p_linkTitleTxt;
  m_browserSupportAlert = p_browserSupportAlert;
  m_waitTxt = p_waitTxt;
}

function initUtBook(p_searchResultId,p_pageResultId,p_infoId,p_script,p_listId,p_chapterFormId,p_maxChaptersId,p_bookNameId,p_chapterNameId)
{
  m_utSearchResultId = p_searchResultId;
  m_utPageResultId = p_pageResultId;
  m_utInfoResultId = p_infoId;
  m_utLinkScript = p_script;
  m_utSearchListId = p_listId;
  m_utChapterFormId = p_chapterFormId;
  m_utMaxChaptersId = p_maxChaptersId;
  m_utBookNameId = p_bookNameId;
  m_utChapterNameId = p_chapterNameId;
}
function initVtBook(p_searchResultId,p_pageResultId,p_infoId,p_script,p_listId,p_chapterFormId,p_maxChaptersId,p_bookNameId,p_chapterNameId)
{
  m_vtSearchResultId = p_searchResultId;
  m_vtPageResultId = p_pageResultId;
  m_vtInfoResultId = p_infoId;
  m_vtLinkScript = p_script;
  m_vtSearchListId = p_listId;
  m_vtChapterFormId = p_chapterFormId;
  m_vtMaxChaptersId = p_maxChaptersId;
  m_vtBookNameId = p_bookNameId;
  m_vtChapterNameId = p_chapterNameId;
}
function initNtBook(p_searchResultId,p_pageResultId,p_infoId,p_script,p_listId,p_chapterFormId,p_maxChaptersId,p_bookNameId,p_chapterNameId)
{
  m_ntSearchResultId = p_searchResultId;
  m_ntPageResultId = p_pageResultId;
  m_ntInfoResultId = p_infoId;
  m_ntLinkScript = p_script;
  m_ntSearchListId = p_listId;
  m_ntChapterFormId = p_chapterFormId;
  m_ntMaxChaptersId = p_maxChaptersId;
  m_ntBookNameId = p_bookNameId;
  m_ntChapterNameId = p_chapterNameId;
}
function initOtBook(p_searchResultId,p_pageResultId,p_infoId,p_script,p_listId,p_chapterFormId,p_maxChaptersId,p_bookNameId,p_chapterNameId)
{
  m_otSearchResultId = p_searchResultId;
  m_otPageResultId = p_pageResultId;
  m_otInfoResultId = p_infoId;
  m_otLinkScript = p_script;
  m_otSearchListId = p_listId;
  m_otChapterFormId = p_chapterFormId;
  m_otMaxChaptersId = p_maxChaptersId;
  m_otBookNameId = p_bookNameId;
  m_otChapterNameId = p_chapterNameId;
}
function bookSearch(p_bookName,p_key)
{
  var isLoaded = false;
  var chapterList;
  var resultId = "";
  var infoId = "";
  var script = "";
  var listId = "";
  var bookId = "";
  if(p_bookName == "ut")
  {
    m_book = m_utBook;
    isLoaded = m_utIsLoaded;
    chapterList = m_utChapterList;
    resultId = m_utSearchResultId;
    infoId = m_utInfoResultId;
    script = m_utLinkScript;
    listId = m_utSearchListId;
    m_utKey = p_key;
    bookId = m_utBookId;
  }
  else if(p_bookName == "vt")
  {
    m_book = m_vtBook;
    isLoaded = m_vtIsLoaded;
    chapterList = m_vtChapterList;
    resultId = m_vtSearchResultId;
    infoId = m_vtInfoResultId;
    script = m_vtLinkScript;
    listId = m_vtSearchListId;
    m_vtKey = p_key;
    bookId = m_vtBookId;
  }
  else if(p_bookName == "nt")
  {
    m_book = m_ntBook;
    isLoaded = m_ntIsLoaded;
    chapterList = m_ntChapterList;
    resultId = m_ntSearchResultId;
    infoId = m_ntInfoResultId;
    script = m_ntLinkScript;
    listId = m_ntSearchListId;
    m_ntKey = p_key;
    bookId = m_ntBookId;
  }
  else if(p_bookName == "ot")
  {
    m_book = m_otBook;
    isLoaded = m_otIsLoaded;
    chapterList = m_otChapterList;
    resultId = m_otSearchResultId;
    infoId = m_otInfoResultId;
    script = m_otLinkScript;
    listId = m_otSearchListId;
    m_otKey = p_key;
    bookId = m_otBookId;
  }
  if(!isLoaded)
  {
    loadBook("1","1",p_key,resultId,infoId,script,listId,"","","","",bookId);
  }
  else
  {
    doBookSearch(chapterList,p_key,resultId,infoId,script,listId,bookId);	  
  }
}

function doBookSearch(p_chapterList,p_key,p_resultId,p_infoId,p_script,p_listId,p_bookId)
{
  var chTitle;
  var pgTitle;
  var vsTitle;
  var chId;
  var pgId;
  var vsId;
  var listObj = document.createElement("ol");
  var attr = document.createAttribute("id");
  attr.nodeValue = p_listId;
  listObj.setAttributeNode(attr);
  document.getElementById(p_resultId).innerHTML = "";
  
  for (i=0; i<p_chapterList.length; i++) 
  {
    chId = p_chapterList.item(i).getAttribute("id");
    chTitle = p_chapterList.item(i).getAttribute("title");
    var pages =  p_chapterList.item(i).getElementsByTagName("pg");
    if(pages)
    {
      for (j=0; j<pages.length; j++) 
      {     
        pgId = pages.item(j).getAttribute("id");
        pgTitle = pages.item(j).getAttribute("title");
        var verses =  pages.item(j).getElementsByTagName("vs");
        if(verses)
        {
          var vsText = "";
          for (k=0; k<verses.length; k++) 
          {
            vsId = verses.item(k).getAttribute("id");
            vsTitle = verses.item(k).getAttribute("title");
            if(verses.item(k).text)
            {
              vsText = verses.item(k).text;
            }
            else
            {
              if(verses.item(k).firstChild)
              {
                vsText = verses.item(k).firstChild.nodeValue;
              }
            }
            var pos = vsText.search(new RegExp(p_key,"i")); 
            if(pos != -1)
            {
              var titleTxt = chTitle+" "+pgTitle+":"+vsTitle;
              var linkObj = createResultLink(titleTxt,chId,pgId,vsId,p_script,p_bookId);
              if(linkObj)
              {    
               
                if(p_key.length > 0)
                {
	          appendTextWithKey(linkObj,vsText,p_key);  
                }
                else
                {
	          var textNode = document.createTextNode(vsText); 
                  linkObj.appendChild(textNode);
                } 
                listObj.appendChild(linkObj);
                var newBr = document.createElement("br");
                listObj.appendChild(newBr);
              }
            }
          }
        }
      }
    }
  }
  document.getElementById(p_resultId).appendChild(listObj);
  if(listObj.getElementsByTagName("li").length > 0)
  {
    document.getElementById(p_infoId).innerHTML = listObj.getElementsByTagName("li").length + " " + m_nbOfResultsTxt + " " + "<b>" + p_key + "<\/b>.";
  }
  else
  {
    document.getElementById(p_infoId).innerHTML = m_txtNotFoundPart1 + " <b>" + p_key +"<\/b> " + m_txtNotFoundPart2;	  
  }
  if(document.getElementById(m_errorId))
  {
    document.getElementById(m_errorId).innerHTML = "";
  }
}
function createResultLink(p_title,p_ch,p_pg,p_vs,p_script,p_bookId)
{
  var id = p_bookId+"_"+p_ch+"_"+p_pg+"_"+p_vs;
  var newLink = document.createElement("li");
  var attr = document.createAttribute("id");
  attr.nodeValue = id;
  newLink.setAttributeNode(attr);
  attr = document.createAttribute("name");
  attr.nodeValue = id;
  newLink.setAttributeNode(attr);
  attr = document.createAttribute("type");
  attr.nodeValue = "1";
  newLink.setAttributeNode(attr);
  attr = document.createAttribute("title");
  attr.nodeValue =  m_linkTitleTxt; 
  newLink.setAttributeNode(attr);
  
  var newDiv = document.createElement("div");
  var attr = document.createAttribute("id");
  attr.nodeValue = "div"+id;
  newDiv.setAttributeNode(attr);
  attr = document.createAttribute("name");
  attr.nodeValue = "div"+id;
  newDiv.setAttributeNode(attr);
  var attr = document.createAttribute("class");
  attr.nodeValue = "resultTitle";
  newDiv.setAttributeNode(attr);
  attr = document.createAttribute("onclick");
  attr.nodeValue = p_script+"("+p_ch+","+p_pg+","+p_vs+")";
  newDiv.setAttributeNode(attr);
  var newB = document.createElement("b");
  var textNode = document.createTextNode(p_title);
  newB.appendChild(textNode);
  newDiv.appendChild(newB);
  newLink.appendChild(newDiv); 
  return newLink;
}

function bookPage(p_bookName,p_chapterId,p_pageId)
{
  var isLoaded = false;
  var chapterList;
  var resultId = "";
  var infoId = "";
  var chapterNameId = "";
  var chapterFormId = "";
  var maxChaptersId = "";
  var bookNameId = "";
  var bookId = "";
  if(p_bookName == "ut")
  {
    m_book = m_utBook;
    isLoaded = m_utIsLoaded;
    chapterList = m_utChapterList;
    resultId = m_utPageResultId;
    infoId = m_utInfoResultId;
    chapterNameId = m_utChapterNameId;
    chapterFormId = m_utChapterFormId;
    maxChaptersId = m_utMaxChaptersId;
    bookNameId = m_utBookNameId;
    m_key = m_utKey;
    bookId = m_utBookId;
  }
  else if(p_bookName == "vt")
  {
    m_book = m_vtBook;
    isLoaded = m_vtIsLoaded;
    chapterList = m_vtChapterList;
    resultId = m_vtPageResultId;
    infoId = m_vtInfoResultId;
    chapterNameId = m_vtChapterNameId;
    chapterFormId = m_vtChapterFormId;
    maxChaptersId = m_vtMaxChaptersId;
    bookNameId = m_vtBookNameId;
    m_key = m_vtKey;
    bookId = m_vtBookId;
  }
  else if(p_bookName == "nt")
  {
    m_book = m_ntBook;
    isLoaded = m_ntIsLoaded;
    chapterList = m_ntChapterList;
    resultId = m_ntPageResultId;
    infoId = m_ntInfoResultId;
    chapterNameId = m_ntChapterNameId;
    chapterFormId = m_ntChapterFormId;
    maxChaptersId = m_ntMaxChaptersId;
    bookNameId = m_ntBookNameId;
    m_key = m_ntKey;
    bookId = m_ntBookId;
  }
  else if(p_bookName == "ot")
  {
    m_book = m_otBook;
    isLoaded = m_otIsLoaded;
    chapterList = m_otChapterList;
    resultId = m_otPageResultId;
    infoId = m_otInfoResultId;
    chapterNameId = m_otChapterNameId;
    chapterFormId = m_otChapterFormId;
    maxChaptersId = m_otMaxChaptersId;
    bookNameId = m_otBookNameId;
    m_key = m_otKey;
    bookId = m_otBookId;
  }
  else 
  {
    if(document.getElementById(m_errorId))
    {
      document.getElementById(m_errorId).innerHTML = "Unknown book: "+p_bookName;
    }
    return;	  
  }
  if(!isLoaded)
  {
    loadBook(p_chapterId,p_pageId,"",resultId,infoId,"","",chapterNameId,chapterFormId,maxChaptersId,bookNameId,bookId);
  }
  else
  {
    doBookPage(chapterList,p_chapterId,p_pageId,resultId,infoId,chapterNameId,chapterFormId,maxChaptersId,bookNameId,bookId);	  
  }
}

function doBookPage(p_chapterList,p_chapterId,p_pageId,p_resultId,p_infoId,
                    p_chapterNameId,p_chapterFormId,p_maxChaptersId,p_bookNameId,p_bookId)
{
  var chTitle;
  var pgTitle;
  var vsTitle;
  var chId;
  var pgId;
  var vsId;
  var resultObj = document.getElementById(p_resultId);
  if(!resultObj)
  {
    if(document.getElementById(m_errorId))
    {
      document.getElementById(m_errorId).innerHTML = "No result object: "+p_resultId;
    }
    return;	  
  }
  resultObj.innerHTML = "";
  
  for (i=0; i<p_chapterList.length; i++) 
  {
    chId = p_chapterList.item(i).getAttribute("id");
    if(chId == p_chapterId)
    {
	    var divObj = document.createElement("div");
      var attr = document.createAttribute("cellspacing");
      attr.nodeValue = "2";
      divObj.setAttributeNode(attr);
      attr = document.createAttribute("border");
      attr.nodeValue = "0";
      divObj.setAttributeNode(attr);
      attr = document.createAttribute("cellpadding");
      attr.nodeValue = "4";
      attr = document.createAttribute("width");
      attr.nodeValue = "175";
      divObj.setAttributeNode(attr);
      var nameObj = document.getElementById(p_chapterNameId);
      if(nameObj)
      {
        nameObj.innerHTML = p_chapterList.item(i).getAttribute("title")
      }
      var pages =  p_chapterList.item(i).getElementsByTagName("pg");
      chTitle = p_chapterList.item(i).getAttribute("title");
      var formObj = document.createElement("form");
      var attr = document.createAttribute("id");
      attr.nodeValue = p_chapterFormId;
      formObj.setAttributeNode(attr);
      var inputObj = document.createElement("input");
	    var attr = document.createAttribute("id");
      attr.nodeValue = p_maxChaptersId;
      inputObj.setAttributeNode(attr);
      attr = document.createAttribute("name");
      attr.nodeValue = p_maxChaptersId;
      inputObj.setAttributeNode(attr);
      attr = document.createAttribute("type");
      attr.nodeValue = "hidden";
      inputObj.setAttributeNode(attr);
      attr = document.createAttribute("value");
      attr.nodeValue = pages.length;
      inputObj.setAttributeNode(attr);
      formObj.appendChild(inputObj);
      var inputObj = document.createElement("input");
	    var attr = document.createAttribute("id");
      attr.nodeValue = p_bookNameId;
      inputObj.setAttributeNode(attr);
      attr = document.createAttribute("name");
      attr.nodeValue = p_bookNameId;
      inputObj.setAttributeNode(attr);
      attr = document.createAttribute("type");
      attr.nodeValue = "hidden";
      inputObj.setAttributeNode(attr);
      attr = document.createAttribute("value");
      attr.nodeValue = p_chapterList.item(i).getAttribute("title");
      inputObj.setAttributeNode(attr);
      formObj.appendChild(inputObj);
      divObj.appendChild(formObj);
      
      if(pages)
      {
        for (j=0; j<pages.length; j++) 
        {     
          pgId = pages.item(j).getAttribute("id");
          if(pgId == p_pageId)
          {
            pgTitle = pages.item(j).getAttribute("title");
            var verses =  pages.item(j).getElementsByTagName("vs");
            if(verses)
            {
              var vsText = "";
              for (k=0; k<verses.length; k++) 
              {
	            vsId = verses.item(k).getAttribute("id");
	            vsTitle = verses.item(k).getAttribute("title");
                if(verses.item(k).text)
                {
                  vsText = verses.item(k).text;
                }
                else
                {
                  if(verses.item(k).firstChild)
                  {
                    vsText = verses.item(k).firstChild.nodeValue;
                  }
                }
                var divObj2 = document.createElement("div");
                var attr = document.createAttribute("id");
                attr.nodeValue = getVerseId(p_bookId,chId,pgId,vsId);
                divObj2.setAttributeNode(attr);
                var newB = document.createElement("b");
                var textNode = document.createTextNode(vsId+". ");
                newB.appendChild(textNode);
                divObj2.appendChild(newB);
                if(m_key.length > 0)
                {
	              appendTextWithKey(divObj2,vsText,m_key);  
                }
                else
                {
	              textNode = document.createTextNode(vsText); 
                  divObj2.appendChild(textNode);
                } 
                divObj.appendChild(divObj2);
              }
            }
            break;
          }
        }
      }
    }
  }
  resultObj.appendChild(divObj);
}
function getVerseId(p_bookNameId,p_chId,p_pgId,p_vsId)
{
  return p_bookNameId+"-"+p_chId+"-"+p_pgId+"-"+p_vsId;
}
function appendTextWithKey(p_col,p_text,p_key)
{
  var klen = p_key.length;
  var remain = p_text;
  while(remain.length) 
  {
    var pos = remain.search(new RegExp(p_key,"i")); 
    if(pos != -1)
    {
      var text = remain.substr(0,pos);
      var textS = document.createTextNode(text);
      p_col.appendChild(textS);
      var keyTxt = remain.substr(pos,klen);
      var newB = document.createElement("b");
      var attr = document.createAttribute("class");
      attr.nodeValue = "searchResult";
      newB.setAttributeNode(attr);
      var textS = document.createTextNode(keyTxt);
      newB.appendChild(textS);
      p_col.appendChild(newB);
      remain = remain.substr(pos+klen);
    }
    else
    {
	  var textS = document.createTextNode(remain);
      p_col.appendChild(textS);
	  remain = "";    
    }
  }
}


function loadBook(p_chapterId,p_pageId,p_key,p_resultId,p_infoId,p_script,p_listId,p_chapterNameId,p_chapterFormId,p_maxChaptersId,p_bookNameId,p_bookId)
{
  if(p_key.length > 0) 
  {
    m_key = p_key;
  }
  m_currentResultId = p_resultId;
  m_currentInfoId = p_infoId;
  m_currentScript = p_script;
  m_curretListId = p_listId;
  m_chapterId = p_chapterId;
  m_pageId = p_pageId;
  m_currentChapterNameId = p_chapterNameId;
  m_currentChapterFormId = p_chapterFormId;
  m_currentMaxChaptersId = p_maxChaptersId;
  m_currentBookNameId = p_bookNameId;
  m_currentBookId = p_bookId;
  /* running locally on IE5.5, IE6, IE7 */ 
  if(location.protocol=="file:"){
    if(!m_xmlHttp) try{ 
      m_xmlHttp=new ActiveXObject("MSXML2.XMLHTTP"); 
    }catch(e){
      m_xmlHttp=false;
    }
    if(!m_xmlHttp)try{ 
      m_xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    }catch(e){
      m_xmlHttp=false;
    }
  } 
  if(!m_xmlHttp) try{ 
    m_xmlHttp=new XMLHttpRequest(); 
  }
  catch(e){
    m_xmlHttp=false;
  }
  /* IE6 */
  if(typeof ActiveXObject != "undefined"){
    if(!m_xmlHttp)try{ 
      m_xmlHttp=new ActiveXObject("MSXML2.XMLHTTP"); 
    }
    catch(e){
      m_xmlHttp=false;
    }
    if(!m_xmlHttp)try{ 
      m_xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    }
    catch(e){
      m_xmlHttp=false;
    }
  }
  /* IceBrowser */
  if(!m_xmlHttp)try{ 
    m_xmlHttp=createRequest(); 
  }
  catch(e){
    m_xmlHttp=false;
  }
  if(!m_xmlHttp)
  {
    alert(m_browserSupportAlert);
    return;
  }
  if(document.getElementById(m_errorId))
  {
    document.getElementById(m_errorId).innerHTML = m_waitTxt;
  }
  m_xmlHttp.open("GET",m_book,true);
  m_xmlHttp.onreadystatechange=bookReadyState;
  m_xmlHttp.send(null);
  
}
function bookReadyState()
{ 
  if(m_xmlHttp.readyState == 4 /*|| (m_xmlHttp.status && m_xmlHttp.status==200)*/)
  {
    if(m_xmlHttp.responseXML)
    {
      if (!m_xmlHttp.responseXML.documentElement && m_xmlHttp.responseStream) {
        m_xmlHttp.responseXML.load(m_xmlHttp.responseStream);
      }

      var currentChapterList = m_xmlHttp.responseXML.getElementsByTagName("chapter");
      if(m_book == m_utBook)
      {
        m_utIsLoaded = true;
        m_utChapterList = currentChapterList;
      }
      else if(m_book == m_vtBook)
      {
        m_vtIsLoaded = true;
        m_vtChapterList = currentChapterList;
      }
      else if(m_book == m_ntBook)
      {
        m_ntIsLoaded = true;
        m_ntChapterList = currentChapterList;
      }
      else if(m_book == m_otBook)
      {
        m_otIsLoaded = true;
        m_otChapterList = currentChapterList;
      }
      if(m_currentScript != "")
      {
        doBookSearch(currentChapterList,m_key,m_currentResultId,m_currentInfoId,m_currentScript,m_currentListId,m_currentBookId);
      }
      else
      {
        doBookPage(currentChapterList,m_chapterId,m_pageId,m_currentResultId,m_currentInfoId,
                   m_currentChapterNameId,m_currentChapterFormId,m_currentMaxChaptersId,m_currentBookNameId,m_currentBookId);  
      }
      if(document.getElementById(m_errorId))
      {
        document.getElementById(m_errorId).innerHTML = "";
      }
    }
    else
    {
      m_errorText = m_xmlHttp.responseText;
      if(document.getElementById(m_errorId))
      {
        document.getElementById(m_errorId).innerHTML = m_errorText;
      }
    }
 //   m_xmlHttp.onreadystatechange = null;
  }
}