var _imageZoomEnabled = false; var _linkCellMap = new Array(); var _onCells = new Array(); /******************** * EXPANSION SCRIPTS * ********************/ function getTextForSection(sectionID, callback) { if(!callback) { console.log("Cannot get text as the callback function is not defined"); } var template = ""; template += ''; template += ''; template += ''; template += ''; template += ''; template += ''; template += ''; var hlCheckBox = document.getElementById("highlightOption"); var hl = ""; if(hlCheckBox) { if(hlCheckBox.checked) { hl = "on"; } else { hl = "off"; } } var ajax = gs.functions.ajaxRequest(); ajax.open("GET", gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + sectionID + "?hl=" + hl + "&p.s=TextQuery&ilt=" + template.replace(" ", "%20"), true); ajax.onreadystatechange = function() { if(ajax.readyState == 4 && ajax.status == 200) { var response = ajax.responseText; if(response) { var textStart = response.indexOf(">", response.indexOf(">") + 1) + 1; var textEnd = response.lastIndexOf("<"); if(textStart == 0 || textEnd == -1 || textEnd <= textStart) { callback(""); } var text = response.substring(textStart, textEnd); callback(text); } else { callback(null); } } else if(ajax.readyState == 4) { callback(null); } } ajax.send(); } function getSubSectionsForSection(sectionID, callback) { if(!callback) { console.log("Cannot get sub sections as the callback function is not defined"); } var template = ""; template += ''; template += ''; template += ''; template += ''; template += ''; template += ''; template += ''; var ajax = gs.functions.ajaxRequest(); var url = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + sectionID + "?ilt=" + template.replace(" ", "%20"); if(gs.documentMetadata.docType == "paged") { url += "&dt=hierarchy"; } ajax.open("GET", url, true); ajax.onreadystatechange = function() { if(ajax.readyState == 4 && ajax.status == 200) { var response = ajax.responseText; if(response) { var sectionsStart = response.indexOf(">", response.indexOf(">") + 1) + 1; var sectionsEnd = response.lastIndexOf("<"); if(sectionsStart == 0 || sectionsEnd == -1 || sectionsEnd <= sectionsStart) { callback(" "); return; } var sections = response.substring(sectionsStart, sectionsEnd); callback(sections); } else { callback(null); } } else if(ajax.readyState == 4) { callback(null); } } ajax.send(); } function toggleSection(sectionID, callback, tocDisabled) { var docElem = document.getElementById("doc" + sectionID); var tocElem = document.getElementById("toc" + sectionID); var tocToggleElem = document.getElementById("ttoggle" + sectionID); var docToggleElem = document.getElementById("dtoggle" + sectionID); if(docElem.style.display == "none") { if(tocToggleElem && !tocDisabled) { tocToggleElem.setAttribute("src", gs.imageURLs.collapse); } if(tocElem && !tocDisabled) { tocElem.style.display = "block"; } if(gs.functions.hasClass(docElem, "noText")) { getTextForSection(sectionID, function(text) { if(text) { var nodeID = sectionID.replace(/\./g, "_"); if(text.search("wrap" + nodeID) != -1) { document.getElementById("zoomOptions").style.display = null; document.getElementById("pagedImageOptions").style.display = null; } getSubSectionsForSection(sectionID, function(sections) { if(sections) { var textElem = document.getElementById("doc" + sectionID); $(textElem).html(text + sections); docElem.setAttribute("class", docElem.getAttribute("class").replace(/\bnoText\b/g, "")); docElem.style.display = "block"; docToggleElem.setAttribute("src", gs.imageURLs.collapse); if(callback) { callback(true); } if(document.getElementById("viewSelection")) { changeView(); } } else { docToggleElem.setAttribute("src", gs.imageURLs.expand); if(callback) { callback(false); } } }); } else { docToggleElem.setAttribute("src", gs.imageURLs.expand); if(callback) { callback(false); } } }); docToggleElem.setAttribute("src", gs.imageURLs.loading); } else { docToggleElem.setAttribute("src", gs.imageURLs.collapse); docElem.style.display = "block"; if(callback) { callback(true); } } } else { docElem.style.display = "none"; //Use the page image if this is a leaf node and the chapter image if it not docToggleElem.setAttribute("src", gs.imageURLs.expand); if(tocToggleElem) { tocToggleElem.setAttribute("src", gs.imageURLs.expand); } if(tocElem) { tocElem.style.display = "none"; } if(callback) { callback(true); } } } function scrollToTop() { $('html, body').stop().animate({scrollTop: 0}, 1000); } function focusSection(sectionID, level, tocDisabled) { if(!level) { level = 0; } var parts = sectionID.split("."); if(level >= parts.length) { var topVal = $(document.getElementById("doc" + sectionID)).offset().top - 50; $('html, body').stop().animate({scrollTop: topVal}, 1000); return; } var idToExpand = ""; for(var i = 0; i < level + 1; i++) { if(i > 0) { idToExpand += "."; } idToExpand += parts[i]; } if(!isExpanded(idToExpand)) { toggleSection(idToExpand, function(success) { if(success) { focusSection(sectionID, level + 1, tocDisabled); } }, tocDisabled); } else { focusSection(sectionID, level + 1, tocDisabled); } } function expandOrCollapseAll(expand) { var divs = document.getElementsByTagName("DIV"); var startCounter = 0; var endCounter = 0; for(var i = 0; i < divs.length; i++) { if(divs[i].getAttribute("id") && divs[i].getAttribute("id").search(/^doc/) != -1) { var id = divs[i].getAttribute("id").replace(/^doc(.*)/, "$1"); if(isExpanded(id) != expand) { //Don't collapse the top level if(!expand && id.indexOf(".") == -1) { continue; } startCounter++; var toggleFunction = function(tid) { toggleSection(tid, function(success) { if(success) { endCounter++; } else { setTimeout(function(){toggleFunction(tid)}, 500); } }); } toggleFunction(id); } } } if(startCounter != 0) { var checkFunction = function() { if(startCounter == endCounter) { expandOrCollapseAll(expand); } else { setTimeout(checkFunction, 500); } } checkFunction(); } } function loadTopLevelPage(callbackFunction, customURL) { var ajax = gs.functions.ajaxRequest(); var url = gs.xsltParams.library_name + "?a=d&c=" + gs.cgiParams.c + "&excerptid=gs-document"; if(gs.cgiParams.d && gs.cgiParams.d.length > 0) { url += "&d=" + gs.cgiParams.d.replace(/([^.]*)\..*/, "$1"); } else if(gs.cgiParams.href && gs.cgiParams.href.length > 0) { url += "&d=&alb=1&rl=1&href=" + gs.cgiParams.href; } if(customURL != null) { ajax.open("GET", customURL, true); } else { ajax.open("GET", url, true); } ajax.onreadystatechange = function() { if(ajax.readyState == 4 && ajax.status == 200) { var response = ajax.responseText; if(response) { var targetElem = document.getElementById("gs-document"); var docStart = response.indexOf(">") + 1; var docEnd = response.lastIndexOf("<"); var doc = response.substring(docStart, docEnd); targetElem.innerHTML = doc; if(callbackFunction) { callbackFunction(); } } } else if(ajax.readyState == 4) { var targetElem = document.getElementById("gs-document"); targetElem.innerHTML = targetElem.innerHTML + "

FAILED TO LOAD PAGE"; } }; ajax.send(); } function retrieveFullTableOfContents() { var ajax = gs.functions.ajaxRequest(); var url = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "?excerptid=tableOfContents&ed=1"; if(gs.cgiParams.d && gs.cgiParams.d.length > 0) { url += "&a=d&d=" + gs.cgiParams.d; } else if(gs.cgiParams.href && gs.cgiParams.href.length > 0) { url += "&a=d&d=&alb=1&rl=1&href=" + gs.cgiParams.href; } ajax.open("GET", url, true); ajax.onreadystatechange = function() { if(ajax.readyState == 4 && ajax.status == 200) { var newTOCElem = ajax.responseText; var tocStart = newTOCElem.indexOf(">") + 1; var tocEnd = newTOCElem.lastIndexOf("<"); var newTOC = newTOCElem.substring(tocStart, tocEnd); //Add the "Expand document"/"Collapse document" links newTOC = "
Expand documentCollapse document
" + newTOC; //Collapse the TOC newTOC = newTOC.replace(/display:block/g, "display:none"); newTOC = newTOC.replace(/display:none/, "display:block"); newTOC = newTOC.replace(/images\/collapse/g, "images/expand"); var tocElem = document.getElementById("tableOfContents"); tocElem.innerHTML = newTOC; gs.variables.tocLoaded = true; } else if(ajax.readyState == 4) { var loading = document.getElementById("tocLoadingImage"); loading.parentNode.removeChild(loading); console.log("Error Loading TOC"); } } ajax.send(); } function isExpanded(sectionID) { var docElem = document.getElementById("doc" + sectionID); if(docElem.style.display == "block") { return true; } return false; } function isParentOf(parent, child) { if(child.indexOf(parent) != -1 && child.length > parent.length && child[parent.length] == '.') { return true; } return false; } function minimizeSidebar() { var toc = document.getElementById("contentsArea"); var maxLink = document.getElementById("sidebarMaximizeButton"); var minLink = document.getElementById("sidebarMinimizeButton"); if(toc) { toc.style.display = "none"; } maxLink.style.display = "block"; minLink.style.display = "none"; } function maximizeSidebar() { var coverImage = document.getElementById("coverImage"); var toc = document.getElementById("contentsArea"); var maxLink = document.getElementById("sidebarMaximizeButton"); var minLink = document.getElementById("sidebarMinimizeButton"); if(coverImage) { coverImage.style.display = "block"; } if(toc) { toc.style.display = "block"; } maxLink.style.display = "none"; minLink.style.display = "block"; } /********************** * PAGED-IMAGE SCRIPTS * **********************/ function changeView() { var viewList = document.getElementById("viewSelection"); var currentVal = viewList.value; var view; if(currentVal == "Image view") { setImageVisible(true); setTextVisible(false); view = "image"; } else if(currentVal == "Text view") { setImageVisible(false); setTextVisible(true); view = "text"; } else { setImageVisible(true); setTextVisible(true); view = ""; } var ajax = gs.functions.ajaxRequest(); ajax.open("GET", gs.xsltParams.library_name + "?a=d&view=" + view + "&c=" + gs.cgiParams.c); ajax.send(); } function setImageVisible(visible) { var divs = document.getElementsByTagName("DIV"); var images = new Array(); for (var i = 0; i < divs.length; i++) { if(divs[i].id && divs[i].id.search(/^image/) != -1) { images.push(divs[i]); } } for(var i = 0; i < images.length; i++) { var image = images[i]; if(visible) { image.style.display = "block"; } else { image.style.display = "none"; } } } function setTextVisible(visible) { var divs = document.getElementsByTagName("DIV"); var textDivs = new Array(); for (var i = 0; i < divs.length; i++) { if(divs[i].id && divs[i].id.search(/^text/) != -1) { textDivs.push(divs[i]); } } for(var i = 0; i < textDivs.length; i++) { var text = textDivs[i]; if(visible) { text.style.display = "block"; } else { text.style.display = "none"; } } } function retrieveTableOfContentsAndTitles() { var ilt = ""; ilt += ''; ilt += ''; ilt += ''; ilt += ''; ilt += ''; var ajax = gs.functions.ajaxRequest(); ajax.open("GET", gs.xsltParams.library_name + "?a=d&ed=1&c=" + gs.cgiParams.c + "&d=" + gs.cgiParams.d + "&ilt=" + ilt.replace(/ /g, "%20"), true); ajax.onreadystatechange = function() { if(ajax.readyState == 4 && ajax.status == 200) { document.getElementById("tableOfContents").innerHTML = ajax.responseText; replaceLinksWithSlider(); var loading = document.getElementById("tocLoadingImage"); loading.parentNode.removeChild(loading); } else if(ajax.readyState == 4) { var loading = document.getElementById("tocLoadingImage"); loading.parentNode.removeChild(loading); console.log("Error Loading TOC"); } } ajax.send(); } function replaceLinksWithSlider() { var tableOfContents = document.getElementById("tableOfContents"); var liElems = tableOfContents.getElementsByTagName("LI"); var leafSections = new Array(); for (var i = 0; i < liElems.length; i++) { var section = liElems[i]; var add = true; for(var j = 0; j < leafSections.length; j++) { if(leafSections[j] == undefined){continue;} var leaf = leafSections[j]; if(leaf.getAttribute("id").search(section.getAttribute("id")) != -1) { add = false; } if(section.getAttribute("id").search(leaf.getAttribute("id")) != -1) { delete leafSections[j]; } } if(add) { leafSections.push(section); } } for(var i = 0 ; i < leafSections.length; i++) { if(leafSections[i] == undefined){continue;} leafSections[i].style.display = "none"; var links = leafSections[i].getElementsByTagName("A"); var widget = new SliderWidget(links); leafSections[i].parentNode.insertBefore(widget.getElem(), leafSections[i]); } //Disable all TOC toggles var imgs = document.getElementsByTagName("IMG"); for(var j = 0; j < imgs.length; j++) { var currentImage = imgs[j]; if(currentImage.getAttribute("id") && currentImage.getAttribute("id").search(/^ttoggle/) != -1) { currentImage.setAttribute("onclick", ""); } else if(currentImage.getAttribute("id") && currentImage.getAttribute("id").search(/^dtoggle/) != -1) { currentImage.setAttribute("onclick", currentImage.getAttribute("onclick").replace(/\)/, ", null, true)")); } } } function SliderWidget(_links) { //**************** //MEMBER VARIABLES //**************** //The container for the widget var _mainDiv = document.createElement("DIV"); _mainDiv.setAttribute("class", "ui-widget-content pageSlider"); //The table of images var _linkTable = document.createElement("TABLE"); _mainDiv.appendChild(_linkTable); //The image row of the table var _linkRow = document.createElement("TR"); _linkTable.appendChild(_linkRow); //The list of titles we can search through var _titles = new Array(); //**************** //PUBLIC FUNCTIONS //**************** //Function that returns the widget element this.getElem = function() { return _mainDiv; } //***************** //PRIVATE FUNCTIONS //***************** var setUpFilterBox = function() { var filter = $("#filterText"); filter.keyup(function() { var currentValue = filter.val(); var isRange = (currentValue.search(/\d+-\d+/) != -1) var found = false; for(var i = 0; i < _titles.length; i++) { if(_titles[i][0] == currentValue) { found = true; } } if(!found && isRange) { var firstNumber = currentValue.replace(/^(\d+)-\d+$/, "$1"); var secondNumber = currentValue.replace(/^\d+-(\d+)$/, "$1"); if(firstNumber <= secondNumber) { var matchingTitles = new Array(); for(var i = firstNumber; i <= secondNumber; i++) { var numString = i + ""; for(var j = 0; j < _titles.length; j++) { var currentTitle = _titles[j]; if(currentTitle[0].search(numString) != -1) { matchingTitles.push(currentTitle); } } } for(var i = 0; i < _titles.length; i++) { _titles[i][1].cell.style.display = "none"; } for(var i = 0; i < matchingTitles.length; i++) { matchingTitles[i][1].cell.style.display = "table-cell"; } } } else { for(var i = 0; i < _titles.length; i++) { var currentTitle = _titles[i]; if(currentTitle[0].search(currentValue.replace(/\./g, "\\.")) != -1) { currentTitle[1].cell.style.display = "table-cell"; } else { currentTitle[1].cell.style.display = "none"; } } } }); } var getImage = function(page) { var ajax = gs.functions.ajaxRequest(); var href = page.getAttribute("href"); var startHREF = href.indexOf("'") + 1; var endHREF = href.indexOf("'", startHREF); var nodeID = href.substring(startHREF, endHREF); href = gs.xsltParams.library_name + "/collection/" + gs.cgiParams.c + "/document/" + nodeID; var template = ''; template += ''; template += ''; template += ''; template += ''; template += ''; template += ""; template += '/index/assoc/'; template += ""; template += '/'; template += ""; template += ''; template += ''; template += '

'; template += ""; template += '

'; template += ''; template += '
'; ajax.open("GET", href + "?ilt=" + template.replace(" ", "%20")); ajax.onreadystatechange = function() { if(ajax.readyState == 4 && ajax.status == 200) { var text = ajax.responseText; var hrefStart = text.indexOf("src=\"") + 5; if(hrefStart == -1) { page.isLoading = false; page.noImage = true; page.image.setAttribute("src", gs.imageURLs.blank); return; } var hrefEnd = text.indexOf("\"", hrefStart); var href = text.substring(hrefStart, hrefEnd); var image = document.createElement("IMG"); $(image).load(function() { page.link.innerHTML = ""; page.link.appendChild(image); page.isLoading = false; page.imageLoaded = true; }); $(image).error(function() { page.isLoading = false; page.noImage = true; image.setAttribute("src", gs.imageURLs.blank); }); image.setAttribute("src", href); var titleStart = text.indexOf("

") + 3; var titleEnd = text.indexOf("

"); var title = text.substring(titleStart, titleEnd); } else if (ajax.readyState == 4 && !page.failed) { page.failed = true; getImage(page); } } ajax.send(); } var startCheckFunction = function() { var checkFunction = function() { var widgetLeft = _mainDiv.scrollLeft; var widgetRight = _mainDiv.clientWidth + _mainDiv.scrollLeft; var visiblePages = new Array(); for(var i = 0; i < _links.length; i++) { var current = _links[i].cell; var currentLeft = current.offsetLeft; var currentRight = currentLeft + current.clientWidth; if(currentRight > widgetLeft && currentLeft < widgetRight) { visiblePages.push(_links[i]); } } for(var i = 0; i < visiblePages.length; i++) { var page = visiblePages[i]; if(!page || page.imageLoaded || page.noImage || page.isLoading) { continue; } page.isLoading = true; getImage(page); } } setInterval(checkFunction, 1000); } //*********** //CONSTRUCTOR //*********** for(var i = 0; i < _links.length; i++) { var col = document.createElement("TD"); _linkRow.appendChild(col); col.setAttribute("class", "pageSliderCol"); _links[i].cell = col; var link = document.createElement("A"); col.appendChild(link); _links[i].link = link; var href = _links[i].getAttribute("href"); link.setAttribute("href", href.replace(/\)/, ", 0, true)")); if(!_linkCellMap[href]) { _linkCellMap[href] = new Array(); } _linkCellMap[href].push(_links[i]); var image = document.createElement("IMG"); link.appendChild(image); image.setAttribute("src", gs.imageURLs.loading); _links[i].image = image; var title = _links[i].innerHTML; if(title.search(/^[^ ]+ [^ ]+$/) != -1) { var section = title.replace(/^([^ ]+) [^ ]+$/, "$1"); var page = title.replace(/^[^ ]+ ([^ ]+)$/, "$1"); if(page.search(/^[0-9]+$/) != -1) { title = page; } } _titles.push([title, _links[i]]); var text = document.createTextNode(title); col.appendChild(text); } setUpFilterBox(); startCheckFunction(); } /*********************** * HIGHLIGHTING SCRIPTS * ***********************/ function swapHighlight() { var hlCheckbox = document.getElementById("highlightOption"); var from; var to; if(hlCheckbox.checked) { from = "noTermHighlight"; to = "termHighlight"; } else { from = "termHighlight"; to = "noTermHighlight"; } var spans = document.getElementsByTagName("span"); for(var i = 0; i < spans.length; i++) { var currentSpan = spans[i]; if(currentSpan.getAttribute("class") == from) { currentSpan.setAttribute("class", to); } } } /************************** * REALISTIC BOOKS SCRIPTS * **************************/ function bookInit() { loadBook(); hideText(); showBook(); swapLinkJavascript(false); } function hideText() { var textDiv = document.getElementById("gs-document-text"); textDiv.style.visibility = "hidden"; } function showText() { var textDiv = document.getElementById("gs-document-text"); textDiv.style.visibility = "visible"; } function hideBook() { var bookDiv = document.getElementById("bookdiv"); bookDiv.style.visibility = "hidden"; bookDiv.style.height = "0px"; var bookObject = document.getElementById("bookObject"); bookObject.style.visibility = "hidden"; bookObject.style.height = "0px"; var bookEmbed = document.getElementById("bookEmbed"); bookEmbed.style.visibility = "hidden"; bookEmbed.style.height = "0px"; } function showBook() { var bookDiv = document.getElementById("bookdiv"); bookDiv.style.visibility = "visible"; bookDiv.style.height = "600px"; var bookObject = document.getElementById("bookObject"); bookObject.style.visibility = "visible"; bookObject.style.height = "600px"; var bookEmbed = document.getElementById("bookEmbed"); bookEmbed.style.visibility = "visible"; bookEmbed.style.height = "600px"; } function swapLinkJavascript(rbOn) { var option = document.getElementById("rbOption"); if(rbOn) { option.setAttribute("onclick", "hideText(); showBook(); swapLinkJavascript(false);"); } else { option.setAttribute("onclick", "hideBook(); showText(); swapLinkJavascript(true);"); } } //Helper function to create param elements function createParam(name, value) { var param = document.createElement("PARAM"); param.setAttribute("name", name); param.setAttribute("value", value); return param; } function loadBook() { var doc_url = document.URL; doc_url = doc_url.replace(/(&|\?)book=[a-z]+/gi,''); doc_url += '&book=flashxml'; var img_cover = gs.collectionMetadata.httpPath + '/index/assoc/' + gs.documentMetadata.assocfilepath + '/cover.jpg'; var flash_plug_html = "" flash_plug_html += '