';if(!com_sirsi_ent_page.isMobile){ $J('#results_cell'+hitNum).closest('.cell_wrapper').append(sumOuterDiv);}else{ $J('#results_cell'+hitNum).append(sumOuterDiv);} var catKey=$J('#'+rId+'_DOC_ID').text().split(':')[1];var detailLinkUrl='/client/' + com_sirsi_ent_page.localeCode+'/' +com_sirsi_ent_page.friendlyUrl+'/search/results.displaypanel.displaycell_0:detailclick/ent:$002f$002fSD_ILS$002f0$002fSD_ILS:'+ catKey+'/'+hitNum+'/'+hitNum+'/tabDISCOVERY_ALLlistItem?d=ent%3A%2F%2FSD_ILS%2F0%2FSD_ILS%3A'+catKey+'%7E'+curTarget+'%7E'+hitNum+'&h=8;';//;&ic=true';if(com_sirsi_ent_page.isMobile){detailLinkUrl+='&ic=true';}//var detailLinkUrl='/client/' + com_sirsi_ent_page.localeCode+'/' +com_sirsi_ent_page.friendlyUrl+'/search/results.displaypanel.displaycell_0:detailclick/ent:$002f$002fSD_ILS$002f0$002fSD_ILS:'+ catKey+'/'+hitNum+'/'+hitNum+'/tab';if(curLimit){detailLinkUrl+='&lm='+curLimit;}//console.log('detail url is ' + detailLinkUrl);var itemAjax=$J.ajax({ url:detailLinkUrl, type:"POST", data:itemdata});itemAjax.done(function(itemData){ var htmlContent=JSON.stringify(itemData).replace('\n',''); htmlContent=htmlContent.replace('\"','"'); var cleanHtmlContent=htmlContent.replace(/\\n/g,'');//console.log('cleanHtmlContent: ' + cleanHtmlContent); var parsedHtml=$J.parseHTML(cleanHtmlContent);//console.log(cleanHtmlContent);var detailHtml;detailHtml=$J(parsedHtml).find('.detailItemsDiv .detailItems').html();if(typeof(detailHtml)=='undefined'){detailHtml='';} if(showOnOrder){ detailHtml+='
' }if(useMarcHoldings){var hasMarcHoldings=($J(parsedHtml).find('.detailHoldingsDiv table tr').length>0 || $J(parsedHtml).find('.detailChildFieldValue').length>0);if(hasMarcHoldings){ var holdingsHtml,holdingsHtmlCaption,holdingsHtmlContent; holdingsHtmlCaption='
Marc Holdings
'; if($J(parsedHtml).find('.detailHoldingsDiv').length>0){ holdingsHtmlContent=$J(parsedHtml).find('.detailHoldingsDiv')[0].outerHTML; if(typeof(holdingsHtmlContent)!="undefined"){ holdingsHtml=holdingsHtmlCaption+holdingsHtmlContent; detailHtml+=holdingsHtml; } } } //end if hasMarcHoldings } //end if useMarcHoldings appendObj=$J('#summaryitems-'+hitNum); writeTable(appendObj,detailHtml,hitNum); if(hasMarcHoldings){ /***kludge: the nonmobile html doesn't include the captions, not sure yet where they are. adding something for now based on class of fields***/ $J('#summaryitems-'+hitNum).find('.detailHoldingsDiv').find('th').each(function(){ if($J(this).find('div').text().trim().length==0){ var curCaption=$J(this).attr('class').split('_')[1]; $J(this).find('.detailItemTable_th').text(curCaption); } }); } $J(appendObj).find('.detailItemTable').attr('id','detailItemTableCust'+hitNum); }); //end itemAjax donevar availAjax=itemAjax.then(function(itemData){var availUrl='/client/' + com_sirsi_ent_page.localeCode+'/' + com_sirsi_ent_page.friendlyUrl+'/search/results.displaypanel.displaycell_0.detail.detailavailabilityaccordions:lookuptitleinfo/ent:$002f$002fSD_ILS$002f0$002fSD_ILS:'+catKey+'/'+curTarget+'/'+hitNum+'/true/true?&d=ent%3A%2F%2FSD_ILS%2F0%2FSD_ILS%3A'+catKey+'%7E'+curTarget+'%7E'+hitNum+'&h=8';if(curLimit){availUrl+='&lm='+curLimit}; return $J.ajax({ "url":availUrl, "type":"GET"}); //end availAjax}); //end thenavailAjax.done(function(availData){ $J(availData.childRecords).each(function(){ var curLib=this.LIBRARY; var curBarcode=this.barcode; var curStatus=this.SD_ITEM_STATUS; var altBarcode=curBarcode.replace(/[^\w\s]/gi, '');/***IF THE BARCODE HAS STRICTLY ALPHA-NUM CHARACTERS***/if (! (/[^\w\s-]/.test(curBarcode)) ){//if(curBarcode==altBarcode){ var curTr=$J('#detailItemTableCust'+hitNum).find('div[id$="'+curBarcode+'"]').closest('tr'); //$J(curTr).find('.asyncFieldLIBRARY').text(curLib); //$J(curTr).find('.asyncFieldSD_ITEM_STATUS').text(curStatus);$J('#asyncFieldDefaultdetailItemsDiv'+hitNum+'LIBRARY'+curBarcode).text(curLib);$J('.summaryitems #asyncFieldDefaultdetailItemsDiv'+hitNum+'SD_ITEM_STATUS'+curBarcode).text(curStatus);} /**if we 'miss' due to funky item id...***/ // if($J('.summaryitems #asyncFieldDefaultdetailItemsDiv'+hitNum+'SD_ITEM_STATUS'+curBarcode).length==0){/***IF THE BARCODE HAS ILLEGAL DOM CHARACTERS***/else{ var curValue='';$J('#detailItemTableCust'+hitNum+ ' .asyncFieldSD_ITEM_STATUS').each(function(index,value){ var candBarcode=$J(this).attr('id').split('SD_ITEM_STATUS')[1]; if(candBarcode==curBarcode){ $J(value).text(curStatus); //return false; }}); // $J(curValue).text(curStatus); } }); });/***If item holds are enabled, grab that too***//**https://ctsbeta.ent.sirsi.net/client/en_US/displaywidgets/search/results.displaypanel.displaycell_0.detail.detailavailabilityaccordions.boundwithzone:lookupavailability/ent:$002f$002fSD_ILS$002f0$002fSD_ILS:666794/ILS/0/true/LIBRARY$002cCALLNUMBER?qu=reading+grisham&d=ent%3A%2F%2FSD_ILS%2F0%2FSD_ILS%3A666794%7EILS%7E0&h=8**/var holdUrl='/client/' + com_sirsi_ent_page.localeCode+'/'+com_sirsi_ent_page.friendlyUrl+'/search/results.displaypanel.displaycell_0.detail.detailavailabilityaccordions.boundwithzone:lookupavailability/ent:$002f$002fSD_ILS$002f0$002fSD_ILS:'+catKey+ '/ILS/' + hitNum+'/true/LIBRARY$002cCALLNUMBER?&d=ent%3A%2F%2FSD_ILS%2F0%2FSD_ILS%3A'+catKey+'%7EILS%7E'+hitNum+'&h=8';var holdParam='detailboundWithDiv'+hitNum;var holdData={"t:zoneid": holdParam}; var holdAjax=availAjax.then(function(availData){ return $J.ajax({ "url":holdUrl, "type":"POST", "dataType":"JSON", "data":"holdData", "success":function(holdInfo){ $J(holdInfo.inits).each(function(){ var evalScript=this.evalScript[0]; var stringEvalScript=JSON.stringify(evalScript); // console.log(stringEvalScript); stringEvalScript=stringEvalScript.replace("updateWebServiceFields","updateWebServiceFieldsSum"); var alteredEvalScript=JSON.parse(stringEvalScript); $J('#summaryitems-'+hitNum).find('div[id^="asyncFieldDefaultdetailItemsDiv'+hitNum+'"]').each(function(){ var curId=$J(this).attr('id'); var newId=curId.replace('asyncFieldDefaultdetailItemsDiv','asyncFieldhitlistHoldingsDiv'); $J(this).attr('id',newId); var inProgressObj=$J(this).prev(); var curId=$J(inProgressObj).attr('id'); var newId=curId.replace('detailItems','hitlistHoldings'); $J(inProgressObj).attr('id',newId); }); if($J('#detailItemTableCust'+hitNum).length !==0){ eval(alteredEvalScript); } }); if(showOnOrder){ var ordersHtml1=holdInfo.zones;//detailOnOrderDiv'+hitNum if(typeof(ordersHtml1)!=='undefined'){ var ordersHtml='
On Order
'+JSON.stringify(ordersHtml1).split(':')[1].split('}')[0].replace(/"|\\n/g,''); $J('#summaryOnOrderDiv'+hitNum).append(ordersHtml); } } //end if showonorder if($J('#detailItemTableCust' + hitNum).length>0 && !com_sirsi_ent_page.isMobile && $J('#detailItemTableCust' + hitNum).find('.detailChildRecord').length==0){ sorttable.makeSortable(document.getElementById('detailItemTableCust'+hitNum)); } setDisplayOptions(appendObj); setTimeout(function(){$J('#summaryitems-'+hitNum).find('div[class*="asyncInProgress"]').addClass('hidden').next().removeClass('hidden');},5000); } }); holdAjax.done(function(holdInfo){ /***fallback in case any ASYNC fields somehow slip the update net***/ }); //end then on availAjax});}//end entWsSummaryItems funcfunction returnAvail(retAvail){ $J(retAvail.childRecords).each(function(){ var curLib=this.LIBRARY; var curBarcode=this.barcode; });}function setDisplayOptions(appendObj){if (writeAnimatedLinks){writeAnimatedLink(appendObj);}else if(writeButtons){writeButton(appendObj);}else {writePlainTable(appendObj);}}function writePlainTable(appendObj){$J(appendObj).css('display','block');}function writeTable(appendObj,detailHtml,hitNum){//console.log('in writetable for hitNum ' + hitNum + ' with html of length ' + detailHtml.length);$J(appendObj).append(detailHtml);//$J('#summaryitems-'+hitNum).css({"overflow-y":"auto","max-height":"300px"});$J(appendObj).css({"display":"none","overflow-y":"auto","max-height":"300px"});}function writeAnimatedLink(appendObj){$J(appendObj).css('display','none');var hitNum=$J(appendObj).attr('id').split('summaryitems-')[1];if ($J('#showhidecopies' + hitNum).length==0){var toggleButton = '';if($J('.availability-button'+hitNum).length==0){$J(appendObj).before(toggleButton);/*******$J("#showhidecopies" + hitNum).click(function(evt){ $J('#showhidecopies'+hitNum).clearQueue(); $J('#summaryitems-'+hitNum).clearQueue(); //console.log('click function on link ' + hitNum); $J("#summaryitems-" + hitNum).slideToggle("slow");evt.stopPropagation();//evt.preventDefault(); return false;}); // end click to toggle function*****/}//end new if}}function writeButton(appendObj){if($J(appendObj).parent().find('button[class^="availability-button"]').length==0){$J(appendObj).css('display','none')//var docString='SD_ILS:'+catKey;//var tableId = 'itemTable' + catKey;var hitNum=$J(appendObj).attr('id').split('summaryitems-')[1];var tableId='summaryitems-'+hitNum;var itemHtml=$J(appendObj)[0].outerHTML;buttonHtml = '';$J(appendObj).before(buttonHtml); $J('.availability-button' + hitNum).html(' Click to show holdings'); $J('.availability-button' + hitNum).hover(function() { $J(this).css('cursor', 'pointer'); });}}function toggleAvailabilityTable(hitNum) { if ($J('#summaryitems-' + hitNum).css('display') == 'none') { $J('#summaryitems-' + hitNum).css('display', 'block'); $J('.availability-button' + hitNum).html(' Hide'); } else { $J('.availability-button' + hitNum).html(' Click to show holdings'); $J('#summaryitems-' + hitNum).css('display', 'none'); }}function updateWebServiceFieldsSum(c) { var localHitNum; if (c.parentIds) { var f = c.fields; if (f) { if (c.childRecords) { for (var d = 0; d < c.childRecords.length; d++) { var h = c.childRecords[d]; var a = h.barcode; for (var j = 0; j < f.length; j++) { var g = f[j]; for (var b = 0; b < c.parentIds.length; b++) { var e = c.parentIds[b]; //is "detailHoldingsDiv0" /*** switch e to use new hitlist naming ***/ e = e.replace('detail','hitlist'); localHitNum=e.split("hitlistHoldingsDiv")[1]; var i = document.getElementById("asyncField" + e + g + a); console.log('hold selector is asyncField'+e+g+a); if (i && h[g]) { /*i is div#asyncFielddetailItemsDiv0SD_ITEM_HOLD_LINK0030302807067.asyncFieldSD_ITEM_HOLD_LINK.asyncInProgressSD_ITEM_HOLD_LINK*/ //i.innerHTML = h[g]; $J('#summaryitems-'+localHitNum).find(i).html(h[g]); $J('#summaryitems-'+localHitNum).find(i).removeClass("asyncInProgress" + g) var tempId=$J(i).attr('id'); // if(tempId.indexOf('SD_ITEM_HOLD_LINK')!==-1){ // tempId+='sumItems'; $J(i).attr('id',tempId); //} } } } } } for (var j = 0; j < f.length; j++) { var g = f[j]; for (var b = 0; b < c.parentIds.length; b++) { var e = c.parentIds[b]; /*** switch e to use new hitlist naming ***/ e = e.replace('detail','hitlist'); //$J("#" + e + " .asyncInProgress" + g).each(function() { $J('#summary-items'+localHitNum+ ' .asyncInProgress'+e).each(function(){ var k = this.id.substring(("asyncField" + e + g).length); var l = document.getElementById("asyncFieldDefault" + e + g + k); if (l) { this.innerHTML = l.innerHTML } else { this.innerHTML = "" } }) } } } } if (c.resultIndex) { if (c.availableCount) { $J("#totalAvailable" + c.resultIndex).prop("innerHTML", c.availableCount) } if (c.holdCount) { updateWebServiceParentFieldSum($J("#detailTitleHoldsNumber" + c.resultIndex), c.holdCount) } if (c.copyCount) { updateWebServiceParentFieldSum($J("#detailCopiesCountNumber" + c.resultIndex), c.copyCount) } ResultActions.updateResultAction("PLACE_HOLD", "result" + c.resultIndex, "detail", c.holdable) }}function updateWebServiceParentFieldSum(a, b) { if (a.length && a.hasClass("asyncInProgress")) { a.removeAttr("name"); stopSpinnersForSelector(a); a.prop("innerHTML", b) }}var locationMap={};var baseWsURL='https://sdws08.sirsidynix.net/kzpl_ilsws/';var clientID='DS_CLIENT';var locationDone=false;var maxAttempts=40;var curAttempt=0;function startReshelvingHitlist(rId){showReshelvingHitlist(rId);}// WAIT FOR POLICIESfunction waitReshelvingItemsh*tlist (bibKey,hitNum) {if (locationDone==false){curAttempt++;if(curAttempt<=maxAttempts){setTimeout(function() { waitReshelvingItemsh*tlist(bibKey,hitNum); },500);}// if 2 }// if 1else{ getReshelvingHitlist(bibKey,hitNum);}// else}// GET BIB IDfunction showReshelvingHitlist(rId) {var hitNum = rId.split("hitlist")[1];var bibKey = $J('#'+rId+'_DOC_ID .DOC_ID_value').text().split(':')[1]; getReshelvingPoliciesh*tlist(); waitReshelvingItemsh*tlist(bibKey,hitNum); }// GET RESHELVINGfunction getReshelvingHitlist (bibKey,hitNum) {$J.getJSON(baseWsURL+'rest/standard/lookupTitleInfo?clientID='+clientID+'&titleID='+bibKey+'&includeItemInfo=true&includeOPACInfo=false&json=true&callback=?',function(data){for (i=0;i
' + mySearch + '
' + xrefSearch + '
No catalog results
More Like This
'}); if (libraryThingForLibrariesOtherEditionsAndTranslations == true) { $('libraryThingForLibrariesContent'+detail).insert({'bottom' : ''}); } if (libraryThingForLibrariesSimilarItems == true) { $('libraryThingForLibrariesContent'+detail).insert({'bottom' : ''}); } if (libraryThingForLibrariesTagBrowser == true) { $('libraryThingForLibrariesContent'+detail).insert({'bottom' : ''}); } if (libraryThingForLibrariesReviews == true) { $('libraryThingForLibrariesContent'+detail).insert({'bottom' : ''}); } if (libraryThingForLibrariesShelfBrowseMini == true) { $('libraryThingForLibrariesContent'+detail).insert({'bottom' : ''}); } if (libraryThingForLibrariesShelfBrowseFull == true) { $('libraryThingForLibrariesContent'+detail).insert({'bottom' : ''}); } doLibraryThingConnector(customIsbn, "libraryThingForLibrariesContent"+detail);}function doLibraryThingConnector(isbn, elementName){jQuery('#LT_LB_iframeloading').hide();if (typeof(LibraryThingConnector) == 'undefined') {currentLTAttempt++;if(currentLTAttempt<= 10) { setTimeout("doLibraryThingConnector('"+isbn+"', '"+elementName+"' )", 250);}}else { LibraryThingConnector.backend.widgets.run(isbn, document.getElementById(elementName));jQuery('#LT_LB_iframeloading').hide(); jQuery('#LT_LB_divcontainer').show();}} function startLTFL(detail){jQuery('#LT_LB_iframeloading').hide();customIsbn=jQuery('#detail'+detail+'_ISBN').text().substring(0,13).trim();if(customIsbn!==''){ if (libraryThingForLibrariesEnabled == true) {currentLTAttempt = 1;if( typeof(LibraryThingConnector) == 'undefined' ) {libraryThingForLibrariesScript = new Element('script', { type: 'text/javascript', src: 'https://ltfl.librarything.com/forlibraries/js/enterprise_js.php?manual=1&id='+libraryThingForLibrariesAccountNumber,success:function(removeLoadImage){console.log('in success function');jQuery('#LT_LB_iframeloading').hide(); jQuery('#LT_LB_divcontainer').show();}});$$('head')[0].appendChild(libraryThingForLibrariesScript);}customLibraryThingForLibraries(customIsbn,detail); } //endIF}}//end startLibraryThingfunction fixHoldings () {jQuery('.detailItemsTableRow td:contains("1:EASTWOOD")').each(function(){ jQuery(this).text('Eastwood Branch');});jQuery('.detailItemsTableRow td:contains("1:OSHTEMO")').each(function(){ jQuery(this).text('Oshtemo Branch');});jQuery('.detailItemsTableRow td:contains("1:POWELL")').each(function(){ jQuery(this).text('Alma Powell Branch');});}function searchAuthorDetails(rId){var curAuthor=jQuery('#'+rId+'_INITIAL_AUTHOR_SRCH').text();var clickUrl='http://authoralerts.org/?siteid=24&AuthorName='+curAuthor;window.location.href = clickUrl;}function moveMeAuthorDetails(rId){var curObj=jQuery('#'+rId+'_AUTHOR_BUTTON');var curAuthor=jQuery('#'+rId+'_INITIAL_AUTHOR_SRCH').text();if(curAuthor=='' || !curAuthor){jQuery(curObj).remove();}else{var hitNum=rId.split('detail')[1];var appendObj=jQuery('#detailActions'+ rId);console.log(appendObj);jQuery (curObj).appendTo(appendObj);}}function processXrefs(rId) { var termSelector = '#' + rId.replace(/hitlist/,"results_bio"); var cellSelector = "#" + jQuery(termSelector).parent().attr('id'); // Left-justify repeated fields jQuery(termSelector + ' .displayElementText').css("display","inline-block"); // Hide the first line, so the main heading is first but can still be a link jQuery(termSelector + ' .displayElementLabel.XREF_KEY').hide(); // Turn the authority key into a button to show the full record jQuery(termSelector + ' .XREF_KEY').siblings('.displayDetailLink').children('a').text('Display full details'); jQuery(termSelector + ' .XREF_KEY').siblings('.displayDetailLink').children('a').addClass('xref-button'); if (window.location.href.indexOf("te=XREF") > -1) { setTimeout(function(){ jQuery('#facetFormAUTHOR').parent().hide(); }, 100); } jQuery('body.mobile ' + termSelector + ' .XREF_KEY').siblings('.displayDetailLink').children('a').addClass('xrefDetailLink'); // Change the main heading's link to an Everything search, and give it extra display weight jQuery(termSelector + ' .XREF_PERSONAL,.XREF_CORPORATE,.XREF_MEETING,.XREF_UNIFORM,.XREF_TOPICAL,.XREF_GEOGRAPHIC,.XREF_GENRE').find('a').each(function(){ var u = jQuery(this).attr("href"); var newSearchURL = u.replace("te=XREF","te="); newSearchURL = quoteParameter(newSearchURL,"qu") jQuery(this).attr("href",newSearchURL); jQuery(this).css("font-weight","700"); }); // end each loop //Add a button to search the catalog var mobileButtonBreak = ""; if (jQuery('.mobile').length) { mobileButtonBreak = "Name/Title:
'); } else { jQuery(cellSelector + ' .results_right').append('Name/Title:
'); } if (jQuery('#' + rId + '_XREF_IS_SERIES').text() == "Yes") { jQuery(cellSelector + ' .results_right').append('Series:
'); } else { jQuery(cellSelector + ' .results_right').append('Series:
'); } if (jQuery('#' + rId + '_XREF_IS_SUBJECT').text() == "Yes") { jQuery(cellSelector + ' .results_right').append('Subject:
'); } else { jQuery(cellSelector + ' .results_right').append('Subject:
'); }} //jQuery(termSelector + ' img.results_img').hide(); var coverImgSelector = '#'+rId.replace(/hitlist/,"syndeticsImg"); jQuery(coverImgSelector).attr('src', ''); //.hide(); jQuery(coverImgSelector).attr('title', ''); jQuery(coverImgSelector).attr('alt', ''); jQuery(coverImgSelector+'Title').remove();}function quoteParameter(sourceURL,key) { var rtn = sourceURL.split("?")[0], param, params_arr = [], queryString = (sourceURL.indexOf("?") !== -1) ? sourceURL.split("?")[1] : ""; if (queryString !== "") { params_arr = queryString.split("&"); for (var i = params_arr.length - 1; i >= 0; i -= 1) { param = params_arr[i].split("=")[0]; if (param === key) { var tmpParam = params_arr[i].split("="); tmpParam.splice(0,1) if (tmpParam.join("=").indexOf('"') == -1 && tmpParam.join("=").indexOf('%22') == -1) { params_arr[i] = param + '=%22' + tmpParam.join("=") + '%22' } } } rtn = rtn + "?" + params_arr.join("&"); } return rtn;}function importCreativeBugImages (rId) {if(document.getElementById('detailActions'+rId) != undefined){var displayType='detail';var imgIdPrefix='#detailCover';}else{var displayType='hitlist';var imgIdPrefix='#syndeticsImg';}var hitnum=rId.split(displayType)[1];var imgId=imgIdPrefix+hitnum;var textId=imgIdPrefix+hitnum+'Title';var imageURL = jQuery('#'+rId+'_CREATIVE_BUG_THUMBNAIL .CREATIVE_BUG_THUMBNAIL_value:first-child').text();if(imageURL){jQuery(imgId).attr('src',imageURL);jQuery(textId).text('');jQuery(imgId).parent().find('.no_image_text').css('visibility', 'hidden');// comment out the following to turn on the grey book covers and text } //else//{//jQuery(imgId).css('visibility','hidden');//jQuery(textId).css('visibility','hidden');//}// end turn on the grey book covers and text}function getBib(rId){var catKey;catKey=jQuery('#'+rId+'_DOC_ID').find('.DOC_ID_value').text().split(':')[1];getFullBib(catKey);}function getFullBib(catKey){jQuery.getJSON('https://sdws03.sirsidynix.net/kzpl_ilsws/rest/standard/lookupTitleInfo?clientID=DS_CLIENT&titleID='+catKey+'&includeOPACInfo=false&marcEntryFilter=all&json=true&callback=?',function(data){marcInfo=data.TitleInfo[0].BibliographicInfo.MarcEntryInfo;var marcOutput='';jQuery.each(marcInfo,function(entryIndex,entry){marcOutput+= this.entryID + ' ' + this.indicators + ' ' + this.text + "\n";});alert(marcOutput); });}// Important: Modifications to this file may be overwritten during an upgrade.// If you want to customize this widget and have those modifications persist through upgrades,// make a copy of this widget and make modifications to the copied widget.// You can then assign the copied widget to the detail or search result displays you want.if('undefined' === typeof eRC_Dialogs) { eRC_Dialogs = { //variables shownFormatCount:4, // edit this value to adjust when the format dialog expands holdNeedsEmail: false, dialogButtonClass:'ercDialogButton', primaryButtonClass:'ercPrimaryButton', secondaryButtonClass:'ercSecondaryButton', formatDialogClass:'ercFormatDialog', holdDialogClass:'ercHoldDialog', previewDialogClass:'ercPreviewDialog', durationId:'ercCurrentDays', formatDivId:'ercFormatDiv', holdDivId:'ercHoldDiv', formatDivClass:'ercFormatDiv', holdDivClass:'ercHoldDiv', formatRadioId:'ercFormatRadioDiv', radioName:'ercRadioGroup', radioClass:'ercRadio', msgDialogId:'ercMessageDialog', messageClass:'ercMessage', accountDialogClass:'ercAccountsDialog', accountErrorDiv:'ercAcctErrorDiv', accountFormClass:'ercAccountsForm', accountDivClass:'ercAccountDiv', accountLabelClass:'ercAccountLabel', accountSelectClass:'ercAccountSelect', accountInputClass:'ercAccountInput', //functions makeId:function(baseId, resultId) { return baseId + '_' + resultId; }, makeError:function(message) { return {status:'error', error:message}; }, showLoad:function() { var div = $J('body > .loadingDiv'); if(div.length < 1) { div = $J('').addClass('loadingDiv'); $J('body').append(div); } var backdrop = $J('body > .loadingBackdrop'); if(backdrop.length < 1) { backdrop = $J('').addClass('loadingBackdrop'); $J('body').append(backdrop); } backdrop.show(); div.show(); createSpinnersForSelector(div); }, hideLoad:function() { $J('.loadingBackdrop').hide(); $J('.loadingDiv').hide(); stopSpinnersForSelector($J('.loadingDiv')); }, expandRadioLabel:function(id, classes) { $J('#icon_' + id).toggleClass(classes); let description = document.getElementById("ercDescription_" + id); if(description.style.maxHeight) { description.style.maxHeight = null; } else { description.style.maxHeight = description.scrollHeight + "px"; } }, //format dialog functions findFormatDialog:function(callback, resultId, ercItem, isPreview) { if(!ercItem) { eRC_Dialogs.openErrorMessageDialog(callback, eRC_Dialogs.makeError('Error! Missing or malformed eResource Central item data')); return; } var formats = isPreview ? ercItem.previews : ercItem.formats; if(!formats || formats.length < 1) { eRC_Dialogs.openErrorMessageDialog(callback, eRC_Dialogs.makeError('Error! Missing or malformed eResource Central format data')); return; } if(formats.length === 1 || !ercItem.formatsUnique) { // Just one format to select, make it happen! eRC_Dialogs.hideLoad(); callback(formats[0], ercItem.drm, true); return; } var dialogId = eRC_Dialogs.makeId(isPreview ? eRC_Dialogs.previewDialogClass : eRC_Dialogs.formatDialogClass, resultId); var formatDialog = document.getElementById(dialogId); if(!formatDialog) { // We didn't find one, build it. eRC_Dialogs.showLoad(); formatDialog = eRC_Dialogs.buildFormatDialog(dialogId, ercItem, resultId, isPreview, callback); } formatDialog.setAttribute('value',''); // Ensure an empty value until one is selected. eRC_Dialogs.hideLoad(); $J(formatDialog).dialog('open'); }, buildFormatDialog:function(dialogId, ercItem, resultId, isPreview, callback) { if(!ercItem) { eRC_Dialogs.openErrorMessageDialog(callback, eRC_Dialogs.makeError('Error! Missing or malformed eResource Central item data')); return; } var formats = isPreview ? ercItem.previews : ercItem.formats; var formatDiv = eRC_Dialogs.buildFormatDiv(dialogId, formats, resultId, isPreview); var dialog = document.createElement('div'); dialog.setAttribute('id', dialogId); dialog.setAttribute('class', (isPreview ? eRC_Dialogs.previewDialogClass : eRC_Dialogs.formatDialogClass)+' ercDialog'); var form = document.createElement('form'); form.on('submit', function(event) { event.preventDefault(); closeModal($J('#' + dialogId), true); eRC_Dialogs.getFormat(callback, eRC_Dialogs.getRadioFormat(dialogId)); }); form.appendChild(formatDiv); if(formats.length > eRC_Dialogs.shownFormatCount) { form.appendChild(eRC_Dialogs.buildExpanderHandle(dialogId)); } dialog.appendChild(form); var dlgButtonDiv = document.createElement('div'); dlgButtonDiv.setAttribute('class', 'ercDialogButtonsDiv buttonSection'); var buttonValue = isPreview ? 'Preview' : (ercItem.drm ? 'Check Out' : 'Download'); dlgButtonDiv.appendChild(eRC_Dialogs.buildPrimaryButton('submit', buttonValue, dialogId + '_okButton')); dlgButtonDiv.appendChild(eRC_Dialogs.buildCancelButton(dialogId)); form.appendChild(dlgButtonDiv); document.body.appendChild(dialog); var title = isPreview ? 'Preview Options' : (ercItem.drm ? 'Checkout Options' : 'Download Options'); openModal($J(dialog), title, { autoOpen: false, resizable: false, appendTo: null, allowAutofocus: true, keepAlive: true, close: function() { if(eRC_DownloadButton.reloadNeeded) { window.location.reload(); }} }, true); return dialog; }, buildFormatDiv:function(dialogId, formats, resultId, isPreview) { var formatDivId = eRC_Dialogs.makeId(dialogId, eRC_Dialogs.formatDivId); var formatDiv = document.createElement('div'); formatDiv.setAttribute('id', formatDivId); formatDiv.setAttribute('class', 'fieldSection ercFieldSection'); for(var i = 0; i < formats.length; i++) { var radioValue = (isPreview ? 'prev:' : 'down:') + resultId + ':' + formats[i].key; var isDisabled = formats[i].totalCopies && !formats[i].availableCopies; if (i > 0) { var hRule = document.createElement('hr'); var hrClass = 'ercFormatSep'; if (i >= eRC_Dialogs.shownFormatCount) { hrClass += ' hidden'; } hRule.setAttribute('class', hrClass); formatDiv.appendChild(hRule); } formatDiv.appendChild(eRC_Dialogs.buildRadioButton(dialogId, radioValue, formats[i].name, isDisabled, i)); } return formatDiv; }, //hold dialog functions findHoldDialog:function(callback, resultId, ercItem, responseJson) { if(!ercItem) { eRC_Dialogs.openErrorMessageDialog(callback, eRC_Dialogs.makeError('Error! Missing or malformed eResource Central item data')); return; } var dialogId = eRC_Dialogs.makeId(eRC_Dialogs.holdDialogClass, resultId); var holdDialog = document.getElementById(dialogId); if(!holdDialog) { // We didn't find one, build it. eRC_Dialogs.showLoad(); holdDialog = eRC_Dialogs.buildHoldDialog(dialogId, ercItem, resultId, responseJson); } $J(holdDialog).find('.emailError').remove(); holdDialog.setAttribute('value',''); // Ensure an empty value until one is selected. $J(holdDialog).unbind('dialogclose').bind('dialogclose', function(event) { callback($J(holdDialog).val(), $J(holdDialog).find('input[id$=_autoCheckoutInput]').is(':checked')); }); eRC_Dialogs.hideLoad(); $J(holdDialog).dialog('open'); }, //responseJson could be the accounts call from erc or the email response, it's a bit overloaded buildHoldDialog:function(dialogId, ercItem, resultId, responseJson) { var dialog = document.createElement('div'); dialog.setAttribute('value',''); // Ensure an empty value until one is selected. dialog.setAttribute('id', dialogId); dialog.setAttribute('class', (eRC_Dialogs.holdDialogClass)+' ercDialog'); var holdDiv; if (com_sirsi_ent_page.isMobile) { eRC_Dialogs.addMobileHoldDiv(dialog, dialogId, ercItem, resultId, responseJson); } else { holdDiv = eRC_Dialogs.buildHoldDiv(dialogId, ercItem, resultId, responseJson); dialog.appendChild(holdDiv); } var makeableAccounts = []; if(responseJson.accountType) { for(var i = 0; i < responseJson.accountType.length; i++) { // JSON.parse(JSON.stringify(obj)) appears to be the fastest way to DEEP-copy an object // (see: http://jsperf.com/cloning-an-object/2) var account = JSON.parse(JSON.stringify(responseJson.accountType[i])); if(account.externalAccountUrl) { makeableAccounts.push(account); } } } var buttonHolder = document.createElement('div'); buttonHolder.setAttribute('class', 'ercDialogButtonsDiv buttonSection'); var buttonOnClick = 'javascript:$J(\'#' + dialogId + '\').val(eRC_Dialogs.getEmailHold(\'' + dialogId + '\',\'' + ercItem.id + '\')); if ($J(\'#' + dialogId + '\').val()) { closeModal($J(\'#' + dialogId + '\')); }'; buttonHolder.appendChild(eRC_Dialogs.buildPrimaryButton('button', 'Place Hold', dialogId + '_okButton', buttonOnClick)); dialog.appendChild(buttonHolder); if (com_sirsi_ent_page.isMobile) { buttonHolder.appendChild(eRC_Dialogs.buildCancelButton(dialogId)); var accountHolder = document.createElement('div') accountHolder.setAttribute('class', 'linkSection'); eRC_Dialogs.addAccountButtons(makeableAccounts, accountHolder, dialogId); dialog.appendChild(accountHolder); } else { eRC_Dialogs.addAccountButtons(makeableAccounts, buttonHolder, dialogId); buttonHolder.appendChild(eRC_Dialogs.buildCancelButton(dialogId)); } document.body.appendChild(dialog); openModal($J(dialog), 'Hold Options', {autoOpen: false, width: 'auto', resizable: false, appendTo: null, allowAutofocus: true, keepAlive: true}, true); return dialog; }, buildHoldDiv:function(dialogId, ercItem, resultId, responseJson) { var holdDivId = eRC_Dialogs.makeId(dialogId, eRC_Dialogs.holdDivId); var holdDiv = document.createElement('div'); holdDiv.setAttribute('id', holdDivId); var title = $J('#'+resultId+'_TITLE > .TITLE_value:first').text(); var format = $J('#'+resultId+'_FORMAT > .FORMAT_value').text(); var tbl = document.createElement('table'); tbl.setAttribute('id','holdTable'); tbl.setAttribute('class','holdsTable'); var thead = document.createElement('thead'); var tr = document.createElement('tr'); var th = document.createElement('th'); th.setAttribute('class','titleColumn'); var titleLabel = document.createTextNode('Title'); th.appendChild(titleLabel); tr.appendChild(th); th = document.createElement('th'); var formatLabel = document.createTextNode('Format'); th.appendChild(formatLabel); tr.appendChild(th); if (eRC_Dialogs.holdNeedsEmail) { th = document.createElement('th'); var emailLabel = document.createTextNode('Email Address'); th.appendChild(emailLabel); tr.appendChild(th); } if(ercItem['autoCheckoutSupported']) { th = document.createElement('th'); var autoCheckoutColumnLabel = document.createTextNode('Automatic Checkout'); th.appendChild(autoCheckoutColumnLabel); tr.appendChild(th); } thead.appendChild(tr); var tbody = document.createElement('tbody'); var tr1 = document.createElement('tr'); tr1.setAttribute('height','40'); tr1.setAttribute('valign','top'); var td = document.createElement('td'); td.setAttribute('class','titleCell'); var titleText = document.createTextNode(title); td.appendChild(titleText); tr1.appendChild(td); td = document.createElement('td'); td.setAttribute('class','formatCell'); var formatText = document.createTextNode(format); td.appendChild(formatText); tr1.appendChild(td); if (eRC_Dialogs.holdNeedsEmail) { td = document.createElement('td'); td.setAttribute('class','emailCell'); var emailInput = document.createElement("input"); emailInput.setAttribute('type','text'); emailInput.setAttribute('name','emailInput'); emailInput.setAttribute('class',dialogId+'_emailInput'); emailInput.setAttribute('size',30); if(responseJson.email) { emailInput.setAttribute('value', responseJson.email); } td.appendChild(emailInput); tr1.appendChild(td); } if(ercItem['autoCheckoutSupported']) { td = document.createElement('td'); td.setAttribute('class','autoCheckoutCell'); var autoCheckoutDiv = document.createElement('div'); var autoCheckoutInput = document.createElement("input"); autoCheckoutInput.setAttribute('type','checkbox'); autoCheckoutInput.setAttribute('name','autoCheckoutInput'); autoCheckoutInput.setAttribute('class',dialogId+'_autoCheckoutInput'); autoCheckoutInput.setAttribute('id',holdDivId+'_autoCheckoutInput'); autoCheckoutInput.setAttribute('size',30); autoCheckoutDiv.appendChild(autoCheckoutInput); var autoCheckoutLabel = document.createElement("label"); autoCheckoutLabel.setAttribute('for', holdDivId+'_autoCheckoutInput'); autoCheckoutLabel.setAttribute('class', 'cbLabel'); autoCheckoutLabel.innerText = "Automatically check out item when available"; autoCheckoutDiv.appendChild(autoCheckoutLabel); td.appendChild(autoCheckoutDiv); tr1.appendChild(td); } tbody.appendChild(tr1); tbl.appendChild(thead); tbl.appendChild(tbody); holdDiv.appendChild(tbl); return holdDiv; }, addMobileHoldDiv:function(dialog, dialogId, ercItem, resultId, responseJson) { var holdDivId = eRC_Dialogs.makeId(dialogId, eRC_Dialogs.holdDivId); var holdDiv = document.createElement('div'); holdDiv.setAttribute('id', holdDivId); holdDiv.setAttribute('class', 'holdsDiv'); var fieldList = document.createElement('div'); fieldList.setAttribute('class', 'fieldSection fieldList'); var title = $J('#'+resultId+'_TITLE > .TITLE_value:first').text(); var format = $J('#'+resultId+'_FORMAT > .FORMAT_value').text(); var titleFieldSection = document.createElement('div'); titleFieldSection.setAttribute('class','field'); var titleLabelDiv = document.createElement('div'); titleLabelDiv.setAttribute('class','label text-h5'); var titleLabel = document.createTextNode('Title'); titleLabelDiv.appendChild(titleLabel); titleFieldSection.appendChild(titleLabelDiv); var titleDiv = document.createElement('div'); titleDiv.setAttribute('class','fieldValue text-p'); var titleValue = document.createTextNode(title); titleDiv.appendChild(titleValue); titleFieldSection.appendChild(titleDiv); var formatFieldSection = document.createElement('div'); formatFieldSection.setAttribute('class','field'); var formatLabelDiv = document.createElement('div'); formatLabelDiv.setAttribute('class','label text-h5'); var formatLabel = document.createTextNode('Format'); formatLabelDiv.appendChild(formatLabel); formatFieldSection.appendChild(formatLabelDiv); var formatField = document.createElement('div'); formatField.setAttribute('class','fieldValue text-p'); var formatValue = document.createTextNode(format); formatField.appendChild(formatValue); formatFieldSection.appendChild(formatField); if (eRC_Dialogs.holdNeedsEmail) { var emailFieldSection = document.createElement('div'); emailFieldSection.setAttribute('class','fieldSection'); emailFieldSection.appendChild(eRC_Dialogs.buildLabel('Email Address', '')); var emailInput = document.createElement("input"); if(responseJson.email) { emailInput.setAttribute('value', responseJson.email); } emailInput.setAttribute('class', dialogId + '_emailInput fullwidth textbox'); emailFieldSection.appendChild(emailInput); } if(ercItem['autoCheckoutSupported']) { var autoCheckoutFieldSection = document.createElement('div'); autoCheckoutFieldSection.setAttribute('class','table fieldSection fullwidth'); var autoCheckoutDiv = document.createElement('div'); autoCheckoutDiv.setAttribute('class','checkbox-align'); var autoCheckoutInput = document.createElement("input"); autoCheckoutInput.setAttribute('type', 'checkbox'); autoCheckoutInput.setAttribute('name', 'autoCheckoutInput'); autoCheckoutInput.setAttribute('class', dialogId + '_autoCheckoutInput checkbox'); autoCheckoutInput.setAttribute('id', holdDivId + '_autoCheckoutInput'); var autoCheckoutLabel = document.createElement("label"); autoCheckoutLabel.setAttribute('for', holdDivId + '_autoCheckoutInput'); autoCheckoutLabel.setAttribute('class', 'label text-p checkbox-align'); autoCheckoutLabel.innerText = "Automatically check out item when available"; autoCheckoutDiv.appendChild(autoCheckoutInput); autoCheckoutFieldSection.appendChild(autoCheckoutDiv); autoCheckoutFieldSection.appendChild(autoCheckoutLabel); } fieldList.appendChild(titleFieldSection); fieldList.appendChild(formatFieldSection); holdDiv.appendChild(fieldList); dialog.appendChild(holdDiv); if (emailFieldSection) { dialog.appendChild(emailFieldSection); } if (autoCheckoutFieldSection) { dialog.appendChild(autoCheckoutFieldSection); } }, getEmailHold:function(dialogId,id) { if (!eRC_Dialogs.holdNeedsEmail) { return "@"; // This isn't a valid email address but that's okay, because we won't really use it } var dialog = $J('#' + dialogId); var emailField = dialog.find('.' + dialogId + '_emailInput'); var email = emailField.val().trim(); var regex = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/; if (regex.test(email) === true) { if (com_sirsi_ent_page.isMobile) { dialog.find('.errorSection').remove(); } return email; } else { if (dialog.find('.emailError').length === 0) { if (com_sirsi_ent_page.isMobile) { $J('#'+eRC_Dialogs.makeId(dialogId, eRC_Dialogs.holdDivId)).before(buildErrorDisplay(['Email addresses must match the pattern user@domain.extension'],'emailError')); } else { var span = document.createElement("span"); span.setAttribute('class','emailError'); $J('#'+eRC_Dialogs.makeId(dialogId, eRC_Dialogs.holdDivId)).before(span); $J('.emailError').text('Email addresses must match the pattern user@domain.extension'); } } return ""; } }, buildExpanderHandle:function(dialogId) { var expanderId = dialogId+'_expander'; var more = document.createElement('div'); more.setAttribute('id', expanderId); more.setAttribute('class', 'ercFormatExpander fieldSection'); more.setAttribute('onclick', '$J(\'#' + eRC_Dialogs.makeId(dialogId, eRC_Dialogs.formatDivClass) + ' .hidden\').each(function() { $J(this).removeClass("hidden"); }); $J(\'#' + expanderId + '\').hide();'); more.innerHTML = ''; return more; }, getRadioFormat:function(dialogId) { var key; $J('#'+dialogId+' .'+eRC_Dialogs.radioClass).each(function() { if(this.checked) { key = $J(this).val(); } }); return key; }, getFormat:function(callback, key) { var type = key.substring(0, key.indexOf(':')); key = key.substring(key.indexOf(':')+1); var resultId = key.substring(0, key.indexOf(':')); var formatKey = key.substring(key.indexOf(':')+1); eRC_Base.getTitleData(function(ercItem) { if(ercItem) { var formats = (type == 'prev') ? ercItem.previews : ercItem.formats; for(var i = 0; i < formats.length; i++) { if(formats[i].key == formatKey) { callback(formats[i], ercItem.drm); return; } } } callback(); }, resultId); }, //accounts dialog functions getSpecificAccountInputsClass:function(baseId) { return eRC_Dialogs.accountInputClass + baseId; }, findAccountsDialog:function(callback, resultId, format, responseJson, duration) { if(responseJson && responseJson.error) { eRC_Dialogs.openErrorMessageDialog(callback, responseJson); return; } if(!(responseJson && responseJson.accountType && responseJson.accountType.length > 0)) { eRC_Dialogs.openErrorMessageDialog(callback, eRC_Dialogs.makeError('Error! Missing or malformed response for eResource Central getAccounts call')); return; } var baseId = format.key+resultId; var dialogId = eRC_Dialogs.accountDialogClass + baseId; var accountDialog = document.getElementById(dialogId); if(!accountDialog) { // We didn't find one, build it. eRC_Dialogs.showLoad(); accountDialog = eRC_Dialogs.buildAccountDialog(baseId, dialogId, format, responseJson, duration); } if (!com_sirsi_ent_page.isMobile) { for (var i = 0; i < responseJson.accountType.length; i++) { eRC_Dialogs.fillAccountSelectionOptions(baseId, responseJson.accountType[i]); } } // Clear this value (it will be set upon form validation). accountDialog.removeAttribute('value'); $J('.'+eRC_Dialogs.accountErrorDiv).hide(); eRC_Dialogs.hideLoad(); var dialogOptions = { autoOpen: true, resizable: false, appendTo: null, close: function(event) { callback(accountDialog.getAttribute('value')); }, keepAlive: true, allowAutofocus: true } openModal($J(accountDialog), 'Checkout', dialogOptions, true); }, // you can get to this dialog by downloading RBdigital (Record a books, which is part of one click digital) buildAccountDialog:function(baseId, dialogId, format, responseJson, duration) { var errorDiv = document.createElement('div'); errorDiv.setAttribute('id', eRC_Dialogs.accountErrorDiv + baseId); errorDiv.setAttribute('class', eRC_Dialogs.accountErrorDiv); errorDiv.setAttribute('style', 'display: none;'); errorDiv.innerHTML = 'Error! The following fields are either missing or invalid.'; var formId = eRC_Dialogs.accountFormClass + baseId; var form = document.createElement('form'); form.setAttribute('id', formId); form.setAttribute('class', eRC_Dialogs.accountFormClass); form.setAttribute('onsubmit', 'javascript: eRC_Dialogs.handleAccountFormSubmit(\'' + baseId + '\', \'' + format.url + '\'); return false;'); var makeableAccounts = []; for(var i = 0; i < responseJson.accountType.length; i++) { // JSON.parse(JSON.stringify(obj)) appears to be the fastest way to DEEP-copy an object // (see: http://jsperf.com/cloning-an-object/2) var account = JSON.parse(JSON.stringify(responseJson.accountType[i])); if(format.authentication.ereaderAccount === account.key) { account.type = 'ereaderAccount'; } if(format.authentication.partnerAccount === account.key) { account.type = 'partnerAccount'; } if(!account.type) { return null; } if(account.externalAccountUrl) { makeableAccounts.push(account); } var accountDiv = eRC_Dialogs.buildAccountDiv(baseId, account); if(accountDiv) { form.appendChild(accountDiv); } } var slider = eRC_Dialogs.buildDurationSelector(baseId, duration); if(slider) { form.appendChild(slider); } var buttonHolder = document.createElement('div'); buttonHolder.setAttribute('class', 'ercDialogButtonsDiv buttonSection'); buttonHolder.appendChild(eRC_Dialogs.buildPrimaryButton('submit', 'Check Out')); form.appendChild(buttonHolder); if (com_sirsi_ent_page.isMobile) { buttonHolder.appendChild(eRC_Dialogs.buildCancelButton(dialogId)); var accountHolder = document.createElement('div') accountHolder.setAttribute('class', 'linkSection'); eRC_Dialogs.addAccountButtons(makeableAccounts, accountHolder, dialogId); form.appendChild(accountHolder); } else { eRC_Dialogs.addAccountButtons(makeableAccounts, buttonHolder, dialogId); } var accountDialog = document.createElement('div'); accountDialog.setAttribute('id', dialogId); accountDialog.setAttribute('class', eRC_Dialogs.accountDialogClass+' ercDialog'); accountDialog.appendChild(errorDiv); accountDialog.appendChild(form); document.body.appendChild(accountDialog); if (!com_sirsi_ent_page.isMobile) { // UI/UX recommended having a default for the selector, so leaving this for nonmobile $J('#' + formId + ' select').each(function () { this.selectedIndex = -1 }); } $J('#' + eRC_Dialogs.accountErrorDiv + baseId).hide(); return accountDialog; }, buildAccountDiv:function(baseId, account) { if(!(account && account.key)) { return null; } // we're going to be using this, set it up com_sirsi_ent_strings.setStringFormatFunc_JavaStyle(); var accountId = eRC_Dialogs.makeId(baseId, account.key); var accountDiv = document.createElement('div'); accountDiv.setAttribute('id', eRC_Dialogs.accountDivClass+accountId); accountDiv.setAttribute('class', eRC_Dialogs.accountDivClass + ' fieldSection'); var heading = document.createElement('h3'); heading.setAttribute('class', 'ercAcctDialogHeading headerField'); heading.innerHTML = String.format('Enter %s Account', account.name); accountDiv.appendChild(heading); var inputId = eRC_Dialogs.accountInputClass + accountId; var comboDiv = document.createElement('div'); var comboInput = document.createElement('input'); comboInput.setAttribute('id', inputId); comboInput.setAttribute('type', 'text'); comboInput.setAttribute('name', account.type); comboInput.setAttribute('autocomplete', 'off'); if (com_sirsi_ent_page.isMobile) { comboDiv.setAttribute('class', 'fieldSection'); var labelText = 'Username:'; if (labelText.indexOf(':') > 0) { labelText = labelText.substr(0, labelText.indexOf(':')) } comboDiv.appendChild(eRC_Dialogs.buildLabel(labelText, inputId)); comboInput.setAttribute('class', 'ercAccountSelectInput textbox fullwidth'); } else { accountDiv.appendChild(eRC_Dialogs.buildLabel('Username:', inputId)); comboInput.setAttribute('class', 'ercAccountSelectInput ' + eRC_Dialogs.getSpecificAccountInputsClass(baseId)); var selectId = eRC_Dialogs.accountSelectClass + accountId; var comboSelect = document.createElement('select'); comboSelect.setAttribute('id', selectId); comboSelect.setAttribute('tabindex', -1); comboSelect.setAttribute('class', eRC_Dialogs.accountSelectClass); comboSelect.setAttribute('onchange', 'javascript:document.getElementById(\'' + inputId + '\').value=document.getElementById(\'' + selectId + '\').value;'); $J(comboInput).keyup(function(e){ if(e && e.keyCode == 40) { $J(comboSelect).focus().click(); } comboSelect.selectedIndex = -1; }); comboDiv.appendChild(comboSelect); } comboDiv.appendChild(comboInput); accountDiv.appendChild(comboDiv); // provide a required password field, but only if actually required if (true === account.passwordRequired) { var passwordFieldId = 'ercAccountPasswordField' + accountId; var fieldHolder; var inputClass; if (com_sirsi_ent_page.isMobile) { fieldHolder = document.createElement('div'); fieldHolder.setAttribute('class', 'fieldSection'); accountDiv.appendChild(fieldHolder); } else { fieldHolder = accountDiv; } fieldHolder.appendChild(eRC_Dialogs.buildLabel('Password:', passwordFieldId)); var passwordField = document.createElement('input'); passwordField.setAttribute('type', 'password'); passwordField.setAttribute('id', passwordFieldId); passwordField.setAttribute('class', eRC_Dialogs.accountInputClass + ' textbox fullwidth ' + eRC_Dialogs.getSpecificAccountInputsClass(baseId)); passwordField.setAttribute('name', account.type + 'Pw'); fieldHolder.appendChild(passwordField); } // we're done using this, revert com_sirsi_ent_strings.resetString_dot_format(); return accountDiv; }, buildDurationSelector:function(baseId, duration) { if(!(duration && duration.maxCheckout)) { return null; } var defaultDays = duration.defaultCheckout ? duration.defaultCheckout : duration.maxCheckout; var durationId = eRC_Dialogs.makeId(eRC_Dialogs.durationId, baseId); var label = document.createElement('div'); var checkoutClass = 'ercCheckoutDiv'; if (com_sirsi_ent_page.isMobile) { checkoutClass += ' fieldSection'; if(duration.maxCheckout === duration.minCheckout) { label.setAttribute('class', 'label text-h5'); checkoutClass += ' field'; } else { label.setAttribute('class', 'label text-p'); } var labelText = 'Checkout duration:'; if (labelText.indexOf(':') > 0) { labelText = labelText.substr(0, labelText.indexOf(':')) } labelText += ' (day(s))'; label.innerHTML = labelText; } else { label.setAttribute('class', 'ercCheckoutLabel'); label.innerHTML = 'Checkout duration:'; } var checkout = document.createElement('div'); checkout.setAttribute('id', 'ercCheckout_' + baseId); checkout.setAttribute('class', checkoutClass); checkout.appendChild(label); var currentDays = document.createElement('span'); currentDays.setAttribute('id', durationId); currentDays.innerHTML = defaultDays; var selection = document.createElement('div'); if (com_sirsi_ent_page.isMobile) { selection.setAttribute('class', 'fieldValue text-p'); } else { selection.setAttribute('class', 'ercCheckoutSelection'); } selection.innerHTML = ' day(s)'; selection.insertBefore(currentDays, selection.childNodes[0]); if(duration.maxCheckout === duration.minCheckout) { checkout.appendChild(selection); } else { if (com_sirsi_ent_page.isMobile) { // non mobile slider is not mobile friendly, make a dropdown var min = duration.minCheckout ? duration.minCheckout : 1; var selectorId = 'ercSelector_' + baseId; var selector = document.createElement('select'); selector.setAttribute('id', selectorId); selector.setAttribute('blankOption', 'NEVER'); selector.setAttribute('class', 'checkoutTimeSelector dropDown fullwidth'); for (var i = duration.minCheckout; i <= duration.maxCheckout; i++) { var option = document.createElement('option'); option.setAttribute('value', i); if (i == duration.minCheckout) { option.setAttribute('selected', 'true'); option.selected } option.innerHTML = i; selector.appendChild(option); } selector.setAttribute('value', duration.minCheckout); checkout.appendChild(selector); var iArrow = document.createElement('i'); iArrow.setAttribute('class', 'fa fa-caret-down select-arrow'); iArrow.setAttribute('aria-hidden', 'true'); checkout.appendChild(iArrow); } else { // original non mobile slider var min = duration.minCheckout ? duration.minCheckout : 1; var minSpan = document.createElement('span'); minSpan.setAttribute('class', 'ercMinDays'); minSpan.innerHTML = min; var maxSpan = document.createElement('span'); maxSpan.setAttribute('class', 'ercMaxDays'); maxSpan.innerHTML = duration.maxCheckout; var selectorId = 'ercSelector_' + baseId; var selector = document.createElement('div'); selector.setAttribute('id', selectorId); selector.setAttribute('class', 'checkoutTimeSelector'); var slider = document.createElement('div'); slider.setAttribute('class', 'ercCheckoutSlider'); slider.appendChild(minSpan); slider.appendChild(maxSpan); slider.appendChild(selector); slider.appendChild(selection); checkout.appendChild(slider); $J(selector).slider({ min:min, max:duration.maxCheckout, value:defaultDays, slide: function( event, ui ) { document.getElementById(durationId).innerHTML = ui.value; } }); } } return checkout; }, buildPrimaryButton: function(inputType, buttonLabel, buttonId, buttonClick) { var primaryButton = document.createElement('input'); primaryButton.setAttribute('type', inputType); primaryButton.setAttribute('value', buttonLabel); if (com_sirsi_ent_page.isMobile) { primaryButton.setAttribute('class', 'button fullwidth'); } else { primaryButton.setAttribute('class', eRC_Dialogs.primaryButtonClass + ' ' + eRC_Dialogs.dialogButtonClass); } if(buttonId) { primaryButton.setAttribute('id', buttonId); } if(buttonClick) { primaryButton.setAttribute('onclick', buttonClick); } return primaryButton; }, buildCancelButton: function(dialogId) { var cancelButton = document.createElement('input'); cancelButton.setAttribute('type', 'button'); cancelButton.setAttribute('id', dialogId + '_cancelButton'); cancelButton.setAttribute('onclick', 'javascript:closeModal($J(\'#' + dialogId + '\'));$J(".errorSection").remove();'); cancelButton.setAttribute('value', 'Cancel'); if (com_sirsi_ent_page.isMobile) { cancelButton.setAttribute('class', 'button fullwidth cancel'); } else { cancelButton.setAttribute('class', eRC_Dialogs.secondaryButtonClass + ' ' + eRC_Dialogs.dialogButtonClass); } return cancelButton; }, buildLabel: function(labelText, labelFor) { var labelElement = document.createElement('label'); labelElement.innerHTML = labelText; if(labelFor) { labelElement.setAttribute('for', labelFor); } if (com_sirsi_ent_page.isMobile) { var labelHolder = document.createElement('div'); labelHolder.setAttribute('class', 'label text-p'); labelHolder.appendChild(labelElement); return labelHolder; } else { labelElement.setAttribute('class', eRC_Dialogs.accountLabelClass); return labelElement; } }, buildRadioButton: function(dialogId, radioValue, formatNameText, isDisabled, radioIndex) { let radioId = eRC_Dialogs.makeId(eRC_Dialogs.radioClass, eRC_Dialogs.makeId(dialogId, radioIndex)); let radio = document.createElement('input'); radio.setAttribute('type', 'radio'); radio.setAttribute('name', eRC_Dialogs.makeId(eRC_Dialogs.radioName, dialogId)); radio.setAttribute('id', radioId); radio.setAttribute('class', eRC_Dialogs.radioClass + ' v-middle radio'); radio.setAttribute('value', radioValue); if(radioIndex === 0) { radio.setAttribute('checked', 'checked'); } if(isDisabled) { radio.setAttribute('disabled', 'disabled'); } let label = document.createElement('label'); label.setAttribute('for', radioId); let formatDiv = document.createElement('div'); formatDiv.setAttribute("class", "ercCollapsible"); //get format details let formatDetails = eRC_Base.getFormatDetails(formatNameText); if(formatDetails) { radio.className += ' formatDescription'; //used to distinguish from hold modal let idBase = eRC_Dialogs.makeId(dialogId, radioIndex); let icon = document.createElement('i'); let accessibleVia = document.createElement('div'); let description = document.createElement('p'); icon.setAttribute("class", com_sirsi_ent_page.isMobile ? "fa fa-angle-down fa-2x" : "fa fa-caret-right"); label.setAttribute("onclick", "eRC_Dialogs.expandRadioLabel('" + idBase + "'," + ( com_sirsi_ent_page.isMobile ? "'fa-angle-up fa-angle-down'" : "'fa-caret-right fa-caret-down'") + ")"); radio.addEventListener("keydown", event => { if(event.key === ' ' || event.code === 'Space') { eRC_Dialogs.expandRadioLabel(idBase, com_sirsi_ent_page.isMobile ? 'fa-angle-up fa-angle-down' : 'fa-caret-right fa-caret-down') } }); if(com_sirsi_ent_page.isMobile) { description.appendChild(document.createElement('br')); } description.append(eRC_Base.createAnchorTextLinks(formatDetails.description, formatDetails.descriptionParams)); icon.setAttribute("id", "icon_" + idBase); icon.setAttribute("aria-hidden", "true"); formatDiv.appendChild(document.createTextNode(formatDetails.type + " (" + formatNameText + ")")); accessibleVia.append(eRC_Base.createAnchorTextLinks(formatDetails.accessibleVia, formatDetails.accessibleViaParams)); accessibleVia.setAttribute("class", "ercAccessibleVia"); description.setAttribute("class", "ercDescriptionContent"); description.setAttribute("id", "ercDescription_" + idBase); label.appendChild(icon); label.appendChild(formatDiv); label.appendChild(accessibleVia); label.appendChild(description); } else { formatDiv.appendChild(document.createTextNode(formatNameText)); label.appendChild(formatDiv); } let radioRowClass = eRC_Dialogs.formatDivClass + ' ' + eRC_Dialogs.makeId(dialogId, eRC_Dialogs.formatDivClass); if(radioIndex >= eRC_Dialogs.shownFormatCount) { radioRowClass += ' hidden'; } let radioHolder; if (com_sirsi_ent_page.isMobile) { label.setAttribute('class', 'text-p label checkbox-align'); radioRowClass += ' radioRow table fullwidth'; radioHolder = document.createElement('div'); radioHolder.setAttribute('class', 'checkbox-align ' + (formatDetails ? ' formatDescription' : '')); radioHolder.appendChild(radio); } else { let labelClass = 'ercRadioLabel'; if(isDisabled) { labelClass += ' disabledLabel'; } label.setAttribute('class', labelClass); radioHolder = radio; } var radioRow = document.createElement('div'); radioRow.setAttribute('id', eRC_Dialogs.makeId(eRC_Dialogs.formatRadioId, eRC_Dialogs.makeId(dialogId, radioIndex))); radioRow.setAttribute('class', radioRowClass); radioRow.appendChild(radioHolder); radioRow.appendChild(label); return radioRow; }, //this function builds buttons (and a link) and add to the div based on the accounts passed in addAccountButtons:function(accounts, parentElement, dialogId) { // we're going to be using this, set it up com_sirsi_ent_strings.setStringFormatFunc_JavaStyle(); if (com_sirsi_ent_page.isMobile) { for (var i = 0; i < accounts.length; i++) { var linkDiv = document.createElement('div'); linkDiv.setAttribute('class', 'linkWrapper'); var onClickText = 'javascript: safeWindowOpen("' + accounts[i].externalAccountUrl + '", "_blank"); return false;'; var accountLink = document.createElement('a'); accountLink.setAttribute('href', "#"); accountLink.setAttribute('onclick', onClickText); accountLink.innerHTML = String.format('Create %s Account', accounts[i].name); linkDiv.appendChild(accountLink); parentElement.appendChild(linkDiv); } } else { // leave non mobile as is for (var i = 0; i < accounts.length; i++) { var onClickText = 'javascript: safeWindowOpen("' + accounts[i].externalAccountUrl + '", "_blank"); return false;'; var newButton = document.createElement('button'); newButton.setAttribute('class', eRC_Dialogs.secondaryButtonClass + ' ' + eRC_Dialogs.dialogButtonClass); newButton.setAttribute('onclick', onClickText); newButton.innerHTML = String.format('Create %s Account', accounts[i].name); parentElement.appendChild(newButton); } } // we're done using this, revert com_sirsi_ent_strings.resetString_dot_format(); }, fillAccountSelectionOptions:function(baseId, account) { var accountId = eRC_Dialogs.makeId(baseId, account.key); var comboSelect = document.getElementById(eRC_Dialogs.accountSelectClass+accountId); while (comboSelect.hasChildNodes()) { comboSelect.removeChild(comboSelect.lastChild); } for (var i = 0; i < account.account.length; i++) { var acct = account.account[i]; var option = document.createElement('option'); option.setAttribute('value', acct.id); if(acct.isDefault) { document.getElementById(eRC_Dialogs.accountInputClass+accountId).value = acct.id; } option.innerHTML = acct.id; comboSelect.appendChild(option); } comboSelect.selectedIndex = -1; $J('#'+eRC_Dialogs.accountDivClass+accountId+' input').first().select(); }, handleAccountFormSubmit:function(baseId, formatUrl) { var data = formatUrl + '?'; var proceed = true; // looking for input that starts with input class because tapestry puts random junk on the end. $J('input[id^="'+eRC_Dialogs.accountInputClass+'"]').each(function() { var value = this.value; if(value){ data += this.getAttribute('name') + '=' + value + '&'; } else { $J('#' + eRC_Dialogs.accountErrorDiv + baseId).show(); proceed = false; } }); if(proceed) { var duration = document.getElementById(eRC_Dialogs.makeId(eRC_Dialogs.durationId, baseId)); if(duration && duration.innerHTML) { data += 'duration=' + duration.innerHTML + '&'; } document.getElementById(eRC_Dialogs.accountDialogClass+baseId).setAttribute('value',data.substring(0, data.length - 1)); closeModal($J('#' + eRC_Dialogs.accountDialogClass + baseId)); } }, //API functions openFormatDialog:function(callback, resultId, isPreview) { if(!(resultId && 'function' === typeof callback)) { eRC_Dialogs.openErrorMessageDialog(callback, eRC_Dialogs.makeError('Error! Function call made with one or more invalid parameters: "callback", "resultId"')); return; } if(eRC_DownloadButton.reloadNeeded) { closeModal($J('#loginModal')); } var ercChildInfo = eRC_Dialogs.getErcChildInfo(resultId); if (ercChildInfo) { eRC_Dialogs.findFormatDialog(callback, resultId, ercChildInfo, isPreview); } else { eRC_Base.getTitleData(function(ercItem) { if (ercItem) { eRC_Dialogs.findFormatDialog(callback, resultId, ercItem, isPreview); } }, resultId); } }, getErcChildInfo:function(hitlistOrDetailResultId) { var resultId = hitlistOrDetailResultId.replace('detail', ''); // Don't replace hitlist, because we only want to use child info for detail actions. if (typeof ErcChildRecordRiver != 'undefined' && ErcChildRecordRiver.titleChildInfo && ErcChildRecordRiver.titleChildInfo[resultId]) { // Get active child index from the appropriate carousel for this result. var activeChildId = $J('#jsChildCarousel_' + resultId).find('.erc_child_image_div.active').attr('id'); if (activeChildId) { var childIndex = activeChildId.substring(activeChildId.lastIndexOf('_') + 1); var childData = ErcChildRecordRiver.titleChildInfo[resultId]; if(typeof childData != 'undefined' && childData) { return childData.children[childIndex]; } } } return null; }, openHoldDialog:function(callback, resultId) { if(!(resultId && 'function' === typeof callback)) { eRC_Dialogs.openErrorMessageDialog(callback, eRC_Dialogs.makeError('Error! Function call made with one or more invalid parameters: "callback", "resultId"')); return; } eRC_Dialogs.showLoad(); eRC_Base.getTitleData(function(ercItem) { eRC_Dialogs.openEmailDialog(callback, resultId, ercItem); }, resultId); }, openEmailDialog:function(callback, resultId, ercItem) { if(!(resultId && 'function' === typeof callback)) { eRC_Dialogs.openErrorMessageDialog(callback, eRC_Dialogs.makeError('Error! Function call made with one or more invalid parameters: "callback", "resultId"')); return; } // TODO Replace these when eRC adds in a flag to the availability response to tell us when the vendor needs an email address. eRC_Dialogs.holdNeedsEmail = ercItem.id.indexOf("OVERDRIVE") === 0 || ercItem.id.indexOf("BAKER_TAYLOR") === 0 || ercItem.id.indexOf("CANTOOKSTATION") === 0; if (eRC_Dialogs.holdNeedsEmail) { eRC_Base.getHoldEmail(function(responseJson) { eRC_Dialogs.findHoldDialog(callback, resultId, ercItem, responseJson); }, resultId); } else { var auth = ercItem.formats[0].authentication; //I'm using the first format here, as there's no format selection for holds if(auth.accountsUrl) { eRC_Base.getAccountsResponse(function(responseJson) { eRC_Dialogs.findHoldDialog(callback, resultId, ercItem, responseJson); }, auth.accountsUrl); } else { eRC_Dialogs.findHoldDialog(callback, resultId, ercItem, {}); } } }, openAccountDialog:function(callback, resultId, format, duration) { // the patron MUST be logged in for this function to work var isValidFormat = format && format.key && format.url && format.authentication; if(!(resultId && isValidFormat && 'function' === typeof callback)) { eRC_Dialogs.openErrorMessageDialog(callback, eRC_Dialogs.makeError('Error! Function call made with one or more invalid parameters: "callback", "resultId", "format"')); return; } var auth = format.authentication; if(!(auth.partnerAccount || auth.ereaderAccount)) { // No more authentication needed, make it happen! callback(format.url); return; } if(!(auth.accountsUrl)) { eRC_Dialogs.openErrorMessageDialog(callback, eRC_Dialogs.makeError('Error! Missing eResource Central getAccounts URL')); return; } eRC_Dialogs.showLoad(); eRC_Base.getAccountsResponse(function(responseJson) { eRC_Dialogs.findAccountsDialog(callback, resultId, format, responseJson, duration); }, auth.accountsUrl); }, openMessageDialog: function(callback, resultId, messageInfo, showEReadersLink, isIframe) { if(!(resultId && messageInfo && messageInfo.message)) { eRC_Dialogs.openErrorMessageDialog(callback, eRC_Dialogs.makeError('Error! Function call made with one or more invalid parameters: "resultId", "messageInfo"')); return; } eRC_Dialogs.closeMessageDialog(resultId); eRC_Dialogs.showLoad(); var dialogId = eRC_Dialogs.makeId(eRC_Dialogs.messageClass, resultId); var msgDialog = document.getElementById(dialogId); if(!msgDialog) { msgDialog = document.createElement('div'); msgDialog.setAttribute('id', dialogId); var closeButton = document.createElement('a'); closeButton.setAttribute('class',eRC_Dialogs.primaryButtonClass+' '+eRC_Dialogs.dialogButtonClass); closeButton.setAttribute('href', '#'); closeButton.setAttribute('onclick','javascript:eRC_Dialogs.closeMessageDialog(\'' + resultId + '\');'); closeButton.innerHTML = 'Close'; msgDialog.appendChild(closeButton); document.body.appendChild(msgDialog); } var messageId = eRC_Dialogs.makeId(eRC_Dialogs.messageClass, resultId); var message = document.getElementById(messageId); if(!message) { message = document.createElement('div'); message.setAttribute('id', messageId); message.setAttribute('class', eRC_Dialogs.messageClass); msgDialog.insertBefore(message, msgDialog.childNodes[0]); } message.innerHTML = messageInfo.message; eRC_Dialogs.hideLoad(); var title = messageInfo.title ? messageInfo.title : ''; var dialogOptions = { dialogClass:eRC_Dialogs.formatDialogClass, resizable: false, close: callback, appendTo: null, allowAutofocus: true }; if (isIframe) { dialogOptions.width = 'auto'; } openModal($J('#'+dialogId), title, dialogOptions, false); }, closeMessageDialog:function(resultId) { if(resultId) { var dialogId = '#'+eRC_Dialogs.makeId(eRC_Dialogs.messageClass, resultId); // check if initialized before trying to close if ($J(dialogId).hasClass("ui-dialog-content") && $J(dialogId).dialog("isOpen")) { $J('#' + eRC_Dialogs.makeId(eRC_Dialogs.messageClass, resultId)).dialog('close'); } } }, // All parameters are required, and response MUST have a 'error' message object! // Also, you should likely never edit this function; you've been warned. openErrorMessageDialog:function(callback, response) { if(response.error) { $J('.'+eRC_Dialogs.messageClass).each(function() { $J(this).dialog('close'); }); if (com_sirsi_ent_page.isMobile) { showMessageModal('Error', [response.error], true, function() { if('function' === typeof callback) { callback(response); } }); } else { eRC_Dialogs.openMessageDialog(function() { if('function' === typeof callback) { callback(response); } }, 'ercErrorDialog', {title:'Error', message:response.error}); } } else { if('function' === typeof callback) { callback(response); } } }, closeErrorMessageDialog:function(resultId) { eRC_Dialogs.closeMessageDialog(resultId); }, };}/*********************************************************************************//**** Copyright 2010-2023 SirsiDynix Written by Consulting Services ****//**** CTS-159 Updates for Enterprise 5.2.1 ****//*********************************************************************************/function modifyNewSearchIndex (rId) { var personalAuthor = 'AUTHOR_DETAIL_KZPL'; // Reference the name of your custom Search Field for Personal Author between the quotes. var addedAuthor = 'ADDED_AUTHOR_DISPLAY_NAME'; // Reference the name of your custom Search Field for Added Author between the quotes. var series = 'KZPL_SERIES_TITLE'; // Reference the name of your custom Search Field for Series between the quotes. /**NOTE: ADDED_AUTHOR loop's hidden marc map/search field of DSP_ADDED_AUTHOR_NS has a subfield a suffixed with a '~#', which we split off of to isolate the subfield a content from the subfield t content. The presence of the subfield t allows the search field to produce multiple fields for cases where the multiple 700 tags are for the same author, but differ based on the subfield t***/ if (rId.indexOf('detail') !== -1) { var resultsId = rId.split("detail")[1]; var selector = '#detail_biblio'+resultsId; } else { var resultsId = rId.split("hitlist")[1]; var selector = '#results_bio'+resultsId; } jQuery(selector).find('.displayElementText.SUBJECT_TERM a').each(function(){ var searchString = '&rt=false|||SUBJECT|||Subject'; var myHREF = jQuery(this).attr('href'); var newHREF = myHREF + searchString; jQuery(this).attr('href', newHREF); }); jQuery(selector).find('.displayElementText.GEOGRAPHIC_TERM a').each(function(){ var searchString = '&rt=false|||SUBJECT|||Subject'; var myHREF = jQuery(this).attr('href'); var newHREF = myHREF + searchString; jQuery(this).attr('href', newHREF); }); jQuery(selector).find('.displayElementText.CORPORATE_SUBJECT a').each(function(){ var searchString = '&rt=false|||SUBJECT|||Subject'; var myHREF = jQuery(this).attr('href'); var newHREF = myHREF + searchString; jQuery(this).attr('href', newHREF); }); jQuery(selector).find('.displayElementText.CONFERENCE_SUBJECT a').each(function(){ var searchString = '&rt=false|||SUBJECT|||Subject'; var myHREF = jQuery(this).attr('href'); var newHREF = myHREF + searchString; jQuery(this).attr('href', newHREF); }); jQuery(selector).find('.displayElementText.GENRE_TERM a').each(function(){ var searchString = '&rt=false|||GENRE_TERM|||Genre'; var myHREF = jQuery(this).attr('href'); var newHREF = myHREF + searchString; jQuery(this).attr('href', newHREF); }); jQuery(selector).find('.displayElementText.PERSONAL_AUTHOR a').each(function(){ var searchString = '&rt=false|||AUTHOR|||Author'; var myHREF = jQuery(this).attr('href'); var myHREFStart = myHREF.match(/^.*qu=/g); var myHREFEnd = myHREF.match(/&.*/g); var newHREF = jQuery('#'+rId+'_'+personalAuthor+' .'+personalAuthor+'_value').text(); newHREF = myHREFStart+newHREF+myHREFEnd+searchString; jQuery(this).attr('href', newHREF); }); jQuery(selector).find('.displayElementText.CORPORATE_AUTHOR a').each(function(){ var searchString = '&rt=false|||AUTHOR|||Author'; var myHREF = jQuery(this).attr('href'); var newHREF = myHREF + searchString; jQuery(this).attr('href', newHREF); }); jQuery(selector).find('.displayElementText.CONFERENCE_AUTHOR a').each(function(){ var searchString = '&rt=false|||AUTHOR|||Author'; var myHREF = jQuery(this).attr('href'); var newHREF = myHREF + searchString; jQuery(this).attr('href', newHREF); }); jQuery(selector).find('.displayElementText.ADDED_AUTHOR a').each(function(i){ var authorCounter = ++i; var searchString = '&rt=false|||AUTHOR|||Author'; var myHREF = jQuery(this).attr('href'); var myHREFStart = myHREF.match(/^.*qu=/g); var myHREFEnd = myHREF.match(/&.*/g); var newHREF = jQuery('#'+rId+'_'+addedAuthor+' .'+addedAuthor+'_value:nth-child('+authorCounter+')').text().split('~#')[0]; newHREF = myHREFStart+newHREF+myHREFEnd+searchString; jQuery(this).attr('href', newHREF); }); jQuery(selector).find('.displayElementText.ADDED_CONFERENCE_AUTHOR a').each(function(){ var searchString = '&rt=false|||AUTHOR|||Author'; var myHREF = jQuery(this).attr('href'); var newHREF = myHREF + searchString; jQuery(this).attr('href', newHREF); }); jQuery(selector).find('.displayElementText.ADDED_CORPORATE_AUTHOR a').each(function(){ var searchString = '&rt=false|||AUTHOR|||Author'; var myHREF = jQuery(this).attr('href'); var newHREF = myHREF + searchString; jQuery(this).attr('href', newHREF); }); jQuery(selector).find('.displayElementText.SERIES a').each(function(j){ var seriesCounter = ++j; var searchString = '&rt=false|||SERIES|||Series'; var myHREF = jQuery(this).attr('href'); var myHREFStart = myHREF.match(/^.*qu=/g); var myHREFEnd = myHREF.match(/&.*/g); var newHREF = jQuery('#'+rId+'_'+series+' .'+series+'_value:nth-child('+seriesCounter+')').text(); newHREF = myHREFStart+newHREF+myHREFEnd+searchString; jQuery(this).attr('href', newHREF); }); } // End function// Important: Modifications to this file may be overwritten during an upgrade.// If you want to customize this widget and have those modifications persist through upgrades,// make a copy of this widget and make modifications to the copied widget.// You can then assign the copied widget to the detail or search result displays you want.var libraryThingDevKey = "2172-102732069"; //This is key required to use Library Thing services. Each library should get their own key. The key is normally limited to 1000 requests a day.var libraryThingCoverImages = true; //A cover image from Library Thing (if available) will be inserted into the left side of the search result.var libraryThingCoverImageSize = "medium"; // small/medium/large dictates the size of the cover image returned by Library Thing.var libraryThingRatingImage = true; //A rating of one to five stars will appear in the left side of a search result.var libraryThingRating = true; //A numerical rating will appear in the left side of a search result.var libraryThingReviews = true; //A link to the review for the search result will appear on the left side of the search result.var libraryThingCopies = true; //The number of Library Thing members with a copy of the book will appear on the left side of the search result.var libraryThingGet = true; //A link labled Get This Item will appear on the left side of a search result. This link will take the user to a page that shows where they can get the book mentioned in the search result.var libraryThingDataLabel = true; //A "Library Thing Data:" label will appear in front of the links in the summary section of a search result.var libraryThingOverview = true; //A link to the item overview will appear in the summary section of the search result.var libraryThingCovers = true; //A link to the item covers will appear in the summary section of the search result.var libraryThingRecommendations = true; //A link to the item recommendations will appear in the summary section of the search result.var libraryThingDescriptions = true; //A link to the item description will appear in the summary section of the search result.var libraryThingConversations = true; //A link to the item conversations will appear in the summary section of the search result.var libraryThingCommonKnowledge = true; //A link to the item's common knowledge page will appear in the summary section of the search result.var libraryThingEditions = true; //A link to the item editions will appear in the summary section of the search result.var libraryThingResultISBNSelector = '[id^="hitlist"][id$="ISBN"]';var libraryThingTabsCallbacksCount = 0;function prepLibraryThing(resultId, tabId){ var items = ""; var isbns = []; var resultContainer = $J(getSelectorForResults(tabId)); resultContainer.find(libraryThingResultISBNSelector).each(function(index) { if(this.hasChildNodes()) { isbn = this.childNodes[0].innerHTML; if(isbn) { if(items=="") { items += isbn; } else { items+=","+isbn; } } } }); var callbackName = 'goLibraryThing' + libraryThingTabsCallbacksCount++; window[callbackName] = function(data) { goLibraryThing(data, tabId); }; libraryThingScript = new Element('script', { type: 'text/javascript', src: '//www.librarything.com/api/json/workinfo.js?ids='+items+'&callback=' + callbackName }); $J('head').append(libraryThingScript);}function goLibraryThing(data, tabId) { var resultContainer = $J(getSelectorForResults(tabId)); var resultsHandled = []; var libraryThingWrapperOpen = com_sirsi_ent_page.isMobile ? '' : "
"; for (bookKey in data) { var book = data[bookKey]; var customHits = resultContainer.find(libraryThingResultISBNSelector + ':contains(' + bookKey + ')').closest('[id^=results_cell]').each(function() { var customHit = $J(this); if(resultsHandled.indexOf(customHit.attr('id')) == -1) { resultsHandled.push(customHit.attr('id')); /* cover images */ if (libraryThingCoverImages == true) { var imgSrc = '//covers.librarything.com/devkey/'+libraryThingDevKey+'/'+libraryThingCoverImageSize+'/isbn/'+bookKey; var coverImage = new Image(); coverImage.src = imgSrc; if (coverImage.width > 1) { customHit.find('.results_img').attr('src', imgSrc); customHit.find('.no_image_text').css('display', 'none'); } } var coverLinkInsert = ''; /* rating image */ if (libraryThingRatingImage && book.rating_img) { coverLinkInsert += libraryThingWrapperOpen + "
"; } /* rating number */ if (libraryThingRating && book.rating != "0") { coverLinkInsert += libraryThingWrapperOpen + "Book Rating: "+book.rating+"
"; } /* copies */ if (libraryThingCopies) { if (book.copies != "0") { coverLinkInsert += libraryThingWrapperOpen + "Members: "+book.copies+"