// *************************************************************************** // file: sd-ec-version.js // *************************************************************************** var SdEcVersion = {}; // public global identifiers var $_EcVersion = {}; // private global identifiers // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcVersion.getBrowserName = function () { var name = $_EcVersion_BrowserDetect.browser; return name; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcVersion.getBrowserVersion = function () { var version = $_EcVersion_BrowserDetect.version; return version; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var $_EcVersion_BrowserDetect = { init: function () { this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version"; this.OS = this.searchString(this.dataOS) || "an unknown OS"; }, searchString: function (data) { for (var i=0;i //
// SirsiDynix Log: //
    // : ... attach new nodes here ... //
//
// var listNode = document.getElementById("sirsi-dynix-log-list"); if (!listNode) listNode = $_Common.createLogListNode(); if (!listNode) return; var itemNode = document.createElement("li"); var textNode = document.createTextNode(msg); itemNode.appendChild(textNode); listNode.appendChild(itemNode); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdCommon.lnk = function (label, url) { var listNode = document.getElementById("sirsi-dynix-log-list"); if (!listNode) listNode = $_Common.createLogListNode(); if (!listNode) return; var itemNode = document.createElement("li"); var anchorNode = document.createElement("a"); var labelNode = document.createTextNode(label); var textNode = document.createTextNode(url); anchorNode.setAttribute("href" , url ); anchorNode.setAttribute("target","_blank"); anchorNode.appendChild(textNode); itemNode.appendChild( labelNode); itemNode.appendChild(anchorNode); listNode.appendChild( itemNode); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_Common.createLogListNode = function () { var node = document.getElementById("sirsi-dynix-log"); if (node != null) { // use the "log" node from the page file // which might be: // // // // if so, fix the style to be visible ... var style = node.getAttribute("style"); if (style) node.style.display="block"; } else { // create a new "log" node var node = document.createElement("div"); node.id = "sirsi-dynix-log"; var elements = document.getElementsByTagName("body"); var body = ( (elements && elements.length) ? elements[0] : null ); if (!body) { var noBodyMsg = "missing '' tag in html"; alert(noBodyMsg); throw noBodyMsg; } var first = body.firstChild; if (first) { body.insertBefore(node, first); } else { body.appendChild(node); } } //
//
// SirsiDynix Log: //
    // : //
