// 
// This code was written by Jason Wall.  Feel free to use, and if you can, include a link back to www.walljm.com
// Jason@walljm.com // www.walljm.com
//
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

function delVerse(v) {
	var title = v.parentNode;
	var verse = title.nextSibling;
	var passages = title.parentNode;
	
	passages.removeChild(title);
	passages.removeChild(verse);
	createPassagePermalink();
}
var qBookname;
var qBook;
var qChapter;
var qVsStart;
var qVsEnd;
var myTestament;
var testament;			

function loadVerse() {
	// if file has querystring, get it.
	url = location.href;
	
	if (url.search(/\?/) != -1) 
	{
      q=url.split('?');
      if (q[1]) 
			{
				if (q[1].search(/\=/) != -1)
				{
          var pairs = q[1].split('=');
    			getQuery(unescape(pairs[1]));
				} 
				else 
				{
					getQuery(unescape(q[1]));
				}		
			}
	}	
}
function clearSearch() {
  document.getElementById('ref').value = "";
	document.getElementById('result').innerHTML = "";
  document.getElementById('passage').innerHTML = "";

}

function nextBook () {
	var refs = document.getElementById('ref').value.split(";");
		var passage = "";
		document.getElementById('result').innerHTML = "";
		for (var i=0; i < refs.length; i++) {
			var ref = refs[i];
			if (ref.trim() != "") {
    		var myReference = new Reference(ref.trim());	
  			if (myReference.book < 66) {	
      		getVersesByRef(myReference.book+1, 1, 1, "*");
    			passage += bookName(myReference.book+1) + " 1";
    			if (i+1 < refs.length) 
    			{
    				passage += "; ";
    			}
  			} else {
  				alert("You're already at the last book of the Bible. ;)");
  				getVersesByRef(myReference.book, 1, 1, "*");
    			passage += bookName(myReference.book) + " 1";
    			if (i+1 < refs.length) 
    			{
    				passage += "; ";
    			}
  			}
			}
		}
		//document.getElementById('passage').innerHTML = "<a href='./?" + passage + "' title='" + passage + "'>" + passage + "</a>";
		document.getElementById('ref').value = passage;
}

function prevBook () {
		var refs = document.getElementById('ref').value.split(";");
		var passage = "";
		document.getElementById('result').innerHTML = "";
		for (var i=0; i < refs.length; i++) {
			var ref = refs[i];
			if (ref.trim() != "") {
    		var myReference = new Reference(ref.trim());	
  			if (myReference.book > 1) {	
      		getVersesByRef(myReference.book-1, 1, 1, "*");
    			passage += bookName(myReference.book-1) + " 1";
    			if (i+1 < refs.length) 
    			{
    				passage += "; ";
    			}
  			} else {
  				alert("You're already at the last book of the Bible. ;)");
  				getVersesByRef(myReference.book, 1, 1, "*");
    			passage += bookName(myReference.book) + " 1";
    			if (i+1 < refs.length) 
    			{
    				passage += "; ";
    			}
  			}
			}
		}
		//document.getElementById('passage').innerHTML = "<a href='./?" + passage + "' title='" + passage + "'>" + passage + "</a>";
		document.getElementById('ref').value = passage;
}
function showChapter () {
		var refs = document.getElementById('ref').value.split(";");
		var passage = "";
		document.getElementById('result').innerHTML = "";
		for (var i=0; i < refs.length; i++) {
			var ref = refs[i];
			if (ref.trim() != "") {
    		var myReference = new Reference(ref.trim());	
    		getVersesByRef(myReference.book, myReference.chapter, 1, "*");
  			passage += myReference.bookname + " " + myReference.chapter;
  			if (i+1 < refs.length) 
  			{
  				passage += "; ";
  			}
			}
		}
		//document.getElementById('passage').innerHTML = "<a href='./?" + passage + "' title='" + passage + "'>" + passage + "</a>";
		document.getElementById('ref').value = passage;
}
function nextChapter () {
		var refs = document.getElementById('ref').value.split(";");
		var passage = "";
		document.getElementById('result').innerHTML = "";
		for (var i=0; i < refs.length; i++) {
			var ref = refs[i];
			if (ref.trim() != "") {
    		var myReference = new Reference(ref.trim());	
  			if (myReference.chapter < myReference.lastchapter) {	
      		getVersesByRef(myReference.book, myReference.chapter+1, 1, "*");
    			passage += myReference.bookname + " " + (myReference.chapter+1);
    			if (i+1 < refs.length) 
    			{
    				passage += "; ";
    			}
  			} else {
  				alert("You're already at the last chapter in the book. ;)");
  				getVersesByRef(myReference.book, myReference.chapter, 1, "*");
    			passage += myReference.bookname + " " + (myReference.chapter);
    			if (i+1 < refs.length) 
    			{
    				passage += "; ";
    			}
  			}
			}
		}
		//document.getElementById('passage').innerHTML = "<a href='./?" + passage + "' title='" + passage + "'>" + passage + "</a>";
		document.getElementById('ref').value = passage;
}
function prevChapter () {
		var refs = document.getElementById('ref').value.split(";");
		var passage = "";
		document.getElementById('result').innerHTML = "";
		for (var i=0; i < refs.length; i++) {
			var ref = refs[i];
			if (ref.trim() != "") {
    		var myReference = new Reference(ref.trim());	
  			if (myReference.chapter > 1) {	
      		getVersesByRef(myReference.book, myReference.chapter-1, 1, "*");
    			passage += myReference.bookname + " " + (myReference.chapter-1);
    			if (i+1 < refs.length) 
    			{
    				passage += "; ";
    			}
  			} else {
  				alert("You're already at the first chapter in the book. ;)");
  				getVersesByRef(myReference.book, myReference.chapter, 1, "*");
    			passage += myReference.bookname + " " + (myReference.chapter);
    			if (i+1 < refs.length) 
    			{
    				passage += "; ";
    			}
  			}
			}
		}
		//document.getElementById('passage').innerHTML = "<a href='./?" + passage + "' title='" + passage + "'>" + passage + "</a>";
		document.getElementById('ref').value = passage;
}


