window.BGLinks = (function() { var that = {}; // can be set like BGLinks.parameter that.version = "NVT"; that.clickTooltip = false; that.apocrypha = false; that.showTooltips = true; that.host = "www.biblegateway.com"; var showTimer = 0; var hideTimer = 0; var container; var addedCSS = false; var setupRun = false; var delay = 1000; var bgHost; var toolsHost; var cdHost; var browser = navigator.appVersion; var book_string = "G[eê]nesis|Gen?|Gn|[ÊE]xodo|Exod?|[ÊE]x|Lev[ií]tico|Le?v|N[úu]meros|Nu?m|Nm|Deuteron[ôo]mio|Deut?|Dt|Josu[ée]|Js|Ju[íi]zes|Jz|Rute|Rt|(?:1|i|2|ii) ?Samuel|(?:1|i|2|ii) ?Sm|(?:1|i|2|ii) ?Reis|(?:1|i|2|ii) ?Rs|(?:1|i|2|ii) ?Cr[ôo]nicas|(?:1|i|2|ii) ?Cr|(?:1|i|2|ii) ?Cr|Esdras|Ed||Neemias|Ne|Ester|Et|Jó|Salmos|Sl|Prov[ée]rbios|Proverbios|Pv|Eclesiastes|Ec|C[âa]nticos|Ct|Cnt|Cantares|Isa[íi]as|Is?|Jeremias|J(?:e?)r|Lamentacoes|Lamentações|L(?:a?)m|Ezequiel|Ez(?:e?)|Daniel|Da?n|Da|Oséias|Oseias|Os|Joel|Jl|Am[óo]s|Am|Obadias|Ob(?:ad?)?|Jonas|Jn|Miqu[ée]ias|Mq|Naum|Na|Habacuque|Hab|Hc|Sofonias|Sf|Ag(?:eu?)?|Zacarias|Zc|Malaquias|Ml|Mateus|Mat?|Mt|Mark|Marcos|Mc|Lucas|Lc|Luc?|Jo[ãa]o|Jo[ãa]|Jo|At(?:os?)?|Romanos|Rm|(?:1|i|2|ii) ?Cor[íi]ntios|(?:1|i|2|ii) ?Co|(?:1|i|2|ii) ?Cor|G[áa]latas|G[áa]l?|Gl|Ef[ée]sios|Ef?|Filipenses|Fp|Colossenses|Col|Cl|(?:1|i|2|ii) ?Tessalonicenses|(?:1|i|2|ii) ?T(?:e?)s?|(?:1|i|2|ii) ?Tim[óo]teo|(?:1|i|2|ii) ?T(?:i?)m|Tito|Tt|Filemon|Fm|Hebreus|H(?:e?)b?|Tiago|Tg|Jas|(?:1|i|2|ii) ?Pedro|(?:1|i|2|ii) ?Pe?|(?:1|i|2|ii|3|iii) ?Jo[ãa]o|(?:1|i|2|ii|3|iii) ?Jo|Judas?|Jd|Apocalipse?|Ap|Revela[çc][aã]o?|Rv"; var apoc_books = "|Tobias?|To?b|Judi(?:te?)?|Jdt|(?:1|2) ?Mac(?:abeus)?|(?:1|2) ?Ma?|Sabedor[íi]a|Wi|Wi?s|Eclesi[áa]stico|Sir|Ba(?:ruque?)?|Ba?r"; that.linkVerses = function() { updateURLs(); insertBiblerefs(document.body); if (that.showTooltips === true) { addBiblerefListeners(); } setup(); }; var updateURLs = function() { bgHost = "https://" + that.host; toolsHost = bgHost + "/share/tooltips/data"; cdHost = bgHost + "/public/link-to-us/tooltips"; }; var insertBiblerefs = function(node) { var new_nodes; if (node.nodeType === 3) { new_nodes = searchNode(node, 0); return new_nodes; } else if ( node.tagName != undefined && node.tagName.match(/^(?:a|h\d|img|pre|input|option)$/i) ) { return null; } else { var children = node.childNodes; var i = 0; while (i < children.length) { new_nodes = insertBiblerefs(children[i]); i += new_nodes + 1; } } return null; }; var searchNode = function(node, inserted_nodes) { var newTxtNode; var apoc_string = that.apocrypha === true ? apoc_books : ""; var unicode_space = "[\\u0020\\u00a0\\u1680\\u2000-\\u200a\\u2028-\\u202f\\u205f\\u3000]"; //finds book and chapter for each verse that been separated by &,and,etc... var book_chap = "((?:(" + book_string + apoc_string + ")(?:.)?" + unicode_space + "*?)?(?:(\\d*):)?(\\d+(?:(?:ff|f|\\w)|(?:\\s?(?:-|–|—)\\s?\\d+)?)))([^a-z0-9]*)"; var regex_string = "(?:" + book_string + apoc_string + ")(?:.)?" + unicode_space + "*?\\d+:\\d+(?:ff|f|\\w)?(?:\\s?(?:(?:(?:-|–|—)\\s?(?:(?:" + book_string + apoc_string + ")(?:.)?\\s)?)|(?:(?:,|;|&|&|and|cf\\.|cf)))\\s?(?:(?:(?:vv.|vs.|vss.|v.) ?)?\\d+\\w?)(?::\\d+\\w?)?)*"; var regex = new RegExp(regex_string, "i"); var verse_match = node.nodeValue.match(regex); if (verse_match == null) { return inserted_nodes; } else { var text = node.nodeValue; var before_text = text.substr(0, text.indexOf(verse_match[0])); var after_text = text.substr( text.indexOf(verse_match[0]) + verse_match[0].length ); if (before_text.length > 0) { newTxtNode = document.createTextNode(before_text); node.parentNode.insertBefore(newTxtNode, node); inserted_nodes++; } var book_chap_regex = new RegExp(book_chap, "gi"); var book; var chapter; var verse; var matched; while ((matched = book_chap_regex.exec(verse_match[0]))) { // break up what may be multiple references into links. if (matched[2] != "" && matched[2] != null) { book = matched[2]; } if (matched[3] != "" && matched[3] != null) { chapter = matched[3]; } verse = matched[4]; var newLinkNode = document.createElement("a"); newLinkNode.className = "bibleref"; newLinkNode.target = "_BLANK"; var passage = book + " " + chapter + ":" + verse; newLinkNode.href = bgHost + "/passage/?search=" + passage + "&version=" + that.version + "&src=tools"; newLinkNode.innerHTML = matched[1]; if (that.clickTooltip === true) { newLinkNode.onclick = function() { return false; }; } node.parentNode.insertBefore(newLinkNode, node); inserted_nodes++; if (matched[6] != "") { newTxtNode = document.createTextNode(matched[5]); node.parentNode.insertBefore(newTxtNode, node); // do we need to update inserted_nodes with this? } } if (after_text.length > 0) { newTxtNode = document.createTextNode(after_text); node.parentNode.insertBefore(newTxtNode, node); node.parentNode.removeChild(node); inserted_nodes = searchNode(newTxtNode, inserted_nodes + 1); } else { node.parentNode.removeChild(node); } } return inserted_nodes; }; var addCSS = function() { if (!addedCSS) { var css = document.createElement("link"); css.type = "text/css"; css.rel = "stylesheet"; if (browser.search("MSIE 6.0") != -1) { browser = "ie6"; css.href = cdHost + "/theme/bglinks-ie.css"; } else { css.href = cdHost + "/theme/popover.css"; } css.media = "screen"; var n1 = document.getElementsByTagName("head")[0].childNodes[0]; n1.parentNode.insertBefore(css, n1); addedCSS = true; } }; var addBiblerefListeners = function() { var links = document.getElementsByTagName("a"); for (var i = 0; i < links.length; i++) { var link = links[i]; if (link.className && link.className.indexOf("bibleref") != -1) { if (that.clickTooltip !== true) { addListener(link, "mouseover", linkMouseover); addListener(link, "mouseout", linkMouseout); } else { addListener(link, "click", toggleTooltip); } } } }; var addListener = function(listen_object, action, callback) { if (listen_object.addEventListener) { if (action == "mouseover") { listen_object.addEventListener("mouseover", callback, false); } else if (action == "mouseout") { listen_object.addEventListener("mouseout", callback, false); } else if (action == "click") { listen_object.addEventListener("click", callback, false); } } else if (listen_object.attachEvent) { if (action == "mouseover") { listen_object.attachEvent("onmouseover", callback); } else if (action == "mouseout") { listen_object.attachEvent("onmouseout", callback); } else if (action == "click") { listen_object.attachEvent("onclick", callback); } } else { if (action == "mouseover") { listen_object.onmouseover = callback; } else if (action == "mouseout") { listen_object.onmouseout = callback; } else if (action == "click") { listen_object.onclick = callback; } } }; var toggleTooltip = function(e) { if (!e) { e = window.event; } var link = e.target || e.srcElement; var reference; var bibleref; if ((bibleref = link.getAttribute("data-bibleref"))) { reference = bibleref; } else { reference = link.href.match(/search=(.*?)(?:&.*)?$/)[1]; } var id = reference.replace(/%20| /g, ""); id = reference.replace(/:/g, "_"); var tooltip = document.getElementById("bg_popup-" + id); if (tooltip === null || tooltip.style.display == "none") { showTooltip(e); } else { hideTooltip(e); } }; var showTooltip = function(e, link) { if (!e) { e = window.event; } if (link == null) { link = e.currentTarget || e.target || e.srcElement; } var reference; var bibleref; var tooltip_loc; if ((bibleref = link.getAttribute("data-bibleref"))) { reference = bibleref; } else { reference = decodeURIComponent( link.href.match(/search=(.*?)(?:&.*)?$/)[1] ); } var id = reference.replace(/%20| |\+|[^\x00-\x80]/g, ""); id = id.replace(/:/g, "_"); id = id.replace(/ /g, ""); var tooltip = document.getElementById("bg_popup-" + id); hideAllTooltips(e); if (tooltip === null) { tooltip = getTooltip(reference, link); } else { tooltip_loc = tooltipLocation(link); tooltip.style.left = tooltip_loc.offsetX + "px"; tooltip.style.top = tooltip_loc.offsetY + "px"; tooltip.style.display = "block"; } }; var hideTooltip = function(e) { if (!e) { e = window.event; } var link = e.target || e.srcElement; var reference; var bibleref; if ((bibleref = link.getAttribute("data-bibleref"))) { reference = bibleref; } else { reference = link.href.match(/search=(.*?)(?:&.*)?$/)[1]; } reference = reference.replace(/%20| /g, ""); reference = reference.replace(/:/g, "_"); var tooltip = document.getElementById("bg_popup-" + reference); if (tooltip) { tooltip.style.display = "none"; } }; var hideAllTooltips = function() { var divs = container.children; for (var i = 0; i < divs.length; i++) { divs[i].style.display = "none"; } }; var linkMouseover = function(e) { if (!e) { e = window.event; } var target = e.currentTarget || e.target; if (target.nodeName.toLowerCase() == "a") { window.clearTimeout(showTimer); showTimer = window.setTimeout(function() { showTooltip(e, target); }, delay); } }; var linkMouseout = function(e) { if (!e) { e = window.event; } if (e.target.nodeName.toLowerCase() == "a" && showTimer) { window.clearTimeout(showTimer); window.clearTimeout(hideTimer); hideTimer = window.setTimeout(function() { hideTooltip(e); }, delay); } }; var tooltipMouseover = function(e) { if (!e) { e = window.event; } var relNode = e.relatedTarget || e.fromElement; while ( relNode && relNode != null && (!relNode.className || relNode.className.indexOf("bg_popup-outer") == -1) && relNode.nodeName.toLowerCase() != "body" ) { relNode = relNode.parentNode; } if ( relNode && relNode.className && relNode.className.indexOf("bg_popup-outer") != -1 ) return; window.clearTimeout(showTimer); window.clearTimeout(hideTimer); }; var tooltipMouseout = function(e) { if (!e) { e = window.event; } var relNode = e.relatedTarget || e.toElement; while ( relNode && relNode != null && (!relNode.className || relNode.className.indexOf("bg_popup-outer") == -1) && relNode.nodeName.toLowerCase() != "body" ) { relNode = relNode.parentNode; } if ( relNode && relNode.className && relNode.className.indexOf("bg_popup-outer") != -1 ) return; window.clearTimeout(hideTimer); hideTimer = window.setTimeout(function() { hideAllTooltips(e); }, delay); }; var createContainer = function() { container = document.createElement("div"); container.id = "bg_popup-container"; document.body.appendChild(container); }; var getTooltip = function(reference, link) { var tooltip = document.createElement("div"); tooltip.style.display = "none"; tooltip.className = "bg_popup bg_popup-outer"; var tooltip_loc = tooltipLocation(link); tooltip.style.top = tooltip_loc.offsetY + "px"; tooltip.style.left = tooltip_loc.offsetX + "px"; var id = "bg_popup-" + reference.replace(/(?:%20)|\+|[^\x00-\x80]/g, ""); id = id.replace(/:/g, "_"); id = id.replace(/ /g, ""); tooltip.id = id; tooltip.innerHTML = '

' + tooltip_content.text + ' (' + tooltip_content.version + ') Ver mais...