Search Results for "NEWFICA" (2024)

'); } else { // add button to button column $J('#detailActions' + resultId).append('

'); } } } else { ResultActions.updateResultAction('ERC_PREVIEW', 'result' + resultIndex, hitlistOrDetail, false); } }, resultId); }, getErcPreviewFormats:function(resultIndex, hitlistOrDetail) { var resultId = hitlistOrDetail + resultIndex; eRC_Dialogs.openFormatDialog(function(selectedFormat) { if(!selectedFormat || selectedFormat.error) { return; } var message; if('DOWNLOAD' === selectedFormat.action) { message = 'Your download will start shortly.'; window.location.assign(selectedFormat.url); } else if('REDIRECT' === selectedFormat.action) { message = 'You will be redirected to your content.'; safeWindowOpen(selectedFormat.url, '_blank'); } if(message) { if (com_sirsi_ent_page.isMobile) { showMessageModal('Preview', [message], false); } else { eRC_Dialogs.openMessageDialog(null, resultId, {message:message, title:'Preview'}); } } }, resultId, true); } };}function startContentCafe(rId){var isbn,displayType,hitnum,imgId,imgIdPrefix,textId,ccUserName,ccPassword,baseURL,finalURL,imageSize,imgObj;baseURL='https://images.btol.com/ContentCafe/jacket.aspx?NotFound=E&Size=';ccUserName='CHESTERFIELD';ccPassword='BT0160';var hitNum=rId.match(/\d+/)[0];var displayType=rId.match(/\D+/)[0];/*determining if we're currently in hitlist/detail, and setting the DOMtarget, image size accordingly*//*If details screen...*///if(document.getElementById('detailActions'+rId) != undefined){if(displayType=='detail'){ imgIdPrefix='#detailCover'; imgObj=$J('#detail_cover_art_div_'+hitNum).find('img'); imageSize='M';}else if(displayType=='hitlist'){ imageSize='S'; imgIdPrefix='#syndeticsImg'; imgObj=$J('#syndeticsImg'+hitNum);}else{ imageSize='S';}imgId=imgIdPrefix+hitnum;textId=$J(imgObj).parent().find('.no_image_text');isbn=jQuery('#'+rId+'_ISBN').first().text().substring(0,13);if(isbn){finalURL=baseURL+imageSize+'&UserID='+ccUserName+'&Password='+ccPassword+'&Value='+isbn;jQuery(imgObj).attr('src',finalURL);jQuery(textId).text(''); } else{jQuery(imgId).css('visibility','hidden');jQuery(textId).css('visibility','hidden');} }/***2020 NOV 03: UPDATE TO WIDGET, NEEDS TESTING FOR ISSUES INVOLVING:1) Cases where limits are present2) Cases where ADA mode is defaulted true3) ic=true parameter added to detailLinkUrl when mobile detected, but may also be necessary for cases where ADA mode is true.4) sorttable checks now avoided if the mobile item structure detected******//**21 Apr 2020: updated field writes for mobile to address missing item statuses, on-order option**//**updated 15 Jan 2020, adding marc holdings functionality***//**to-do: marc holding table headings currently kludged in on non-mobile (via field class name), need to find actual ajax source of the table headings, as those aren't coming in with theremainder of the table HTML for some reason***//***for display: set ONLY one of the next 3 options to true. Note: in testing, only writePlainTable tested so far***/var writeAnimatedLinks=false; //not really animated anymore, and is a button that appears as a link (event queue problems with animation)var writePlainTables=true;var writeButtons=false;var showMoreThreshold=5;/***besides items, should marc holdings for Symphony be shown?***/var useMarcHoldings=false;/**show on order data, set to true or false***/var showOnOrder=false;var ordersHtml='';/****MAIN FUNCTION****//****MAIN FUNCTION****/function entWsSummaryItems(rId){var appendObj;if(typeof(sorttable)==='undefined'){go_go_gadget_sorttable();}var curLimit,curTerm,curTarget;typeof(__QueryParameters.lm) !="undefined"?curLimit=__QueryParameters.lm:curLimit='';typeof(__QueryParameters.te) !="undefined"?curTarget=__QueryParameters.te:curTarget='';typeof(__QueryParameters.qu)!="undefined"?curTerm=__QueryParameters.qu.replace('"','\"'):curTerm='';//var curTerm= __QueryParameters.qu.replace('"','\"');curTarget='ILS';var detailLinkUrl='';var hitNum=rId.split('hitlist')[1];globalHitnum=hitNum;var zoneParam='tabDISCOVERY_ALLlistItem_twilightZone'+hitNum;//var itemdata={"t:zoneid": "tabDISCOVERY_ALLlistItem_twilightZone0"};var itemdata={"t:zoneid": zoneParam};var sumOuterDiv='

';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); 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("hitlistItemsDiv")[1]; var i = document.getElementById("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]; e/*** switch e to use new hitlist naming ***/ e = e.replace('detail','hitlist'); $J("#" + e + " .asyncInProgress" + g).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://sdws07.sirsidynix.net/ccpl_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