//
//
var hiBr = document.createElement ("br"); var hiHr = document.createElement ("hr"); var loBr = document.createElement ("br"); var bold = document.createElement ("b"); var text = document.createTextNode("SirsiDynix Log:"); var list = document.createElement ("ol"); var loHr = document.createElement ("hr"); list.id = "sirsi-dynix-log-list"; node.appendChild(hiBr); node.appendChild(hiHr); node.appendChild(loBr); bold.appendChild(text); node.appendChild(bold); node.appendChild(list); node.appendChild(loHr); return list; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdCommon.trim = function (text) { return text ? text.replace(/^\s+|\s+$/g,"") : null; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdCommon.setPrefix = function (prefix) { $_Common.prefix = prefix; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdCommon.prefixup = function (url) { var synRelPath = SdEcValues.getParameter("syndetics-rel-path"); var novRelPath = SdEcValues.getParameter("novelist-rel-path"); var fixedup_url = ""; if (synRelPath != "" || novRelPath != "") { fixedup_url = url; } else { fixedup_url = "/uhtbin/" + $_Common.prefix + "?" + url; } return fixedup_url; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdCommon.load_script = function (url, task) { var ajaxlet = new SdEcStats.Ajaxlet((task ? task : "UNKNOWN"), "jsf" ,(url ? url : "UNKNOWN")); SdEcStats.topOfRequestingData(ajaxlet); SdEcStats.addNote(ajaxlet, "javascript"); var script = document.createElement("script"); script.type = "text/javascript"; script.src = url; script.charset = "utf-8"; // SdCommon.lnk("loading: ", script.src); Event.observe( script, 'load', function (event) { SdEcStats.endOfRequestingData(ajaxlet); // SdEcStats.topOfProcessingData(ajaxlet); // SdEcStats.endOfProcessingData(ajaxlet); } ); var head = document.getElementsByTagName('head')[0]; head.appendChild(script); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdCommon.mapToText = function (map) { if (!map) return "no map"; var text = "{"; var name; for (name in map) { var value = map[name]; if (typeof value === 'function') continue; if (text.length > 1) text = text + ", "; text = text + name + " : " + value; } text = text + "}"; return text; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdCommon.filterArrayOfNodesByAttribute = function (array, attributeName, operator, attributeValue) { if (!operator ) operator = null; if (!attributeValue) attributeValue = null; var list = new Array(); var count = 0; var length = (array ? array.length : 0); for (var k = 0; k < length; k++) { var element = array[k]; var elementValue = element.getAttribute(attributeName); if (!elementValue) elementValue = null; if (operator == "==") { if (elementValue == attributeValue) { list[count++] = element; } } else if (operator == "!=") { if (elementValue != attributeValue) { list[count++] = element; } } else if (operator != null) { throw("unknown operator '" + operator + "'"); } else if (elementValue == undefined) { // null operator matches any attribute that EXISTS } else { list[count++] = element; } } return list; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdCommon.addLoadEvent = function (func) { try { // special case: window.onload was mangled by prototype.js // ... so do things the prototype.js way ... Event.observe(window, 'load', func); return; } catch (bogus) { // 'usual' case: prototype.js not included } // code from the book 'DOM Scripting" by Jeromy Keith // as found in various places on the internet -- just // google for 'addLoadEvent" ... if (typeof window.onload != 'function') { window.onload = func; } else { var oldonload = window.onload; window.onload = function() { oldonload(); func(); }; } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdCommon.addLoadEvent(SdEcTimer.IncDoneOnLoadEvent); // *************************************************************************** // file: sd-ec-events.js // *************************************************************************** var SdEcEvents = {}; // public global identifiers var $_EcEvents = {}; // private global identifiers $_EcEvents.eventToObserverMap = {}; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcEvents.registerEventObserver = function (event, observer) { var list = $_EcEvents.eventToObserverMap[event]; if (!list) { list = []; $_EcEvents.eventToObserverMap[event] = list; } list[list.length] = observer; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcEvents.signalEvent = function (event, args) { var list = $_EcEvents.eventToObserverMap[event]; var count = (list ? list.length : 0); for (var k = 0; k < count; k++) { var observer = list[k]; observer(args); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // *************************************************************************** // file: sd-ec-progress.js // *************************************************************************** var SdEcProgress = {}; // public global identifiers var $_EcProgress = {}; // private global identifiers $_EcProgress.done = 0; $_EcProgress.todo = 0; $_EcProgress.oldPctValue = 5; // always assume at least 5% done $_EcProgress.allLoadedEventHandlers = []; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcProgress.registerAllLoadedEventHandler = function (callback) { $_EcProgress.allLoadedEventHandlers.push(callback); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcProgress.incTodo = function (amount) { $_EcProgress.todo += (amount ? amount : 1); $_EcProgress.showPercentageDone(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcProgress.incDone = function (amount) { $_EcProgress.done += (amount ? amount : 1); if ($_EcProgress.done >= $_EcProgress.todo) { SdEcProgress.callAllLoadedEventHandlers(); } $_EcProgress.showPercentageDone(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcProgress.showPercentageDone = function () { var aboveValue = $_EcProgress.done; var belowValue = $_EcProgress.todo; var pctValue; if (belowValue == 0) { pctValue = 0; } else { pctValue = Math.floor((aboveValue * 100) / belowValue) } var oldValue = $_EcProgress.oldPctValue; if (pctValue < oldValue) pctValue = oldValue; if (pctValue > 100) pctValue = 100; $_EcProgress.oldPctValue = pctValue; for (var k = 1; k < 6; k++) { var pctNode = document.getElementById("enriched-content-completion-percentage-" + k); if (!pctNode) continue; pctNode.lastChild.nodeValue = pctValue; } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcProgress.callAllLoadedEventHandlers = function () { var handlers = $_EcProgress.allLoadedEventHandlers; var count = handlers.length; for (var k = 0; k < count; k++) { var handler = handlers[k]; handler(); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcProgress.IncDoneOnLoadEvent = function () { SdEcProgress.incDone(1); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcProgress.incTodo(1); SdCommon.addLoadEvent($_EcProgress.IncDoneOnLoadEvent); // *************************************************************************** // file: sd-ec-stats.js // *************************************************************************** var SdEcStats = {}; // public global identifiers var $_EcStats = {}; // private global identifiers $_EcStats.sequence = []; /* var ajaxlet = new SdEcStats.Ajaxlet((task ? task : "UNKNOWN"), (type ? type : "UNKNOWN") ,(url ? url : "UNKNOWN")); SdEcStats.topOfRequestingData(ajaxlet); SdEcStats.addNote(ajaxlet, "note"); SdEcStats.endOfRequestingData(ajaxlet); SdEcStats.topOfProcessingData(ajaxlet); SdEcStats.endOfProcessingData(ajaxlet); */ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcStats.Ajaxlet = function (task, type, url, note) { this.task = task; this.type = type; this.request = { enter : 0, leave : 0 }; this.process = { enter : 0, leave : 0 }; this.url = url; this.note = (note ? note : "-"); $_EcStats.sequence.push(this); // SdCommon.log("ajaxlet constructor called -- count is " + $_EcStats.sequence.length); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcStats.addNote = function (ajaxlet, note) { if(!ajaxlet) return; ajaxlet.note = note; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcStats.lastShownStatistic = 0; $_EcStats.dumpStatistics = function () { var count = $_EcStats.sequence.length; var first = $_EcStats.lastShownStatistic; if (first >= count) return; // already dumped $_EcStats.lastShownStatistic = count; var requestTotal = 0; var processTotal = 0; var maxRequestInterval = 0; var minRequestEnter = (first < count) ? $_EcStats.sequence[first].request.enter : 0; var maxRequestLeave = (first < count) ? $_EcStats.sequence[first].request.leave : 0; SdCommon.log("dump-statistics:"); for (var k = first; k < count; k++) { var ajaxlet = $_EcStats.sequence[k]; var requestEnter = ajaxlet.request.enter; var requestLeave = ajaxlet.request.leave; var processEnter = ajaxlet.process.enter; var processLeave = ajaxlet.process.leave; if (requestEnter < minRequestEnter) minRequestEnter = requestEnter; if (requestLeave > maxRequestLeave) maxRequestLeave = requestLeave; var requestInterval = (requestLeave - requestEnter); var processInterval = (processLeave - processEnter); if (requestInterval > maxRequestInterval) maxRequestInterval = requestInterval; var line = k + "]" + " " + "task: " + ajaxlet.task + "\u00A0\u00A0" + "type: " + ajaxlet.type + "\u00A0\u00A0" + "request: " + requestInterval + " ms" + "\u00A0\u00A0" + "(" + requestEnter + "-" + requestLeave + ")" + "\u00A0\u00A0" + "process: " + processInterval + " ms" + "\u00A0\u00A0" + "(" + processEnter + "-" + processLeave + ")" + "\u00A0\u00A0" + "note: " + ajaxlet.note + "\u00A0\u00A0" ; SdCommon.lnk(line, ajaxlet.url); requestTotal += requestInterval; processTotal += processInterval; } var allRequestInterval = maxRequestLeave - minRequestEnter; SdCommon.log("T] " + "request-time: between " + maxRequestInterval + " & " + allRequestInterval + " " + "ms [" + minRequestEnter + "-" + maxRequestLeave + "]" + "\u00A0\u00A0" + "(sum: " + requestTotal + "ms)\u00A0\u00A0" + "process-total: " + processTotal + " ms"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcStats.topOfRequestingData = function (ajaxlet) { if(!ajaxlet) return; var request = ajaxlet.request; request.enter = SdEcTimer.getTime(); } SdEcStats.endOfRequestingData = function (ajaxlet) { if(!ajaxlet) return; var request = ajaxlet.request; request.leave = SdEcTimer.getTime(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcStats.topOfProcessingData = function (ajaxlet) { if(!ajaxlet) return; var process = ajaxlet.process; process.enter = SdEcTimer.getTime(); } SdEcStats.endOfProcessingData = function (ajaxlet) { if(!ajaxlet) return; var process = ajaxlet.process; process.leave = SdEcTimer.getTime(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcStats.onAllLoaded = function () { var link = document.getElementById('e-lib-dump-stats-link'); if (link) return; var element = document.getElementById('e-lib-stats'); if (!element) return; var textNode = document.createTextNode("dump statistics"); var anchorNode = document.createElement("a"); anchorNode.id = "e-lib-dump-stats-link"; anchorNode.setAttribute("href", "javascript:$_EcStats.dumpStatistics()"); anchorNode.appendChild (textNode); element.appendChild(anchorNode); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcProgress.registerAllLoadedEventHandler($_EcStats.onAllLoaded); // *************************************************************************** // file: getcontent.js // *************************************************************************** function addDetailCover(elem,altText,url) { var childElem=document.createElement("img"); childElem.src=url; childElem.border="0"; childElem.alt="["+altText+"]"; elem.appendChild(childElem); } function addDetailCoverShrinkToFitHeight(elem,altText,url) { var childElem=document.createElement("img"); childElem.style.height="97%"; childElem.src=url; childElem.border="0"; childElem.alt="["+altText+"]"; elem.appendChild(childElem); } function addDetailCoverShrinkToFitWidth(elem,altText,url) { var childElem=document.createElement("img"); childElem.style.width="100%"; childElem.src=url; childElem.border="0"; childElem.alt="["+altText+"]"; elem.appendChild(childElem); } function addHitlistCover(elem,altText,url,ord) { var childElem=document.createElement("input"); childElem.type="image"; childElem.name="VIEW^" + ord; childElem.src=url; childElem.alt="["+altText+"]"; elem.appendChild(childElem); } function addHref(elem,link,text,altText) { var childElem=document.createElement("a"); childElem.href=link; childElem.alt=altText; childElem.title=altText; addTextNode(childElem,text); var childLi=document.createElement("li"); childLi.appendChild(childElem); elem.appendChild(childLi); } function addTextNode(elem,text) { var txtNode=document.createTextNode(text); elem.appendChild(txtNode); } function buildSyndeticsUrl(baseUrl,clientId,controlTriple,type) { var url = baseUrl+createParam("isbn",controlTriple.isbn+"/"+type)+createParam("client",clientId)+createParam("type","xw12")+createParam("upc",controlTriple.upc)+createParam("oclc",controlTriple.oclc); return url; } function createParam(name,value) { var param = ""; param+=name.toString(); param+="="; param+=value.toString(); param+="&"; return param; } function getDetailCover(baseUrl,clientId, isbns,upcs,oclcs, coverDivName,coverAltText) { var isbnArr = isbns.split(","); var upcArr = upcs.split(","); var oclcArr = oclcs.split(","); var controlTriple = new Array(); controlTriple.isbn = isbnArr[0]; controlTriple.upc = upcArr[0]; controlTriple.oclc = oclcArr[0]; getDetailCoverSingleControls(baseUrl,clientId, controlTriple, coverDivName,coverAltText); } function getDetailCoverSingleControls(baseUrl,clientId, controlTriple, coverDivName,coverAltText) { if (!(controlTriple.isbn==""&&controlTriple.upc==""&&controlTriple.oclc=="")) { var divNode = document.getElementById(coverDivName); if (divNode) { validateDetailCover(divNode,coverAltText,buildSyndeticsUrl(baseUrl,clientId,controlTriple,'LC.GIF'),buildSyndeticsUrl(baseUrl,clientId,controlTriple,'MC.GIF')); } } else { var divNode = document.getElementById(coverDivName); if (divNode) { divNode.style.height = "0px"; } } } function getHitCover(baseUrl,clientId, isbns,upcs,oclcs, coverDivName,coverAltText, ord) { var isbnArr = isbns.split(","); var upcArr = upcs.split(","); var oclcArr = oclcs.split(","); var controlTriple = new Array(); controlTriple.isbn = isbnArr[0]; controlTriple.upc = upcArr[0]; controlTriple.oclc = oclcArr[0]; getHitCoverSingleControls(baseUrl,clientId, controlTriple, coverDivName,coverAltText, ord); } function getHitCoverSingleControls(baseUrl,clientId, controlTriple, coverDivName,coverAltText, ord) { if (!(controlTriple.isbn==""&&controlTriple.upc==""&&controlTriple.oclc=="")) { var divNode = document.getElementById(coverDivName+ord); if (divNode) { validateImage(divNode,coverAltText,buildSyndeticsUrl(baseUrl,clientId,controlTriple,'SC.GIF'),ord); } } else { var divNode = document.getElementById(coverDivName+ord); if (divNode) { divNode.style.height = "0px"; } } } function getNovelistSimilarAuthors(ord,webcat,session,isbns,url,prof,pswd) { var isbn=isbns.split(",")[0]; // var url="http://nr-beta-eit.ebscohost.com/Services/NovelistSelect.asmx/FindSimilarAuthors?prof=demo.eit.sirsi&pwd=ebs2898&authType=profile&isbn="+isbn+"&"; // SdCommon.lnk("click similar authors: ", url); var xmlHttp=getXMLHTTPRequest(); xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==4) { var similar=document.getElementById("similar"+ord); removeChildren(similar); var responseXML = xmlHttp.responseXML; if (responseXML) { var authNodes=responseXML.getElementsByTagName("author"); for(x=0;x'+authorLabel; simAuthLink.href = "javascript:getSimilarAuthors('"+ord+"','"+webcat+"','"+session+"','"+isbns+"','"+authorUrl+"','"+titleUrl+"','"+prof+"','"+pswd+"')"; } if (useSimTitle != 0) { var simTitleLink = document.getElementById("novelist_similar_title_link"+ord); simTitleLink.innerHTML='' + altText4Icon + ''+titlesLabel ; simTitleLink.href = "javascript:getSimilarTitles('"+ord+"','"+webcat+"','"+session+"','"+isbns+"','"+authorUrl+"','"+titleUrl+"','"+prof+"','"+pswd+"')"; } } function removeChildren(node) { while (node.hasChildNodes()) { node.removeChild(node.firstChild); } } function showSimAuthOpen(ord,webcat,session,isbns,authorUrl,titleUrl,prof,pswd) { var simAuthLink = document.getElementById("novelist_similar_author_link"+ord); simAuthLink.href = "javascript:hideDivs('"+ord+"','"+webcat+"','"+session+"','"+isbns+"','"+authorUrl+"','"+titleUrl+"','"+prof+"','"+pswd+"')"; var label = SdEcValues.getTranslation("Similar Authors"); var altText4Icon = SdEcValues.getTranslation("Collapse Icon" ); var png = SdEcValues.getParameter ("up-gif" ); simAuthLink.innerHTML='' + altText4Icon + ''+label; } function showSimTitleOpen(ord,webcat,session,isbns,authorUrl,titleUrl,prof,pswd) { var simTitleLink = document.getElementById("novelist_similar_title_link"+ord); simTitleLink.href = "javascript:hideDivs('"+ord+"','"+webcat+"','"+session+"','"+isbns+"','"+authorUrl+"','"+titleUrl+"','"+prof+"','"+pswd+"')"; var label = SdEcValues.getTranslation("Similar Titles"); var altText4Icon = SdEcValues.getTranslation("Collapse Icon" ); var png = SdEcValues.getParameter ("up-gif" ); simTitleLink.innerHTML='' + altText4Icon + '' + label; } function showNoSimilar(ord) { var similar=document.getElementById("similar"+ord); removeChildren(similar); addTextNode(similar, SdEcValues.getTranslation("Similar Nothing Found")); } function validateDetailCover(elem,altText,url,urlM) { var validator = new Image(); validator.elem=elem; validator.altText=altText; validator.urlM=urlM; validator.onload=function() { //Add image if it is valid if(this.height > 1) { if((this.width/this.elem.clientWidth)>(this.height/this.elem.clientHeight)) { addDetailCoverShrinkToFitWidth(this.elem,this.altText,this.src); } else { addDetailCoverShrinkToFitHeight(this.elem,this.altText,this.src); } } else { var validatorM = new Image(); validatorM.elem = this.elem; validatorM.altText=this.altText; validatorM.onload=function() { //Add image if it is valid if(this.height > 1) { // this.elem.style.height = "200px"; addDetailCover(this.elem,this.altText,this.src); } else { this.elem.style.height = "0px"; } }; validatorM.onerror=function() {this.elem.style.height = "0px";}; validatorM.src=this.urlM; } }; validator.onerror=function() { var validatorM = new Image(); validatorM.elem = this.elem; validatorM.altText=this.altText; validatorM.onload=function() { //Add image if it is valid if(this.height > 1) { this.elem.style.height = "200px"; addDetailCover(this.elem,this.altText,this.src); } else { this.elem.style.height = "0px"; } }; validatorM.onerror=function() {this.elem.style.height = "0px";}; validatorM.src=this.urlM; }; validator.src=url; } function validateImage(elem,altText,url,ord) { var ajaxlet = new SdEcStats.Ajaxlet("load-image", "img", url); SdEcStats.topOfRequestingData(ajaxlet); SdEcStats.addNote(ajaxlet, "john"); var validator = new Image(); validator.elem=elem; validator.altText=altText; validator.ord=ord; validator.onload=function() { SdEcStats.endOfRequestingData(ajaxlet); SdEcStats.topOfProcessingData(ajaxlet); //Add image if it is valid if(this.height > 1) { addHitlistCover(this.elem,this.altText,this.src,this.ord); } else { this.elem.style.height = "0px"; } SdEcStats.endOfProcessingData(ajaxlet); }; validator.onerror=function() { SdEcStats.endOfRequestingData(ajaxlet); SdEcStats.topOfProcessingData(ajaxlet); this.elem.style.height = "0px"; SdEcStats.endOfProcessingData(ajaxlet); }; validator.src=url; } // *************************************************************************** // file: sd-ec-xdoc-loader.js // *************************************************************************** var SdEcXdocLoader = {}; // public global identifiers var $_EcXdocLoader = {}; // private global identifiers $_EcXdocLoader.cache = {}; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcXdocLoader.fetchXMLDoc = function (xsl) { if (xsl && xsl.length > 0 && xsl.charAt(0) != '/') xsl = "/" + xsl; var xslTxt; try { xslTxt = SdXslData.getXslAsHardCodedString(xsl); } catch (e) { xslTxt = null; } var xslDoc; if (xslTxt == null) { xslDoc = SdEcXdocLoader.LoadXSLDocFromFile(xsl,"xml-content"); xslTxt = $_EcXdocLoader.XmlDocumentToString(xslDoc); xslTxt = $_EcXdocLoader.translate(xslTxt); xslDoc = SdEcXdocLoader.loadXMLDocFromText(xslTxt,"xml-content",xsl); } else { xslDoc = SdEcXdocLoader.loadXMLDocFromText(xslTxt,"xml-content",xsl); } return xslDoc; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcXdocLoader.loadXMLDocFromText = function (fname, task, url) { var ajaxlet = new SdEcStats.Ajaxlet((task ? task : "UNKNOWN"), "xsl", (url ? url : "UNKNOWN")); SdEcStats.topOfRequestingData(ajaxlet); SdEcStats.addNote(ajaxlet, "text"); SdEcStats.endOfRequestingData(ajaxlet); SdEcStats.topOfProcessingData(ajaxlet); var xmlDoc = "unitialized"; if (window.ActiveXObject) { xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.loadXML(fname); } else if (DOMParser) { var parser = new DOMParser(); xmlDoc=parser.parseFromString(fname,"text/xml"); } else { alert('Your browser cannot handle this script'); } SdEcStats.endOfProcessingData(ajaxlet); return(xmlDoc); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcXdocLoader.LoadXSLDocFromFile = function (xslFileName, task) { var xslDoc = ($_EcXdocLoader.cache ? $_EcXdocLoader.cache[xslFileName] : null); if (!xslDoc) { var ajaxlet = new SdEcStats.Ajaxlet((task ? task : "load-soft-xsl"), "xsl", xslFileName); SdEcStats.topOfRequestingData(ajaxlet); SdEcStats.addNote(ajaxlet, "ajax"); if (window.ActiveXObject) { xslDoc = new ActiveXObject("Microsoft.XMLDOM"); } else if (document.implementation && document.implementation.createDocument) { xslDoc = document.implementation.createDocument("","",null); } else { alert('Your browser cannot handle this script'); } try { xslDoc.async = false; xslDoc.load(xslFileName); } catch(e) {//unable to load, for Safari new Ajax.Request(xslFileName, { method: "get", asynchronous: false, onSuccess: function(resp, jsonObj) { xslDoc = resp.responseXML; } }); } SdEcStats.endOfRequestingData(ajaxlet); SdEcStats.topOfProcessingData(ajaxlet); SdEcStats.endOfProcessingData(ajaxlet); if ($_EcXdocLoader.cache) $_EcXdocLoader.cache[xslFileName] = xslDoc; } return xslDoc; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcXdocLoader.XmlDocumentToString = function (xmlObject) { // from http://www.hiteshagrawal.com/javascript/convert-xml-document-to-string-in-javascript var text; if (window.ActiveXObject) { text = xmlObject.xml; } else if (document.implementation && document.implementation.createDocument) { text = (new XMLSerializer()).serializeToString(xmlObject); } else { text = null; } return text; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcXdocLoader.translate = function (text) { while (true) { var indexOfLeftBrace = text.indexOf('{'); if (indexOfLeftBrace < 0) break; var indexOfRightBrace = text.indexOf('}', indexOfLeftBrace); if (indexOfRightBrace < 0) break; var prefix = text.substring(0, indexOfLeftBrace ); var middle = text.substring( indexOfLeftBrace+1, indexOfRightBrace ); var suffix = text.substring( indexOfRightBrace+1); var replacement = SdEcValues.getTranslation(middle); text = prefix + replacement + suffix; } return text; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // *************************************************************************** // file: sd-ec-ajax-loader.js // *************************************************************************** var SdEcAjaxLoader = {}; // public global identifiers var $_EcAjaxLoader = {}; // private global identifiers $_EcAjaxLoader.cache = {}; // do not reload responses from same url $_EcAjaxLoader.ddt = false; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcAjaxLoader.ajaxRequest = function (url, onloadListener, onloadListenerArgs, task, type, note) { var ajaxlet = (task ? new SdEcStats.Ajaxlet(task, type, url) : null); SdEcStats.topOfRequestingData(ajaxlet); SdEcTimer.updateExternalTimer(); // special case: cache -- allows bypassing actual ajax call in subsequence accesses if ($_EcAjaxLoader.cache) { var xmlHttp = $_EcAjaxLoader.cache[url]; if (xmlHttp) { SdEcStats.addNote(ajaxlet, "cached"); SdEcStats.endOfRequestingData(ajaxlet); SdEcStats.topOfProcessingData(ajaxlet); onloadListener(xmlHttp, onloadListenerArgs); SdEcStats.endOfProcessingData(ajaxlet); SdEcTimer.updateExternalTimer(); return } var args = { "url" : url, "listenerFunc" : onloadListener, "listenerArgs" : onloadListenerArgs }; onloadListener = $_EcAjaxLoader.ajaxResponseHandlerForCachedResponses; onloadListenerArgs = args; } // normal case: do actual ajax call - to get data via http var xmlHttp = null; if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { xmlHttp= new XMLHttpRequest(); } else { SdEcStats.endOfRequestingData(ajaxlet); alert("Error getting http request -- browser does not support http"); return; } SdEcProgress.incTodo(1); xmlHttp.onreadystatechange=function() { if (xmlHttp.readyState != 4) return; if ($_EcAjaxLoader.ddt) SdCommon.lnk("loading response: ", url); SdEcStats.addNote(ajaxlet, (note ? note : "ajax")); SdEcStats.endOfRequestingData(ajaxlet); SdEcStats.topOfProcessingData(ajaxlet); // SdEcTimer.idle((ajaxlet.request.leave - ajaxlet.request.enter) * 3 / 2); onloadListener(xmlHttp, onloadListenerArgs); SdEcStats.endOfProcessingData(ajaxlet); SdEcTimer.updateExternalTimer(); SdEcProgress.incDone(1); } if ($_EcAjaxLoader.ddt) SdCommon.lnk("sending request : ", url); xmlHttp.open("GET", url, true); SdEcStats.topOfRequestingData(ajaxlet); xmlHttp.send(null); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcAjaxLoader.ajaxResponseHandlerForCachedResponses = function (xmlHttp, args) { var url = args["url"]; var onloadListener = args["listenerFunc"]; var onloadListenerArgs = args["listenerArgs"]; if ($_EcAjaxLoader.cache) $_EcAjaxLoader.cache[url] = xmlHttp; onloadListener(xmlHttp, onloadListenerArgs); SdEcTimer.updateExternalTimer(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // *************************************************************************** // file: sd-ec-response-handler.js // *************************************************************************** var SdEcResponseHandler = {}; // public global identifiers var $_EcResponseHandler = {}; // private global identifiers // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcResponseHandler.ajaxResponseHandlerForEnrichedContent = function (xmlHttp, args) { var response = xmlHttp.responseText; if (response == null || response.length < 1) return; var xslDoc = args[ "xsl-doc"]; var elementId = args[ "element-id"]; var callback = args[ "call-back"]; var xmlDoc = xmlHttp.responseXML; var xsl = xslDoc; $_EcResponseHandler.renderXmlViaXslIntoDivName(xmlHttp.responseXML, xslDoc, elementId); if (callback) callback(args); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcResponseHandler.renderXmlViaXslIntoDivName = function (xmlDoc, xsl, elementId) { if (window.ActiveXObject) { if (xsl == null) { // Element.insert(document.getElementById(elementId),'xsl stylesheet is null'); document.getElementById(elementId).innerHTML= 'xsl stylesheet is null'; } else { var ex=xmlDoc.transformNode(xsl); Element.insert(document.getElementById(elementId),ex); return; // Element.insert(document.getElementById(elementId),ex); document.getElementById(elementId).innerHTML= ex; /* var element = document.getElementById(elementId); var newNode = document.createElement("span"); element.appendChild(newNode); var ex=xmlDoc.transformNode(xsl); newNode.innerHTML= ex; */ } } else if (document.implementation && document.implementation.createDocument) { try { var xsltProcessor=new XSLTProcessor(); xsltProcessor.importStylesheet(xsl); var resultDocument = xsltProcessor.transformToFragment(xmlDoc,document); document.getElementById(elementId).appendChild(resultDocument); } catch (err) { // ignore it ... } } // renderColumns(); // apparently - no longer needed } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // *************************************************************************** // file: sd-xml-data.js // *************************************************************************** var SdXmlData = {}; // public global identifiers var $_XmlData = {}; // private global identifiers // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdXmlData.fetchXMLDoc = function (xsl) { if (xsl && xsl.length > 0 && xsl.charAt(0) != '/') xsl = "/" + xsl; var xslTxt; try { xslTxt = SdXmlData.getXmlAsHardCodedString(xsl); } catch (e) { xslTxt = null; } return xslTxt; } SdXmlData.getXmlAsHardCodedString = function (xmlFileName) { if (xmlFileName && xmlFileName.indexOf("/Js/") != 0) { xmlFileName = "/Js" + xmlFileName; } return $_XmlData[xmlFileName]; } // =========================================================================== // file: sd-detail-chili.xml // =========================================================================== $_XmlData['/Js/sd-detail-chili.xml'] = ' ' + '' + ' ' + ' ' + ' chilifresh-reviews' + ' ' + ''; // =========================================================================== // file: sd-detail-item-tab.xml // =========================================================================== $_XmlData['/Js/sd-detail-item-tab.xml'] = ' ' + '' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' syndetics-summary' + ' novelist-similar-authors' + ' novelist-similar-titles' + ' ' + ''; // =========================================================================== // file: sd-detail-rating.xml // =========================================================================== $_XmlData['/Js/sd-detail-rating.xml'] = ' ' + '' + ' ' + ' ' + ' chilifresh-ratings' + ' ' + ''; // =========================================================================== // file: sd-enriched-content.xml // =========================================================================== $_XmlData['/Js/sd-enriched-content.xml'] = ' ' + '' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' syndetics-summary ' + ' syndetics-library-journal-review ' + ' syndetics-publishers-weekly-review ' + ' syndetics-school-library-journal-review' + ' syndetics-booklist-review ' + ' syndetics-choice-review ' + ' syndetics-author-notes ' + ' syndetics-toc ' + ' ' + ''; // =========================================================================== // file: sd-hit-list-content.xml // =========================================================================== $_XmlData['/Js/sd-hit-list-content.xml'] = ' ' + '' + ' ' + ' ' + ' ' + ' chilifresh-reviews' + ' ' + ''; // =========================================================================== // file: sd-hit-list-covers.xml // =========================================================================== $_XmlData['/Js/sd-hit-list-covers.xml'] = ' ' + '' + ' ' + ' ' + ' ' + ' ' + ' syndetics-cover' + ' ' + ''; // =========================================================================== // file: sd-hit-list-links.xml // =========================================================================== $_XmlData['/Js/sd-hit-list-links.xml'] = '' + '' + ' ' + ' ' + ' ' + ' ' + ' ' + ' novelist-similar-authors' + ' novelist-similar-titles' + ' ' + ''; // =========================================================================== // file: sd-hit-list-rating.xml // =========================================================================== $_XmlData['/Js/sd-hit-list-rating.xml'] = ' ' + '' + ' ' + ' ' + ' ' + ' chilifresh-ratings' + ' ' + ''; // =========================================================================== // file: sd-hit-list-teaser.xml // =========================================================================== $_XmlData['/Js/sd-hit-list-teaser.xml'] = ' ' + '' + ' ' + ' ' + ' ' + ' ' + ' syndetics-summary' + ' ' + ''; // =========================================================================== // file: sd-related-content.xml // =========================================================================== $_XmlData['/Js/sd-related-content.xml'] = ' ' + '' + ' ' + ' ' + ' ' + ' ' + ' related-novelist-content' + ' ' + ''; // *************************************************************************** // file: sd-xsl-data.js // *************************************************************************** var SdXslData = {}; // public global identifiers var $_XslData = {}; // private global identifiers // --------------------------------------------------------------------------- SdXslData.getXslAsHardCodedString = function (xslFileName) { if (xslFileName && xslFileName.indexOf("/Js/") != 0) { xslFileName = "/Js" + xslFileName; } // SdCommon.lnk("unable to load hardcoded: ", xslFileName); var xslTxt = $_XslData[xslFileName]; if (xslTxt != null) { xslTxt = $_EcXdocLoader.translate(xslTxt); } return xslTxt; } // --------------------------------------------------------------------------- // Fast Loading XSL data // --------------------------------------------------------------------------- $_XslData['/Js/novelist-similar-authors.xsl'] = '' + '' + '' + ' ' + '
' + ' Similar Authors' + '
' + '
    ' + ' ' + '
  1. ' + '
    ' + '
' + '
' + '
' + '
'; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_XslData['/Js/novelist-similar-titles.xsl'] = '' + '' + '' + '' + '
' + ' Similar Titles' + '
' + '
' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + '
' + ' ' + ' ' + ' ' + '
' + '
' + '
' + '
' + '
'; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_XslData['/Js/sd-hit-list-summary.xsl'] = '' + '' + '' + '' + ' ' + '
' + ' ' + ' ' + ' ' + ' ...' + ' ' + ' ' + '
' + '
' + '
' + '
'; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_XslData['/Js/sd-novelist-article.xsl'] = '' + '' + '' + ' ' + ' ' + ' ' + '' + ''; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_XslData['/Js/sd-related-content.xsl'] = '' + '' + '' + ' ' + ' ' + ' ' + '' + ''; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_XslData['/Js/sd-show-all-content.xsl'] = '' + '' + '' + ' ' + ' ' + ' ' + '' + ''; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_XslData['/Js/syndetics-author-notes.xsl'] = '' + '' + '' + ' ' + '
' + ' {Author Notes}' + '
' + ' ' + '
' + ' ' + '
' + '
' + ' Distributed by Syndetic Solutions, Inc.' + '
' + '
' + '
'; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_XslData['/Js/syndetics-booklist-review.xsl'] = '' + '' + '' + ' ' + '
' + ' {Booklist Review}' + '
' + ' ' + '
' + ' ' + ' Distributed by Syndetic Solutions, Inc.' + '
' + '
' + '
' + '
' + '
'; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_XslData['/Js/syndetics-choice-review.xsl'] = '' + '' + '' + ' ' + '
' + ' {CHOICE Review}' + '
' + ' ' + '
' + ' ' + '
' + '
' + '
' + '
' + '
'; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_XslData['/Js/syndetics-item-summary.xsl'] = '' + '' + '' + '' + ' ' + '
' + ' ' + ' ' + ' ' + ' ... ({to read more see "A Look Inside"})' + ' ' + ' ' + '
' + '
' + '
' + '
'; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_XslData['/Js/syndetics-library-journal-review.xsl'] = '' + '' + '' + ' ' + '
' + ' {Library Journal Review}' + '
' + ' ' + '
' + ' ' + '
' + '
' + '
' + '
' + '
'; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_XslData['/Js/syndetics-publishers-weekly-review.xsl'] = '' + '' + '' + ' ' + '
' + ' {Publishers Weekly Review}' + '
' + ' ' + '
' + ' ' + '
' + '
' + '
' + '
' + '
' + ''; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_XslData['/Js/syndetics-school-library-journal-review.xsl'] = '' + '' + '' + ' ' + '
' + ' {School Library Journal Review}' + '
' + ' ' + '
' + ' ' + '
' + '
' + '
' + '
' + '
'; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_XslData['/Js/syndetics-summary.xsl'] = '' + '' + '' + ' ' + '
' + ' {Summary}' + '
' + ' ' + '
' + ' ' + '
' + '
' + ' Distributed by Syndetic Solutions, Inc.' + '
' + '
' + '
'; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_XslData['/Js/syndetics-toc.xsl'] = '' + '' + '' + ' ' + '
' + ' {Table of Contents}' + '
' + '
' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + '
' + ' ' + ' ' + ' ' + '
' + ' Distributed by Syndetic Solutions, Inc.' + '
' + '
' + '
' + '
'; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_XslData['/Js/tree.xsl'] = '' + '' + '' + ' Feature Articles ' + ' What We\'re Reading ' + ' ~' + '

' + ' center' + ' display:block' + ' ' + ' ' + ' color:#3F5FFF;' + ' {Click a title to expand (see) an article - Click the title again to contract (hide) the article}' + ' ' + ' ' + '

' + '' + '
' + ' {Author Read-alikes}' + '
' + '
' + '
    ' + ' margin-left: 5px; padding-left: 5px;' + ' ' + ' ' + '
  • ' + ' I' + ' list-style-type: none;' + '
    ' + ' V' + ' sd-tree-node' + ' ' + ' T' + ' color:#3F5FFF; cursor:hand; cursor:pointer;' + ' SdEcTree.toggle( ) ' + ' + ' + ' ' + ' ' + ' A' + ' text-decoration: none; color:#3F5FFF; cursor:hand; cursor:pointer;' + ' this.style.textDecoration="underline"' + ' this.style.textDecoration="none"' + ' SdEcTree.toggle( ) ' + ' ' + ' ' + '
    ' + ' W' + ' display: none' + ' ' + '
    ' + '
    ' + ' C' + '
    ' + '
    ' + '
  • ' + '
    ' + '
    ' + '
' + '
' + '
' + '' + '
' + ' {Recommended Reads}' + '
' + '
' + '
    ' + ' margin-left: 5px; padding-left: 5px;' + ' ' + ' ' + '
  • ' + ' I' + ' list-style-type: none;' + '
    ' + ' V' + ' sd-tree-node' + ' ' + ' T' + ' color:#3F5FFF; cursor:hand; cursor:pointer;' + ' SdEcTree.toggle( ) ' + ' + ' + ' ' + ' ' + ' A' + ' text-decoration: none; color:#3F5FFF; cursor:hand; cursor:pointer;' + ' this.style.textDecoration="underline"' + ' this.style.textDecoration="none"' + ' SdEcTree.toggle( ) ' + ' ' + ' ' + '
    ' + ' W' + ' display: none' + ' ' + '
    ' + '
    ' + ' C' + '
    ' + '
    ' + '
  • ' + '
    ' + '
    ' + '
' + '
' + '
' + '' + '
' + ' {Feature Articles}' + '
' + '
' + '
    ' + ' margin-left: 5px; padding-left: 5px;' + ' ' + ' ' + '
  • ' + ' I' + ' list-style-type: none;' + '
    ' + ' V' + ' sd-tree-node' + ' ' + ' T' + ' color:#3F5FFF; cursor:hand; cursor:pointer;' + ' SdEcTree.toggle( ) ' + ' + ' + ' ' + ' ' + ' A' + ' text-decoration: none; color:#3F5FFF; cursor:hand; cursor:pointer;' + ' this.style.textDecoration="underline"' + ' this.style.textDecoration="none"' + ' SdEcTree.toggle( ) ' + ' ' + ' ' + '' + '
    ' + ' W' + ' display: none' + ' ' + '
    ' + '
    ' + ' C' + '
    ' + '
    ' + '
  • ' + '
    ' + '
    ' + '
' + '
' + '
' + '' + '
' + ' {Curricular Connections}' + '
' + '
' + '
    ' + ' margin-left: 5px; padding-left: 5px;' + ' ' + ' ' + '
  • ' + ' I' + ' list-style-type: none;' + '
    ' + ' V' + ' sd-tree-node' + ' ' + ' T' + ' color:#3F5FFF; cursor:hand; cursor:pointer;' + ' SdEcTree.toggle( ) ' + ' + ' + ' ' + ' ' + ' A' + ' text-decoration: none; color:#3F5FFF; cursor:hand; cursor:pointer;' + ' this.style.textDecoration="underline"' + ' this.style.textDecoration="none"' + ' SdEcTree.toggle( ) ' + ' ' + ' ' + '
    ' + ' W' + ' display: none' + ' ' + '
    ' + '
    ' + ' C' + '
    ' + '
    ' + '
  • ' + '
    ' + '
    ' + '
' + '
' + '
' + '' + '
' + ' {Author Biographies}' + '
' + '
' + '
    ' + ' margin-left: 5px; padding-left: 5px;' + ' ' + ' ' + '
  • ' + ' I' + ' list-style-type: none;' + '
    ' + ' V' + ' sd-tree-node' + ' ' + ' T' + ' color:#3F5FFF; cursor:hand; cursor:pointer;' + ' SdEcTree.toggle( ) ' + ' + ' + ' ' + ' ' + ' A' + ' text-decoration: none; color:#3F5FFF; cursor:hand; cursor:pointer;' + ' this.style.textDecoration="underline"' + ' this.style.textDecoration="none"' + ' SdEcTree.toggle( ) ' + ' ' + ' ' + '
    ' + ' W' + ' display: none' + ' ' + '
    ' + '
    ' + ' C' + '
    ' + '
    ' + '
  • ' + '
    ' + '
    ' + '
' + '
' + '
' + '' + '
' + ' {What We\'re Reading}' + '
' + '
' + '
    ' + ' margin-left: 5px; padding-left: 5px;' + ' ' + ' ' + '
  • ' + ' I' + ' list-style-type: none;' + '
    ' + ' V' + ' sd-tree-node' + ' ' + ' T' + ' color:#3F5FFF; cursor:hand; cursor:pointer;' + ' SdEcTree.toggle( ) ' + ' + ' + ' ' + ' ' + ' A' + ' text-decoration: none; color:#3F5FFF; cursor:hand; cursor:pointer;' + ' this.style.textDecoration="underline"' + ' this.style.textDecoration="none"' + ' SdEcTree.toggle( ) ' + ' ' + ' ' + '
    ' + ' W' + ' display: none' + ' ' + '
    ' + '
    ' + ' C' + '
    ' + '
    ' + '
  • ' + '
    ' + '
    ' + '
' + '
' + '
' + '' + '
' + ' {Award Winners}' + '
' + '
' + '
    ' + ' margin-left: 5px; padding-left: 5px;' + ' ' + ' ' + '
  • ' + ' I' + ' list-style-type: none;' + '
    ' + ' V' + ' sd-tree-node' + ' ' + ' T' + ' color:#3F5FFF; cursor:hand; cursor:pointer;' + ' SdEcTree.toggle( ) ' + ' + ' + ' ' + ' ' + ' A' + ' text-decoration: none; color:#3F5FFF; cursor:hand; cursor:pointer;' + ' this.style.textDecoration="underline"' + ' this.style.textDecoration="none"' + ' SdEcTree.toggle( ) ' + ' ' + ' ' + '
    ' + ' W' + ' display: none' + ' ' + '
    ' + '
    ' + ' C' + '
    ' + '
    ' + '
  • ' + '
    ' + '
    ' + '
' + '
' + '
' + '' + '
' + ' {Other Articles}' + '
' + '
' + '
    ' + ' margin-left: 5px; padding-left: 5px;' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + '
  • ' + ' I' + ' list-style-type: none;' + '
    ' + ' V' + ' sd-tree-node' + ' ' + ' T' + ' color:#3F5FFF; cursor:hand; cursor:pointer;' + ' SdEcTree.toggle( ) ' + ' + ' + ' ' + ' ' + ' A' + ' text-decoration: none; color:#3F5FFF; cursor:hand; cursor:pointer;' + ' this.style.textDecoration="underline"' + ' this.style.textDecoration="none"' + ' SdEcTree.toggle( ) ' + ' - ' + ' ' + '
    ' + ' W' + ' display: none' + ' ' + '
    ' + '
    ' + ' C' + '
    ' + '
    ' + '
  • ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
' + '
' + '
' + '
' + '
'; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // *************************************************************************** // file: sd-ec-values.js // *************************************************************************** var SdEcValues = {}; // public global identifiers var $_EcValues = {}; // private global identifiers $_EcValues.parameter_cache = {}; $_EcValues.variables_cache = {}; $_EcValues.translations = {}; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcValues.getField = function (symbol, context, empty) { var definition = context["definition"]; if (!definition) SdCommon.error("no definition in context: " + SdCommon.mapToText(context)); var field = definition[symbol]; return field; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcValues.setVariable = function (name, value) { if (typeof value === 'function') throw "cannot set variable '" + name + "' as a function with value '" + value + "'"; $_EcValues.variables_cache[name] = value; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcValues.getVariables = function () { var map = {}; for (var name in $_EcValues.variables_cache) { var value = $_EcValues.variables_cache[name]; if (typeof value === 'function') continue; map[name] = value; } return map; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcValues.setParameter = function (name, value) { var check = $_EcValues.parameter_cache[name]; // SdCommon.log( "write parameter '" + name + "' with '" + value + "' (was: '" + check + "')" ); if (typeof value === 'function') throw "cannot set parameter '" + name + "' as a function with value '" + value + "'"; if (check) throw "can not overwrite parameter '" + name + "' with '" + value + "' (was: '" + check + "')"; $_EcValues.parameter_cache[name] = value; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcValues.getParameter = function (name) { var value = $_EcValues.parameter_cache[name]; return value; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcValues.getParameters = function (document) { var map = $_EcValues.getVariables(); for (var name in $_EcValues.parameter_cache) { var value = $_EcValues.parameter_cache[name]; if (typeof value === 'function') continue; map[name] = value; } return map; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcValues.getTranslation = function (original) { var translation = $_EcValues.translations[original]; if ( translation && translation.charAt(0) == '$' ) translation = null; if (!translation) translation = "(" + original + ")"; return translation; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcValues.setTranslation = function (original, translation) { $_EcValues.translations[original] = translation; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcValues.getValue = function (symbol, context) { if (context["jason-type"] != "context") SdCommon.error("invalid context"); var definition = context["definition"]; var properties = context["properties"]; var parameters = context["parameters"]; var value = definition[symbol]; if (!value) value = properties[symbol]; if (!value) value = parameters[symbol]; if (!value) value = '' ; return value; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcValues.populate = function (text, context) { while (true) { var indexOfLeftBrace = text.indexOf('{'); if (indexOfLeftBrace < 0) break; var indexOfRightBrace = text.indexOf('}', indexOfLeftBrace); if (indexOfRightBrace < 0) break; var prefix = text.substring(0, indexOfLeftBrace ); var middle = text.substring( indexOfLeftBrace+1, indexOfRightBrace ); var suffix = text.substring( indexOfRightBrace+1); var replacement = $_EcValues.getValue(middle, context); text = prefix + replacement + suffix; } return text; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // *************************************************************************** // file: sd-ec-conditions.js // *************************************************************************** var SdEcConditions = {}; // public global identifiers var $_EcConditions = {}; // private global identifiers // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcConditions.evaluate = function (text) { var value; try { var tokens = text.split(" "); var buffer = { "tokens" : tokens, "pos" : 0 }; value = $_EcConditions.expression( buffer ); } catch (message) { SdCommon.error(message); value = false; } return value; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcConditions.expression = function ( buffer ) { var left = $_EcConditions.term ( buffer ); var op = $_EcConditions.getToken( buffer ); var value = null; while(true) { if (op == "and") { var right = $_EcConditions.term( buffer ); value = (left && right); } else if (op == "or") { var right = $_EcConditions.term( buffer ); value = (left || right); } else { $_EcConditions.backUp( buffer ); value = left; break; } op = $_EcConditions.getToken( buffer ); left = value; } return value; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcConditions.term = function ( buffer ) { var left = $_EcConditions.factor ( buffer ); var op = $_EcConditions.getToken( buffer ); if (op == "is") { var right = $_EcConditions.factor( buffer ); if (right != 'empty') throw "operator 'is' must be followed by 'empty'"; return (left == ""); } if (op == "not") { var right = $_EcConditions.factor( buffer ); if (right != 'empty') throw "operator 'not' must be followed by 'empty'"; return (left != ""); } var value; if (op == "eq") { var right = $_EcConditions.factor( buffer ); value = (left == right); } else if (op == "ne") { var right = $_EcConditions.factor( buffer ); value = (left != right); } else if (op == "gt") { var right = $_EcConditions.factor( buffer ); value = (left > right); } else if (op == "lt") { var right = $_EcConditions.factor( buffer ); value = (left < right); } else if (op == "ge") { var right = $_EcConditions.factor( buffer ); value = (left >= right); } else if (op == "le") { var right = $_EcConditions.factor( buffer ); value = (left <= right); } else { $_EcConditions.backUp( buffer ); return left; } if (left == "") value = false; if (right == "") value = false; return value; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcConditions.factor = function ( buffer ) { var value = null; var token = $_EcConditions.getToken( buffer ); if (token != "(") { value = token; } else { value = $_EcConditions.expression( buffer ); token = $_EcConditions.getToken ( buffer ); if (token != ")") throw "mismatched parenthesis"; } return value; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcConditions.getToken = function ( buffer ) { var tokens = buffer["tokens"]; var pos = buffer["pos" ]; var len = tokens.length; var token = (pos < len ? tokens[pos] : null); buffer["pos"] = (pos + 1); return token; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcConditions.backUp = function ( buffer ) { var pos = buffer["pos" ]; buffer["pos"] = (pos-1); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // *************************************************************************** // file: sd-ec-region-def.js // *************************************************************************** var SdEcRegionDef = {}; // public global identifiers var $_EcRegionDef = {}; // private global identifiers // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcRegionDef.extractRegionDefinitionFromXmlDom = function (xmlDom) { var properties = $_EcRegionDef.extractDOMsProperties(xmlDom); var contentDefMap = $_EcRegionDef.extractContentDefMap (xmlDom); var region = $_EcRegionDef.extractDOMsRegion (xmlDom); var regionDefinition = { "jason-type" : "region-definition", "properties" : properties, // array of name-value pairs "content-def-map" : contentDefMap, // map ids to attribute maps "region" : region // array of content-ref strings } return regionDefinition; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcRegionDef.extractDOMsProperties = function (xmlDom) { // sample portion of an "enriched-content-defintion.xml" file: // // // // // var list = []; var properties = (xmlDom ? xmlDom.getElementsByTagName("property") : []); var count = (properties ? properties.length : 0); for (var k = 0; k < count; k++) { var property = properties[k]; var id = property.getAttribute( "id"); var value = property.getAttribute("value"); var pair = { "name" : id, "value" : value}; list[list.length] = pair; } return list; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcRegionDef.extractContentDefMap = function (xmlDom) { var iMap = {}; var defs = ( xmlDom ? xmlDom.getElementsByTagName("content-def") : [] ); var count = (defs ? defs.length : 0); for (var k = 0; k < count; k++) { var def = defs[k]; var id = def.getAttribute("id"); var aMap = $_EcRegionDef.extractAttributesFromContentDefNode(def); iMap[id] = aMap; } return iMap; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcRegionDef.extractAttributesFromContentDefNode = function (contentDefNode) { var map = {}; var list = contentDefNode.attributes; var count = (list ? list.length : 0); for (var k = 0; k < count; k++) { var node = list[k]; var name = node.nodeName ; var value = node.nodeValue; map[name] = value; } return map; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcRegionDef.extractDOMsRegion = function (xmlDom) { var list = []; var regions = ( xmlDom ? xmlDom.getElementsByTagName("region") : [] ); var count = (regions ? regions.length : 0); if (count < 1) SdCommon.error( "missing region" ); if (count > 1) SdCommon.error("too many regions"); var region = (regions ? regions[0] : null); var refs = (region ? region.getElementsByTagName("content-ref") : null); var size = (refs ? refs.length : 0); for (var k = 0; k < size; k++) { var refNode = refs[k]; var txtNode = refNode.lastChild; var refText = txtNode.nodeValue; var refId = SdCommon.trim(refText); list[list.length] = refId; } return list; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // *************************************************************************** // file: sd-ec-specifics.js // *************************************************************************** var SdEcSpecifics = {}; // public global identifiers var $_EcSpecifics = {}; // private global identifiers $_EcSpecifics.tagIdToSpecifics = {}; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcSpecifics.setSpecific = function (tagId, specificId, specificValue) { var specifics = $_EcSpecifics.tagIdToSpecifics[tagId]; if (!specifics) { specifics = {}; $_EcSpecifics.tagIdToSpecifics[tagId] = specifics; } // var previousValue = specifics[specificId]; // if (previousValue) SdCommon.error("specific value (" + specificId + " of " + tagId + ") previously set" // + " (old vs new is '" + previousValue + "' vs '" + specificValue + "')"); specifics[specificId] = specificValue; // SdCommon.log(tagId + "." + specificId + " <-- '" + specificValue + "'"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcSpecifics.getSpecific = function (tagId, specificId, debug) { var specifics = $_EcSpecifics.tagIdToSpecifics[tagId]; if (!specifics) SdCommon.error("unknown tag-id '" + tagId + "'"); var specificValue = specifics[specificId]; if (typeof specificValue === 'undefined') SdCommon.error("specific value (" + specificId + " of " + tagId + ") not previously set"); if (debug) SdCommon.log(tagId + "." + specificId + " --> '" + specificValue + "'"); return specificValue; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // *************************************************************************** // file: sd-ec-engine.js // *************************************************************************** var SdEcEngine = {}; // public global identifiers var $_EcEngine = {}; // private global identifiers $_EcEngine.ddt = false; $_EcEngine.typeToHandlerMap = {}; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcEngine.registerTypeHandler = function (type, handler) { $_EcEngine.typeToHandlerMap[type] = handler; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcEngine.processContentDefinitionXmlFile = function (xmlDom, contentRegionId, parameters, ref) { var regionDefinition = SdEcRegionDef.extractRegionDefinitionFromXmlDom(xmlDom); var showContentRegions = parameters["show-content-regions"]; if (showContentRegions == "1" || showContentRegions == "populated") { var populate = (showContentRegions == "populated"); var label = (populate ? contentRegionId + ": " : contentRegionId); var eNode = document.getElementById(contentRegionId); var demo = eNode.getAttribute("demo"); if (!demo) demo = "div"; // "span" looks better on the hit-list page; var vNode = document.createElement(demo); vNode.id = eNode.id; eNode.id = null; eNode.appendChild(vNode); vNode.style.border="1px solid black"; var style = vNode.style; style.backgroundColor = "#55FFFF"; style.padding="0px"; var tNode = document.createTextNode(label); vNode.appendChild(tNode); $_EcEngine.showContentRegionsDefinedInContentDefinitionXmlFile(xmlDom, contentRegionId, parameters, label); if (!populate) return; } $_EcEngine.doProcessContentDefinitionXmlFile(regionDefinition, xmlDom, contentRegionId, parameters, ref); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcEngine.doProcessContentDefinitionXmlFile = function (regionDefinition, xmlDom, contentRegionId, parameters, ref) { if ($_EcEngine.ddt) SdCommon.log("populating '" + contentRegionId + "' [" + "display" + "]"); if (regionDefinition ["jason-type"] != "region-definition") SdCommon.error("invalid region-definition"); var idToContentDefMap = regionDefinition["content-def-map"]; var properties = $_EcEngine.getProperties(regionDefinition["properties"]); var refs = ref ? [ref] : regionDefinition["region"]; var size = (refs ? refs.length : 0); for (var k = 0; k < size; k++) { var refId = refs[k]; var def = idToContentDefMap[refId]; //SdCommon.log("ref-id '" + refId + "' -> " + SdCommon.mapToText(def)); if (!def) continue; // put spans into page file content region now // so they stay in the right order when they are // populated asynchronously ... var subordinateId = contentRegionId; if (size > 1) { subordinateId = contentRegionId + "-sub-" + k; var subordinateNode = document.createElement("span"); subordinateNode.id = subordinateId; var regionNode = document.getElementById(contentRegionId); regionNode.appendChild(subordinateNode); } var ok = $_EcEngine.handleContentReference(def, properties, parameters, subordinateId); // if (!ok) regionNode.removeChild(subordinateNode); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcEngine.handleContentReference = function (def, properties, parameters, elementId, key) { var type = def["type"]; var handler = $_EcEngine.typeToHandlerMap[type]; if (!handler) { var errMsg = "unknown enriched content type '" + type + "' in " + "'content-def' node with 'id' of '" + def["id"] + "'"; SdCommon.error(errMsg); return false; } var definition = $_EcEngine.resolveAttributes(def, properties, parameters, def); var tagId = elementId; for (var specificId in definition) { var specificValue = definition[specificId]; SdEcSpecifics.setSpecific(tagId, specificId, specificValue); } var context = { "jason-type" : "context", "properties" : properties, "parameters" : parameters, "definition" : definition }; var cond = definition["cond"]; if (cond) { var result = SdEcConditions.evaluate(cond); // if ($_EcEngine.ddt) SdCommon.log("condition for '" + elementId + "' is '" + cond + "' -> " + result); if (!result) return false; } else { // if ($_EcEngine.ddt) SdCommon.log("condition for '" + elementId + "' is " + " not specified"); } handler(elementId); return true; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcEngine.resolveAttributes = function (attributes, properties, parameters, definition,key) { var context = { "jason-type" : "context", "properties" : properties, "parameters" : parameters, "definition" : definition }; for (var name in attributes) { var text = attributes[name]; var value = SdEcValues.populate(text, context); attributes[name] = value; } return definition; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcEngine.getAttributes = function (element) { var map = {}; var list = element.attributes; var count = (list ? list.length : 0); for (var k = 0; k < count; k++) { var node = list[k]; var name = node.nodeName ; var value = node.nodeValue; map[name] = value; } return map; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcEngine.getProperties = function (contentDefinitionProperties) // array of name-value pairs { if (typeof contentDefinitionProperties !== 'object') SdCommon.error("invalid content-definition-properties"); var map = {}; var count = (contentDefinitionProperties ? contentDefinitionProperties.length : 0); for (var k = 0; k < count; k++) { var pair = contentDefinitionProperties[k]; var name = pair[ "name"]; var value = pair["value"]; map[name] = value; } return map; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcEngine.getIdToContentDefMap = function (xml) { var map = {}; var defs = ( xml ? xml.getElementsByTagName("content-def") : [] ); var count = (defs ? defs.length : 0); for (var k = 0; k < count; k++) { var def = defs[k]; var id = def.getAttribute("id"); map[id] = def; } return map; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // *************************************************************************** // file: sd-ec-page-interface.js // *************************************************************************** var SdEcPageInterface = {}; // public global identifiers var $_EcPageInterface = {}; // private global identifiers $_EcPageInterface.deferred = new Array(); $_EcPageInterface.queue = {}; // queue of args for previously requested xml documents - do not re-request xml $_EcPageInterface.cache = {}; // cache of previously loaded xml documents - do not re-load xml $_EcPageInterface.ddt = false; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcPageInterface.signalEvent = function (event, args) { SdEcEvents.signalEvent(event, args); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcPageInterface.populateContentRegion = function (contentRegionId, contentDefinitionXmlFileUrl, defer) { if (!contentDefinitionXmlFileUrl) return; defer = (defer && defer != '0') ? true : false; if ($_EcPageInterface.ddt) SdCommon.log("populating '" + contentRegionId + "' [" + (defer ? "on-load" : "in-line") + "]"); if (!contentRegionId ) return; // SdCommon.error("call to 'populate-content-region' missing 'content-region-id'"); if (!contentDefinitionXmlFileUrl) return; // SdCommon.error("call to 'populate-content-region' missing 'content-definition-xml-file-url'"); SdEcValues.setVariable("this-content-definition-file-url", contentDefinitionXmlFileUrl); var parameters = SdEcValues.getParameters(document); if (defer) { SdEcProgress.incTodo(1); var args = { "contentRegionId" : contentRegionId, "contentDefinitionXmlFileUrl" : contentDefinitionXmlFileUrl, "parameters" : parameters }; $_EcPageInterface.deferred[$_EcPageInterface.deferred.length] = args; } else { $_EcPageInterface.doPopulateContentRegion(contentRegionId, contentDefinitionXmlFileUrl, parameters, " now "); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcPageInterface.onLoadHandlerForDeferredCalls = function () { var list = $_EcPageInterface.deferred; if (!list) return; var count = list.length; for (var k = 0; k < count; k++) { var args = list[k]; var contentRegionId = args["contentRegionId" ]; var contentDefinitionXmlFileUrl = args["contentDefinitionXmlFileUrl"]; var parameters = args["parameters" ]; $_EcPageInterface.doPopulateContentRegion(contentRegionId, contentDefinitionXmlFileUrl, parameters, " later "); SdEcProgress.incDone(1); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcPageInterface.doPopulateContentRegion = function (contentRegionId, contentDefinitionXmlFileUrl, parameters, stage) { if ($_EcPageInterface.ddt) SdCommon.log("populating '" + contentRegionId + "' [" + stage + "]"); // special case: hard coded xml data -- bypass ajax by using dom converted from xml string var xmlText = SdXmlData.fetchXMLDoc(contentDefinitionXmlFileUrl); if (xmlText) { var ajaxlet = new SdEcStats.Ajaxlet("content-definition-file", "dfn", contentDefinitionXmlFileUrl); SdEcStats.topOfRequestingData(ajaxlet); SdEcStats.addNote(ajaxlet, "hard"); { var xmlDom; if (window.DOMParser) { var parser = new DOMParser(); xmlDom = parser.parseFromString(xmlText,"text/xml"); } else // Internet Explorer { xmlDom = new ActiveXObject("Microsoft.XMLDOM"); xmlDom.async = "false"; xmlDom.loadXML(xmlText); } } SdEcStats.endOfRequestingData(ajaxlet); SdEcStats.topOfProcessingData(ajaxlet); { SdEcEngine.processContentDefinitionXmlFile(xmlDom, contentRegionId, parameters); } SdEcStats.endOfProcessingData(ajaxlet); return; } // we will load the xml file containing "content-definitions" via ajax; but only once // -- so we queue up the requests (i.e. args) -- processing the same response for each // request in a "response handler" as though it were loaded separately via ajax ... var argsForResponseHandler = { "content-region-id" : contentRegionId, "content-definition-xml-file-url" : contentDefinitionXmlFileUrl, "parameters" : parameters }; var xmlHttp = $_EcPageInterface.cache[contentDefinitionXmlFileUrl]; // cache of responses if (xmlHttp) { // xml file was previously loaded -- call the handler as though it was just loaded if ($_EcPageInterface.ddt) SdCommon.log("populating '" + contentRegionId + "' [" + " cache " + "]"); $_EcPageInterface.ajaxResponseHandlerForContentDefinitionXmlFile(xmlHttp, argsForResponseHandler); } else { // xml file not previously loaded -- but maybe the request was sent and response is pending var queue = $_EcPageInterface.queue[contentDefinitionXmlFileUrl]; // queue of requests if (queue) { // request was previously sent -- do not request again -- but queue up the args if ($_EcPageInterface.ddt) SdCommon.log("populating '" + contentRegionId + "' [" + " queue " + "]"); queue[queue.length] = argsForResponseHandler; } else { // request not previously sent -- do an 'ajax' request -- and queue up the args queue = new Array(); $_EcPageInterface.queue[contentDefinitionXmlFileUrl] = queue; if ($_EcPageInterface.ddt) SdCommon.log("populating '" + contentRegionId + "' [" + "request" + "]"); queue[queue.length] = argsForResponseHandler; SdEcAjaxLoader.ajaxRequest( contentDefinitionXmlFileUrl, $_EcPageInterface.ajaxResponseHandlerForContentDefinitionXmlFileUsingList, argsForResponseHandler, "content-definition-file", "dfn" ); } } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcPageInterface.ajaxResponseHandlerForContentDefinitionXmlFileUsingList = function (xmlHttp, args) { var contentDefinitionXmlFileUrl = args["content-definition-xml-file-url"]; var list = $_EcPageInterface.queue[contentDefinitionXmlFileUrl]; var count = list.length; for (var k = 0; k < count; k++) { var argsForResponseHandler = list[k]; var contentRegionId = argsForResponseHandler["content-region-id"]; if ($_EcPageInterface.ddt) SdCommon.log("populating '" + contentRegionId + "' [" + "respons" + "]"); $_EcPageInterface.ajaxResponseHandlerForContentDefinitionXmlFile(xmlHttp, argsForResponseHandler); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcPageInterface.loadSecondaryContent = function (elementId, key, contentDefinitionXmlFileUrl, ref) { SdEcValues.setVariable("key", key); SdEcValues.setVariable("this-content-definition-file-url", contentDefinitionXmlFileUrl); var parameters = SdEcValues.getParameters(document); var argsForResponseHandler = { "content-region-id" : elementId, "content-definition-xml-file-url" : contentDefinitionXmlFileUrl, "parameters" : parameters }; var xmlHttp = $_EcPageInterface.cache[contentDefinitionXmlFileUrl]; $_EcPageInterface.ajaxResponseHandlerForContentDefinitionXmlFile(xmlHttp, argsForResponseHandler, ref); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcPageInterface.ajaxResponseHandlerForContentDefinitionXmlFile = function (xmlHttp, args, ref) { var contentRegionId = args["content-region-id" ]; var contentDefinitionXmlFileUrl = args["content-definition-xml-file-url"]; var parameters = args["parameters" ]; $_EcPageInterface.cache[contentDefinitionXmlFileUrl] = xmlHttp; var xmlDom = (xmlHttp ? xmlHttp.responseXML : null); if (!xmlDom) SdCommon.error("missing dom for: ", contentDefinitionXmlFileUrl); SdEcEngine.processContentDefinitionXmlFile(xmlDom, contentRegionId, parameters, ref); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdCommon.addLoadEvent($_EcPageInterface.onLoadHandlerForDeferredCalls); // *************************************************************************** // file: sd-ec-xml.js // *************************************************************************** var SdEcXml = {}; // public global identifiers var $_EcXml = {}; // private global identifiers // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcXml.loadXmlAsynchronouslyAndTranslateViaXslt = function (elementId) { var url = SdEcSpecifics.getSpecific(elementId, "url"); var xsl = SdEcSpecifics.getSpecific(elementId, "xsl"); if (xsl && xsl.length > 0 && xsl.charAt(0) != '/') xsl = "/" + xsl; // add a new element now so that they are not reordered // into the order that callbacks get http responses ... var ordinal = $_EcXml["ordinal"]; if (!ordinal) ordinal = 0; ordinal = ordinal + 1; $_EcXml["ordinal"] = ordinal; var element = document.getElementById(elementId); elementId = elementId + "-" + ordinal; var newNode = document.createElement("span"); newNode.id = elementId; element.appendChild(newNode); var xslDoc = SdEcXdocLoader.fetchXMLDoc(xsl); // fixup url -- substitute (parameter, property and/or attribute) values // for the {holes} in the url template -- add proxy prefix url = SdCommon.prefixup(url); var ajaxResponseHandlerArgs = { "xsl-doc" : xslDoc, "element-id" : elementId }; SdEcAjaxLoader.ajaxRequest(url, SdEcResponseHandler.ajaxResponseHandlerForEnrichedContent, ajaxResponseHandlerArgs, "xml-content","xml","xsl"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcEngine.registerTypeHandler("xml", SdEcXml.loadXmlAsynchronouslyAndTranslateViaXslt); // *************************************************************************** // file: sd-ec-html-with-in-xml.js // *************************************************************************** var SdEcHtmlWithInXml = {}; // public global identifiers var $_EcHtmlWithInXml = {}; // private global identifiers // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcHtmlWithInXml.loadXmlAsynchronouslyAndTranslateViaXslt = function (elementId) { var url = SdEcSpecifics.getSpecific(elementId, "url"); var xsl = SdEcSpecifics.getSpecific(elementId, "xsl"); if (xsl && xsl.length > 0 && xsl.charAt(0) != '/') xsl = "/" + xsl; // add a new element now so that they are not reordered // into the order that callbacks get http responses ... var ordinal = $_EcHtmlWithInXml["ordinal"]; if (!ordinal) ordinal = 0; ordinal = ordinal + 1; $_EcHtmlWithInXml["ordinal"] = ordinal; var element = document.getElementById(elementId); elementId = elementId + "-" + ordinal; var newNode = document.createElement("span"); newNode.id = elementId; element.appendChild(newNode); // get the xslt style sheet var xslTxt; try { xslTxt = SdXslData.getXslAsHardCodedString(xsl); } catch (e) { xslTxt = null; } var xslDoc; if (xslTxt == null) { xslDoc = SdEcXdocLoader.LoadXSLDocFromFile(xsl,"xml-content"); } else { xslDoc = SdEcXdocLoader.loadXMLDocFromText(xslTxt,"xml-content",xsl); } // fixup url -- substitute (parameter, property and/or attribute) values // for the {holes} in the url template -- add proxy prefix url = SdCommon.prefixup(url); var ajaxResponseHandlerArgs = { "xsl-doc" : xslDoc, "element-id" : elementId }; SdEcAjaxLoader.ajaxRequest(url, SdEcResponseHandlerForHtml.ajaxResponseHandlerForEnrichedContent, ajaxResponseHandlerArgs, "xml-content","xml","xsl"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcEngine.registerTypeHandler("html", SdEcHtmlWithInXml.loadXmlAsynchronouslyAndTranslateViaXslt); // *************************************************************************** // file: sd-ec-response-handler-for-html.js // *************************************************************************** var SdEcResponseHandlerForHtml = {}; // public global identifiers var $_EcResponseHandlerForHtml = {}; // private global identifiers // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcResponseHandlerForHtml.ajaxResponseHandlerForEnrichedContent = function (xmlHttp, args) { var response = xmlHttp.responseText; if (response == null || response.length < 1) return; var xslDoc = args[ "xsl-doc"]; var elementId = args[ "element-id"]; var callback = args[ "call-back"]; var xmlDoc = xmlHttp.responseXML; var xsl = xslDoc; $_EcResponseHandlerForHtml.renderXmlViaXslIntoDivName(xmlHttp.responseXML, xslDoc, elementId); if (callback) callback(args); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcResponseHandlerForHtml.renderXmlViaXslIntoDivName = function (xmlDoc, xsl, elementId) { if (window.ActiveXObject) { if (xsl == null) { document.getElementById(elementId).innerHTML= 'xsl stylesheet is null'; } else { var ex=xmlDoc.transformNode(xsl); document.getElementById(elementId).innerHTML= ex; /* var element = document.getElementById(elementId); var newNode = document.createElement("span"); element.appendChild(newNode); var ex=xmlDoc.transformNode(xsl); newNode.innerHTML= ex; */ } } else if (document.implementation && document.implementation.createDocument) { try { var xsltProcessor=new XSLTProcessor(); xsltProcessor.importStylesheet(xsl); var resultDocument = xsltProcessor.transformToFragment(xmlDoc,document); var element = document.getElementById(elementId); // element.appendChild(resultDocument); var newNode = document.createElement("div"); newNode.appendChild(resultDocument); var child = newNode.firstChild; var text = child.nodeValue; element.innerHTML = text; } catch (err) { // ignore it ... } } // renderColumns(); // apparently - no longer needed } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // *************************************************************************** // file: sd-ec-tree.js // *************************************************************************** var SdEcTree = {}; // public global identifiers var $_EcTree = {}; // private global identifiers $_EcTree.flexableTab = true; $_EcTree.ordinal = 0; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcTree.toggle = function (uid) { var element = document.getElementById("T" + uid); var last = element.lastChild; last = last.lastChild; var type = last.nodeType; var sign = last.nodeValue; last.nodeValue = (sign.indexOf('+') >= 0 ? ' - ' : ' + '); var vNode = document.getElementById("C" + uid); vNode.style.border="1px solid black"; var style = vNode.style; style.backgroundColor = "#FFFFCC"; style.padding="5px"; // vNode.setAttribute("onclick", "SdEcTree.toggle('" + uid + "');"); var wNode = document.getElementById("W" + uid); // Element.insert(wNode," "); wNode.innerHTML = " "; wNode.style.display="block"; var content = document.getElementById("C" + uid); if (!content) { SdCommon.log("missing C" + uid); return; } var dataDivId = "D" + uid; if (sign == ' - ') { var dataDiv = document.getElementById(dataDivId); content.removeChild(dataDiv); vNode.style.border="none"; var style = vNode.style; style.backgroundColor = "#000000"; var wNode = document.getElementById("W" + uid); wNode.style.display="none"; var style = vNode.style; style.padding="0px"; return; } var newNode = document.createElement("div"); newNode.setAttribute("id", dataDivId); var articleTitleNode = document.getElementById("A" + uid); var articleTitleText = (articleTitleNode ? articleTitleNode.lastChild.nodeValue : ""); var loadingNode = document.createTextNode(" " + "loading" + (articleTitleText ? ': ' : '') + articleTitleText + " ..."); newNode.appendChild(loadingNode); content.appendChild(newNode); var url = $_EcTree.fullTextUrl; // SdEcOnDemand.loadOnDemand(url, uid, dataDivId); url = url.replace(/\[ui\]/g, uid); url = SdCommon.prefixup (url); var args = { "element-id" : dataDivId, "uid" : uid }; SdEcAjaxLoader.ajaxRequest(url, SdEcOnDemand.ajaxResponseHandlerForToggledUrl, args, "novelist-article", "html", "user-click"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcTree.testOfOnClick = function (arg) { var msg = "in test-of-on-click: " + arg; SdCommon.log(msg); alert(msg); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcTree.loadXmlAsynchronouslyAndTranslateViaXslt = function (elementId) { var url = SdEcSpecifics.getSpecific(elementId, "url"); var xsl = SdEcSpecifics.getSpecific(elementId, "xsl"); var full = SdEcSpecifics.getSpecific(elementId, "full"); $_EcTree.fullTextUrl = full; if (xsl && xsl.length > 0 && xsl.charAt(0) != '/') { xsl = "/" + xsl; } // add a new element now so that they are not reordered // into the order that callbacks get http responses ... $_EcTree.ordinal = $_EcTree.ordinal + 1; var ord = $_EcTree.ordinal; var element = document.getElementById(elementId); elementId = elementId + "-" + ord; var newNode = document.createElement("span"); newNode.id = elementId; element.appendChild(newNode); var xslDoc = SdEcXdocLoader.fetchXMLDoc(xsl); url = SdCommon.prefixup(url); var ajaxResponseHandlerArgs = { "xsl-doc" : xslDoc, "element-id" : elementId, "call-back" : $_EcTree.postLoadCallback }; SdEcAjaxLoader.ajaxRequest(url, SdEcResponseHandler.ajaxResponseHandlerForEnrichedContent, ajaxResponseHandlerArgs, "novelist-search", "xml", "tree"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcTree.postLoadCallback = function (args) { var elementId = args["element-id"]; $_EcTree.postLoadFixup(elementId); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcTree.postLoadFixup = function (elementId) { // SdCommon.log("post load fixup on element with id: " + elementId); var element = document.getElementById(elementId); // special // sd-tree-node var contentRegionElements = document.getElementsByTagName("div"); contentRegionElements = SdCommon.filterArrayOfNodesByAttribute(contentRegionElements, "klass", "==", "sd-tree-node"); var count = (contentRegionElements ? contentRegionElements.length : 0); for (var k = 0; k < count; k++) { // get content-region's id and url (points to content defintion ".xml" file) var kid = contentRegionElements[k]; var tag = kid.nodeName ; var id = kid.getAttribute("id"); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcTree.anElementExistsWithTheAttribute = function (tag, attribute, value) { var elements = document.getElementsByTagName(tag); elements = SdCommon.filterArrayOfNodesByAttribute(elements, attribute, "==", value); return (elements.length > 0); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcEngine.registerTypeHandler("xml-tree", $_EcTree.loadXmlAsynchronouslyAndTranslateViaXslt); // *************************************************************************** // file: sd-ec-on-demand.js // *************************************************************************** // Used by SdEcTree to open toggle links and embedded links within the toggled // html (via the syndetics' function '__doLinkPostBack') var SdEcOnDemand = {}; // public global identifiers var $_EcOnDemand = {}; // private global identifiers SdCommon.require(SdCommon ); // this 'sd-ec-tree' file needs to be reveiwed and/or rewritten SdCommon.require(SdEcAjaxLoader); // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcOnDemand.ajaxResponseHandlerForToggledUrl = function (xmlHttp, args) { var xml = xmlHttp.responseXML; if (!xml) return; var articles = xml.getElementsByTagName("article"); var articleNode = articles[0]; var kids = articleNode.childNodes; var tuple = {}; var count = kids.length; for (var k = 0; k < count; k++) { var kid = kids[k]; var txt = kid.firstChild; if (!txt) continue; var txt = kid.firstChild; if (!txt) continue; var name = kid.nodeName ; var text = txt.nodeValue; name = SdCommon.trim(name); text = SdCommon.trim(text); tuple[name] = text; } var title = tuple[ "title"]; var author = tuple[ "author"]; var text = tuple["fullText"]; text = $_EcOnDemand.removeHrTags(text, "
"); var novelist_unique_id = args["uid"]; var elementId = args["element-id"]; var divNode = document.getElementById(elementId); // Element.insert(divNode,text); divNode.innerHTML= text; // ------------------------------ // javascript:SdEcTree.toggle(); var url = "http://search.ebscohost.com/login.aspx?direct=true&db=neh&tg=UI&an=" + novelist_unique_id + "&site=novp-live"; url = "javascript:$_EcOnDemand.openLink('" + url + "')"; // url = "javascript:window.open('" + url + "'" + ", '')"; // works -- but loses old window! var lnkNode = document.createElement("a"); lnkNode.setAttribute("href",url); var txtNode = document.createTextNode("see original article"); lnkNode.appendChild(txtNode); divNode.appendChild(lnkNode); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcOnDemand.openLink = function (url) { window.open(url, ""); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcOnDemand.removeHrTags = function (text, replacement) { var indexOfLeftBrace = text.indexOf("", indexOfLeftBrace); if (indexOfRightBrace < 0) return text; var prefix = text.substring(0, indexOfLeftBrace ); // var middle = text.substring( indexOfLeftBrace+3, indexOfRightBrace ); var suffix = text.substring( indexOfRightBrace+1); text = prefix + (replacement ? replacement : "") + suffix; var result = $_EcOnDemand.removeHrTags(text); return result; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function __doLinkPostBack(first, second, third) { // http://nr-beta-eit.ebscohost.com//Services/NovelistSelect.asmx/GetFullTextContent?prof=demo.eit.sirsi&pwd=ebs2898&authType=&ipprof=&ui=427137&numrecs=2 // http://search.ebscohost.com/login.aspx?direct=true&db=neh&tg=UI&an=097834&site=novp-live var msg = "__doLinkPostBack('" + first + "', '" + second + "', '" + third + "')"; SdCommon.log(msg); var indexOfPlus = second.indexOf("+"); var indexOfBar = second.indexOf("|",indexOfPlus+1); var number = second.slice(indexOfPlus+1, indexOfBar); var url = "http://search.ebscohost.com/login.aspx?direct=true&db=neh&tg=UI&an=" + number + "&site=novp-live"; SdCommon.lnk("user selected: ", url); // alert("see log -- " + "user selected: " + url); // window.location = url; window.open(url, ""); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // *************************************************************************** // file: sd-ec-syndetics.js // *************************************************************************** // Type handler for "indexed-syndetics-xml" -- loads the syndetics "INDEX.XML" // file on the first call, then queues up subsequent requests to be handled // when the "INDEX.XML" data is available; then it uses the "INDEX.XML" data // to load make and render the queued requests ... SdCommon.require(SdCommon ); SdCommon.require(SdEcAjaxLoader); SdCommon.require(SdEcEngine ); SdCommon.require(SdEcXml ); var SdEcSyndetics = {}; // public global identifiers var $_EcSyndetics = {}; // private global identifiers // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcSyndetics.loadSyndeticsXmlAsynchronouslyAndTranslateViaXslt = function (elementId) { var availableFileMap = $_EcSyndetics["available-file-map"]; if (availableFileMap) { // map exists -- so xml file for syndetics index has been fetched and map was extracted from it $_EcSyndetics.loadAvailableSyndeticsXmlAsynchronouslyAndTranslateViaXslt(elementId, availableFileMap) } else { // no map exists -- add request to a queue, then make an ajax call to fetch syndetics index var request = { "element-id" : elementId }; var queue = $_EcSyndetics["queue"]; if (queue) { // a queue exists -- so ajax call has already been made -- simply add request to queue queue[queue.length] = request; } else { // no queue exists -- create queue with request, then make an ajax call to fetch syndetics index $_EcSyndetics["queue"] = [ request ]; // make ajax call to fetch syndetics index var idx = SdEcSpecifics.getSpecific(elementId, "idx"); if (!idx) { var id = definition["id"]; SdCommon.error("configuration error -- no 'idx' attribute in 'content-def' with id '" + id + "'" + " and definition is " + SdCommon.mapToText(definition), elementId); return; } idx = SdCommon.prefixup(idx); SdEcAjaxLoader.ajaxRequest(idx, $_EcSyndetics.ajaxResponseHandlerForFetchingIndexAsXml, {"element-id" : elementId}, "syndetics-index", "xml", "parse"); } } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcSyndetics.ajaxResponseHandlerForFetchingIndexAsXml = function (xmlHttp, args) { var xml = xmlHttp.responseXML; if (!xml) return; var availableFileMap = $_EcSyndetics.syndeticsIndexXmlToAvailableFileNameMap(xml); $_EcSyndetics["available-file-map"] = availableFileMap; var queue = $_EcSyndetics["queue"]; if (!queue) SdCommon.error("missing queue"); var count = queue.length; for (var k = 0; k < count; k++) { var request = queue[k]; var elementId = request["element-id"]; $_EcSyndetics.loadAvailableSyndeticsXmlAsynchronouslyAndTranslateViaXslt(elementId, availableFileMap); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcSyndetics.loadAvailableSyndeticsXmlAsynchronouslyAndTranslateViaXslt = function (elementId, availableFileMap) { var file = SdEcSpecifics.getSpecific(elementId, "file"); var available = availableFileMap[file]; if (!available) return; SdEcXml.loadXmlAsynchronouslyAndTranslateViaXslt(elementId); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcSyndetics.syndeticsIndexXmlToAvailableFileNameMap = function (xml) { var available = new Array(); var roots = xml.getElementsByTagName("INDEX-ROOT"); if (!roots || roots.length != 1) return available; var root = roots[0]; if (!root) return available; var kids = root.childNodes; if (!kids) return available; var map = {}; var next = 0; var size = kids.length; for (var k = 0; k < size; k++) { var kid = kids[k]; var txt = kid.firstChild; if (!txt) continue; var fileName = txt.nodeValue; map[fileName] = true; } return map; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcEngine.registerTypeHandler("indexed-syndetics-xml", $_EcSyndetics.loadSyndeticsXmlAsynchronouslyAndTranslateViaXslt); // *************************************************************************** // file: sd-ec-hit-list-covers.js // *************************************************************************** var SdEcHitListCovers = {}; // public global identifiers var $_EcHitListCovers = {}; // private global identifiers SdCommon.require(SdCommon ); SdCommon.require(SdEcValues); SdCommon.require(SdEcEngine); SdCommon.require(getHitCover); // getcontent.js // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcHitListCovers.handlerForHitListCoverType = function (elementId) { var ordinal = SdEcSpecifics.getSpecific(elementId, "ord"); var altText = SdEcSpecifics.getSpecific(elementId, "alt"); var isbns = SdEcSpecifics.getSpecific(elementId, "isbn"); var upcs = SdEcSpecifics.getSpecific(elementId, "upc"); var oclcs = SdEcSpecifics.getSpecific(elementId, "oclc"); var url = SdEcSpecifics.getSpecific(elementId, "url"); // 'http://syndetics.com/index.aspx?' var pwd = SdEcSpecifics.getSpecific(elementId, "pwd"); // 'unitest' getHitCover(url,pwd, isbns,upcs,oclcs, 'cover-',altText, ordinal); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcEngine.registerTypeHandler("hit-list-cover", $_EcHitListCovers.handlerForHitListCoverType); // *************************************************************************** // file: sd-ec-tabs.js // *************************************************************************** var SdEcTabs = {}; // public global identifiers var $_EcTabs = {}; // private global identifiers $_EcTabs.pairs = {}; // used in hide/show tab functions // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcTabs.deTab = function (tabsContainerId, tabId) { // return; var list = document.getElementById(tabsContainerId); if (!list) return; var tab = document.getElementById(tabId); if (! tab) return; var next = tab.nextSibling; // if (!next) return; var pair = { "tab" : tab, "next" : next}; $_EcTabs.pairs[tabId] = pair; list.removeChild(tab); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcTabs.enTab = function (tabsContainerId, tabId) { // return; var list = document.getElementById(tabsContainerId); if (!list) return; var tab = document.getElementById(tabId); // if (tab) return; var pair = $_EcTabs.pairs[tabId]; if (!pair) return; tab = pair["tab"]; if (!tab) return; var next = pair["next"]; if (next) { try { list.insertBefore(tab,next); } catch (e) { list.appendChild(tab); } } else { list.appendChild(tab); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcTabs.anElementExistsWithTheAttribute = function (tag, attribute, value) { var elements = document.getElementsByTagName(tag); elements = SdCommon.filterArrayOfNodesByAttribute(elements, attribute, "==", value); return (elements.length > 0); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcTabs.wasALookInsidePopulated = function () { var region = document.getElementById("enriched-content"); var kids = (region ? region.childNodes : null); var count = (kids ? kids.length : 0); // SdCommon.log("enriched-content has " + count + " kids"); var found = false; for (var k = 0; k < count; k++) { var span = kids[k]; var grandKids = span.childNodes; var number = grandKids.length; // SdCommon.log("kid[" + k + "] is '" + span + "' with " + number + " grand kids"); if (number > 0) { found = true; break } } return found; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcTabs.AllLoadedEventHandler = function () { var verbose = true; if ( $_EcTabs.wasALookInsidePopulated() ) { // if (verbose) SdCommon.log("keep tab: 'a look inside'"); } else { SdEcTabs.deTab("detail-tabs-container", "detail-tab-2"); // if (verbose) SdCommon.log("drop tab: 'a look inside'"); } if ( $_EcTabs.anElementExistsWithTheAttribute("div", "klass", "sd-tree-node") ) { // if (verbose) SdCommon.log("keep tab: 'related articles'"); } else { SdEcTabs.deTab("detail-tabs-container", "detail-tab-4"); // if (verbose) SdCommon.log("drop tab: 'related articles'"); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcProgress.registerAllLoadedEventHandler($_EcTabs.AllLoadedEventHandler); // *************************************************************************** // file: sd-ec-hit-list-similar-entities.js // *************************************************************************** var SdEcHitListSimilarEntities = {}; // public global identifiers var $_EcHitListSimilarEntities = {}; // private global identifiers // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcHitListSimilarEntities.loadSimilarAuthors = function (elementId) { var label = SdEcValues.getTranslation("Similar Authors"); $_EcHitListSimilarEntities.loadSimilarEntities(elementId, "author", "getSimilarAuthors", label); // "SIMILAR-AUTHORS"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcHitListSimilarEntities.loadSimilarTitles = function (elementId) { var label = SdEcValues.getTranslation("Similar Titles"); $_EcHitListSimilarEntities.loadSimilarEntities(elementId, "title", "getSimilarTitles", label); // "SIMILAR-TITLES"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcHitListSimilarEntities.loadSimilarEntities = function (elementId, entity, subroutine, label) { var ord = SdEcSpecifics.getSpecific(elementId, "ord"); var downGif = SdEcSpecifics.getSpecific(elementId, "dgif"); var wc_url = SdEcSpecifics.getSpecific(elementId, "wurl"); var session = SdEcSpecifics.getSpecific(elementId, "wses"); var isbns = SdEcSpecifics.getSpecific(elementId, "isbn"); var isbn=isbns.split(",")[0]; var urla = SdEcSpecifics.getSpecific(elementId, "urla"); var urlt = SdEcSpecifics.getSpecific(elementId, "urlt"); var prof = SdEcSpecifics.getSpecific(elementId, "prof"); var pswd = SdEcSpecifics.getSpecific(elementId, "pswd"); if (isbn != isbns) { urla = urla.replace(isbns,isbn); urlt = urlt.replace(isbns,isbn); } // fixup url -- substitute (parameter, property and/or attribute) values // for the {holes} in the url template -- add proxy prefix urla = SdCommon.prefixup(urla); urlt = SdCommon.prefixup(urlt); var element = document.getElementById(elementId); var arrowNode = document.createElement("img"); arrowNode.setAttribute("src",downGif); arrowNode.alt = SdEcValues.getTranslation("Expand Icon"); // "Action Image"; var anchorNode = document.createElement("a"); anchorNode.id = "novelist_similar_" + entity + "_link" + ord; var hrefAsText = "javascript:" + subroutine + "(" + "'" + ord + "'" + "," // + (subroutine == "getSimilarTitles" ? "'" + wc_url + "'" + "," : "") // + (subroutine == "getSimilarTitles" ? "'" + session + "'" + "," : "") + "'" + wc_url + "'" + "," + "'" + session + "'" + "," + "'" + isbn + "'" + "," + "'" + urla + "'" + "," + "'" + urlt + "'" + "," + "'" + prof + "'" + "," + "'" + pswd + "'" + ")"; anchorNode.setAttribute("href", hrefAsText); var textNode = document.createTextNode(label); anchorNode.appendChild( arrowNode); anchorNode.appendChild( textNode); element .appendChild(anchorNode); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdEcEngine.registerTypeHandler("hit-list-similar-authors", $_EcHitListSimilarEntities.loadSimilarAuthors); SdEcEngine.registerTypeHandler("hit-list-similar-titles" , $_EcHitListSimilarEntities.loadSimilarTitles ); // *************************************************************************** // file: sd-ec-chili-4.js // *************************************************************************** var SdEcChili4 = {}; // public global identifiers var $_EcChili4 = {}; // private global identifiers $_EcChili4.hitsPerPage = null; // used to guarentee all divs are created $_EcChili4.pastHitsEnd = false; // used to guarentee
    matched with
$_EcChili4.ratingCount = 0; $_EcChili4.reviewCount = 0; $_EcChili4.loadHook = null; $_EcChili4.pageDone = false; $_EcChili4.isbnToRating = {}; $_EcChili4.isbnToReview = {}; $_EcChili4.langToCode = null; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcChili4.saveInputs = function (elementId) { var inputs = $_EcChili4["inputs"]; if (!inputs) { var type = SdEcSpecifics.getSpecific(elementId, "cf-type"); var account = SdEcSpecifics.getSpecific(elementId, "account"); var profile = SdEcSpecifics.getSpecific(elementId, "profile"); var script = SdEcSpecifics.getSpecific(elementId, "script"); var defer = SdEcSpecifics.getSpecific(elementId, "defer"); var lang = SdEcValues.getParameter("language-name"); $_EcChili4["inputs"] = [type, account, profile, script, defer, lang]; } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcChili4.createChiliReviewDiv = function (elementId) { $_EcChili4.saveInputs(elementId); var ord = SdEcSpecifics.getSpecific(elementId, "ord"); var isbn = SdEcSpecifics.getSpecific(elementId, "cf-isbn"); var index = (isbn ? isbn.indexOf(",") : 0); if (index > 0) isbn = isbn.substring(0,index); var status = $_EcChili4.isbnToReview[isbn]; var hitsPerPage = $_EcChili4.hitsPerPage; if (isbn && status == 'todo') { var divNodeForReviewFrame = document.createElement("div"); divNodeForReviewFrame.align = "center"; divNodeForReviewFrame.setAttribute("class","chili_iframe"); // divNodeForReviewFrame.class = "chili_iframe"; divNodeForReviewFrame.id = "chili_review_" + isbn; var style = divNodeForReviewFrame.style; style.display = "none"; var regionNode = document.getElementById(elementId); if (hitsPerPage > 1) { var txt = document.createTextNode("chili-iframe"); divNodeForReviewFrame.appendChild(txt); regionNode.appendChild(divNodeForReviewFrame); } else { var div = document.createElement("div"); var hi = document.createTextNode("\u00a0"); var lo = document.createTextNode("\u00a0"); div.appendChild(hi); div.appendChild(divNodeForReviewFrame); div.appendChild(lo); regionNode.appendChild(div); } $_EcChili4.isbnToReview[isbn] = 'done'; } $_EcChili4.reviewCount += 1; $_EcChili4.onLoadHandlerChiliFresh(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcChili4.createChiliRatingDiv = function (elementId) { $_EcChili4.saveInputs(elementId); var ord = SdEcSpecifics.getSpecific(elementId, "ord"); var isbn = SdEcSpecifics.getSpecific(elementId, "cf-isbn"); var index = (isbn ? isbn.indexOf(",") : 0); if (index > 0) isbn = isbn.substring(0,index); var status = $_EcChili4.isbnToRating[isbn]; var hitsPerPage = $_EcChili4.hitsPerPage; if (isbn && status == 'todo') { var divNodeForPsuedoLink = document.createElement("div"); divNodeForPsuedoLink.id = "isbn_"+isbn; var regionNode = document.getElementById(elementId); if (hitsPerPage > 1) { // regionNode.appendChild(divNodeForPsuedoLink); $_EcChili4.insert(regionNode, divNodeForPsuedoLink); // kludge for internet explorer bug } else { /* var div = document.createElement("div"); var hi = document.createTextNode("\u00a0"); var lo = document.createTextNode("\u00a0"); div.appendChild(hi); div.appendChild(divNodeForPsuedoLink); div.appendChild(lo); regionNode.appendChild(div); */ regionNode.appendChild(divNodeForPsuedoLink); } $_EcChili4.isbnToRating[isbn] = 'done'; } $_EcChili4.ratingCount += 1; $_EcChili4.onLoadHandlerChiliFresh(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcChili4.eLibraryLanguageToChiliFreshCode = function (language) { var map = $_EcChili4.langToCode; if (!map) { map = {}; var codes = SdEcValues.getParameter("chilifresh-languages"); if (codes) { // ENGLISH:en_US,SPANISH:es_ES,FRENCH:fr_FR var pairs = codes.split(','); var count = pairs.length; for (var k = 0; k < count; k++) { var pair = pairs[k]; var both = pair.split(':'); if (both.length != 2) continue; var lang = both[0]; var code = both[1]; map[lang] = code; } } $_EcChili4.langToCode = map; } var code = map[language]; if (!code) code = language; return code; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // trim functions: see http://www.aspdev.org/articles/javascript-trim/ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // $_EcChili4.leftTrim = function (s) // { // while (s.substring(0,1) == ' ') // { // s = s.substring(1, s.length); // } // return s; // } $_EcChili4.rightTrim = function (s) { while (s.substring(s.length-1, s.length) == ' ') { s = s.substring(0,s.length-1); } return s; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcChili4.onLoadHandlerChiliFresh = function () { var hitsPerPage = $_EcChili4.hitsPerPage; if ($_EcChili4.ratingCount < hitsPerPage || $_EcChili4.reviewCount < hitsPerPage || !$_EcChili4.pastHitsEnd) return; var elements = document.getElementsByTagName("body"); var bodyNode = ( (elements && elements.length) ? elements[0] : null ); var inputs = $_EcChili4["inputs"]; var type = inputs[0]; var account = inputs[1]; var profile = inputs[2]; profile = $_EcChili4.rightTrim(profile); var script = inputs[3]; var defer = inputs[4]; var lang = inputs[5]; $_EcChili4.prepareInputElement(bodyNode, "chilifresh_type" ,"chilifresh_type" , type); $_EcChili4.prepareInputElement(bodyNode, "chilifresh_account","chilifresh_account", account); $_EcChili4.prepareInputElement(bodyNode, "chilifresh_profile","chilifresh_profile", profile); if (lang != 'ENGLISH') { var code = $_EcChili4.eLibraryLanguageToChiliFreshCode(lang); $_EcChili4.prepareInputElement(bodyNode, "chilifresh_language","chilifresh_language", code); } var browser = SdEcVersion.getBrowserName (); var version = SdEcVersion.getBrowserVersion(); if ( !defer ) defer = '0'; // default empty value to 'E' -- all non-empty values are strings if ( defer == '0' ) defer = false; // convert the zero character to false if ( defer == 'E' ) defer = (browser == 'Explorer'); // special case: defers only when running in internet-explorer if ( defer == '+' ) defer = (browser == 'Explorer') && (version >= 7); // special case: defers only when running in internet-explorer 7+ if ( defer == '7' ) defer = (browser == 'Explorer') && (version == 7); // special case: defers only when running in internet-explorer 7 if ($_EcChili4.pageDone) { $_EcChili4.loadChiliData(); // load data now -- SdCommon.log("loading chili data pg-done"); } else if (defer) { $_EcChili4.loadHook = $_EcChili4.loadChiliData; // load data after page is loaded -- SdCommon.log("loading chili data on-load"); } else { $_EcChili4.loadChiliData(); // load data now -- SdCommon.log("loading chili data in-line"); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcChili4.prepareInputElement = function (bodyNode, id, name, value) { var inputNode = document.createElement("input"); inputNode.setAttribute("id" , id); inputNode.setAttribute("name" , name); inputNode.setAttribute("type" , "hidden"); inputNode.setAttribute("value", value); $_EcChili4.insert(bodyNode, inputNode); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcChili4.insert = function (papa, node) // kludge for internet explorer bug { var first = papa.firstChild; if (first) { papa.insertBefore(node, first); } else { papa.appendChild(node); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcChili4.loadChiliData = function () { var inputs = $_EcChili4["inputs"]; var script = inputs[3]; SdCommon.load_script(script, "chili-script"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcChili4.onLoadHandlerToLoadChiliData = function () { $_EcChili4.pageDone = true; var loadHook = $_EcChili4.loadHook; if (loadHook) { loadHook(); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcChili4.topOfHitListObserver = function (args) { var list = args['hit-list-isbn-list']; var count = (list ? list.length : 0); for (var k = 0; k < count; k++) { var isbn = list[k]; var index = (isbn ? isbn.indexOf(",") : 0); if (index > 0) isbn = isbn.substring(0,index); $_EcChili4.isbnToRating[isbn] = 'todo'; $_EcChili4.isbnToReview[isbn] = 'todo'; } $_EcChili4.hitsPerPage = count; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $_EcChili4.endOfHitListObserver = function (args) { $_EcChili4.pastHitsEnd = true; $_EcChili4.onLoadHandlerChiliFresh(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SdCommon.addLoadEvent($_EcChili4.onLoadHandlerToLoadChiliData); SdEcEngine.registerTypeHandler("chilifresh-ratings", $_EcChili4.createChiliRatingDiv); SdEcEngine.registerTypeHandler("chilifresh-reviews", $_EcChili4.createChiliReviewDiv); SdEcEvents.registerEventObserver("top-of-hit-list" , $_EcChili4.topOfHitListObserver); SdEcEvents.registerEventObserver("end-of-hit-list" , $_EcChili4.endOfHitListObserver);