function getQuery(query) {
	var qs = query.split(";");
	clearSearch();
	for (var x in qs) {
		var	q = qs[x].trim();
		if (q != "") {
    	if (q.search(/[0-9]/i) == -1) 
    	{
    		find(q);
    	} else if(q.search(/(H|G)[0-9]/i) != -1){
    		var dict = q.substring(0,1);
    		if (dict.search(/h/i) != -1) {dict="heb";} else {dict="grk";}
  			q = q.substring(1, q.length);
    		getStrongs(q,dict);
    		
    	} else {
    		var passage = "";
    		if (q.trim() != "") {
      		var myReference = new Reference(q.trim());	
      		getVersesByRef(myReference.book, myReference.chapter, myReference.startverse, myReference.endverse);
    			passage += myReference.bookname + " " + myReference.chapter + ":" + myReference.startverse + "-" + myReference.endverse;
  			}
    	}
		}
	}
}
function getReference() {
	var q = document.getElementById('ref').value;
	getQuery(q);
}
function getVersesByRef(book, chapter, startverse, endverse) {
	var myReference = new Reference(bookName(book) + " " + chapter);	
	var bookname = myReference.bookname;
	var longbookname = myReference.longbookname;
	qBookname = bookname
	qBook = book;
	qChapter = chapter;
	qVsStart = startverse;
	qVsEnd = endverse;
	document.getElementById('ref').value += bookname + " " + chapter + ":" + startverse + "-" + endverse + "; ";
	processReqChange(loadXMLDocSync("xml/" + book + "-" + chapter + ".xml"));
	createPassagePermalink();
}

function createPassagePermalink() {

	var r = document.getElementById("result");
	var titles = r.getElementsByTagName("h2");
	var p = document.getElementById('passage');
	p.innerHTML = "";
	var t = "";
	for (var i=0; i < titles.length; i++) {
		var title = titles[i].childNodes[2].innerHTML;
		t += title + "; ";
	}
	p.innerHTML += 	"<a style='border: none; text-decoration: none;' href='./?" + t + "' title='" + t + "'><img style='border: 0px;' src='images/shape_square_link.png' /></a>";
}