0) { var coverTitle = jQuery('#syndeticsImg'+hitNum+'Title').attr('title'); //5.1 //jQuery('#syndeticsImg'+hitNum).parent().html('Search Results for "NEWFICA" (1)'); //5.2 //jQuery('#syndeticsImg'+hitNum).parent().html('Search Results for "NEWFICA" (2)'); jQuery('#syndeticsImg'+hitNum).parent().html('Search Results for "NEWFICA" (3)'); } else { var coverTitle = jQuery('#detailClick'+hitNum+' div.no_image_text').attr('title'); //5.1 //jQuery('#detailClick'+hitNum).html('Search Results for "NEWFICA" (4)'); //5.2 jQuery('#detailClick'+hitNum).html('Search Results for "NEWFICA" (5)'); } }}// 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_DownloadButton) { eRC_DownloadButton = { reloadNeeded:false, ercDownloadButtonClass:'ercDownloadButton', addButtonToResult:function(resultId) { eRC_Base.getTitleData(function(data) { eRC_DownloadButton.addValidButton(resultId, data); },resultId); }, //GUI callbacks handleDownloadButtonClick:function(resultIndex, hitlistOrDetail, params) { var resultId = hitlistOrDetail + resultIndex; if(params.needLogin) { com_sirsi_ent_login.loginFirst(function(needReload) { eRC_DownloadButton.reloadNeeded = needReload; eRC_Dialogs.openFormatDialog(function(format, duration) { eRC_DownloadButton.handleFormatResponse(resultId, format, duration, params.needPin); }, resultId); }); return; } eRC_Dialogs.openFormatDialog(function(format, duration) { eRC_DownloadButton.handleFormatResponse(resultId, format, duration, params.needPin); }, resultId); }, handleHoldButtonClick:function(resultIndex, hitlistOrDetail) { var resultId = hitlistOrDetail + resultIndex; com_sirsi_ent_login.loginFirst(function(needReload) { eRC_DownloadButton.reloadNeeded = needReload; eRC_Dialogs.openHoldDialog(function(emailHold, autoCheckout) { eRC_DownloadButton.handleEmailHoldResponse(resultId, emailHold, autoCheckout); }, resultId); }); }, handleFormatResponse:function(resultId, format, duration, needPin) { if(format && !format.error) { eRC_Dialogs.openAccountDialog(function(resourceRetrievalUrl) { eRC_DownloadButton.handleAccountDialogResponse(resultId, resourceRetrievalUrl, needPin); }, resultId, format, duration); } else { if(eRC_DownloadButton.reloadNeeded) { window.location.reload(); } } }, handleEmailHoldResponse:function(resultId, emailHold, autoCheckout) { if(emailHold && !emailHold.error) { eRC_Dialogs.showLoad(); eRC_Base.getPlaceHoldResponse(function(responseJson) { eRC_DownloadButton.handleHoldResponse(resultId, responseJson); }, resultId, emailHold, autoCheckout); } else { if(eRC_DownloadButton.reloadNeeded) { window.location.reload(); } } }, handleHoldResponse:function(resultId, responseJson) { // we might be using this, set it up com_sirsi_ent_strings.setStringFormatFunc_JavaStyle(); var title = 'Error'; var message; var action = function() {}; //a do-nothing function var error; if(!responseJson || responseJson.error) { error = true; message = 'There was a problem placing your hold. Please try again later or contact your library for assistance.'; if(responseJson && responseJson.error) { message = responseJson.error; } } else { title = 'Place Hold'; message = responseJson.message; } // we're done using this, revert com_sirsi_ent_strings.resetString_dot_format(); eRC_Dialogs.hideLoad(); if (com_sirsi_ent_page.isMobile) { showMessageModal(title, [message], error, function() { if(eRC_DownloadButton.reloadNeeded) { window.location.reload(); } }); } else { eRC_Dialogs.openMessageDialog(function() { if(eRC_DownloadButton.reloadNeeded) { window.location.reload(); } }, resultId, {message:message, title:title}, responseJson); } if(!error && eRC_Dialogs.messageDialogTimeoutMS) { setTimeout(function() { eRC_Dialogs.closeMessageDialog(resultId); }, eRC_Dialogs.messageDialogTimeoutMS); } action(); }, handleAccountDialogResponse:function(resultId, resourceRetrievalUrl, needPin) { if(resourceRetrievalUrl && !resourceRetrievalUrl.error) { eRC_Dialogs.showLoad(); eRC_Base.getDownloadResponse(function(responseJson) { eRC_DownloadButton.handleCheckoutResponse(resultId, responseJson); }, resourceRetrievalUrl, needPin); } else { eRC_Dialogs.openFormatDialog(function(format, duration, onlyOne) { if(onlyOne) { if(eRC_DownloadButton.reloadNeeded) { window.location.reload(); } } else { eRC_DownloadButton.handleFormatResponse(resultId, format, duration, needPin); } }, resultId); } }, handleCheckoutResponse:function(resultId, responseJson) { var title = 'Error'; var action = function() {}; //a do-nothing function var error; if (com_sirsi_ent_page.isMobile) { var buttonLabel; var buttonClick; var messages = []; if(!responseJson || responseJson.error) { error = true; messages.push(responseJson.error ? responseJson.error : 'There was an error communicating with eResource Central.'); if(responseJson && responseJson.description) { messages.push(responseJson.description); } } else if(responseJson.hasOwnProperty('success') && !responseJson.success) { error = true; messages.push(responseJson.message.value ? responseJson.message.value: 'There was an error communicating with eResource Central.'); if(responseJson && responseJson.description) { messages.push(responseJson.description); } } else if('SYNC' === responseJson.action) { title = 'Checkout'; messages.push(responseJson.message.value); } else if('DOWNLOAD' === responseJson.action) { title = 'Download'; messages.push('Your download will start shortly, or you may click the button below.'); action = function() { safeWindowOpen(responseJson.url, '_blank'); }; buttonLabel = 'Download'; buttonClick = "safeWindowOpen('" + responseJson.url + "', '_blank');"; } else if('REDIRECT' === responseJson.action) { title = 'Redirecting'; messages.push('You will be redirected to your content, or you may click the button below.'); action = function() { safeWindowOpen(responseJson.url, '_blank'); }; buttonLabel = 'Open Content'; buttonClick = "safeWindowOpen('" + responseJson.url + "', '_blank');"; } else if (responseJson.message) { error = true; messages.push(responseJson.message); } else if (responseJson.cause && responseJson.cause.message) { error = true; messages.push(responseJson.cause.message); } else { error = true; messages.push('There was an error accessing your title. Please try again later. If the problem persists, contact your library for assistance.'); } eRC_Dialogs.hideLoad(); showMessageModal(title, messages, error, function() { if(eRC_DownloadButton.reloadNeeded) { window.location.reload(); } }, false, buttonLabel, buttonClick); } else { var message; if(!responseJson || responseJson.error) { error = true; message = responseJson.error ? responseJson.error : 'There was an error communicating with eResource Central.'; if(responseJson && responseJson.description) { message += '

' + responseJson.description; } } else if(responseJson.hasOwnProperty('success') && !responseJson.success) { error = true; message = responseJson.message.value ? responseJson.message.value: 'There was an error communicating with eResource Central.'; if(responseJson && responseJson.description) { message += '

' + responseJson.description; } } else if('SYNC' === responseJson.action) { title = 'Checkout'; message = responseJson.message.value; } else if('DOWNLOAD' === responseJson.action) { title = 'Download'; message = 'Your download will start shortly, or you may click the button below.'; action = function() { safeWindowOpen(responseJson.url, '_blank'); }; message += '

'; } else if('REDIRECT' === responseJson.action) { if (responseJson.isIFrameDisplay) { title = 'Checkout'; message = ''; } else { title = 'Redirecting'; message = 'You will be redirected to your content, or you may click the button below.'; action = function () { safeWindowOpen(responseJson.url, '_blank'); }; message += ''; } } else if (responseJson.message) { error = true; message = responseJson.message; } else if (responseJson.cause && responseJson.cause.message) { error = true; message = responseJson.cause.message; } else { error = true; message = 'There was an error accessing your title. Please try again later. If the problem persists, contact your library for assistance.'; } eRC_Dialogs.hideLoad(); eRC_Dialogs.openMessageDialog(function() { if(eRC_DownloadButton.reloadNeeded) { window.location.reload(); } }, resultId, {message:message, title:title}, responseJson && 'SYNC' === responseJson.action, responseJson.isIFrameDisplay); } if(!error && eRC_Dialogs.messageDialogTimeoutMS) { setTimeout(function() { eRC_Dialogs.closeMessageDialog(resultId); }, eRC_Dialogs.messageDialogTimeoutMS); } action(); }, //helper funcs addValidButton:function(resultId, ercItem) { if(!resultId) { return; } var hitlistOrDetail = 'detail'; if(resultId.match(/hitlist/)) { hitlistOrDetail = 'hitlist'; } var resultIndex = resultId.replace(hitlistOrDetail, ''); if($J('#content.mobile').length) { var actionResultId = 'result' + resultIndex; if(!ercItem) { ResultActions.updateResultAction('ERC_FULL', actionResultId, hitlistOrDetail, false); return; } if(ercItem.status && 'OK' === ercItem.status && ercItem.formats && ercItem.formats.length > 0) { var ercDownloadOrHoldActions = ResultActions.asyncResultActions['ERC_FULL']; if(!ercDownloadOrHoldActions) { ResultActions.asyncResultActions['ERC_FULL'] = {}; ercDownloadOrHoldActions = ResultActions.asyncResultActions['ERC_FULL']; } var buttonLabel; if(ercItem.availability && ercItem.availability.available) { if (ercItem.availability.downloadText) { buttonLabel = ercItem.availability.downloadText; } else { buttonLabel = 'Download'; } var params = {}; for(var i = 0; i < ercItem.formats.length; i++) { var auth = ercItem.formats[i].authentication; if(auth && (auth.patronId || (auth.accountsUrl && (auth.ereaderAccount || auth.partnerAccount)))) { params['needLogin'] = true; if(auth.patronPin) { params['needPin'] = true; } break; } } ercDownloadOrHoldActions[actionResultId] = {'action': eRC_DownloadButton.handleDownloadButtonClick, 'params': params}; } else if (ercItem.holdable) { buttonLabel = 'Place Hold'; ercDownloadOrHoldActions[actionResultId] = {'action': eRC_DownloadButton.handleHoldButtonClick}; } else { ResultActions.updateResultAction('ERC_FULL', actionResultId, hitlistOrDetail, false); return; } // Show the button. ResultActions.updateResultAction('ERC_FULL', actionResultId, hitlistOrDetail, true, buttonLabel); } else { ResultActions.updateResultAction('ERC_FULL', actionResultId, hitlistOrDetail, false); } } else if(!ercItem) { return; } else if(ercItem.status && 'OK' === ercItem.status && ercItem.formats && ercItem.formats.length > 0) { var buttonLabel = 'Place Hold'; var onClickText = 'javascript: '; if(ercItem.availability && ercItem.availability.available) { if (ercItem.availability.downloadText) { buttonLabel = ercItem.availability.downloadText; } else { buttonLabel = 'Download'; } onClickText += "$(this).focus();eRC_DownloadButton.handleDownloadButtonClick('" + resultIndex + "','" + hitlistOrDetail + "',"; var params = {}; for(var i = 0; i < ercItem.formats.length; i++) { var auth = ercItem.formats[i].authentication; if(auth && (auth.patronId || (auth.accountsUrl && (auth.ereaderAccount || auth.partnerAccount)))) { params['needLogin'] = true; if(auth.patronPin) { params['needPin'] = true; } break; } } onClickText += JSON.stringify(params) + ");"; } else if (ercItem.holdable) { onClickText += "$(this).focus();eRC_DownloadButton.handleHoldButtonClick('" + resultIndex + "','" + hitlistOrDetail + "');"; } if(onClickText.substr(12)) { // if there's no onClick text besides 'javascript: ', don't bother with a button eRC_DownloadButton.showButton(resultId, buttonLabel, onClickText); } } }, showButton:function(resultId, displayText, onClickText) { var matches = resultId.match(/^(detail|hitlist)(\d+)$/); if (matches) { var buttonId = resultId+eRC_DownloadButton.ercDownloadButtonClass; var button = document.getElementById(buttonId); if(!button) { button = document.createElement('button'); button.setAttribute('id', buttonId); button.setAttribute('class', eRC_DownloadButton.ercDownloadButtonClass+' button'); var parentJsId; if('detail' === matches[1]) { parentJsId = '#detailActions' + matches[0]; } else { parentJsId = '#results_cell' + matches[2] + ' .results_right'; } $J(parentJsId).append(button); } button.innerHTML = displayText; button.setAttribute('onClick',onClickText); $J(button).show(); } }, };}// 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_Base) { eRC_Base = { //variables ercIds:[], ercTitleData:[], ercFormats:[], titleWaitingCallbacks:[], titlesReady:false, titleAjaxCallsOut:0, //initialization addErcId:function(rId) { var ercId = eRC_Base.getErcIdFromDom(rId); if(ercId) { eRC_Base.ercIds.push({'ercId':ercId,'resultId':rId}); } }, getErcIdFromDom:function (rId) { return $J('#'+rId+'_ERC_ID > .ERC_ID_value').text(); }, //loading the data loadTheData:function() { var idString = ''; for(var i = 0; i < eRC_Base.ercIds.length; i++) { var idVal = eRC_Base.ercIds[i]; if(idString.indexOf(idVal) === -1) { idString += ','+idVal.ercId; } } if(idString.length > 0) { idString = idString.substr(1); } if(idString) { var titlesUrl = addPathParams(com_sirsi_ent_widgets.URLS.eRC.titleInfoUrl, encodeAsTapestry(idString)); eRC_Base.titleAjaxCallsOut++; new AjaxHandler(null, titlesUrl, null, eRC_Base.handleTitlesResponse, null, true).invokeAjax(); } else { eRC_Base.titlesReady = true; } }, handleTitlesResponse:function(response) { eRC_Base.titleAjaxCallsOut--; if((typeof eRC_Base.ercTitleData !== 'undefined') && eRC_Base.ercTitleData) { if ((typeof response.responseJSON !== 'undefined')) { // could the response be undefined? What should we do in that scenario? if(response.responseJSON.eResourceList) { response.responseJSON.eResourceList.forEach(function (er) { eRC_Base.ercTitleData.push(er); }); } if(response.responseJSON.eFormatList) { response.responseJSON.eFormatList.forEach(function (er) { if(!eRC_Base.ercFormats.contains(er)) { eRC_Base.ercFormats.push(er); } }); } } } else { if (response.responseJSON) { eRC_Base.ercTitleData = response.responseJSON.eResourceList; eRC_Base.ercFormats = response.responseJSON.eFormatList; } } eRC_Base.titlesReady = true; var unCalled = []; for(var i = 0; i < eRC_Base.titleWaitingCallbacks.length; i++) { var callback = eRC_Base.titleWaitingCallbacks[i]; var data = eRC_Base.getData(callback.ercId); if(data || eRC_Base.titleAjaxCallsOut == 0) { callback.callback(data); } else { unCalled.push(callback); } } eRC_Base.titleWaitingCallbacks = unCalled; }, getSingleTitle:function(eResourceId) { var titlesUrl = addPathParams(com_sirsi_ent_widgets.URLS.eRC.titleInfoUrl, encodeAsTapestry(eResourceId)); eRC_Base.titleAjaxCallsOut++; new AjaxHandler(null, titlesUrl, null, eRC_Base.handleTitlesResponse, null, true).invokeAjax(); }, //functions getData:function(ercDocumentId) { if (!ercDocumentId) { return; } if (eRC_Base.ercTitleData) { var eResourceList = eRC_Base.ercTitleData; for (var i = 0; i < eResourceList.length; i++) { if (eResourceList[i].id == ercDocumentId) { return eResourceList[i]; } } } //we didn't find it, so request it. // but don't request it if we've already got too many callouts still pending if (eRC_Base.titleAjaxCallsOut < 50) { eRC_Base.getSingleTitle(ercDocumentId); } }, getErcId:function(resultId, isRetry) { if(!resultId) { return; } for(var i = 0; i < eRC_Base.ercIds.length; i++) { var ercId = eRC_Base.ercIds[i]; if(ercId.resultId == resultId) { return ercId.ercId; } } //we might have never seen this result id before. //so, add it to the list (which should pull the ercId from the dom) //and then try again. if(!isRetry) { eRC_Base.addErcId(resultId); return eRC_Base.getErcId(resultId, true); } }, getFormatDetails:function(formatName) { for(format of eRC_Base.ercFormats) { if(format.format === formatName) { return format; } } return null; }, createAnchorTextLinks:function(string, linkInfo) { let div = document.createElement('div'); //linkInfo in an object with keys {replacement, text, and link} if (linkInfo && linkInfo.length > 0) { let regx = /\{[A-Za-z0-9.]+\}/g; let index = 0; string.replace(regx, (match, offset) => { let obj = this.findLinkMatch(linkInfo, match); //append everything before the link div.append(document.createTextNode(string.substring(index, offset))); if(obj) { let a = document.createElement("a"); a.appendChild(document.createTextNode(obj.text)); a.setAttribute("href", "//" + obj.url); a.setAttribute("target", "_blank"); div.append(a); } index = offset + match.length; } ); if(index < string.length -1) { div.append(document.createTextNode(string.substr(index))); } } else { div.append(document.createTextNode(string)); } return div; }, findLinkMatch:function(linkInfo, match) { for(let i = 0; i < linkInfo.length; i++) { if(linkInfo[i].replacement === match) { return linkInfo[i]; } } }, //'API' functions getTitleData:function(callbackFunction, resultId) { var data; // we need to limit the call outs to a reasonable number so that we don't overwhelm the system resources. if(eRC_Base.titlesReady && eRC_Base.titleAjaxCallsOut < 200) { data = eRC_Base.getData(eRC_Base.getErcId(resultId)); } if(data) { callbackFunction(data); } else { eRC_Base.titleWaitingCallbacks.push({'callback':callbackFunction,'ercId':eRC_Base.getErcId(resultId)}); } }, getAccountsResponse:function(callbackFunction, ercAccountsUrl) { var getAccountsUrl = addPathParams(com_sirsi_ent_widgets.URLS.eRC.accountsUrl, encodeAsTapestry(ercAccountsUrl)); new AjaxHandler(null, getAccountsUrl, null, function(response) { callbackFunction(response.responseJSON) }, null, true).invokeAjax(); }, getDownloadResponse:function(callbackFunction, ercResourceUrl, needPin) { var downloadUrl = addPathParams(com_sirsi_ent_widgets.URLS.eRC.getEResourceUrl, encodeAsTapestry(ercResourceUrl)+'/'+!!needPin); new Ajax.Request(downloadUrl, { onSuccess:function(response) { callbackFunction(response.responseJSON) }, onException: Tapestry.ajaxFailureHandler, onFailure: Tapestry.ajaxFailureHandler, asynchronous: true }); }, getPlaceHoldResponse:function(callbackFunction, resultId, emailHold, autoCheckout) { if(typeof autoCheckout !== 'boolean') { autoCheckout = false; } var array = emailHold.split("@"); // tapestry doesn't want us to pass @ characters, so let's split the email address // tapestry doesn't like empty params, so we need to use encodeAsTapestry to pass special values (like empty strings) var getHoldUrl = addPathParams(com_sirsi_ent_widgets.URLS.eRC.placeHoldUrl, encodeAsTapestry(eRC_Base.getErcId(resultId)) + '/' + encodeAsTapestry(array[0]) + '/' + encodeAsTapestry(array[1]) + '/' + autoCheckout); new AjaxHandler(null, getHoldUrl, null, function(response) { callbackFunction(response.responseJSON) }, null, true).invokeAjax(); }, getHoldEmail:function(callbackFunction, resultId) { var getHoldEmail = addPathParams(com_sirsi_ent_widgets.URLS.eRC.emailHoldUrl, encodeAsTapestry(eRC_Base.getErcId(resultId))); new AjaxHandler(null, getHoldEmail, null, function(response) { callbackFunction(response.responseJSON) }, null, true).invokeAjax(); }, fixErcIds:function(sortedDocIds) { // we want to maintain the new sort order var newErcIds = []; if (eRC_Base.ercIds && eRC_Base.ercIds.length > 0) { var ercIdIndex = 0; if (sortedDocIds) { for (var idIndex = 0; idIndex < sortedDocIds.length; idIndex++) { var docId = sortedDocIds[idIndex]; for (var ercIdIndex = 0; ercIdIndex < eRC_Base.ercIds.length; ercIdIndex++) { var currentErcIdObject = eRC_Base.ercIds[ercIdIndex]; var containsErcId = docId.indexOf(currentErcIdObject.ercId); if (containsErcId !== -1) { var currentErcId = currentErcIdObject.ercId; newErcIds.push({'ercId': currentErcId, 'resultId': 'hitlist' + idIndex}); break; } } } } else { var processedResultIdSet = []; var resultIdMap = new Map(); for (var i = 0; i < eRC_Base.ercIds.length; i++) { var ercIdObject = eRC_Base.ercIds[i]; if (!processedResultIdSet.contains(ercIdObject.resultId)) { var resultId = ercIdObject.resultId; var ercId = $J('#' + resultId + '_ERC_ID > .ERC_ID_value').text(); resultIdMap.set(ercId, resultId); processedResultIdSet.push(currentResultId); } } var keys = resultIdMap.keys; for (var j = 0; j < keys.length; j++) { var currentResultId = resultIdMap.get(keys[j]); newErcIds.push({'ercId': j, 'resultId': currentResultId}); } } } eRC_Base.ercIds = newErcIds; }, reorderErcIds:function(docId, destinationIndex, keepItem) { if (eRC_Base.ercIds) { var ercIdFound = false; var ercId, currentIndex; var processedResultIdSet = []; var destination = keepItem ? destinationIndex : eRC_Base.ercIds.length; //check if it's even in the list, otherwise don't worry about it for (var ercIndex = 0; ercIndex < eRC_Base.ercIds.length; ercIndex++) { var currentErcIdObject = eRC_Base.ercIds[ercIndex]; var containsErcId = docId.indexOf(currentErcIdObject.ercId); if (containsErcId !== -1) { ercIdFound = true; ercId = currentErcIdObject.ercId; // remove 'hitlist' to get list index currentIndex = currentErcIdObject.resultId.toString().substring(7); } if (!processedResultIdSet.contains(currentErcIdObject.resultId)) { processedResultIdSet.push(currentErcIdObject.resultId); } } if ('undefined' !== typeof currentIndex) { eRC_Base.adjustResultIds(currentIndex, destination, ercIdFound, ercId, processedResultIdSet.length, keepItem); } else { eRC_Base.fixErcIds(null); } } }, // keepItem - boolean - whether or not we're keeping the item (delete, then no; move, then no; reorder, then yes) adjustResultIds:function(currentResultId, destinationResultId, ercIdInList, ercId, hitlistSize, keepItem) { var newErcIds = []; var processedResultIdSet = []; var currentPosition = currentResultId; var destinationPosition = destinationResultId; var smallerIndex = currentPosition < destinationPosition ? currentPosition : destinationPosition; var upperIndex = currentPosition < destinationPosition ? destinationPosition : currentPosition; // set values before moved items for (var index = 0; index < smallerIndex; index++) { var loopResultId = eRC_Base.getResultIdFromPosition(index); if (eRC_Base.getErcId(loopResultId) && !(eRC_Base.getErcId(loopResultId) === ercId)) { newErcIds.push({'ercId': eRC_Base.getErcId(loopResultId), 'resultId': loopResultId}); } } // put item in list where it goes if it was in the list if (ercIdInList && keepItem) { newErcIds.push({'ercId': ercId, 'resultId': eRC_Base.getResultIdFromPosition(destinationResultId)}); } // set values of moved items if ((currentPosition < destinationPosition) || !keepItem) { var nextPosition = currentResultId; // pull everyone up one while (nextPosition < destinationPosition) { var resultId = nextPosition; var nextErcId = eRC_Base.getNextErcId(resultId); if (nextErcId) { newErcIds.push({'ercId': nextErcId, 'resultId': eRC_Base.getResultIdFromPosition(resultId)}); } nextPosition++; } } else { // push everyone down one var nextPosition = destinationPosition; while (nextPosition < currentPosition) { var nextResultId = eRC_Base.getResultIdFromPosition(nextPosition); var nextErcId = eRC_Base.getErcId(nextResultId, false); if (nextErcId) { newErcIds.push({'ercId': nextErcId, 'resultId': eRC_Base.getResultIdFromPosition(nextPosition + 1)}); } nextPosition++; } } // set values after moved items for (var index = upperIndex + 1; index < hitlistSize; index++) { var loopResultId = eRC_Base.getResultIdFromPosition(index); if (eRC_Base.getErcId(loopResultId)) { newErcIds.push({'ercId': eRC_Base.getErcId(loopResultId, false), 'resultId': loopResultId}); } } eRC_Base.ercIds = newErcIds; }, getResultIdFromPosition:function(position) { return 'hitlist' + position; }, getNextErcId:function(resultId) { var position = parseInt(resultId) + 1; var newResultId = eRC_Base.getResultIdFromPosition(position); return eRC_Base.getErcId(newResultId, false); } }; $J(function() { eRC_Base.loadTheData(); });}function shrinkDetailTags(rId){$J(document).ready(function(){var docContainer='';var heightThreshold=!com_sirsi_ent_page.isMobile?150:90;var adjustedHeight=!com_sirsi_ent_page.isMobile?150:90;var loopNode=!com_sirsi_ent_page.isMobile?$J('#detail_biblio'+rId + ' .documentSummaries'):$J('.displayElementWrapper');$J(loopNode).each(function(index,value){docContainer=!com_sirsi_ent_page.isMobile?docContainer=$J(this).closest('.documentSummaries'):$J(this); var curHeight=parseFloat($J(this).css('height').split('px')[0]);/***HOW MUCH 'PIXEL SAVINGS' JUSTIFIES A COLLAPSE OF THE TAG? SET NUMBER IN PIXELS. THE HIGHER, THE FEWER TAGS THAT WILL 'COLLAPSE'***/ if (curHeight-heightThreshold>70){ $J(docContainer).attr('fullheight',curHeight+'px');$J(docContainer).after('More...');$J(docContainer).css('height',adjustedHeight+'px');$J(docContainer).css('overflow-y','hidden');$J(this).next().click(); }});$J('.showmoreless' ).click(function(e) { e.preventDefault(); var thisContainer=$J(this).prev();var maxHeight=$J(thisContainer).attr('fullheight'); var adjHeight=String(adjustedHeight+'px'); if ( $J(thisContainer).css('height') != adjHeight){ $J( thisContainer ).animate({ height: adjustedHeight }, 400 ); $J(thisContainer).css('overflow-y','hidden'); $J(this).text('More...');} else{ $J( thisContainer ).animate({ height: maxHeight }, 400 ); $J(thisContainer).css('overflow-y','auto'); $J(this).text('Less'); }}); //end click}); //end docready}/***This uses the ROA Web Services 'GUEST' role to query bib data without a token. Your Web Services must be version 2015.08 or higher. See variables within the getBib function below you should set. Also, some CSS should be added to clean up the look. At a minimum, something like this should be in your theme or custom CSS file:.marc_tag_header, .marc_tag_data{color:#0A1084;min-width:35px;}.marc_ind_header, .marc_ind_data{color:#6D2315;min-width:35px;}.marc_subfield_code{color:#47156D;padding:3px;}****/function getBib(rId){/*Fill in the wsBaseUrl variable with your own Web Services URL (which you can copy from the Enterprise Admin console at Manage General Configuration -> Manage Web Services. It should end with a slash (for example: "http://blah.sirsi.net/blah_ilsws/"); you must be using the ROA Web Services, version 2015.08 or higher*/var wsBaseUrl='https://sdws07.sirsidynix.net/ccpl_ilsws/';/*Fill in a valid clientId, which can be found in your Web Services admin tool. DS_CLIENT is a default that works on most systems. I*/var clientId="DS_CLIENT";/***the origApp can be any single word you want. It's just used as another ROA Web Services logging marker***/var origApp='showmarc';/***defining a subfield delimiter character (using a decimal ascii value)***/var subfieldDelimiter= '‡';/***defining fixed field tags (to determine when to not use subfield delimiter)***/var fixedFieldTags=['000','001','003','005','006','007','008'];/***In the tagExclusions array, comma separate any tags you don't want to display***/var tagExclusions=['991','999']; if (typeof jQuery.ui == 'undefined') { reload_jqueryui(rId); return false; }var htmlOutput='
';var catKey=jQuery('#'+rId+'_DOC_ID').text().split(':')[1];var marcUrl=wsBaseUrl+'catalog/bib/key/'+catKey+'?includeFields=*';jQuery.ajax({ type: 'GET', url: marcUrl, dataType: 'json', headers: { "Accept": "application/json","Content-Type":"application/json","SD-Preferred-Role":"GUEST", "x-sirs-clientID":clientId,"sd-originating-app-id":origApp},success: function(marcdata) { bibTag=marcdata.fields.bib.fields;var marcOutput='

';jQuery.each(bibTag,function(tagIndex){var curTag=this.tag;/***add tag exclusion stuff***/if(jQuery.inArray(curTag,tagExclusions)!==-1){ return; }var curInd=(this.inds!==undefined)?this.inds:'&nbsp';htmlOutput+='

';htmlOutput+='
TagInd.Subfields
'+curTag+''+curInd+'';jQuery.each(bibTag[tagIndex].subfields,function(subfieldIndex){ if(jQuery.inArray(curTag,fixedFieldTags)==-1){var subfieldCode=this.code+subfieldDelimiter;}else{var subfieldCode='';}var subfieldData=this.data;htmlOutput+=''+subfieldCode+''+subfieldData+'';});//end each subfield});//end each taghtmlOutput+='
';/***begin jqueryui dialog***/ $J(function() {$J(htmlOutput).dialog({width:500,maxHeight:700,hide: { effect: "scale", duration: 750 },title:'MARC for record # '+catKey,modal:true,buttons:{Ok: function(){$J(this).dialog("close");}}});});/***end jQueryUI dialog****/},error: function (xhr, ajaxOptions, thrownError) { console.log('Error occurred of status ' + xhr.status + ', message is ' + thrownError); }});//end ajax()}//end getbibfunction reload_jqueryui(rId){jQuery.getScript( "/client/js/ui/jquery.ui.core.js", function( data, textStatus, jqxhr ) { getBib(rId);});}// 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 novelistUrl = "https://imageserver.ebscohost.com/novelistselect/ns2init.js";//The location of the NoveList jsvar novelistProfile = "s9220407.main.novselent"; //This is your profile as provided by Novelistvar novelistPassword = "dGJyMOPY8U6yqLMA"; //This is your password as provided by Novelistvar currentNovSelectAttempt = 1;function goNovelist(detail){ var detailIndex=""; if(detail!=undefined) { detailIndex = "detail"+detail; } else { detail=""; } if (typeof(novSelect) == 'undefined') { novelistScript = new Element('script', { type: 'text/javascript', id: 'EIT', src: ''+novelistUrl+''}); $J('body').append(novelistScript); } var detailElement = document.getElementById(detailIndex + '_ISBN'); if(detailElement && detailElement.hasChildNodes()) { var accordionHeader = $J('

Novelist Content

'); var accordionContent = $J('
'); addToAccordion('#detail_accordion'+detail, accordionHeader, accordionContent); NoveListSelectEnrichment(detailElement.childNodes[0].innerHTML); }}function NoveListSelectEnrichment(isbn) { if (typeof(novSelect) == 'undefined') { currentNovSelectAttempt++; if(currentNovSelectAttempt<= 10) { setTimeout("NoveListSelectEnrichment("+isbn+")", 250); } } else { novSelect.loadContentForISBN(String(isbn), novelistProfile, novelistPassword); }}/*********************************************************************************//**** Copyright 2010-2023 SirsiDynix Written by Consulting Services ****//**** CTS-159 Updates for Enterprise 5.2.1 ****//*********************************************************************************/function modifyNewSearchIndex (rId) { var personalAuthor = 'AUTHOR'; // Reference the name of your custom Search Field for Personal Author between the quotes. var addedAuthor = 'ADDED_AUTHOR'; // Reference the name of your custom Search Field for Added Author between the quotes. var series = 'SERIES'; // 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// Author Graph for Library.Link Libraries// Given an Item, show works by or about the first three creators.)var multipleVisibilityUrls = false;var ils = "symphony"; //or "horizon"var profileConfig = { "allprofiles": { "visibilityUrl": "https://chesterfield.library.link/"} };function getAuthorResources(rId) { // Get result's ID var fieldId = rId.match(/\d+/); console.log("author.length: "+$J('#detail' + fieldId[0] + '_AUTHOR .AUTHOR_value').length); //console.log("author.text: "+$J('#detail' + fieldId[0] + '_AUTHOR .AUTHOR_value').text()); //console.log("author.text.length: "+$J('#detail' + fieldId[0] + '_AUTHOR .AUTHOR_value').text().length); if ($J('#detail' + fieldId[0] + '_AUTHOR .AUTHOR_value').length > 0) { secure = false; protocol = window.location.protocol; if (protocol == "https:") { secure = true; } var myProfile = com_sirsi_ent_page.friendlyUrl; var myLang = com_sirsi_ent_page.localeCode; if (multipleVisibilityUrls == true) { var canonical_link_domain = profileConfig[myProfile]['visibilityUrl']; } else { var canonical_link_domain = profileConfig['allprofiles']['visibilityUrl']; } var docId = $J('#detail' + fieldId[0] + '_DOC_ID .DOC_ID_value').text(); var searchSource = docId.split(':')[0]; if (searchSource == "SD_ILS" && ils == "symphony") { docId = 'u' + docId.split(':')[1]; } else if (searchSource == "SD_ILS" && ils == "horizon") { docId = docId.split(':')[1]; } else { docId = ""; } var isbn = ""; // Get result's ISBN number (if hidden fields do not exist use ISBN from result's details) if ($J('#detail' + fieldId[0] + '_ISBN .ISBN_value:first-child').length > 0) { isbn = $J('#detail' + fieldId[0] + '_ISBN .ISBN_value:first-child').text(); //} else { // isbn = $J('#detail_biblio' + fieldId[0]).find('.displayElementText.ISBN').text(); }//console.log("docId:"+docId+"|isbn:"+isbn+"|");//#################################################################################if (docId != "" || isbn != "") {//if (isbn != "") { // Clone first accordion header to retain click events for opening/closing accordion var anotherClonedHeader = $J('#detail_accordion'+fieldId+' > h3').first().clone(true, true); // Create accordion that will hold creator Graph content var visibilityGraphAccordion = '';//console.log(creatorGraph); $J('#visibility-graph-content'+fieldId).append(creatorGraph); $J('#visibility-graph-content'+fieldId).css('padding', '2px');}//#################################################################################}}// 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); }, };}// 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_Availability) { eRC_Availability = { addAvailabilityToResult:function(resultId) { var idDiv = document.getElementById(resultId+'_ERC_ID'); if(!idDiv || !idDiv.innerHTML) { return; } eRC_Availability.makeIfNeeded(resultId); if(eRC_Base) { eRC_Base.getTitleData(function(data){ eRC_Availability.fill(resultId, data); }, resultId); } else { eRC_Availability.fill(resultId); } }, fill:function(resultId, data) { var aDiv = document.getElementById('availableNumber_'+resultId); if(aDiv) { var avail = 'Unavailable'; if (data && data.status && 'OK' === data.status && data.formats && data.formats.length > 0) { if (data.availability && data.availability.available) { if (data.availability.availableCopies) { // show copies available avail = data.availability.availableCopies; } else { // unlimited duration avail = 'Unlimited'; } } else { // no copies available avail = 0; } } aDiv.innerHTML = avail; $J(aDiv).removeAttr('name'); } }, makeIfNeeded:function(resultId) { if(document.getElementById('availableNumber_'+resultId)) { return; } var matches = resultId.match(/^(detail|hitlist)(\d+)$/); if(matches) { if (com_sirsi_ent_page.isMobile) { var label = document.createElement('span'); label.setAttribute('class','availableLabel ercAvailableCountLabel text-h5'); if ($J('*[class^="detail_"]').length) { label.innerHTML = 'Available:'; } else { label.innerHTML = 'Available'; } number = document.createElement('span'); number.setAttribute('id','availableNumber_'+resultId); number.setAttribute('class','availableNumber ercAvailableCountNumber text-p'); number.setAttribute('name','smallSearchingGif'); number.setAttribute('style','display:inline-block;'); var div = document.createElement('div'); div.setAttribute('id','ercAvailableDiv_'+resultId); div.setAttribute('class','availableDiv ercAvailableCountSection'); div.appendChild(label); div.appendChild(number); if('detail' === matches[1]) { $J('.detailFieldsAlign').append(div); } else { document.getElementById('results_bio' + matches[2]).appendChild(div); } } else { var label = document.createElement('span'); label.setAttribute('class','availableLabel ercAvailableCountLabel '); label.innerHTML = 'Available:'; number = document.createElement('span'); number.setAttribute('id','availableNumber_'+resultId); number.setAttribute('class','availableNumber ercAvailableCountNumber'); number.setAttribute('name','smallSearchingGif'); number.setAttribute('style','display:inline-block;'); var div = document.createElement('div'); div.setAttribute('id','ercAvailableDiv_'+resultId); div.setAttribute('class','availableDiv ercAvailableCountSection'); div.appendChild(label); div.appendChild(number); var idStr = ('detail' === matches[1] ? 'detail_biblio' : 'results_bio') + matches[2]; document.getElementById(idStr).appendChild(div); } createSpinnersForSelector($J('#availableNumber_' + resultId), smallSpinnerOptions); } }, }}/*********************************************************************************************//***** Copyright 2005 - 2022 SirsiDynix *****//***** Written by Consulting Services for Enterprise 5.2.1 *****//*****Collapsed Facets Widget with Option to Use Date View *****//*****Includes the following JIRA fixes: *****//*****JIRA CTS-34 - Fixes the Publication Date Facet *****//*****JIRA CTS-38 - Adds cursor to headings *****//*****JIRA CTS-58 - Adds Localized labels for Filter, Open All *****//***** and Close All *****//***** JIRA CTS-112 - Updates for jQuery 3.6 for 5.2.1 *****//*********************************************************************************************/var useDateView = false; // set this to true if you want to see the date list by default instead of the graph viewfunction prepareCollapseFacets () { if (useDateView === true) { switchDefaultPubDateView(); } else { collapseFacets(); }}function switchDefaultPubDateView () { $J('#pub_date_btn').click();collapseFacets();}function collapseFacets() { // Hide facet columns initially $J('.searchLimitsColumn').hide(); // Add Dropdown Caret to All Facet Titles $J('.searchLimitsColumn .facet .facetTitleRow .facetTitle').prepend(''); // Fix spacing of collapsed facets $J('.searchLimitsColumn .facetTitleRow').css('margin-bottom','0px'); $J('.searchLimitsColumn .facetTitle').css('margin-bottom','0px');/*** CTS-38 - Add CSS for pointer on headers ***/ $J('.searchLimitsColumn .facetTitle').css('cursor','pointer');/*** END CTS-38 - Add CSS for pointer on headers ***/ $J('.searchLimitsColumn').show(); // Add Dropdown Caret to All Breadcrumb Sections $J('.searchLimitsColumn .breadCrumbsContainer .breadCrumbs .facetTitle').prepend(''); $J('.searchLimitsColumn #breadCrumbsContainer .breadCrumbs .facetTitle').prepend(''); //// Hide Library facet content // Wrap Library Facet Elements in Div (Only Elements That Should Be Hidden) $J('.searchLimitsColumn .facet form[id^="facet"]').not('#facetFormPUBDATE').each(function() { $J(this).find(' > div').not('.facetTitleRow').wrapAll(''); });/*** CTS-34 Fix issues with pub date facet ***/$J('#pub_date_btn,#limitcolumn_pub_graph,#limitcolumn_pub_chkbox').wrapAll('

');/*** END CTS-34 Fix issues with pub date facet ***/ // Add Class to Newly Created Div, Append Clearer Div, and Hide Div $J('.searchLimitsColumn .facet form > div').not('.facetTitleRow').each(function() { $J(this).addClass('facet-info').append('

').hide(); }); //// Create toggle for Library facet accordion content // Display/Hide Filter Choices for Library Results $J('.searchLimitsColumn .facet').each(function() { $J(this).find('> form .facetTitleRow').click(function() { $J(this).parent().find('.facet-info').slideToggle('slow', function() { if ($J(this).css('display') == 'none') { $J(this).parent().find('> .facetTitleRow .facetTitle > i').replaceWith(''); if ($J(this).find('form').attr('id') !== 'facetFormPUBDATE') { $J(this).parent().find('.limitcolumn_button button[value=Include]').hide(); $J(this).parent().find('.limitcolumn_button button[value=Exclude]').hide(); } $J(this).parent().find('.facetTitle').css('font-weight', '400'); var facetNumber = $J(this).find('input[type="checkbox"]:checked').length; if ($J(facetNumber).length > 0) { $J(this).parent().find('.facetTitleRow').css({ 'border-bottom': '0' }); /*** CTS-38 - Add CSS for pointer on headers ***/ $J(this).parent().find('.facetTitleRow').css({ 'margin-bottom': '0px' }); /*** END CTS-38 - Add CSS for pointer on headers ***/ $J(this).parent().find('.facetTitleRow').append('

Selected: ' + facetNumber + '

'); } else { $J(this).parent().find('.facetTitleRow').css({ 'border-bottom': '0', 'margin-bottom': '0' }); } $J(this).addClass('facet-closed'); $J(this).removeClass('facet-opened'); } else { $J(this).parent().find('> .facetTitleRow .facetTitle > i').replaceWith(''); $J(this).parent().find('.limitcolumn_button button[value=Include]').show(); $J(this).parent().find('.limitcolumn_button button[value=Exclude]').show(); $J(this).css('padding-top','10px'); $J(this).parent().find('.facetTitleRow').css({ 'border-bottom': 'solid 1px #dedede' }); $J(this).parent().find('.facetTitle').css('font-weight', '600'); $J(this).parent().find('.facetTitleRow .facets-selected').remove(); $J(this).addClass('facet-opened'); $J(this).removeClass('facet-closed'); } }); }); }); //// Create toggle for Library facet accordion content // Add margin to bottom of last breadcrumb // CTS-112 - updates for jQuery 3.6 $J('.searchLimitsColumn .limitcolumn_wrapper').find('.breadCrumbsContainer').last().css('margin-bottom', '10px'); $J('.searchLimitsColumn .limitcolumn_wrapper').find('#breadCrumbsContainer').last().css('margin-bottom', '10px'); $J('.searchLimitsColumn, .rightSearchLimitsColumn').show(); if ($J('.searchLimitsColumn #breadCrumbsContainer').text() == "") { $J('.searchLimitsColumn #breadCrumbsContainer').css('margin-bottom', '0'); } // Hide facet include/exclude buttons $J('.searchLimitsColumn .facet').each(function() { $J(this).css('padding-bottom','5px'); if ($J(this).find('> form').attr('id') !== 'facetFormPUBDATE') { $J(this).find('.limitcolumn_button').hide(); } }); // Move include/exclude buttons $J('.searchLimitsColumn .facet').each(function() { $J(this).find('.limitcolumn_button').appendTo($J(this).find('.facet-info')); }); // Show include/exclude when checkboxes are checked (hide if none are checked) $J('.searchLimitsColumn .facet').each(function() {// CTS-34 Fix issues with Publication Date facet graphif ($J(this).find('form').attr('id') !== 'facetFormPUBDATE'){ $J(this).find('.facetItem input[type="checkbox"]').change(function() { if ($J(this).parentsUntil('.facet').find('input[type="checkbox"]:checked').length > 0) { $J(this).parentsUntil('.facet').find('.limitcolumn_button').show(); } else { $J(this).parentsUntil('.facet').find('.limitcolumn_button').hide(); } if ($J('.limitcolumn_wrapper').find('.facet > form').has('input[type="checkbox"]:checked').length > 1) { // Animate overlay $J('#include-exclude-overlay').addClass('overlay-visible'); $J('#clear-all-filters').click(function() { $J('#include-exclude-overlay').removeClass('overlay-visible'); $J('.facet').find('input[type="checkbox"]:checked').each(function() { this.checked = false; }); }); } else { $J('#include-exclude-overlay').removeClass('overlay-visible'); } });} // END CTS-34 Fix issues with Publication Date facet graph });// Add Link to Library Header if ($J('#searchLimitDropDown option:selected').text() != 'Everything') { $J('#breadCrumbsContainer').before('

Filters

Expand All

'); } else { $J('#breadCrumbsContainer').before('

Library Filters

Expand All

'); } // Add Link to Library Header (Library Catalog) if (window.location.href.indexOf('ir=Both') === 0 && $J('#header-lib-results').length > -1) { $J('#header-lib-results').append('

Library Filters

'); } // Display/Hide ALL Facet Categories $J('.searchLimitsColumn #expand-all-library-filters').click(function() { $J('.searchLimitsColumn').find('.facet-info').each(function() { $J(this).slideToggle('slow', function() { if ($J(this).css('display') == 'none') { $J(this).parent().find('> .facetTitleRow .facetTitle > i').replaceWith(''); $J(this).parent().find('.facetTitleRow').css('cssText', ' border-bottom: 0'); /*** CTS-38 - Add CSS for pointer on headers ***/ $J(this).parent().find('.facetTitleRow').css('margin-bottom', '0px'); /*** END CTS-38 - Add CSS for pointer on headers ***/ $J(this).parent().find('.facetTitle').css('font-weight', '400'); $J('.searchLimitsColumn #expand-all-library-filters').text('Expand All'); if ($J(this).hasClass('facet-opened') && $J(this).css('display') == 'none') { $J(this).css('display', 'block'); $J(this).removeClass('facet-opened'); $J(this).parent().find('> .facetTitleRow .facetTitle > i').replaceWith(''); $J(this).parent().find('.facetTitleRow').css('cssText', 'border-bottom: solid 1px #dedede'); $J(this).parent().find('.facetTitle').css('font-weight', '600'); } } else { $J(this).parent().find('> .facetTitleRow .facetTitle > i').replaceWith(''); $J(this).parent().find('.facetTitleRow').css('cssText', 'border-bottom: solid 1px #dedede'); $J(this).parent().find('.facetTitle').css('font-weight', '600'); $J('.searchLimitsColumn #expand-all-library-filters').text('Close All'); if ($J(this).hasClass('facet-closed') && $J(this).css('display') == 'block') { $J(this).css('display', 'none'); $J(this).removeClass('facet-closed'); $J(this).parent().find('> .facetTitleRow .facetTitle > i').replaceWith(''); $J(this).parent().find('.facetTitleRow').css('cssText', 'border-bottom: 0'); $J(this).parent().find('.facetTitle').css('font-weight', '400'); } } }); }); }); $J('.limitcolumn_wrapper').find('#breadCrumbsContainer:last').css('margin-bottom', '10px'); // Add margin to bottom of last breadcrumb $J('.moreNavigators a').addClass('button'); $J('.moreNavigators a').css('color','#fff'); $J('.moreNavigators a').css('display','inline-block'); $J('.moreNavigators a').css('min-width','50px'); $J('.moreNavigators a').css('margin-bottom','10px'); $J('.moreNavigators i').hide(); $J('.fewerNavigators a').addClass('button'); $J('.fewerNavigators a').css('color','#fff'); $J('.fewerNavigators a').css('display','inline-block'); $J('.fewerNavigators a').css('min-width','50px'); $J('.fewerNavigators a').css('margin-bottom','10px'); $J('.fewerNavigators i').hide(); }

228 Results Found

Select All

1..1516171819

000000000000DEFAULT

Select a list

The following items were successfully added.

    There was an error while adding the following items. Please try again.

      One or more items could not be added because you are not logged in.

      205.

      This other Eden : a novel

      This other Eden : a novel

      by

      Harding, Paul, 1967-

      Format:

      Books

      Publication Information

      New York, NY : W.W. Norton & Company, [2023]

      Available: Holds:

      SD_ILS:273673

      9781324036296

      206.

      The fake mate

      The fake mate

      by

      Ferguson, Lana.

      Format:

      Books

      Publication Information

      New York : Berkley Romance, 2023.

      Available: Holds:

      SD_ILS:296095

      9780593549377

      207.

      Escaping Dreamland : a novel

      Escaping Dreamland : a novel

      by

      Lovett, Charles C.

      Format:

      Books

      Publication Information

      Ashland, OR : Blackstone Publishing, 2020.

      Available: Holds:

      SD_ILS:213310

      9781982629403

      208.

      Sherlock Holmes : the complete novels and stories. Vol. II

      Sherlock Holmes : the complete novels and stories. Vol. II

      by

      Doyle, Arthur Conan, 1859-1930.

      Format:

      Books

      Publication Information

      New York : Vintage Books, a division of Penguin Random House LLC, 2020.

      Available: Holds:

      SD_ILS:301672

      9781984899545

      209.

      Expiration dates : a novel

      Expiration dates : a novel

      by

      Serle, Rebecca.

      Format:

      Books

      Publication Information

      New York : Atria Books, 2024.

      Available: Holds:

      SD_ILS:299115

      9781982166823

      9781982166830

      210.

      Becoming Madam Secretary

      Becoming Madam Secretary

      by

      Dray, Stephanie.

      Format:

      Books

      Publication Information

      New York : Berkley, 2024.

      Available: Holds:

      SD_ILS:299384

      9780593437056

      211.

      Butter soft

      Butter soft

      by

      Gray, Erick S.

      Format:

      Books

      Publication Information

      Farmingdale, NY : Urban Books, LLC, [2024]

      Available: Holds:

      SD_ILS:300673

      9781645565666

      212.

      Double lives

      Double lives

      by

      Monroe, Mary.

      Format:

      Books

      Publication Information

      New York : Dafina, 2024.

      Available: Holds:

      SD_ILS:299389

      9781496743152

      213.

      The lost Book of Bonn : a novel

      The lost Book of Bonn : a novel

      by

      Labuskes, Brianna.

      Format:

      Books

      Publication Information

      New York, NY : William Morrow, an imprint of HarperCollinsPublishers, [2024]

      Available: Holds:

      SD_ILS:299391

      9780063259287

      214.

      The sweet blue distance

      The sweet blue distance

      by

      Donati, Sara, 1956-

      Format:

      Books

      Publication Information

      New York : Berkley, [2024]

      Available: Holds:

      SD_ILS:299843

      9781984805058

      215.

      The good, the bad, and the aunties

      The good, the bad, and the aunties

      by

      Sutanto, Jesse Q.

      Format:

      Books

      Publication Information

      New York : Berkley, 2024.

      Available: Holds:

      SD_ILS:300145

      9780593546215

      9780593546222

      216.

      Mad honey : a novel

      Mad honey : a novel

      by

      Picoult, Jodi, 1966-

      Format:

      Books

      Publication Information

      New York : Ballantine Books, [2022]

      Available: Holds:

      SD_ILS:271985

      9781984818386

      Select All

      1..1516171819

      228 Results Found

      Search Results for "NEWFICA" (2024)
      Top Articles
      Latest Posts
      Article information

      Author: Duane Harber

      Last Updated:

      Views: 6158

      Rating: 4 / 5 (71 voted)

      Reviews: 86% of readers found this page helpful

      Author information

      Name: Duane Harber

      Birthday: 1999-10-17

      Address: Apt. 404 9899 Magnolia Roads, Port Royceville, ID 78186

      Phone: +186911129794335

      Job: Human Hospitality Planner

      Hobby: Listening to music, Orienteering, Knapping, Dance, Mountain biking, Fishing, Pottery

      Introduction: My name is Duane Harber, I am a modern, clever, handsome, fair, agreeable, inexpensive, beautiful person who loves writing and wants to share my knowledge and understanding with you.