function myTraverse(node) {
	var treeText = "";
	if (node != null) {
		if(node.hasChildNodes()) {
		if (node.nodeName == "strongs") {
				// you need to test if this is the OT or NT and set the attribute accordingly.
				if (testament == "old") {
					treeText += " <a href='./?H" + node.getAttribute("number") + "' onclick='getStrongs(";
					treeText += node.getAttribute("number") + ", \"heb\"";
				}
				if (testament == "new") {
					treeText += " <a href=\"./?G" + node.getAttribute("number") + "\" onclick='getStrongs(\"";
					treeText += node.getAttribute("number") + "\", \"grk\"";
				}
				treeText += "); return false;' title='Strongs #: " + node.getAttribute("number") + "'>" + myTraverse(node.childNodes.item(0)) + "</a>";
			} else {
				treeText += '<'+node.nodeName+'>';
				for(var i=0; i<node.childNodes.length; i++) {
					treeText += myTraverse(node.childNodes.item(i));
				}
				treeText += '</'+node.nodeName+'>';
			}
		} else {
			if (node.nodeValue != null) {
  			if (node.nodeValue.search(/^(\,|\.|\:|\?|\;|\!)/) != -1) {
  				treeText += node.nodeValue;
  			} else {
  				treeText += " " + node.nodeValue;
  			}
			}
		}
	}
	return treeText;
}

function processReqChange(xmlObj) {
	// ...processing statements go here...
  var oDict  = xmlObj.documentElement;
  var Books = oDict.getElementsByTagName("book");
  testament = Books.item(0).getAttribute("testament");
  var Chapters = oDict.getElementsByTagName("chapter");
  var result = document.getElementById('result');
  var resultText = "";
  for (i=0; i<Chapters.length; i++) {
  	var Chapter = Chapters.item(i);
  	if (Chapter.getAttribute("number") == qChapter) {
  		var Verses = Chapter.childNodes
  		for (j=0; j<Verses.length; j++) {
  		 	var Verse = Verses.item(j);
  			if (Verse.nodeName == "verse") {
  				if ((Verse.getAttribute("number") >= qVsStart && Verse.getAttribute("number") <= qVsEnd) || (Verse.getAttribute("number") >= qVsStart && qVsEnd == "*")) {
  					var vNodes = Verse.childNodes;
  					resultText += "<b>" + Verse.getAttribute("number") + ".</b> ";
  					for (m=0; m<vNodes.length; m++) {
  						vNode = vNodes.item(m);
  						if (vNode.nodeName == "#text") {
  							if (vNode.nodeValue.search(/^(\,|\.|\:|\?|\;|\!)/) != -1) {
  								resultText += vNode.nodeValue;
  							} else {
  								resultText += " " + vNode.nodeValue;
  							}
  						}
  						if (vNode.nodeName == "em") {
  							resultText += myTraverse(vNode);
  						}
  						if (vNode.nodeName == "strongs") {
  							// you need to test if this is the OT or NT and set the attribute accordingly.
            		if (testament == "old") {
            			resultText += " <a href='./?H" + vNode.getAttribute("number") + "' onclick='getStrongs(\"";
            			resultText += vNode.getAttribute("number") + "\", \"heb\"";
            		}
            		if (testament == "new") {
            			resultText += " <a href='./?G" + vNode.getAttribute("number") + "' onclick='getStrongs(\"";
            			resultText += vNode.getAttribute("number") + "\", \"grk\"";
            		}
            		
  							resultText += "); return false;' title='Strongs #: " + vNode.getAttribute("number") + "'>" + myTraverse(vNode.childNodes.item(0)) + "</a>";
  						}
  					}
  					resultText += "<br />";
  				}
				}
			}
			result.innerHTML = "<h2 class='passages'><a style='border: 0px; text-decoration: none;' class='delverse' href='#' onclick='delVerse(this); return false;'><img style='border: 0px;' src='images/delverse.gif' width='16' height='16' /></a> | " + "<a href='./?" + qBookname + " " + qChapter + ":" + qVsStart + "-" + qVsEnd + "' title='"+qBookname + " " + qChapter + ":" + qVsStart + "-" + qVsEnd +"'>" + qBookname + " " + qChapter + ":" + qVsStart + "-" + qVsEnd + "</a></h2><div>" + resultText + "</div>" + result.innerHTML; 
  	}										
  }
}

