great bleedin' dos2unix conversion
authorsenator <lebbeous@esilibrary.com>
Thu, 3 Mar 2011 15:37:32 +0000 (10:37 -0500)
committersenator <lebbeous@esilibrary.com>
Thu, 3 Mar 2011 15:37:32 +0000 (10:37 -0500)
39 files changed:
Open-ILS/web/opac/skin/kcls/css/EricKCLSTest.css
Open-ILS/web/opac/skin/kcls/css/style.css
Open-ILS/web/opac/skin/kcls/js/adv_global.js
Open-ILS/web/opac/skin/kcls/js/advanced.js
Open-ILS/web/opac/skin/kcls/js/container.js
Open-ILS/web/opac/skin/kcls/js/contentcafe.js
Open-ILS/web/opac/skin/kcls/js/contentslider.js
Open-ILS/web/opac/skin/kcls/js/depth_selector.js
Open-ILS/web/opac/skin/kcls/js/fgi-search_bar.js
Open-ILS/web/opac/skin/kcls/js/holds.js
Open-ILS/web/opac/skin/kcls/js/marc.js
Open-ILS/web/opac/skin/kcls/js/miker-search_bar.js
Open-ILS/web/opac/skin/kcls/js/misc.js
Open-ILS/web/opac/skin/kcls/js/mresult.js
Open-ILS/web/opac/skin/kcls/js/myopac.js
Open-ILS/web/opac/skin/kcls/js/rdetail.js
Open-ILS/web/opac/skin/kcls/js/result_common.js
Open-ILS/web/opac/skin/kcls/js/rresult.js
Open-ILS/web/opac/skin/kcls/js/search_bar.js
Open-ILS/web/opac/skin/kcls/js/sidebar.js
Open-ILS/web/opac/skin/kcls/js/sidebar_extras.js
Open-ILS/web/opac/skin/kcls/js/tips.js
Open-ILS/web/opac/skin/kcls/xml/advanced/adv_global_row - Copy.xml [deleted file]
Open-ILS/web/opac/skin/kcls/xml/advanced/adv_global_row.xml
Open-ILS/web/opac/skin/kcls/xml/advanced/advanced_global.xml
Open-ILS/web/opac/skin/kcls/xml/body.xml
Open-ILS/web/opac/skin/kcls/xml/common/js_common.xml
Open-ILS/web/opac/skin/kcls/xml/home/homesearch.xml
Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_bookbags.xml
Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_fines.xml
Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_holds.xml
Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_summary.xml
Open-ILS/web/opac/skin/kcls/xml/page_rdetail.xml
Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_extras.xml
Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_summary.xml
Open-ILS/web/opac/skin/kcls/xml/result/result_header.xml
Open-ILS/web/opac/skin/kcls/xml/result/result_info.xml
Open-ILS/web/opac/skin/kcls/xml/result/result_table.xml
Open-ILS/web/opac/skin/kcls/xml/top_nav.xml

index 32f43f8..fd422a9 100644 (file)
@@ -1,2 +1,2 @@
-Please feel free to delete, only for testing purposes.\r
-Test2\r
+Please feel free to delete, only for testing purposes.
+Test2
index 53332dc..0ac080c 100644 (file)
-@charset "utf-8";\r
-/* CSS Document */\r
-\r
-@import '/js/dojo/dijit/themes/tundra/tundra.css';\r
-\r
-body {\r
-       margin:0;\r
-       font-family: Arial, Helvetica, sans-serif;\r
-       font-size: 12px;\r
-       background:#333;\r
-}\r
-\r
-img {\r
-       border: none;\r
-}\r
-\r
-a {\r
-       color: #003399;\r
-       text-decoration: none;\r
-}\r
-\r
-a:hover {\r
-       text-decoration: underline;\r
-}\r
-\r
-#search-wrapper input[type=text] {\r
-       border:none;\r
-       margin:0;\r
-       padding:0;\r
-}\r
-\r
-#search-wrapper select {\r
-       border:1px solid #e9ebf3;\r
-       margin:0;\r
-       padding:0;\r
-       width:168px;\r
-}\r
-\r
-/*\r
-#search-wrapper select {\r
-       border:0px solid black;\r
-       filter:alpha(opacity=0);\r
-       -moz-opacity:0;\r
-       -khtml-opacity:0;\r
-       opacity:0;\r
-       padding:0;\r
-       margin:0;\r
-       height:18px;\r
-       font-size: 12px;\r
-}\r
-*/\r
-h1 {\r
-       margin:0;\r
-       margin-bottom: 5px;\r
-       font-size: 20px;\r
-       font-weight:normal;\r
-}\r
-\r
-h2 {\r
-       margin:0;\r
-       margin-bottom: 5px;\r
-       font-size: 14px;\r
-       font-weight:bold;\r
-}\r
-\r
-.hide_me {\r
-       display: none;\r
-       visibility: hidden;\r
-}\r
-\r
-div.select-box-wrapper {\r
-       position:absolute;\r
-       padding-top:2px;\r
-       padding-left:3px;\r
-       overflow:hidden;\r
-       text-align:left;\r
-}\r
-\r
-div.select-wrapper {\r
-       border:1px solid #4C8AB0;\r
-       display:inline-block;\r
-       position:relative;\r
-       z-index:2;\r
-       background:url('/opac/skin/kcls/graphics/dropdown.gif') no-repeat right center;\r
-}\r
-\r
-div.select-wrapper:hover {\r
-       background:url('/opac/skin/kcls/graphics/dropdown-hover.gif') no-repeat right center;\r
-}\r
-\r
-#dash_wrapper {\r
-       width:500px;\r
-       position:relative;\r
-       top:-26px;\r
-}\r
-\r
-#dashboard {\r
-       clear:both;\r
-       float:right;\r
-       width:384px;\r
-}\r
-\r
-#dashboard span {\r
-       font-weight:bold;\r
-       position:relative;\r
-       left:-1px;\r
-}\r
-\r
-#dash_user {\r
-       font-weight:bold;\r
-       text-transform:capitalize;\r
-}\r
-\r
-#header {\r
-       color: #fff;\r
-       padding: 26px 0px 26px 0px;\r
-       width: 974px;\r
-       margin: auto;\r
-       font-size:11px;\r
-}\r
-\r
-#header a {\r
-       color: #fff;\r
-}\r
-\r
-#header a:hover {\r
-       color: white;\r
-       text-decoration: none;\r
-}\r
-\r
-#header-links {\r
-       color: #afafaf;\r
-       font-size: 11px;\r
-       font-weight: bold;\r
-       position: relative;\r
-       top:4px;\r
-       \r
-}\r
-\r
-#header-links a {\r
-       color: #afafaf;\r
-       display: block;\r
-       float:left;\r
-       margin-right:22px;\r
-}\r
-\r
-#header-links a:hover {\r
-       color: white;\r
-       text-decoration: none;\r
-}\r
-\r
-#header #header-links2 {\r
-       position:relative;\r
-       top:-8px;\r
-       color: white;\r
-       padding-bottom: 15px;\r
-}\r
-\r
-#header #header-links2 a {\r
-       color: white;\r
-}\r
-\r
-#header #header-links2 a:hover {\r
-       text-decoration: underline;\r
-}\r
-\r
-#header #your-acct-login {\r
-       padding-top:10px;\r
-}\r
-\r
-#gold-links {\r
-       margin:auto;\r
-       width:974px;\r
-       padding-left:0px;\r
-}\r
-\r
-#util-bar {\r
-       margin:auto;\r
-       width:974px;\r
-       padding-left:0px;\r
-       height:0px;\r
-}\r
-\r
-#search-wrapper {\r
-       border-bottom: 1px solid #e9ebf3;\r
-       padding-bottom: 5px;\r
-       background: white;\r
-}\r
-\r
-#search_box_wrapper {\r
-       border:1px solid #e9ebf3;\r
-       padding: 1px;\r
-       padding-left:3px;\r
-}\r
-\r
-#search-wrapper #breadcrumb {\r
-       margin-top:0px;\r
-       font-size: 10px;\r
-       float:left;\r
-}\r
-\r
-#search-wrapper #search-within {\r
-       margin-top:10px;\r
-       float:right;\r
-       position:relative;\r
-       left:-173px;\r
-}\r
-\r
-#search-wrapper #breadcrumb a {\r
-       color: black;\r
-}\r
-\r
-#search-wrapper #search_frm label {\r
-       font-size: 10px;\r
-}\r
-\r
-#search-wrapper #search-box {\r
-       width:974px;\r
-       margin:auto;\r
-       padding-left: 0px;\r
-}\r
-\r
-#utils {\r
-       float:right;\r
-       z-index:1;\r
-       width:150px;\r
-       height:30px;\r
-       background:url('/opac/skin/kcls/graphics/utils-corner-left.png') no-repeat left top;\r
-       padding-left: 3px;\r
-       color: white;\r
-       position:relative;\r
-}\r
-\r
-#utils a {\r
-       color: white;\r
-       font-size: 10px;\r
-}\r
-#adv_search_tabs {\r
-       height:33px;\r
-       width:974px;\r
-       margin:auto;\r
-}\r
-\r
-#adv_search_tabs a {\r
-       float: left;\r
-       display: block;\r
-       height:33px;\r
-       margin-right:7px;\r
-}\r
-\r
-#adv_search {\r
-       width:156px;\r
-       background:url('/opac/skin/kcls/graphics/adv_search_on.gif') no-repeat bottom;\r
-}\r
-\r
-#num_search {\r
-       width:156px;\r
-       background:url('/opac/skin/kcls/graphics/num_search_off.gif') no-repeat bottom;\r
-}\r
-\r
-#expert_search {\r
-       width:156px;\r
-       background:url('/opac/skin/kcls/graphics/expert_search_off.gif') no-repeat bottom;\r
-}\r
-\r
-#acct_tabs, #acct_fines_tabs {\r
-       height:33px;\r
-       width:974px;\r
-       margin:auto;\r
-}\r
-\r
-#acct_tabs a, #acct_fines_tabs a {\r
-       float: left;\r
-       display: block;\r
-       height:33px;\r
-       margin-right:7px;\r
-}\r
-\r
-#acct_fines_tab {\r
-    width:156px;\r
-    background:url('/opac/skin/kcls/graphics/acct_fines_on.jpg') no-repeat bottom;\r
-}\r
-#acct_payments_tab {\r
-    width:156px;\r
-    background:url('/opac/skin/kcls/graphics/acct_payments_off.jpg') no-repeat bottom;\r
-}\r
-\r
-#acct_summary {\r
-       width:156px;\r
-       background:url('/opac/skin/kcls/graphics/acct_summary_on.gif') no-repeat bottom;\r
-}\r
-\r
-#acct_checked_out {\r
-       width:156px;\r
-       background:url('/opac/skin/kcls/graphics/acct_checked_out_off.gif') no-repeat bottom;\r
-}\r
-\r
-#acct_holds {\r
-       width:156px;\r
-       background:url('/opac/skin/kcls/graphics/acct_holds_off.gif') no-repeat bottom;\r
-}\r
-\r
-#acct_prefs {\r
-       width:156px;\r
-       background:url('/opac/skin/kcls/graphics/acct_prefs_off.gif') no-repeat bottom;\r
-}\r
-\r
-#acct_favs {\r
-       width:156px;\r
-       background:url('/opac/skin/kcls/graphics/acct_favs_off.gif') no-repeat bottom;\r
-}\r
-\r
-#acct_lists {\r
-       width:156px;\r
-       background:url('/opac/skin/kcls/graphics/acct_lists_off.gif') no-repeat bottom;\r
-}\r
-\r
-#rdetail_header {\r
-       font-size:14px;\r
-       font-weight:bold;\r
-       color:#074079;\r
-       padding: 5px 7px 6px 0px;\r
-       border-bottom: 1px dotted #ccc;\r
-}\r
-\r
-#rdetail_result_count {\r
-       color: black;\r
-       font-size: 11px;\r
-       font-weight: normal;\r
-}\r
-\r
-#rdetail_result_nav {\r
-       float:right;\r
-       font-size: 11px;\r
-       font-weight:normal;\r
-}\r
-\r
-#rdetail_details_table {\r
-       margin-top: 15px;\r
-}\r
-\r
-#rdetail_title {\r
-       font-size: 18px;\r
-}\r
-\r
-#rdetail_image_cell {\r
-       padding-top: 3px;\r
-       padding-right: 10px;\r
-}\r
-\r
-.rdetail_aux_utils {\r
-       border-left:1px dotted #ccc;\r
-       padding-left: 17px;\r
-       padding-bottom: 6px;\r
-       padding-right: 70px;\r
-}\r
-\r
-.results_aux_utils {\r
-       border-left:1px dotted #ccc;\r
-       padding-left: 17px;\r
-       padding-bottom: 6px;\r
-       padding-right: 50px;\r
-}\r
-\r
-#rdetails_status td, #rdetails_status2 td {\r
-       white-space:nowrap !important;\r
-       padding: 7px 0px 3px 13px;\r
-}\r
-\r
-#rdetails_status_head td {\r
-       background-color: #d8d8d8;\r
-       padding: 13px 0px 13px 13px;\r
-       font-size: 10px;\r
-       text-transform: uppercase;\r
-       font-weight: bold;\r
-}\r
-\r
-#rdetails_status_head2 td {\r
-       padding: 0px;\r
-}\r
-\r
-.rdetail_extras {\r
-       height: 29px;\r
-       background: #9ad0f1;\r
-       padding-top:1px;\r
-       margin-bottom: 10px;\r
-       margin-top: 10px;\r
-       clear:both;\r
-}\r
-\r
-.rdetail_extras_hr {\r
-       height: 1px;\r
-       background: #b7def5;\r
-       margin-left: 1px;\r
-       margin-right: 1px;\r
-}\r
-\r
-.rdetail_extras_link {\r
-       padding-top: 4px;\r
-       padding-left: 12px;\r
-       font-size: 10px;\r
-       text-transform: uppercase;\r
-       font-weight: bold;\r
-}\r
-\r
-.rdetail_extras_lbl {\r
-       position: relative;\r
-       top: -4px;\r
-       left: 7px;\r
-}\r
-\r
-#paginate-homebanner a.toc {\r
-       display:block;\r
-       width:20px;\r
-       height:20px;\r
-       background:gray;\r
-       float:left;\r
-       margin-left:2px;\r
-       margin-right:2px;\r
-       margin-top:2px;\r
-}\r
-\r
-#rdetail_extras_expand, #rdetail_extras_collapse, #rdetail_locs_collapse {\r
-       margin-left: 13px;\r
-}\r
-\r
-#rdetail_locs_expand, #rdetail_locs_collapse {\r
-       padding-bottom:3px;\r
-       margin-left:13px;\r
-}\r
-\r
-#rdetail_anotes_div .biography {\r
-       margin:0;\r
-}\r
-\r
-#paginate-homebanner a.selected {\r
-       border: 2px solid black;\r
-       margin-top:0px;\r
-       margin-left:0px;\r
-       margin-right:0px;\r
-}\r
-\r
-#hp-buttons {\r
-       margin: auto;\r
-       margin-top: 6px;\r
-       width: 974px;\r
-}\r
-\r
-#hp-welcome {\r
-       position:absolute;\r
-       width:295px;\r
-       height:192px;\r
-       background: url('/opac/skin/kcls/graphics/banner-bg.png') no-repeat;\r
-       color: #fff;\r
-       padding-left: 33px;\r
-       padding-top: 21px;\r
-       z-index:9999999999;\r
-}\r
-\r
-#hp-welcome h1 {\r
-       font-size: 25px;\r
-       margin-bottom:15px;\r
-}\r
-\r
-#hp-welcome a {\r
-       color: #fff;\r
-       text-decoration: underline;\r
-}\r
-\r
-#hp-banner {\r
-       margin: auto;\r
-       width:974px;\r
-       height: 213px;\r
-}\r
-\r
-#hp-ql-table {\r
-       margin-left: 2px;\r
-       padding-top: 3px;\r
-}\r
-\r
-#hp-ql-table a {\r
-       color: #333;\r
-       font-weight: bold;\r
-       font-size: 13px;\r
-       text-transform: uppercase;\r
-       text-decoration: none;\r
-       display: block;\r
-       width: 144px;\r
-       height: 25px;\r
-       padding-top: 9px;\r
-       padding-left: 15px;\r
-       background: url('/opac/skin/kcls/graphics/button-bg.png') no-repeat;\r
-}\r
-\r
-#hp-ql-bottom {\r
-       width: 640px;\r
-       height: 31px;\r
-       padding-left: 24px;\r
-       padding-top: 13px;\r
-       background: url('/opac/skin/kcls/graphics/hp-links-mid.jpg') repeat-x;\r
-}\r
-\r
-#hp-ql-bottom a {\r
-       display: inline-block;\r
-       text-decoration: none;\r
-       color: white;\r
-       font-size: 15px;\r
-       font-weight: bold;\r
-}\r
-\r
-#content-wrapper {\r
-       background: white;\r
-       min-height: 260px;\r
-       border-bottom: 1px solid black;\r
-}\r
-\r
-#main-content {\r
-       width: 974px;\r
-       margin:auto;\r
-       padding-left:0px;\r
-}\r
-\r
-#main-content .login_boxes {\r
-       border: 1px solid #dedede;\r
-       background:url('/opac/skin/kcls/graphics/login-bg.jpg') top repeat-x;\r
-       color: #333;\r
-}\r
-\r
-#main-content .login_boxes h1 {\r
-       font-weight: normal;\r
-       font-size: 25px;\r
-       margin:0;\r
-}\r
-\r
-#main-content .left_brain {\r
-       padding-left:28px;\r
-       padding-top:25px;\r
-}\r
-\r
-#main-content .left_brain input[type=text], #main-content .left_brain input[type=password] {\r
-       width:167px;\r
-       height:18px;\r
-       margin:0;\r
-       padding:0;\r
-       border:none;\r
-       background: none;\r
-       font-size: 15px;\r
-       color: #333;\r
-       font-weight:bold;\r
-}\r
-\r
-#main-content .left_brain .input_bg {\r
-       padding:10px 10px 0px 13px;\r
-       background: url('/opac/skin/kcls/graphics/login-box-bg.jpg') no-repeat;\r
-       width:167px;\r
-       height:29px;\r
-}\r
-\r
-#home-buttons-inner {\r
-       width:664px;\r
-       height:117px;\r
-       background:#bda964;\r
-}\r
-\r
-#holds_temp_parent td {\r
-       border-bottom:1px solid #dcdbdb;\r
-}\r
-\r
-#holds_temp_parent input, #holds_temp_parent select {\r
-       margin:0;\r
-}\r
-\r
-\r
-\r
-\r
-#results_header_bar {\r
-       background: #929292;\r
-       border-top:1px solid #8b8b8b;\r
-}\r
-\r
-#results_header_inner {\r
-       height:32px;\r
-       width:974px;\r
-       margin:auto;\r
-       padding-top:6px;\r
-}\r
-\r
-.results_header_btns {\r
-       float:left;\r
-       margin-right: 6px;\r
-}\r
-\r
-.results_header_div {\r
-       float: left;\r
-       width: 0px;\r
-       height: 25px;\r
-       border-left: 1px solid #7c7c7c;\r
-       border-right: 1px solid #9c9c9c;\r
-       margin: 0px 13px;\r
-}\r
-\r
-.results_header_lbl {\r
-       font-weight: bold;\r
-       float: left;\r
-       font-size: 11px;\r
-       color: #191919;\r
-       position: relative;\r
-       top: 5px;\r
-       margin-right: 6px;\r
-}\r
-\r
-.results_header_sel {\r
-       float:left;\r
-       position: relative;\r
-       top: 2px;\r
-       margin:0;\r
-}\r
-\r
-#results_header_nav1 {\r
-       padding: 5px 7px 6px 0px;\r
-       border-bottom: 1px dotted #ccc;\r
-}\r
-\r
-#results_header_nav1 .h1 {\r
-       font-size:14px;\r
-       font-weight:bold;\r
-       color:#074079;\r
-}\r
-\r
-#start_end_links_span {\r
-       font-size: 11px;\r
-}\r
-\r
-#start_end_links_span2 {\r
-       font-size: 11px;\r
-}\r
-\r
-.nav_arrow_fix {\r
-       font-size:8px;\r
-       position:relative;\r
-       top:-1px;\r
-}\r
-\r
-#result_table_div {\r
-       margin-top: 20px;\r
-}\r
-\r
-#result_numbers1 {\r
-       font-size: 11px;\r
-       padding-left:15px;\r
-}\r
-\r
-\r
-\r
-\r
-\r
-\r
-.icon_text {\r
-       text-transform:capitalize;\r
-}\r
-\r
-.result_table_title_cell {\r
-       padding-left: 7px;\r
-}\r
-\r
-#myopac_summary_div p {\r
-       margin:0;\r
-       margin-bottom: 10px;\r
-}\r
-\r
-#acct_sum_checked_table td {\r
-       padding-bottom:5px;\r
-}\r
-\r
-#zero_search_hits p {\r
-       margin-top:0;\r
-}\r
-\r
-#zero_hits_term {\r
-       text-transform: uppercase;\r
-}\r
-\r
-#zero_search_hits #spell_check_link {\r
-       text-transform: uppercase;\r
-}\r
-\r
-#zero_search_hits #zero_hits_suggestions {\r
-       text-transform: uppercase;\r
-}\r
-\r
-.results_info_table td {\r
-       padding-right: 10px;\r
-}\r
-\r
-#myopac_holds_main_table {\r
-       border-collapse: collapse;\r
-}\r
-\r
-#myopac_holds_main_table td {\r
-       border: 1px solid black;\r
-       \r
-}\r
-\r
-#myopac_prefs_div .data_grid {\r
-       border-collapse:collapse;\r
-}\r
-\r
-#myopac_prefs_div .data_grid td {\r
-       background:#f0f0f0;\r
-       border-bottom:3px solid white;\r
-       padding:6px 0px 7px 17px;\r
-}\r
-\r
-.header_middle {\r
-       height:22px;\r
-       font-size:14px;\r
-       font-weight:bold;\r
-       color:#074079;\r
-       padding: 7px 7px 0px 0px;\r
-       border-bottom: 1px dotted #ccc;\r
-}\r
-\r
-.header_middle a {\r
-       font-size: 12px;\r
-       font-weight: normal;\r
-}\r
-\r
-.acct_sum_row {\r
-       padding: 7px 15px;\r
-       width: 712px;\r
-       background: #f0f0f0;\r
-       margin-bottom: 2px;\r
-       font-size: 10px;\r
-       font-weight: bold;\r
-       text-transform: uppercase;\r
-}\r
-\r
-.acct_sum_row a {\r
-       text-transform: none;\r
-       font-size: 12px;\r
-       position:relative;\r
-       top:-1px;\r
-}\r
-\r
-.acct_sum_row .view_link {\r
-       font-weight: normal;\r
-       font-size:12px;\r
-}\r
-\r
-#myopac_sum_fines {\r
-       float:right;\r
-       padding: 15px 0px 0px 23px;\r
-       background: #f0f0f0;\r
-       width: 177px;\r
-       height: 166px;\r
-}\r
-\r
-.acct_holds_temp td {\r
-       text-align: left;\r
-}\r
-\r
-#acct_checked_tabs .align, #acct_holds_tabs .align, #acct_prefs_tabs .align {\r
-       float:left;\r
-       /*padding-left:10px;*/\r
-}\r
-\r
-#acct_checked_tabs .selected, #acct_holds_tabs .selected, #acct_prefs_tabs .selected {\r
-       /*background:url('/opac/skin/kcls/graphics/gray-arrow.png') left 3px no-repeat;*/\r
-}\r
-\r
-#acct_checked_main_header, #acct_holds_main_header, #acct_checked_hist_header, #acct_list_header, #acct_list_header_anon, #temp_list_holds {\r
-       font-weight:bold;\r
-       text-transform:uppercase;\r
-       font-size: 10px;\r
-}\r
-\r
-#acct_checked_main_header td, #acct_holds_main_header td, #acct_checked_hist_header td, #acct_list_header td, #acct_list_header_anon td, #temp_list_holds td {\r
-       background: #d8d8d8;\r
-       padding: 8px 0px 7px 0px;\r
-}\r
-\r
-#acct_list_header select, #acct_list_header_anon select {\r
-       font-weight:normal;\r
-       text-transform:none;\r
-}\r
-\r
-#acct_holds_activates_table label {\r
-       font-weight: bold;\r
-       font-size: 11px;\r
-       text-transform:uppercase;\r
-       padding-right: 5px;\r
-}\r
-\r
-.adv_search_font {\r
-       font-size: 10px;\r
-}\r
-\r
-.search_catalog_lbl {\r
-       font-size: 14px;\r
-}\r
-\r
-.lbl1 {\r
-       font-size:14px;\r
-       font-weight:bold;\r
-}\r
-\r
-.lbl2 {\r
-       font-size:10px;\r
-       font-weight:normal;\r
-       position:relative;\r
-       top:3px;\r
-}\r
-\r
-#myopac_tabs, #adv_search_parent, #fines_payments_wrapper {\r
-       background: #929292;\r
-       border-top:1px solid #8b8b8b;\r
-       padding-top:5px;\r
-       margin-bottom:20px;\r
-}\r
-\r
-#adv_search_parent {\r
-       margin-bottom:0px;\r
-}\r
-\r
-#myopac_loading {\r
-       width:100%;\r
-       text-align:center;\r
-       padding-top:20px;\r
-       font-size:16px;\r
-       font-weight:bold;\r
-}\r
-\r
-.chili_link {\r
-       width:100px !important;\r
-       text-align: center !important;\r
-}\r
-\r
-.chili_review div.chili_link div {\r
-       margin: auto;\r
-}\r
-\r
-/* some facet styling */\r
-.facetClassContainer { margin: 2px; border: 1px solid #CCC; }\r
-.facetClassLabelContainer { border: 1px solid #CCC; }\r
-.facetClassLabel { font-weight: bold; text-align: center; }\r
-.facetFieldContainer {  }\r
-.facetFieldLabel { padding-left: 2px; margin-top: 5px; margin-bottom: 5px; font-weight: bold; text-align: left; }\r
-.extraFacetFieldsWrapper { }\r
-.toggleExtraFacetFieldsButton { float: right; margin: 0px; padding: 0px; }\r
-.facetFieldLineCount { display: inline-block; border-right: 1px solid #CCC; color: gray; width: 3em; margin-right: 3px }\r
-.facetField { border-top: 1px solid #CCC; }\r
-.facetFields { padding-left: 5px; }\r
-.facetFieldLineValue { overflow: hidden; text-overflow: ellipsis; }\r
-\r
-#footer {\r
-       padding-top:5px;\r
-       padding-bottom: 10px;\r
-       color: white;\r
-       margin: auto;\r
-       width: 974px;\r
-       color: #afafaf;\r
-       font-size: 11px;\r
-}\r
-\r
-#footer a {\r
-       color: white;\r
-       color: #afafaf;\r
-}\r
-\r
-.color_4 {\r
-       text-transform: uppercase;\r
-       font-weight: bold;\r
-       font-size: 10px;\r
-}\r
+@charset "utf-8";
+/* CSS Document */
+
+@import '/js/dojo/dijit/themes/tundra/tundra.css';
+
+body {
+       margin:0;
+       font-family: Arial, Helvetica, sans-serif;
+       font-size: 12px;
+       background:#333;
+}
+
+img {
+       border: none;
+}
+
+a {
+       color: #003399;
+       text-decoration: none;
+}
+
+a:hover {
+       text-decoration: underline;
+}
+
+#search-wrapper input[type=text] {
+       border:none;
+       margin:0;
+       padding:0;
+}
+
+#search-wrapper select {
+       border:1px solid #e9ebf3;
+       margin:0;
+       padding:0;
+       width:168px;
+}
+
+/*
+#search-wrapper select {
+       border:0px solid black;
+       filter:alpha(opacity=0);
+       -moz-opacity:0;
+       -khtml-opacity:0;
+       opacity:0;
+       padding:0;
+       margin:0;
+       height:18px;
+       font-size: 12px;
+}
+*/
+h1 {
+       margin:0;
+       margin-bottom: 5px;
+       font-size: 20px;
+       font-weight:normal;
+}
+
+h2 {
+       margin:0;
+       margin-bottom: 5px;
+       font-size: 14px;
+       font-weight:bold;
+}
+
+.hide_me {
+       display: none;
+       visibility: hidden;
+}
+
+div.select-box-wrapper {
+       position:absolute;
+       padding-top:2px;
+       padding-left:3px;
+       overflow:hidden;
+       text-align:left;
+}
+
+div.select-wrapper {
+       border:1px solid #4C8AB0;
+       display:inline-block;
+       position:relative;
+       z-index:2;
+       background:url('/opac/skin/kcls/graphics/dropdown.gif') no-repeat right center;
+}
+
+div.select-wrapper:hover {
+       background:url('/opac/skin/kcls/graphics/dropdown-hover.gif') no-repeat right center;
+}
+
+#dash_wrapper {
+       width:500px;
+       position:relative;
+       top:-26px;
+}
+
+#dashboard {
+       clear:both;
+       float:right;
+       width:384px;
+}
+
+#dashboard span {
+       font-weight:bold;
+       position:relative;
+       left:-1px;
+}
+
+#dash_user {
+       font-weight:bold;
+       text-transform:capitalize;
+}
+
+#header {
+       color: #fff;
+       padding: 26px 0px 26px 0px;
+       width: 974px;
+       margin: auto;
+       font-size:11px;
+}
+
+#header a {
+       color: #fff;
+}
+
+#header a:hover {
+       color: white;
+       text-decoration: none;
+}
+
+#header-links {
+       color: #afafaf;
+       font-size: 11px;
+       font-weight: bold;
+       position: relative;
+       top:4px;
+       
+}
+
+#header-links a {
+       color: #afafaf;
+       display: block;
+       float:left;
+       margin-right:22px;
+}
+
+#header-links a:hover {
+       color: white;
+       text-decoration: none;
+}
+
+#header #header-links2 {
+       position:relative;
+       top:-8px;
+       color: white;
+       padding-bottom: 15px;
+}
+
+#header #header-links2 a {
+       color: white;
+}
+
+#header #header-links2 a:hover {
+       text-decoration: underline;
+}
+
+#header #your-acct-login {
+       padding-top:10px;
+}
+
+#gold-links {
+       margin:auto;
+       width:974px;
+       padding-left:0px;
+}
+
+#util-bar {
+       margin:auto;
+       width:974px;
+       padding-left:0px;
+       height:0px;
+}
+
+#search-wrapper {
+       border-bottom: 1px solid #e9ebf3;
+       padding-bottom: 5px;
+       background: white;
+}
+
+#search_box_wrapper {
+       border:1px solid #e9ebf3;
+       padding: 1px;
+       padding-left:3px;
+}
+
+#search-wrapper #breadcrumb {
+       margin-top:0px;
+       font-size: 10px;
+       float:left;
+}
+
+#search-wrapper #search-within {
+       margin-top:10px;
+       float:right;
+       position:relative;
+       left:-173px;
+}
+
+#search-wrapper #breadcrumb a {
+       color: black;
+}
+
+#search-wrapper #search_frm label {
+       font-size: 10px;
+}
+
+#search-wrapper #search-box {
+       width:974px;
+       margin:auto;
+       padding-left: 0px;
+}
+
+#utils {
+       float:right;
+       z-index:1;
+       width:150px;
+       height:30px;
+       background:url('/opac/skin/kcls/graphics/utils-corner-left.png') no-repeat left top;
+       padding-left: 3px;
+       color: white;
+       position:relative;
+}
+
+#utils a {
+       color: white;
+       font-size: 10px;
+}
+#adv_search_tabs {
+       height:33px;
+       width:974px;
+       margin:auto;
+}
+
+#adv_search_tabs a {
+       float: left;
+       display: block;
+       height:33px;
+       margin-right:7px;
+}
+
+#adv_search {
+       width:156px;
+       background:url('/opac/skin/kcls/graphics/adv_search_on.gif') no-repeat bottom;
+}
+
+#num_search {
+       width:156px;
+       background:url('/opac/skin/kcls/graphics/num_search_off.gif') no-repeat bottom;
+}
+
+#expert_search {
+       width:156px;
+       background:url('/opac/skin/kcls/graphics/expert_search_off.gif') no-repeat bottom;
+}
+
+#acct_tabs, #acct_fines_tabs {
+       height:33px;
+       width:974px;
+       margin:auto;
+}
+
+#acct_tabs a, #acct_fines_tabs a {
+       float: left;
+       display: block;
+       height:33px;
+       margin-right:7px;
+}
+
+#acct_fines_tab {
+    width:156px;
+    background:url('/opac/skin/kcls/graphics/acct_fines_on.jpg') no-repeat bottom;
+}
+#acct_payments_tab {
+    width:156px;
+    background:url('/opac/skin/kcls/graphics/acct_payments_off.jpg') no-repeat bottom;
+}
+
+#acct_summary {
+       width:156px;
+       background:url('/opac/skin/kcls/graphics/acct_summary_on.gif') no-repeat bottom;
+}
+
+#acct_checked_out {
+       width:156px;
+       background:url('/opac/skin/kcls/graphics/acct_checked_out_off.gif') no-repeat bottom;
+}
+
+#acct_holds {
+       width:156px;
+       background:url('/opac/skin/kcls/graphics/acct_holds_off.gif') no-repeat bottom;
+}
+
+#acct_prefs {
+       width:156px;
+       background:url('/opac/skin/kcls/graphics/acct_prefs_off.gif') no-repeat bottom;
+}
+
+#acct_favs {
+       width:156px;
+       background:url('/opac/skin/kcls/graphics/acct_favs_off.gif') no-repeat bottom;
+}
+
+#acct_lists {
+       width:156px;
+       background:url('/opac/skin/kcls/graphics/acct_lists_off.gif') no-repeat bottom;
+}
+
+#rdetail_header {
+       font-size:14px;
+       font-weight:bold;
+       color:#074079;
+       padding: 5px 7px 6px 0px;
+       border-bottom: 1px dotted #ccc;
+}
+
+#rdetail_result_count {
+       color: black;
+       font-size: 11px;
+       font-weight: normal;
+}
+
+#rdetail_result_nav {
+       float:right;
+       font-size: 11px;
+       font-weight:normal;
+}
+
+#rdetail_details_table {
+       margin-top: 15px;
+}
+
+#rdetail_title {
+       font-size: 18px;
+}
+
+#rdetail_image_cell {
+       padding-top: 3px;
+       padding-right: 10px;
+}
+
+.rdetail_aux_utils {
+       border-left:1px dotted #ccc;
+       padding-left: 17px;
+       padding-bottom: 6px;
+       padding-right: 70px;
+}
+
+.results_aux_utils {
+       border-left:1px dotted #ccc;
+       padding-left: 17px;
+       padding-bottom: 6px;
+       padding-right: 50px;
+}
+
+#rdetails_status td, #rdetails_status2 td {
+       white-space:nowrap !important;
+       padding: 7px 0px 3px 13px;
+}
+
+#rdetails_status_head td {
+       background-color: #d8d8d8;
+       padding: 13px 0px 13px 13px;
+       font-size: 10px;
+       text-transform: uppercase;
+       font-weight: bold;
+}
+
+#rdetails_status_head2 td {
+       padding: 0px;
+}
+
+.rdetail_extras {
+       height: 29px;
+       background: #9ad0f1;
+       padding-top:1px;
+       margin-bottom: 10px;
+       margin-top: 10px;
+       clear:both;
+}
+
+.rdetail_extras_hr {
+       height: 1px;
+       background: #b7def5;
+       margin-left: 1px;
+       margin-right: 1px;
+}
+
+.rdetail_extras_link {
+       padding-top: 4px;
+       padding-left: 12px;
+       font-size: 10px;
+       text-transform: uppercase;
+       font-weight: bold;
+}
+
+.rdetail_extras_lbl {
+       position: relative;
+       top: -4px;
+       left: 7px;
+}
+
+#paginate-homebanner a.toc {
+       display:block;
+       width:20px;
+       height:20px;
+       background:gray;
+       float:left;
+       margin-left:2px;
+       margin-right:2px;
+       margin-top:2px;
+}
+
+#rdetail_extras_expand, #rdetail_extras_collapse, #rdetail_locs_collapse {
+       margin-left: 13px;
+}
+
+#rdetail_locs_expand, #rdetail_locs_collapse {
+       padding-bottom:3px;
+       margin-left:13px;
+}
+
+#rdetail_anotes_div .biography {
+       margin:0;
+}
+
+#paginate-homebanner a.selected {
+       border: 2px solid black;
+       margin-top:0px;
+       margin-left:0px;
+       margin-right:0px;
+}
+
+#hp-buttons {
+       margin: auto;
+       margin-top: 6px;
+       width: 974px;
+}
+
+#hp-welcome {
+       position:absolute;
+       width:295px;
+       height:192px;
+       background: url('/opac/skin/kcls/graphics/banner-bg.png') no-repeat;
+       color: #fff;
+       padding-left: 33px;
+       padding-top: 21px;
+       z-index:9999999999;
+}
+
+#hp-welcome h1 {
+       font-size: 25px;
+       margin-bottom:15px;
+}
+
+#hp-welcome a {
+       color: #fff;
+       text-decoration: underline;
+}
+
+#hp-banner {
+       margin: auto;
+       width:974px;
+       height: 213px;
+}
+
+#hp-ql-table {
+       margin-left: 2px;
+       padding-top: 3px;
+}
+
+#hp-ql-table a {
+       color: #333;
+       font-weight: bold;
+       font-size: 13px;
+       text-transform: uppercase;
+       text-decoration: none;
+       display: block;
+       width: 144px;
+       height: 25px;
+       padding-top: 9px;
+       padding-left: 15px;
+       background: url('/opac/skin/kcls/graphics/button-bg.png') no-repeat;
+}
+
+#hp-ql-bottom {
+       width: 640px;
+       height: 31px;
+       padding-left: 24px;
+       padding-top: 13px;
+       background: url('/opac/skin/kcls/graphics/hp-links-mid.jpg') repeat-x;
+}
+
+#hp-ql-bottom a {
+       display: inline-block;
+       text-decoration: none;
+       color: white;
+       font-size: 15px;
+       font-weight: bold;
+}
+
+#content-wrapper {
+       background: white;
+       min-height: 260px;
+       border-bottom: 1px solid black;
+}
+
+#main-content {
+       width: 974px;
+       margin:auto;
+       padding-left:0px;
+}
+
+#main-content .login_boxes {
+       border: 1px solid #dedede;
+       background:url('/opac/skin/kcls/graphics/login-bg.jpg') top repeat-x;
+       color: #333;
+}
+
+#main-content .login_boxes h1 {
+       font-weight: normal;
+       font-size: 25px;
+       margin:0;
+}
+
+#main-content .left_brain {
+       padding-left:28px;
+       padding-top:25px;
+}
+
+#main-content .left_brain input[type=text], #main-content .left_brain input[type=password] {
+       width:167px;
+       height:18px;
+       margin:0;
+       padding:0;
+       border:none;
+       background: none;
+       font-size: 15px;
+       color: #333;
+       font-weight:bold;
+}
+
+#main-content .left_brain .input_bg {
+       padding:10px 10px 0px 13px;
+       background: url('/opac/skin/kcls/graphics/login-box-bg.jpg') no-repeat;
+       width:167px;
+       height:29px;
+}
+
+#home-buttons-inner {
+       width:664px;
+       height:117px;
+       background:#bda964;
+}
+
+#holds_temp_parent td {
+       border-bottom:1px solid #dcdbdb;
+}
+
+#holds_temp_parent input, #holds_temp_parent select {
+       margin:0;
+}
+
+
+
+
+#results_header_bar {
+       background: #929292;
+       border-top:1px solid #8b8b8b;
+}
+
+#results_header_inner {
+       height:32px;
+       width:974px;
+       margin:auto;
+       padding-top:6px;
+}
+
+.results_header_btns {
+       float:left;
+       margin-right: 6px;
+}
+
+.results_header_div {
+       float: left;
+       width: 0px;
+       height: 25px;
+       border-left: 1px solid #7c7c7c;
+       border-right: 1px solid #9c9c9c;
+       margin: 0px 13px;
+}
+
+.results_header_lbl {
+       font-weight: bold;
+       float: left;
+       font-size: 11px;
+       color: #191919;
+       position: relative;
+       top: 5px;
+       margin-right: 6px;
+}
+
+.results_header_sel {
+       float:left;
+       position: relative;
+       top: 2px;
+       margin:0;
+}
+
+#results_header_nav1 {
+       padding: 5px 7px 6px 0px;
+       border-bottom: 1px dotted #ccc;
+}
+
+#results_header_nav1 .h1 {
+       font-size:14px;
+       font-weight:bold;
+       color:#074079;
+}
+
+#start_end_links_span {
+       font-size: 11px;
+}
+
+#start_end_links_span2 {
+       font-size: 11px;
+}
+
+.nav_arrow_fix {
+       font-size:8px;
+       position:relative;
+       top:-1px;
+}
+
+#result_table_div {
+       margin-top: 20px;
+}
+
+#result_numbers1 {
+       font-size: 11px;
+       padding-left:15px;
+}
+
+
+
+
+
+
+.icon_text {
+       text-transform:capitalize;
+}
+
+.result_table_title_cell {
+       padding-left: 7px;
+}
+
+#myopac_summary_div p {
+       margin:0;
+       margin-bottom: 10px;
+}
+
+#acct_sum_checked_table td {
+       padding-bottom:5px;
+}
+
+#zero_search_hits p {
+       margin-top:0;
+}
+
+#zero_hits_term {
+       text-transform: uppercase;
+}
+
+#zero_search_hits #spell_check_link {
+       text-transform: uppercase;
+}
+
+#zero_search_hits #zero_hits_suggestions {
+       text-transform: uppercase;
+}
+
+.results_info_table td {
+       padding-right: 10px;
+}
+
+#myopac_holds_main_table {
+       border-collapse: collapse;
+}
+
+#myopac_holds_main_table td {
+       border: 1px solid black;
+       
+}
+
+#myopac_prefs_div .data_grid {
+       border-collapse:collapse;
+}
+
+#myopac_prefs_div .data_grid td {
+       background:#f0f0f0;
+       border-bottom:3px solid white;
+       padding:6px 0px 7px 17px;
+}
+
+.header_middle {
+       height:22px;
+       font-size:14px;
+       font-weight:bold;
+       color:#074079;
+       padding: 7px 7px 0px 0px;
+       border-bottom: 1px dotted #ccc;
+}
+
+.header_middle a {
+       font-size: 12px;
+       font-weight: normal;
+}
+
+.acct_sum_row {
+       padding: 7px 15px;
+       width: 712px;
+       background: #f0f0f0;
+       margin-bottom: 2px;
+       font-size: 10px;
+       font-weight: bold;
+       text-transform: uppercase;
+}
+
+.acct_sum_row a {
+       text-transform: none;
+       font-size: 12px;
+       position:relative;
+       top:-1px;
+}
+
+.acct_sum_row .view_link {
+       font-weight: normal;
+       font-size:12px;
+}
+
+#myopac_sum_fines {
+       float:right;
+       padding: 15px 0px 0px 23px;
+       background: #f0f0f0;
+       width: 177px;
+       height: 166px;
+}
+
+.acct_holds_temp td {
+       text-align: left;
+}
+
+#acct_checked_tabs .align, #acct_holds_tabs .align, #acct_prefs_tabs .align {
+       float:left;
+       /*padding-left:10px;*/
+}
+
+#acct_checked_tabs .selected, #acct_holds_tabs .selected, #acct_prefs_tabs .selected {
+       /*background:url('/opac/skin/kcls/graphics/gray-arrow.png') left 3px no-repeat;*/
+}
+
+#acct_checked_main_header, #acct_holds_main_header, #acct_checked_hist_header, #acct_list_header, #acct_list_header_anon, #temp_list_holds {
+       font-weight:bold;
+       text-transform:uppercase;
+       font-size: 10px;
+}
+
+#acct_checked_main_header td, #acct_holds_main_header td, #acct_checked_hist_header td, #acct_list_header td, #acct_list_header_anon td, #temp_list_holds td {
+       background: #d8d8d8;
+       padding: 8px 0px 7px 0px;
+}
+
+#acct_list_header select, #acct_list_header_anon select {
+       font-weight:normal;
+       text-transform:none;
+}
+
+#acct_holds_activates_table label {
+       font-weight: bold;
+       font-size: 11px;
+       text-transform:uppercase;
+       padding-right: 5px;
+}
+
+.adv_search_font {
+       font-size: 10px;
+}
+
+.search_catalog_lbl {
+       font-size: 14px;
+}
+
+.lbl1 {
+       font-size:14px;
+       font-weight:bold;
+}
+
+.lbl2 {
+       font-size:10px;
+       font-weight:normal;
+       position:relative;
+       top:3px;
+}
+
+#myopac_tabs, #adv_search_parent, #fines_payments_wrapper {
+       background: #929292;
+       border-top:1px solid #8b8b8b;
+       padding-top:5px;
+       margin-bottom:20px;
+}
+
+#adv_search_parent {
+       margin-bottom:0px;
+}
+
+#myopac_loading {
+       width:100%;
+       text-align:center;
+       padding-top:20px;
+       font-size:16px;
+       font-weight:bold;
+}
+
+.chili_link {
+       width:100px !important;
+       text-align: center !important;
+}
+
+.chili_review div.chili_link div {
+       margin: auto;
+}
+
+/* some facet styling */
+.facetClassContainer { margin: 2px; border: 1px solid #CCC; }
+.facetClassLabelContainer { border: 1px solid #CCC; }
+.facetClassLabel { font-weight: bold; text-align: center; }
+.facetFieldContainer {  }
+.facetFieldLabel { padding-left: 2px; margin-top: 5px; margin-bottom: 5px; font-weight: bold; text-align: left; }
+.extraFacetFieldsWrapper { }
+.toggleExtraFacetFieldsButton { float: right; margin: 0px; padding: 0px; }
+.facetFieldLineCount { display: inline-block; border-right: 1px solid #CCC; color: gray; width: 3em; margin-right: 3px }
+.facetField { border-top: 1px solid #CCC; }
+.facetFields { padding-left: 5px; }
+.facetFieldLineValue { overflow: hidden; text-overflow: ellipsis; }
+
+#footer {
+       padding-top:5px;
+       padding-bottom: 10px;
+       color: white;
+       margin: auto;
+       width: 974px;
+       color: #afafaf;
+       font-size: 11px;
+}
+
+#footer a {
+       color: white;
+       color: #afafaf;
+}
+
+.color_4 {
+       text-transform: uppercase;
+       font-weight: bold;
+       font-size: 10px;
+}
index 2a3134d..99fcdd9 100644 (file)
-\r
-attachEvt("common", "run", advgInit);\r
-attachEvt("common", "locationChanged", advSyncCopyLocLink );\r
-\r
-var COOKIE_NOGROUP_RECORDS = 'grpt';\r
-var advSelectedOrg = null;\r
-\r
-function advgInit() {\r
-\r
-       /* XXX */\r
-       if( cookieManager.read(COOKIE_NOGROUP_RECORDS) || SHOW_MR_DEFAULT )\r
-               $('adv_group_titles').checked = true;\r
-\r
-       try{$n($('adv_global_tbody'), 'term').focus();} catch(e){}\r
-\r
-       var extras = [ \r
-               FETCH_LIT_FORMS, \r
-               FETCH_ITEM_FORMS, \r
-               FETCH_ITEM_TYPES, \r
-               FETCH_AUDIENCES,\r
-               FETCH_BIB_LEVELS \r
-    ];\r
-\r
-       for( var x in extras ) {\r
-\r
-               var req = new Request(extras[x]);\r
-\r
-               if(x == 0) req.request.sel = $('adv_global_lit_form');\r
-               if(x == 1) req.request.sel = $('adv_global_item_form');\r
-               if(x == 2) req.request.sel = $('adv_global_item_type');\r
-               if(x == 3) req.request.sel = $('adv_global_audience');\r
-               if(x == 4) req.request.sel = $('adv_global_bib_level');\r
-\r
-               req.callback(advDrawBibExtras);\r
-               req.send();\r
-       }\r
-\r
-       var input = $n($('adv_global_trow'), 'term');\r
-       try {input.focus();} catch(e){}\r
-       setEnterFunc(input, advSubmitGlobal);\r
-\r
-    if(getSort() && getSortDir()) {\r
-           setSelector($('adv_global_sort_by'), getSort());\r
-           setSelector($('adv_global_sort_dir'), getSortDir());\r
-        if(getSort() != 'rel')\r
-            $('adv_global_sort_dir').disabled = false;\r
-    }\r
-       \r
-       if(getLanguage()) setSelector($('adv_global_lang'), getLanguage());\r
-       if(getFacet()) {\r
-         var facet_val = getFacet().replace("identifier|mattype[", "");\r
-         facet_val = facet_val.replace("]", "");\r
-         setSelector($('adv_global_item_type_basic'), facet_val);\r
-       }\r
-       \r
-       if(getAudience()) {\r
-         var aud = getAudience().split(/,/).join("");\r
-         setSelector($('adv_global_audience_basic'), aud);\r
-       }\r
-       \r
-       advInitPubFilter();\r
-\r
-    if(getAvail())\r
-        $('opac.result.limit2avail').checked = true;\r
-\r
-    // not sure we want to propogate the pubdate filter, \r
-    // since other filters are not propogated\r
-\r
-    if(!new CGI().param(PARAM_NOPERSIST_SEARCH))\r
-        initSearchBoxes();\r
-    advSyncCopyLocLink(getLocation());\r
-       //if(findCurrentPage()=="advanced") { hideMe(G.ui.login.box); /*unHideMe(G.ui.login.box);*/ }\r
-}\r
-\r
-function advInitPubFilter() {\r
-    var i1 = $('adv_global_pub_date_1');\r
-    var i2 = $('adv_global_pub_date_2');\r
-    var sel = $('adv_global_pub_date_type');\r
-    if(getPubdBefore()) {\r
-        i1.value = getPubdBefore();\r
-        setSelector(sel, 'before');\r
-    } else if(getPubdAfter()) {\r
-        i1.value = getPubdAfter();\r
-        setSelector(sel, 'after');\r
-    } else if(getPubdBetween()) {\r
-        var values = getPubdBetween().split(','); \r
-        i1.value = values[0]\r
-        if(values[0] == values[1]) {\r
-            setSelector(sel, 'equals');\r
-        } else {\r
-            setSelector(sel, 'between');\r
-            i2.value = values[1];\r
-                       unHideMe($('adv_global_pub_date_2_span'));\r
-        }\r
-    }\r
-}\r
-\r
-function advSyncCopyLocLink(org) {\r
-    // display the option to filter by copy location\r
-    advLocationsLoaded = false;\r
-    advSelectedOrg = org;\r
-    removeChildren($('adv_copy_location_filter_select'));\r
-\r
-    if(isTrue(findOrgType(findOrgUnit(org).ou_type()).can_have_vols())) {\r
-        //unHideMe($('adv_copy_location_filter_row'));\r
-        advLoadCopyLocations(org); \r
-    } else {\r
-        hideMe($('adv_copy_location_filter_row'));\r
-    }\r
-}\r
-\r
-function clearSearchBoxes() {\r
-    var rows = $('adv_global_tbody').getElementsByTagName('tr');\r
-    for(var t = 0; t < rows.length; t++) {\r
-        if($n(rows[t], 'term')) {\r
-            $n(rows[t], 'term').value = '';\r
-            setSelector($n(rows[t], 'contains'), 'contains');\r
-            setSelector($n(rows[t], 'type'), 'keyword');\r
-        }\r
-    }\r
-    try{$n(rows[0], 'term').focus();} catch(e){}\r
-}\r
-\r
-\r
-function initSearchBoxes() {\r
-    /* loads the compiled search from the search cookie \r
-        and sets the widgets accordingly */\r
-\r
-    search = cookieManager.read(COOKIE_SEARCH);\r
-    if(!search) return;\r
-    _debug("loaded compiled search cookie: " + search);\r
-\r
-    search = JSON2js(search);\r
-    if(!search) return;\r
-\r
-    var types = getObjectKeys(search.searches);\r
-\r
-    // if we have browser cached data, clear it before populating from cookie\r
-    if (search.searches[types[0]].term)\r
-        clearSearchBoxes();\r
-\r
-    /* pre-add the needed rows */\r
-    while($('adv_global_tbody').getElementsByTagName('tr').length - 1 < types.length)\r
-        advAddGblRow();\r
-\r
-    var rows = $('adv_global_tbody').getElementsByTagName('tr');\r
-\r
-    for(var t = 0; t < types.length; t++) {\r
-        var row = rows[t];\r
-        setSelector($n(row, 'type'), types[t]);\r
-        var term = search.searches[types[t]].term;\r
-\r
-        /* if this is a single -<term> search, set the selector to nocontains */\r
-        if(match = term.match(/^-(\w+)$/)) {\r
-            term = match[1];\r
-            setSelector($n(row, 'contains'), 'nocontains');\r
-        }\r
-        $n(row, 'term').value = term;\r
-    }\r
-}\r
-\r
-function advAddGblRow() {\r
-       var tbody = $("adv_global_tbody");\r
-       var newrow = $("adv_global_trow").cloneNode(true);\r
-       tbody.insertBefore(newrow, $("adv_global_addrow"));\r
-       var input = $n(newrow, "term");\r
-       input.value = "";\r
-       setEnterFunc(input, advSubmitGlobal);\r
-       $n(newrow, 'type').focus();\r
-}\r
-\r
-function advDrawBibExtras(r) {\r
-       var data = r.getResultObject();\r
-       var sel = r.sel;\r
-\r
-       data = data.sort( /* sort alphabetically */\r
-               function(a,b) { \r
-                       if( a.value() < b.value() ) return -1;\r
-                       if( a.value() > b.value() ) return 1;\r
-                       return 0;\r
-               }\r
-       );\r
-\r
-       for( var d = 0; d < data.length; d++ ) {\r
-               var thing = data[d];\r
-               var opt = insertSelectorVal( sel, -1, thing.value(), thing.code() );\r
-               opt.setAttribute('title', thing.value());\r
-       }\r
-}\r
-\r
-function advSelToStringList(sel) {\r
-       var list = getSelectedList(sel);\r
-       var vals = [];\r
-       for( var i = 0; i < list.length; i++ ) {\r
-               var str = list[i];\r
-               for( var j = 0; j < str.length; j++ ) {\r
-                       //if(str.charAt(j) == ' ') continue;\r
-                       vals.push(str.charAt(j));\r
-               }\r
-       }\r
-       return vals.toString();\r
-}\r
-\r
-function advGetVisSelectorVals(id) {\r
-       var basic = id + '_basic';\r
-       if(! $(id).className.match(/hide_me/)) \r
-               return advSelToStringList($(id));\r
-       return advSelToStringList($(basic));\r
-}\r
-\r
-function advSubmitGlobal() {\r
-       \r
-       var sortdir = getSelectorVal($('adv_global_sort_dir'));\r
-       var sortby  = getSelectorVal($('adv_global_sort_by'));\r
-\r
-       var litforms  = advGetVisSelectorVals('adv_global_lit_form');\r
-       var itemforms = advGetVisSelectorVals('adv_global_item_form');\r
-       var itemtypes = advGetVisSelectorVals('adv_global_item_type');\r
-       var audiences = advGetVisSelectorVals('adv_global_audience');\r
-       var biblevels = advGetVisSelectorVals('adv_global_bib_level');\r
-    var locations = getSelectedList($('adv_copy_location_filter_select')) + '';\r
-       var languages = getSelectedList($('adv_global_lang')) + '';     \r
-    var limit2avail = $('opac.result.limit2avail').checked ? 1 : ''\r
-\r
-       var searches = advBuildSearchBlob();\r
-       if(!searches) return;\r
-\r
-       clearSearchParams();\r
-       \r
-       var depth = depthSelGetDepth();\r
-       if(depth==1) depth = 0;\r
-       var args = {};\r
-       args.page = MRESULT;\r
-       args[PARAM_ITEMFORM] = itemforms;\r
-       args[PARAM_ITEMTYPE] = itemtypes;\r
-       args[PARAM_BIBLEVEL] = biblevels;\r
-       args[PARAM_LITFORM]     = litforms;\r
-       args[PARAM_AUDIENCE]    = audiences;\r
-       args[PARAM_LANGUAGE] = languages;\r
-       args[PARAM_COPYLOCS] = locations;\r
-       //args[PARAM_SEARCHES]  = js2JSON(searches); /* break these out */\r
-       args[PARAM_DEPTH]               = depth;\r
-       args[PARAM_LOCATION]    = depthSelGetNewLoc();\r
-       args[PARAM_SORT]                = sortby;\r
-       args[PARAM_SORT_DIR]    = sortdir;\r
-       args[PARAM_ADVTYPE]     = ADVTYPE_MULTI;\r
-       args[PARAM_STYPE]               = "";\r
-       args[PARAM_TERM]                = searches;\r
-       args[PARAM_AVAIL]               = limit2avail;\r
-       args[PARAM_FORM] = itemtypes[0];\r
-       args[PARAM_FACET] = itemtypes==''?'':"identifier|mattype["+itemtypes.replace(/[,]/, function(a){switch(a){case ",": return "#";}})+"]";\r
-       if(G.user && G.user.prefs['opac.hits_per_page']) args[PARAM_COUNT] = G.user.prefs['opac.hits_per_page'];\r
-\r
-    // publicate year filtering\r
-    var pub1;\r
-    if( (pub1 = $('adv_global_pub_date_1').value) && (''+pub1).match(/\d{4}/)) {\r
-        switch(getSelectorVal($('adv_global_pub_date_type'))) {\r
-            case 'equals':\r
-                   args[PARAM_PUBD_BETWEEN] = pub1+','+pub1;\r
-                break;\r
-            case 'before':\r
-                   args[PARAM_PUBD_BEFORE] = pub1;\r
-                break;\r
-            case 'after':\r
-                   args[PARAM_PUBD_AFTER] = pub1;\r
-                break;\r
-            case 'between':\r
-                var pub2 = $('adv_global_pub_date_2').value;\r
-                if((''+pub2).match(/\d{4}/))\r
-                       args[PARAM_PUBD_BETWEEN] = pub1+','+pub2;\r
-                break;\r
-        }\r
-    }\r
-\r
-       /* pubdate sorting causes a record (not metarecord) search */\r
-       if( sortby == SORT_TYPE_PUBDATE || !$('adv_group_titles').checked ) {\r
-               args.page = RRESULT;\r
-               args[PARAM_RTYPE] = RTYPE_MULTI;\r
-       }\r
-\r
-       if($('adv_group_titles').checked ) \r
-               cookieManager.write(COOKIE_NOGROUP_RECORDS,'1',-1);\r
-       else\r
-               cookieManager.write(COOKIE_NOGROUP_RECORDS,'');\r
-\r
-       goTo(buildOPACLink(args));\r
-}\r
-\r
-\r
-function advBuildSearchBlob() {\r
-\r
-       var searches = '';\r
-       var tbody    = $('adv_global_tbody');\r
-       var rows     = tbody.getElementsByTagName('tr');\r
-\r
-       for( var i = 0; i < rows.length; i++ ) {\r
-\r
-               var row = rows[i];\r
-               if(!(row && typeof row == 'object')) continue;\r
-               if(!row.getAttribute('type')) continue;\r
-               \r
-               var stype        = getSelectorVal($n(row, 'type'));\r
-               var contains = getSelectorVal($n(row, 'contains'));\r
-               var term                 = $n(row, 'term').value;\r
-               if(!term) continue;\r
-\r
-               var string = "";\r
-               switch(contains) {\r
-                       case 'contains' : \r
-                               string += " " + term; \r
-                               break;\r
-\r
-                       case 'nocontains' : {\r
-                               var words = term.split(" ");\r
-                                       for( var j in words ) \r
-                                               string += " -" + words[j];\r
-                               }\r
-                               break;\r
-\r
-                       case 'exact' : \r
-                               if(term.indexOf('"') > -1) string += " " + term;\r
-                               else string += " \"" + term + "\"";\r
-                               break;\r
-               }\r
-               if(string) {\r
-                       string = string.replace(/'/g,' ');\r
-                       string = string.replace(/\\/g,' ');\r
-            string = string.replace(/^\s*/,'');\r
-            string = string.replace(/\s*$/,'');\r
-                       //searches[stype].term = string;\r
-            if(searches) searches += ' ';\r
-            searches += stype + ':'+ string;\r
-               }\r
-       }\r
-\r
-    _debug("created search query " + searches);\r
-       return searches;\r
-}\r
-\r
-\r
-// retrieves the shelving locations\r
-var advLocationsLoaded = false;\r
-function advLoadCopyLocations(org) {\r
-    if(org == null) \r
-        org = advSelectedOrg;\r
-    var req = new Request(FETCH_COPY_LOCATIONS, org);\r
-    req.callback(advShowCopyLocations);\r
-    req.send();\r
-    advLocationsLoaded = true;\r
-}\r
-\r
-// inserts the shelving locations into the multi-select\r
-function advShowCopyLocations(r) {\r
-    var locations = r.getResultObject();\r
-    var sel = $('adv_copy_location_filter_select');\r
-    for(var i = 0; i < locations.length; i++) \r
-        insertSelectorVal(sel, -1, locations[i].name(), locations[i].id());\r
-}\r
-\r
-\r
+
+attachEvt("common", "run", advgInit);
+attachEvt("common", "locationChanged", advSyncCopyLocLink );
+
+var COOKIE_NOGROUP_RECORDS = 'grpt';
+var advSelectedOrg = null;
+
+function advgInit() {
+
+       /* XXX */
+       if( cookieManager.read(COOKIE_NOGROUP_RECORDS) || SHOW_MR_DEFAULT )
+               $('adv_group_titles').checked = true;
+
+       try{$n($('adv_global_tbody'), 'term').focus();} catch(e){}
+
+       var extras = [ 
+               FETCH_LIT_FORMS, 
+               FETCH_ITEM_FORMS, 
+               FETCH_ITEM_TYPES, 
+               FETCH_AUDIENCES,
+               FETCH_BIB_LEVELS 
+    ];
+
+       for( var x in extras ) {
+
+               var req = new Request(extras[x]);
+
+               if(x == 0) req.request.sel = $('adv_global_lit_form');
+               if(x == 1) req.request.sel = $('adv_global_item_form');
+               if(x == 2) req.request.sel = $('adv_global_item_type');
+               if(x == 3) req.request.sel = $('adv_global_audience');
+               if(x == 4) req.request.sel = $('adv_global_bib_level');
+
+               req.callback(advDrawBibExtras);
+               req.send();
+       }
+
+       var input = $n($('adv_global_trow'), 'term');
+       try {input.focus();} catch(e){}
+       setEnterFunc(input, advSubmitGlobal);
+
+    if(getSort() && getSortDir()) {
+           setSelector($('adv_global_sort_by'), getSort());
+           setSelector($('adv_global_sort_dir'), getSortDir());
+        if(getSort() != 'rel')
+            $('adv_global_sort_dir').disabled = false;
+    }
+       
+       if(getLanguage()) setSelector($('adv_global_lang'), getLanguage());
+       if(getFacet()) {
+         var facet_val = getFacet().replace("identifier|mattype[", "");
+         facet_val = facet_val.replace("]", "");
+         setSelector($('adv_global_item_type_basic'), facet_val);
+       }
+       
+       if(getAudience()) {
+         var aud = getAudience().split(/,/).join("");
+         setSelector($('adv_global_audience_basic'), aud);
+       }
+       
+       advInitPubFilter();
+
+    if(getAvail())
+        $('opac.result.limit2avail').checked = true;
+
+    // not sure we want to propogate the pubdate filter, 
+    // since other filters are not propogated
+
+    if(!new CGI().param(PARAM_NOPERSIST_SEARCH))
+        initSearchBoxes();
+    advSyncCopyLocLink(getLocation());
+       //if(findCurrentPage()=="advanced") { hideMe(G.ui.login.box); /*unHideMe(G.ui.login.box);*/ }
+}
+
+function advInitPubFilter() {
+    var i1 = $('adv_global_pub_date_1');
+    var i2 = $('adv_global_pub_date_2');
+    var sel = $('adv_global_pub_date_type');
+    if(getPubdBefore()) {
+        i1.value = getPubdBefore();
+        setSelector(sel, 'before');
+    } else if(getPubdAfter()) {
+        i1.value = getPubdAfter();
+        setSelector(sel, 'after');
+    } else if(getPubdBetween()) {
+        var values = getPubdBetween().split(','); 
+        i1.value = values[0]
+        if(values[0] == values[1]) {
+            setSelector(sel, 'equals');
+        } else {
+            setSelector(sel, 'between');
+            i2.value = values[1];
+                       unHideMe($('adv_global_pub_date_2_span'));
+        }
+    }
+}
+
+function advSyncCopyLocLink(org) {
+    // display the option to filter by copy location
+    advLocationsLoaded = false;
+    advSelectedOrg = org;
+    removeChildren($('adv_copy_location_filter_select'));
+
+    if(isTrue(findOrgType(findOrgUnit(org).ou_type()).can_have_vols())) {
+        //unHideMe($('adv_copy_location_filter_row'));
+        advLoadCopyLocations(org); 
+    } else {
+        hideMe($('adv_copy_location_filter_row'));
+    }
+}
+
+function clearSearchBoxes() {
+    var rows = $('adv_global_tbody').getElementsByTagName('tr');
+    for(var t = 0; t < rows.length; t++) {
+        if($n(rows[t], 'term')) {
+            $n(rows[t], 'term').value = '';
+            setSelector($n(rows[t], 'contains'), 'contains');
+            setSelector($n(rows[t], 'type'), 'keyword');
+        }
+    }
+    try{$n(rows[0], 'term').focus();} catch(e){}
+}
+
+
+function initSearchBoxes() {
+    /* loads the compiled search from the search cookie 
+        and sets the widgets accordingly */
+
+    search = cookieManager.read(COOKIE_SEARCH);
+    if(!search) return;
+    _debug("loaded compiled search cookie: " + search);
+
+    search = JSON2js(search);
+    if(!search) return;
+
+    var types = getObjectKeys(search.searches);
+
+    // if we have browser cached data, clear it before populating from cookie
+    if (search.searches[types[0]].term)
+        clearSearchBoxes();
+
+    /* pre-add the needed rows */
+    while($('adv_global_tbody').getElementsByTagName('tr').length - 1 < types.length)
+        advAddGblRow();
+
+    var rows = $('adv_global_tbody').getElementsByTagName('tr');
+
+    for(var t = 0; t < types.length; t++) {
+        var row = rows[t];
+        setSelector($n(row, 'type'), types[t]);
+        var term = search.searches[types[t]].term;
+
+        /* if this is a single -<term> search, set the selector to nocontains */
+        if(match = term.match(/^-(\w+)$/)) {
+            term = match[1];
+            setSelector($n(row, 'contains'), 'nocontains');
+        }
+        $n(row, 'term').value = term;
+    }
+}
+
+function advAddGblRow() {
+       var tbody = $("adv_global_tbody");
+       var newrow = $("adv_global_trow").cloneNode(true);
+       tbody.insertBefore(newrow, $("adv_global_addrow"));
+       var input = $n(newrow, "term");
+       input.value = "";
+       setEnterFunc(input, advSubmitGlobal);
+       $n(newrow, 'type').focus();
+}
+
+function advDrawBibExtras(r) {
+       var data = r.getResultObject();
+       var sel = r.sel;
+
+       data = data.sort( /* sort alphabetically */
+               function(a,b) { 
+                       if( a.value() < b.value() ) return -1;
+                       if( a.value() > b.value() ) return 1;
+                       return 0;
+               }
+       );
+
+       for( var d = 0; d < data.length; d++ ) {
+               var thing = data[d];
+               var opt = insertSelectorVal( sel, -1, thing.value(), thing.code() );
+               opt.setAttribute('title', thing.value());
+       }
+}
+
+function advSelToStringList(sel) {
+       var list = getSelectedList(sel);
+       var vals = [];
+       for( var i = 0; i < list.length; i++ ) {
+               var str = list[i];
+               for( var j = 0; j < str.length; j++ ) {
+                       //if(str.charAt(j) == ' ') continue;
+                       vals.push(str.charAt(j));
+               }
+       }
+       return vals.toString();
+}
+
+function advGetVisSelectorVals(id) {
+       var basic = id + '_basic';
+       if(! $(id).className.match(/hide_me/)) 
+               return advSelToStringList($(id));
+       return advSelToStringList($(basic));
+}
+
+function advSubmitGlobal() {
+       
+       var sortdir = getSelectorVal($('adv_global_sort_dir'));
+       var sortby  = getSelectorVal($('adv_global_sort_by'));
+
+       var litforms  = advGetVisSelectorVals('adv_global_lit_form');
+       var itemforms = advGetVisSelectorVals('adv_global_item_form');
+       var itemtypes = advGetVisSelectorVals('adv_global_item_type');
+       var audiences = advGetVisSelectorVals('adv_global_audience');
+       var biblevels = advGetVisSelectorVals('adv_global_bib_level');
+    var locations = getSelectedList($('adv_copy_location_filter_select')) + '';
+       var languages = getSelectedList($('adv_global_lang')) + '';     
+    var limit2avail = $('opac.result.limit2avail').checked ? 1 : ''
+
+       var searches = advBuildSearchBlob();
+       if(!searches) return;
+
+       clearSearchParams();
+       
+       var depth = depthSelGetDepth();
+       if(depth==1) depth = 0;
+       var args = {};
+       args.page = MRESULT;
+       args[PARAM_ITEMFORM] = itemforms;
+       args[PARAM_ITEMTYPE] = itemtypes;
+       args[PARAM_BIBLEVEL] = biblevels;
+       args[PARAM_LITFORM]     = litforms;
+       args[PARAM_AUDIENCE]    = audiences;
+       args[PARAM_LANGUAGE] = languages;
+       args[PARAM_COPYLOCS] = locations;
+       //args[PARAM_SEARCHES]  = js2JSON(searches); /* break these out */
+       args[PARAM_DEPTH]               = depth;
+       args[PARAM_LOCATION]    = depthSelGetNewLoc();
+       args[PARAM_SORT]                = sortby;
+       args[PARAM_SORT_DIR]    = sortdir;
+       args[PARAM_ADVTYPE]     = ADVTYPE_MULTI;
+       args[PARAM_STYPE]               = "";
+       args[PARAM_TERM]                = searches;
+       args[PARAM_AVAIL]               = limit2avail;
+       args[PARAM_FORM] = itemtypes[0];
+       args[PARAM_FACET] = itemtypes==''?'':"identifier|mattype["+itemtypes.replace(/[,]/, function(a){switch(a){case ",": return "#";}})+"]";
+       if(G.user && G.user.prefs['opac.hits_per_page']) args[PARAM_COUNT] = G.user.prefs['opac.hits_per_page'];
+
+    // publicate year filtering
+    var pub1;
+    if( (pub1 = $('adv_global_pub_date_1').value) && (''+pub1).match(/\d{4}/)) {
+        switch(getSelectorVal($('adv_global_pub_date_type'))) {
+            case 'equals':
+                   args[PARAM_PUBD_BETWEEN] = pub1+','+pub1;
+                break;
+            case 'before':
+                   args[PARAM_PUBD_BEFORE] = pub1;
+                break;
+            case 'after':
+                   args[PARAM_PUBD_AFTER] = pub1;
+                break;
+            case 'between':
+                var pub2 = $('adv_global_pub_date_2').value;
+                if((''+pub2).match(/\d{4}/))
+                       args[PARAM_PUBD_BETWEEN] = pub1+','+pub2;
+                break;
+        }
+    }
+
+       /* pubdate sorting causes a record (not metarecord) search */
+       if( sortby == SORT_TYPE_PUBDATE || !$('adv_group_titles').checked ) {
+               args.page = RRESULT;
+               args[PARAM_RTYPE] = RTYPE_MULTI;
+       }
+
+       if($('adv_group_titles').checked ) 
+               cookieManager.write(COOKIE_NOGROUP_RECORDS,'1',-1);
+       else
+               cookieManager.write(COOKIE_NOGROUP_RECORDS,'');
+
+       goTo(buildOPACLink(args));
+}
+
+
+function advBuildSearchBlob() {
+
+       var searches = '';
+       var tbody    = $('adv_global_tbody');
+       var rows     = tbody.getElementsByTagName('tr');
+
+       for( var i = 0; i < rows.length; i++ ) {
+
+               var row = rows[i];
+               if(!(row && typeof row == 'object')) continue;
+               if(!row.getAttribute('type')) continue;
+               
+               var stype        = getSelectorVal($n(row, 'type'));
+               var contains = getSelectorVal($n(row, 'contains'));
+               var term                 = $n(row, 'term').value;
+               if(!term) continue;
+
+               var string = "";
+               switch(contains) {
+                       case 'contains' : 
+                               string += " " + term; 
+                               break;
+
+                       case 'nocontains' : {
+                               var words = term.split(" ");
+                                       for( var j in words ) 
+                                               string += " -" + words[j];
+                               }
+                               break;
+
+                       case 'exact' : 
+                               if(term.indexOf('"') > -1) string += " " + term;
+                               else string += " \"" + term + "\"";
+                               break;
+               }
+               if(string) {
+                       string = string.replace(/'/g,' ');
+                       string = string.replace(/\\/g,' ');
+            string = string.replace(/^\s*/,'');
+            string = string.replace(/\s*$/,'');
+                       //searches[stype].term = string;
+            if(searches) searches += ' ';
+            searches += stype + ':'+ string;
+               }
+       }
+
+    _debug("created search query " + searches);
+       return searches;
+}
+
+
+// retrieves the shelving locations
+var advLocationsLoaded = false;
+function advLoadCopyLocations(org) {
+    if(org == null) 
+        org = advSelectedOrg;
+    var req = new Request(FETCH_COPY_LOCATIONS, org);
+    req.callback(advShowCopyLocations);
+    req.send();
+    advLocationsLoaded = true;
+}
+
+// inserts the shelving locations into the multi-select
+function advShowCopyLocations(r) {
+    var locations = r.getResultObject();
+    var sel = $('adv_copy_location_filter_select');
+    for(var i = 0; i < locations.length; i++) 
+        insertSelectorVal(sel, -1, locations[i].name(), locations[i].id());
+}
+
+
index 14322da..7a824f1 100644 (file)
-/* advanced search interface */\r
-\r
-attachEvt("common", "run", advInit);\r
-\r
-function advInit() { \r
-\r
-       unHideMe($('adv_search_parent'));\r
-       /* propogate these? */\r
-\r
-       depthSelInit(); \r
-       setEnterFunc( $n( $('advanced.marc.tbody'), 'advanced.marc.value'), advMARCRun );\r
-       hideMe($('adv_quick_search_sidebar'));\r
-       \r
-       var adv_set = true;\r
-       if(getAdvTerm()) $('adv_quick_text').value = getAdvTerm();\r
-       if(getRtype()) {\r
-         var rtype_val = getRtype();\r
-         if(rtype_val==RTYPE_MARC) rtype_val='iccn';\r
-         adv_set = setSelector($('adv_quick_type'), rtype_val);\r
-       }\r
-       if(getCallnumber()) {\r
-               adv_set = setSelector($('adv_quick_type'), 'cn');\r
-               $('adv_quick_text').value = getCallnumber();\r
-       }\r
-       if(!adv_set) {\r
-               setSelector($('adv_quick_type'), 'barcode');\r
-               $('adv_quick_text').value = getRid();\r
-       }\r
-\r
-       /*\r
-       if(isXUL()) \r
-               setSelector($('adv_quick_type'), 'tcn'); */\r
-\r
-       setEnterFunc($('adv_quick_text'), advGenericSearch);\r
-       hideMe($('adv_marc_search_sidebar'));\r
-       //hideMe($('adv_global_search'));\r
-       advAddGblRow();\r
-}\r
-\r
-function advAddMARC() {\r
-       var newt = $('adv_sdbar_table').cloneNode(true);\r
-       newt.id = "";\r
-       unHideMe($n(newt, 'crow'));\r
-       $n(newt, 'advanced.marc.tag').value = "";\r
-       $n(newt, 'advanced.marc.subfield').value = "";\r
-       $n(newt, 'advanced.marc.value').value = "";\r
-       $('adv_marc_search_sidebar').insertBefore(newt, $('adv_marc_submit'));\r
-}\r
-\r
-function advMARCRun() {\r
-\r
-       clearSearchParams();\r
-\r
-       var div = $('adv_marc_search_sidebar');\r
-       var tbodies = div.getElementsByTagName('tbody');\r
-       var searches = [];\r
-\r
-       for( var i = 0; i < tbodies.length; i++ ) {\r
-               var tbody = tbodies[i];\r
-               var val = advExtractMARC(tbody);\r
-               if(val) searches.push(val);\r
-       }\r
-\r
-       if(searches.length == 0) return;\r
-\r
-       var arg = {};\r
-       arg.page = RRESULT;\r
-       arg[PARAM_FORM] = 'all';\r
-       arg[PARAM_RTYPE] = RTYPE_MARC;\r
-       arg[PARAM_OFFSET] = 0;\r
-       arg[PARAM_DEPTH]        = depthSelGetDepth();\r
-       arg[PARAM_LOCATION]     = depthSelGetNewLoc();\r
-       arg[PARAM_SEARCHES] = js2JSON(searches);\r
-       arg[PARAM_ADVTYPE] = ADVTYPE_MARC;\r
-       arg[PARAM_TERM] = "";\r
-\r
-       goTo(buildOPACLink(arg));\r
-}\r
-\r
-\r
-/* EXAMPLE => {"term":"0516011901","restrict":[{"tag":"020","subfield":"a"}]} */\r
-function advExtractMARC(tbody) {\r
-       if(!tbody) return null;\r
-       var term = $n(tbody, 'advanced.marc.value').value;\r
-       if(!term) return null;\r
-\r
-       var subfield = $n(tbody, 'advanced.marc.subfield').value;\r
-       if(!subfield) subfield = "_";\r
-\r
-       var tag = $n(tbody, 'advanced.marc.tag').value;\r
-       if(!tag) return null;\r
-\r
-       return { 'term' : term.toLowerCase(), 'restrict' :  [ { 'tag' : tag, 'subfield' : subfield } ] };\r
-}\r
-\r
-function advGenericSearch() {\r
-       clearSearchParams();\r
-       var type = getSelectorVal($('adv_quick_type'));\r
-       \r
-       var term = $('adv_quick_text').value;\r
-       if(!term) return;\r
-\r
-       var arg = {};\r
-\r
-       switch(type) {\r
-\r
-               case 'isbn' :\r
-                       arg.page                                        = RRESULT;\r
-                       arg[PARAM_STYPE]                = "";\r
-                       arg[PARAM_TERM]         = "";\r
-                       arg[PARAM_RTYPE]                = RTYPE_ISBN;\r
-                       arg[PARAM_OFFSET]               = 0;\r
-                       arg[PARAM_ADVTERM]      = term.toLowerCase();\r
-                       break;\r
-               \r
-               case 'issn' :\r
-                       arg.page                                        = RRESULT;\r
-                       arg[PARAM_STYPE]                = "";\r
-                       arg[PARAM_TERM]         = "";\r
-                       arg[PARAM_ADVTERM]      = term.toLowerCase();\r
-                       arg[PARAM_OFFSET]               = 0;\r
-                       arg[PARAM_RTYPE]                = RTYPE_ISSN;\r
-                       break;\r
-\r
-               case 'tcn' :\r
-                       arg.page                                        = RRESULT;\r
-                       arg[PARAM_STYPE]                = "";\r
-                       arg[PARAM_TERM]         = "";\r
-                       arg[PARAM_ADVTERM]      = term;\r
-                       arg[PARAM_OFFSET]               = 0;\r
-                       arg[PARAM_RTYPE]                = RTYPE_TCN;\r
-                       break;\r
-\r
-        case 'barcode':\r
-            advFindBarcode(term);\r
-            break;\r
-\r
-\r
-               case 'cn':\r
-                       arg.page                        = CNBROWSE;\r
-                       arg[PARAM_CN]   = term;\r
-                       arg[PARAM_DEPTH]                = depthSelGetDepth();\r
-                       arg[PARAM_LOCATION]     = depthSelGetNewLoc();\r
-                       break;\r
-\r
-               case 'lccn':\r
-                       arg.page = RRESULT;\r
-                       arg[PARAM_FORM] = 'all'\r
-                       arg[PARAM_RTYPE] = RTYPE_MARC;\r
-                       arg[PARAM_OFFSET] = 0;\r
-                       arg[PARAM_DEPTH]        = depthSelGetDepth();\r
-                       arg[PARAM_LOCATION]     = depthSelGetNewLoc();\r
-                       arg[PARAM_SEARCHES] = js2JSON([{ 'term' : term.toLowerCase(), \r
-                                       'restrict' :  [ { 'tag' : '010', 'subfield' : '_' } ] }]);\r
-                       arg[PARAM_ADVTYPE] = ADVTYPE_MARC;\r
-                       arg[PARAM_TERM] = "";\r
-                       break;\r
-\r
-\r
-               default: alert('not done');\r
-       }\r
-\r
-       if(arg.page) goTo(buildOPACLink(arg));\r
-}\r
-\r
-\r
-function advFindBarcode(barcode) {\r
-    var req = new Request(FETCH_BIB_ID_BY_BARCODE, barcode);\r
-    req.callback(advDrawBarcode);\r
-    req.request.alertEvent = false;\r
-    req.send();\r
-}\r
-\r
-function advDrawBarcode(r) {\r
-    titleid = r.getResultObject();\r
-    if(checkILSEvent(titleid)) {\r
-        alertId('myopac.copy.not.found');\r
-        return;\r
-    }\r
-    if(!titleid) return;\r
-    var args = {};\r
-    args.page = RDETAIL;\r
-    args[PARAM_RID] = titleid;\r
-    location.href = buildOPACLink(args);\r
-}\r
-\r
-function __setsortsel() {\r
-    var sel = $('adv_global_sort_by');\r
-    if (sel.selectedIndex == 0) {\r
-        $("adv_global_sort_dir").disabled = true;\r
-        $("adv_global_sort_dir").selectedIndex = 0;\r
-    } else $("adv_global_sort_dir").disabled = false;\r
-}\r
-\r
-__setsortsel();\r
+/* advanced search interface */
+
+attachEvt("common", "run", advInit);
+
+function advInit() { 
+
+       unHideMe($('adv_search_parent'));
+       /* propogate these? */
+
+       depthSelInit(); 
+       setEnterFunc( $n( $('advanced.marc.tbody'), 'advanced.marc.value'), advMARCRun );
+       hideMe($('adv_quick_search_sidebar'));
+       
+       var adv_set = true;
+       if(getAdvTerm()) $('adv_quick_text').value = getAdvTerm();
+       if(getRtype()) {
+         var rtype_val = getRtype();
+         if(rtype_val==RTYPE_MARC) rtype_val='iccn';
+         adv_set = setSelector($('adv_quick_type'), rtype_val);
+       }
+       if(getCallnumber()) {
+               adv_set = setSelector($('adv_quick_type'), 'cn');
+               $('adv_quick_text').value = getCallnumber();
+       }
+       if(!adv_set) {
+               setSelector($('adv_quick_type'), 'barcode');
+               $('adv_quick_text').value = getRid();
+       }
+
+       /*
+       if(isXUL()) 
+               setSelector($('adv_quick_type'), 'tcn'); */
+
+       setEnterFunc($('adv_quick_text'), advGenericSearch);
+       hideMe($('adv_marc_search_sidebar'));
+       //hideMe($('adv_global_search'));
+       advAddGblRow();
+}
+
+function advAddMARC() {
+       var newt = $('adv_sdbar_table').cloneNode(true);
+       newt.id = "";
+       unHideMe($n(newt, 'crow'));
+       $n(newt, 'advanced.marc.tag').value = "";
+       $n(newt, 'advanced.marc.subfield').value = "";
+       $n(newt, 'advanced.marc.value').value = "";
+       $('adv_marc_search_sidebar').insertBefore(newt, $('adv_marc_submit'));
+}
+
+function advMARCRun() {
+
+       clearSearchParams();
+
+       var div = $('adv_marc_search_sidebar');
+       var tbodies = div.getElementsByTagName('tbody');
+       var searches = [];
+
+       for( var i = 0; i < tbodies.length; i++ ) {
+               var tbody = tbodies[i];
+               var val = advExtractMARC(tbody);
+               if(val) searches.push(val);
+       }
+
+       if(searches.length == 0) return;
+
+       var arg = {};
+       arg.page = RRESULT;
+       arg[PARAM_FORM] = 'all';
+       arg[PARAM_RTYPE] = RTYPE_MARC;
+       arg[PARAM_OFFSET] = 0;
+       arg[PARAM_DEPTH]        = depthSelGetDepth();
+       arg[PARAM_LOCATION]     = depthSelGetNewLoc();
+       arg[PARAM_SEARCHES] = js2JSON(searches);
+       arg[PARAM_ADVTYPE] = ADVTYPE_MARC;
+       arg[PARAM_TERM] = "";
+
+       goTo(buildOPACLink(arg));
+}
+
+
+/* EXAMPLE => {"term":"0516011901","restrict":[{"tag":"020","subfield":"a"}]} */
+function advExtractMARC(tbody) {
+       if(!tbody) return null;
+       var term = $n(tbody, 'advanced.marc.value').value;
+       if(!term) return null;
+
+       var subfield = $n(tbody, 'advanced.marc.subfield').value;
+       if(!subfield) subfield = "_";
+
+       var tag = $n(tbody, 'advanced.marc.tag').value;
+       if(!tag) return null;
+
+       return { 'term' : term.toLowerCase(), 'restrict' :  [ { 'tag' : tag, 'subfield' : subfield } ] };
+}
+
+function advGenericSearch() {
+       clearSearchParams();
+       var type = getSelectorVal($('adv_quick_type'));
+       
+       var term = $('adv_quick_text').value;
+       if(!term) return;
+
+       var arg = {};
+
+       switch(type) {
+
+               case 'isbn' :
+                       arg.page                                        = RRESULT;
+                       arg[PARAM_STYPE]                = "";
+                       arg[PARAM_TERM]         = "";
+                       arg[PARAM_RTYPE]                = RTYPE_ISBN;
+                       arg[PARAM_OFFSET]               = 0;
+                       arg[PARAM_ADVTERM]      = term.toLowerCase();
+                       break;
+               
+               case 'issn' :
+                       arg.page                                        = RRESULT;
+                       arg[PARAM_STYPE]                = "";
+                       arg[PARAM_TERM]         = "";
+                       arg[PARAM_ADVTERM]      = term.toLowerCase();
+                       arg[PARAM_OFFSET]               = 0;
+                       arg[PARAM_RTYPE]                = RTYPE_ISSN;
+                       break;
+
+               case 'tcn' :
+                       arg.page                                        = RRESULT;
+                       arg[PARAM_STYPE]                = "";
+                       arg[PARAM_TERM]         = "";
+                       arg[PARAM_ADVTERM]      = term;
+                       arg[PARAM_OFFSET]               = 0;
+                       arg[PARAM_RTYPE]                = RTYPE_TCN;
+                       break;
+
+        case 'barcode':
+            advFindBarcode(term);
+            break;
+
+
+               case 'cn':
+                       arg.page                        = CNBROWSE;
+                       arg[PARAM_CN]   = term;
+                       arg[PARAM_DEPTH]                = depthSelGetDepth();
+                       arg[PARAM_LOCATION]     = depthSelGetNewLoc();
+                       break;
+
+               case 'lccn':
+                       arg.page = RRESULT;
+                       arg[PARAM_FORM] = 'all'
+                       arg[PARAM_RTYPE] = RTYPE_MARC;
+                       arg[PARAM_OFFSET] = 0;
+                       arg[PARAM_DEPTH]        = depthSelGetDepth();
+                       arg[PARAM_LOCATION]     = depthSelGetNewLoc();
+                       arg[PARAM_SEARCHES] = js2JSON([{ 'term' : term.toLowerCase(), 
+                                       'restrict' :  [ { 'tag' : '010', 'subfield' : '_' } ] }]);
+                       arg[PARAM_ADVTYPE] = ADVTYPE_MARC;
+                       arg[PARAM_TERM] = "";
+                       break;
+
+
+               default: alert('not done');
+       }
+
+       if(arg.page) goTo(buildOPACLink(arg));
+}
+
+
+function advFindBarcode(barcode) {
+    var req = new Request(FETCH_BIB_ID_BY_BARCODE, barcode);
+    req.callback(advDrawBarcode);
+    req.request.alertEvent = false;
+    req.send();
+}
+
+function advDrawBarcode(r) {
+    titleid = r.getResultObject();
+    if(checkILSEvent(titleid)) {
+        alertId('myopac.copy.not.found');
+        return;
+    }
+    if(!titleid) return;
+    var args = {};
+    args.page = RDETAIL;
+    args[PARAM_RID] = titleid;
+    location.href = buildOPACLink(args);
+}
+
+function __setsortsel() {
+    var sel = $('adv_global_sort_by');
+    if (sel.selectedIndex == 0) {
+        $("adv_global_sort_dir").disabled = true;
+        $("adv_global_sort_dir").selectedIndex = 0;
+    } else $("adv_global_sort_dir").disabled = false;
+}
+
+__setsortsel();
index 152bb1f..c898663 100644 (file)
@@ -1,67 +1,67 @@
-\r
-function containerDoRequest( req, callback, args ) {\r
-\r
-       if( callback ) {\r
-               req.callback( callback );\r
-               req.request.args = args;\r
-               req.send();\r
-               return null;\r
-       }\r
-\r
-       req.send(true); \r
-       return req.result();\r
-}\r
-\r
-\r
-function containerFetchAll( callback, args ) {\r
-       var req = new Request( \r
-               FETCH_CONTAINERS, G.user.session, G.user.id(), 'biblio', 'bookbag' );\r
-       return containerDoRequest( req, callback, args );\r
-}\r
-\r
-function containerFlesh( id, callback, args ) {\r
-       var req = new Request( FLESH_CONTAINER, G.user.session, 'biblio', id );\r
-       return containerDoRequest( req, callback, args );\r
-}\r
-\r
-function containerDelete( id, callback, args ) {\r
-       var req = new Request( DELETE_CONTAINER, G.user.session, 'biblio', id );\r
-       return containerDoRequest(req, callback, args );\r
-}\r
-\r
-\r
-function containerCreate( name, pub, callback, args ) {\r
-\r
-       var container = new cbreb();\r
-       container.btype('bookbag');\r
-       container.owner( G.user.id() );\r
-       container.name( name );\r
-       if(pub) container.pub('t');\r
-       else container.pub('f');\r
-\r
-       var req = new Request( \r
-               CREATE_CONTAINER, G.user.session, 'biblio', container );\r
-       return containerDoRequest( req, callback, args );\r
-}\r
-\r
-function containerUpdate( container, callback, args ) {\r
-       var req = new Request(UPDATE_CONTAINER, G.user.session, 'biblio', container);\r
-       return containerDoRequest(req, callback, args);\r
-}\r
-\r
-function containerCreateItem( containerId, target, callback, args ) {\r
-\r
-       var item = new cbrebi();\r
-       item.target_biblio_record_entry(target);\r
-       item.bucket(containerId);\r
-\r
-       var req = new Request( CREATE_CONTAINER_ITEM, \r
-               G.user.session, 'biblio', item );\r
-\r
-       return containerDoRequest( req, callback, args );\r
-}\r
-\r
-function containerRemoveItem( id, callback, args ) {\r
-       var req = new Request( DELETE_CONTAINER_ITEM, G.user.session, 'biblio', id );\r
-       return containerDoRequest( req, callback, args );\r
-}\r
+
+function containerDoRequest( req, callback, args ) {
+
+       if( callback ) {
+               req.callback( callback );
+               req.request.args = args;
+               req.send();
+               return null;
+       }
+
+       req.send(true); 
+       return req.result();
+}
+
+
+function containerFetchAll( callback, args ) {
+       var req = new Request( 
+               FETCH_CONTAINERS, G.user.session, G.user.id(), 'biblio', 'bookbag' );
+       return containerDoRequest( req, callback, args );
+}
+
+function containerFlesh( id, callback, args ) {
+       var req = new Request( FLESH_CONTAINER, G.user.session, 'biblio', id );
+       return containerDoRequest( req, callback, args );
+}
+
+function containerDelete( id, callback, args ) {
+       var req = new Request( DELETE_CONTAINER, G.user.session, 'biblio', id );
+       return containerDoRequest(req, callback, args );
+}
+
+
+function containerCreate( name, pub, callback, args ) {
+
+       var container = new cbreb();
+       container.btype('bookbag');
+       container.owner( G.user.id() );
+       container.name( name );
+       if(pub) container.pub('t');
+       else container.pub('f');
+
+       var req = new Request( 
+               CREATE_CONTAINER, G.user.session, 'biblio', container );
+       return containerDoRequest( req, callback, args );
+}
+
+function containerUpdate( container, callback, args ) {
+       var req = new Request(UPDATE_CONTAINER, G.user.session, 'biblio', container);
+       return containerDoRequest(req, callback, args);
+}
+
+function containerCreateItem( containerId, target, callback, args ) {
+
+       var item = new cbrebi();
+       item.target_biblio_record_entry(target);
+       item.bucket(containerId);
+
+       var req = new Request( CREATE_CONTAINER_ITEM, 
+               G.user.session, 'biblio', item );
+
+       return containerDoRequest( req, callback, args );
+}
+
+function containerRemoveItem( id, callback, args ) {
+       var req = new Request( DELETE_CONTAINER_ITEM, G.user.session, 'biblio', id );
+       return containerDoRequest( req, callback, args );
+}
index 037b7fa..8610984 100644 (file)
@@ -1,13 +1,13 @@
-\r
-\r
-function ContentCafe(recordid) {\r
-       var xml = null;\r
-       var xhr = buildXMLRequest();\r
-       \r
-       xhr.open("GET","http://contentcafe2.btol.com/ContentCafe/ContentCafe.asmx/Single?userID=KC72927&password=CC14647&key="+recordid+"&content=AvailableContent", false);\r
-       xhr.send(null);\r
-       if(xhr.responseXML && xhr.responseXML.documentElement && xhr.status == 200) xml = xhr.responseXML.documentElement;\r
-       //this.toString = function() { return this.marcObj.toString(); };\r
-       this.xml = xml;\r
-       this.parser = "test";\r
+
+
+function ContentCafe(recordid) {
+       var xml = null;
+       var xhr = buildXMLRequest();
+       
+       xhr.open("GET","http://contentcafe2.btol.com/ContentCafe/ContentCafe.asmx/Single?userID=KC72927&password=CC14647&key="+recordid+"&content=AvailableContent", false);
+       xhr.send(null);
+       if(xhr.responseXML && xhr.responseXML.documentElement && xhr.status == 200) xml = xhr.responseXML.documentElement;
+       //this.toString = function() { return this.marcObj.toString(); };
+       this.xml = xml;
+       this.parser = "test";
 }
\ No newline at end of file
index f583697..4231e80 100644 (file)
-//** Featured Content Slider script- (c) Dynamic Drive DHTML code library: http://www.dynamicdrive.com.\r
-//** May 2nd, 08'- Script rewritten and updated to 2.0.\r
-//** June 12th, 08'- Script updated to v 2.3, which adds the following features:\r
-                       //1) Changed behavior of script to actually collapse the previous content when the active one is shown, instead of just tucking it underneath the later.\r
-                       //2) Added setting to reveal a content either via "click" or "mouseover" of pagination links (default is former).\r
-                       //3) Added public function for jumping to a particular slide within a Featured Content instance using an arbitrary link, for example.\r
-\r
-//** July 11th, 08'- Script updated to v 2.4:\r
-                       //1) Added ability to select a particular slide when the page first loads using a URL parameter (ie: mypage.htm?myslider=4 to select 4th slide in "myslider")\r
-                       //2) Fixed bug where the first slide disappears when the mouse clicks or mouses over it when page first loads.\r
-\r
-var featuredcontentslider={\r
-\r
-//3 variables below you can customize if desired:\r
-ajaxloadingmsg: '',\r
-bustajaxcache: true, //bust caching of external ajax page after 1st request?\r
-enablepersist: true, //persist to last content viewed when returning to page?\r
-\r
-settingcaches: {}, //object to cache "setting" object of each script instance\r
-\r
-jumpTo:function(fcsid, pagenumber){ //public function to go to a slide manually.\r
-       this.turnpage(this.settingcaches[fcsid], pagenumber)\r
-},\r
-\r
-ajaxconnect:function(setting){\r
-       var page_request = false\r
-       if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)\r
-               try {\r
-               page_request = new ActiveXObject("Msxml2.XMLHTTP")\r
-               } \r
-               catch (e){\r
-                       try{\r
-                       page_request = new ActiveXObject("Microsoft.XMLHTTP")\r
-                       }\r
-                       catch (e){}\r
-               }\r
-       }\r
-       else if (window.XMLHttpRequest) // if Mozilla, Safari etc\r
-               page_request = new XMLHttpRequest()\r
-       else\r
-               return false\r
-       var pageurl=setting.contentsource[1]\r
-       page_request.onreadystatechange=function(){\r
-               featuredcontentslider.ajaxpopulate(page_request, setting)\r
-       }\r
-       document.getElementById(setting.id).innerHTML=this.ajaxloadingmsg\r
-       var bustcache=(!this.bustajaxcache)? "" : (pageurl.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()\r
-       page_request.open('GET', pageurl+bustcache, true)\r
-       page_request.send(null)\r
-},\r
-\r
-ajaxpopulate:function(page_request, setting){\r
-       if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){\r
-               document.getElementById(setting.id).innerHTML=page_request.responseText\r
-               this.buildpaginate(setting)\r
-       }\r
-},\r
-\r
-buildcontentdivs:function(setting){\r
-       var alldivs=document.getElementById(setting.id).getElementsByTagName("div")\r
-       for (var i=0; i<alldivs.length; i++){\r
-               if (this.css(alldivs[i], "contentdiv", "check")){ //check for DIVs with class "contentdiv"\r
-                       setting.contentdivs.push(alldivs[i])\r
-                               alldivs[i].style.display="none" //collapse all content DIVs to begin with\r
-               }\r
-       }\r
-},\r
-\r
-buildpaginate:function(setting){\r
-       this.buildcontentdivs(setting)\r
-       var sliderdiv=document.getElementById(setting.id)\r
-       var pdiv=document.getElementById("paginate-"+setting.id)\r
-       var phtml=""\r
-       var toc=setting.toc\r
-       var nextprev=setting.nextprev\r
-       if (typeof toc=="string" && toc!="markup" || typeof toc=="object"){\r
-               for (var i=1; i<=setting.contentdivs.length; i++){\r
-                       phtml+='<a href="#'+i+'" class="toc">'+(typeof toc=="string"? toc.replace(/#increment/, i) : toc[i-1])+'</a> '\r
-               }\r
-               phtml=(nextprev[0]!=''? '<a href="#prev" class="prev">'+nextprev[0]+'</a> ' : '') + phtml + (nextprev[1]!=''? '<a href="#next" class="next">'+nextprev[1]+'</a>' : '')\r
-               pdiv.innerHTML=phtml\r
-       }\r
-       var pdivlinks=pdiv.getElementsByTagName("a")\r
-       var toclinkscount=0 //var to keep track of actual # of toc links\r
-       for (var i=0; i<pdivlinks.length; i++){\r
-               if (this.css(pdivlinks[i], "toc", "check")){\r
-                       if (toclinkscount>setting.contentdivs.length-1){ //if this toc link is out of range (user defined more toc links then there are contents)\r
-                               pdivlinks[i].style.display="none" //hide this toc link\r
-                               continue\r
-                       }\r
-                       pdivlinks[i].setAttribute("rel", ++toclinkscount) //store page number inside toc link\r
-                       pdivlinks[i][setting.revealtype]=function(){\r
-                               featuredcontentslider.turnpage(setting, this.getAttribute("rel"))\r
-                               return false\r
-                       }\r
-                       setting.toclinks.push(pdivlinks[i])\r
-               }\r
-               else if (this.css(pdivlinks[i], "prev", "check") || this.css(pdivlinks[i], "next", "check")){ //check for links with class "prev" or "next"\r
-                       pdivlinks[i].onclick=function(){\r
-                               featuredcontentslider.turnpage(setting, this.className)\r
-                               return false\r
-                       }\r
-               }\r
-       }\r
-       this.turnpage(setting, setting.currentpage, true)\r
-       if (setting.autorotate[0]){ //if auto rotate enabled\r
-               pdiv[setting.revealtype]=function(){\r
-                       featuredcontentslider.cleartimer(setting, window["fcsautorun"+setting.id])\r
-               }\r
-               sliderdiv["onclick"]=function(){ //stop content slider when slides themselves are clicked on\r
-                       featuredcontentslider.cleartimer(setting, window["fcsautorun"+setting.id])\r
-               }\r
-               setting.autorotate[1]=setting.autorotate[1]+(1/setting.enablefade[1]*50) //add time to run fade animation (roughly) to delay between rotation\r
-        this.autorotate(setting)\r
-       }\r
-},\r
-\r
-urlparamselect:function(fcsid){\r
-       var result=window.location.search.match(new RegExp(fcsid+"=(\\d+)", "i")) //check for "?featuredcontentsliderid=2" in URL\r
-       return (result==null)? null : parseInt(RegExp.$1) //returns null or index, where index (int) is the selected tab's index\r
-},\r
-\r
-turnpage:function(setting, thepage, autocall){\r
-       var currentpage=setting.currentpage //current page # before change\r
-       var totalpages=setting.contentdivs.length\r
-       var turntopage=(/prev/i.test(thepage))? currentpage-1 : (/next/i.test(thepage))? currentpage+1 : parseInt(thepage)\r
-       turntopage=(turntopage<1)? totalpages : (turntopage>totalpages)? 1 : turntopage //test for out of bound and adjust\r
-       if (turntopage==setting.currentpage && typeof autocall=="undefined") //if a pagination link is clicked on repeatedly\r
-               return\r
-       setting.currentpage=turntopage\r
-       setting.contentdivs[turntopage-1].style.zIndex=++setting.topzindex\r
-       this.cleartimer(setting, window["fcsfade"+setting.id])\r
-       setting.cacheprevpage=setting.prevpage\r
-       if (setting.enablefade[0]==true){\r
-               setting.curopacity=0\r
-               this.fadeup(setting)\r
-       }\r
-       if (setting.enablefade[0]==false){ //if fade is disabled, fire onChange event immediately (verus after fade is complete)\r
-               setting.contentdivs[setting.prevpage-1].style.display="none" //collapse last content div shown (it was set to "block")\r
-               setting.onChange(setting.prevpage, setting.currentpage)\r
-       }\r
-       setting.contentdivs[turntopage-1].style.visibility="visible"\r
-       setting.contentdivs[turntopage-1].style.display="block"\r
-       if (setting.prevpage<=setting.toclinks.length) //make sure pagination link exists (may not if manually defined via "markup", and user omitted)\r
-               this.css(setting.toclinks[setting.prevpage-1], "selected", "remove")\r
-       if (turntopage<=setting.toclinks.length) //make sure pagination link exists (may not if manually defined via "markup", and user omitted)\r
-               this.css(setting.toclinks[turntopage-1], "selected", "add")\r
-       setting.prevpage=turntopage\r
-       if (this.enablepersist)\r
-               this.setCookie("fcspersist"+setting.id, turntopage)\r
-},\r
-\r
-setopacity:function(setting, value){ //Sets the opacity of targetobject based on the passed in value setting (0 to 1 and in between)\r
-       var targetobject=setting.contentdivs[setting.currentpage-1]\r
-       if (targetobject.filters && targetobject.filters[0]){ //IE syntax\r
-               if (typeof targetobject.filters[0].opacity=="number") //IE6\r
-                       targetobject.filters[0].opacity=value*100\r
-               else //IE 5.5\r
-                       targetobject.style.filter="alpha(opacity="+value*100+")"\r
-       }\r
-       else if (typeof targetobject.style.MozOpacity!="undefined") //Old Mozilla syntax\r
-               targetobject.style.MozOpacity=value\r
-       else if (typeof targetobject.style.opacity!="undefined") //Standard opacity syntax\r
-               targetobject.style.opacity=value\r
-       setting.curopacity=value\r
-},\r
-\r
-fadeup:function(setting){\r
-       if (setting.curopacity<1){\r
-               this.setopacity(setting, setting.curopacity+setting.enablefade[1])\r
-               window["fcsfade"+setting.id]=setTimeout(function(){featuredcontentslider.fadeup(setting)}, 10)\r
-       }\r
-       else{ //when fade is complete\r
-               if (setting.cacheprevpage!=setting.currentpage) //if previous content isn't the same as the current shown div (happens the first time the page loads/ script is run)\r
-                       setting.contentdivs[setting.cacheprevpage-1].style.display="none" //collapse last content div shown (it was set to "block")\r
-               setting.onChange(setting.cacheprevpage, setting.currentpage)\r
-       }\r
-},\r
-\r
-cleartimer:function(setting, timervar){\r
-       if (typeof timervar!="undefined"){\r
-               clearTimeout(timervar)\r
-               clearInterval(timervar)\r
-               if (setting.cacheprevpage!=setting.currentpage){ //if previous content isn't the same as the current shown div\r
-                       setting.contentdivs[setting.cacheprevpage-1].style.display="none"\r
-               }\r
-       }\r
-},\r
-\r
-css:function(el, targetclass, action){\r
-       var needle=new RegExp("(^|\\s+)"+targetclass+"($|\\s+)", "ig")\r
-       if (action=="check")\r
-               return needle.test(el.className)\r
-       else if (action=="remove")\r
-               el.className=el.className.replace(needle, "")\r
-       else if (action=="add")\r
-               el.className+=" "+targetclass\r
-},\r
-\r
-autorotate:function(setting){\r
- window["fcsautorun"+setting.id]=setInterval(function(){featuredcontentslider.turnpage(setting, "next")}, setting.autorotate[1])\r
-},\r
-\r
-getCookie:function(Name){ \r
-       var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair\r
-       if (document.cookie.match(re)) //if cookie found\r
-               return document.cookie.match(re)[0].split("=")[1] //return its value\r
-       return null\r
-},\r
-\r
-setCookie:function(name, value){\r
-       document.cookie = name+"="+value\r
-\r
-},\r
-\r
-\r
-init:function(setting){\r
-       var persistedpage=this.getCookie("fcspersist"+setting.id) || 1\r
-       var urlselectedpage=this.urlparamselect(setting.id) //returns null or index from: mypage.htm?featuredcontentsliderid=index\r
-       this.settingcaches[setting.id]=setting //cache "setting" object\r
-       setting.contentdivs=[]\r
-       setting.toclinks=[]\r
-       setting.topzindex=0\r
-       setting.currentpage=urlselectedpage || ((this.enablepersist)? persistedpage : 1)\r
-       setting.prevpage=setting.currentpage\r
-       setting.revealtype="on"+(setting.revealtype || "click")\r
-       setting.curopacity=0\r
-       setting.onChange=setting.onChange || function(){}\r
-       if (setting.contentsource[0]=="inline")\r
-               this.buildpaginate(setting)\r
-       if (setting.contentsource[0]=="ajax")\r
-               this.ajaxconnect(setting)\r
-}\r
-\r
+//** Featured Content Slider script- (c) Dynamic Drive DHTML code library: http://www.dynamicdrive.com.
+//** May 2nd, 08'- Script rewritten and updated to 2.0.
+//** June 12th, 08'- Script updated to v 2.3, which adds the following features:
+                       //1) Changed behavior of script to actually collapse the previous content when the active one is shown, instead of just tucking it underneath the later.
+                       //2) Added setting to reveal a content either via "click" or "mouseover" of pagination links (default is former).
+                       //3) Added public function for jumping to a particular slide within a Featured Content instance using an arbitrary link, for example.
+
+//** July 11th, 08'- Script updated to v 2.4:
+                       //1) Added ability to select a particular slide when the page first loads using a URL parameter (ie: mypage.htm?myslider=4 to select 4th slide in "myslider")
+                       //2) Fixed bug where the first slide disappears when the mouse clicks or mouses over it when page first loads.
+
+var featuredcontentslider={
+
+//3 variables below you can customize if desired:
+ajaxloadingmsg: '',
+bustajaxcache: true, //bust caching of external ajax page after 1st request?
+enablepersist: true, //persist to last content viewed when returning to page?
+
+settingcaches: {}, //object to cache "setting" object of each script instance
+
+jumpTo:function(fcsid, pagenumber){ //public function to go to a slide manually.
+       this.turnpage(this.settingcaches[fcsid], pagenumber)
+},
+
+ajaxconnect:function(setting){
+       var page_request = false
+       if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
+               try {
+               page_request = new ActiveXObject("Msxml2.XMLHTTP")
+               } 
+               catch (e){
+                       try{
+                       page_request = new ActiveXObject("Microsoft.XMLHTTP")
+                       }
+                       catch (e){}
+               }
+       }
+       else if (window.XMLHttpRequest) // if Mozilla, Safari etc
+               page_request = new XMLHttpRequest()
+       else
+               return false
+       var pageurl=setting.contentsource[1]
+       page_request.onreadystatechange=function(){
+               featuredcontentslider.ajaxpopulate(page_request, setting)
+       }
+       document.getElementById(setting.id).innerHTML=this.ajaxloadingmsg
+       var bustcache=(!this.bustajaxcache)? "" : (pageurl.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
+       page_request.open('GET', pageurl+bustcache, true)
+       page_request.send(null)
+},
+
+ajaxpopulate:function(page_request, setting){
+       if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){
+               document.getElementById(setting.id).innerHTML=page_request.responseText
+               this.buildpaginate(setting)
+       }
+},
+
+buildcontentdivs:function(setting){
+       var alldivs=document.getElementById(setting.id).getElementsByTagName("div")
+       for (var i=0; i<alldivs.length; i++){
+               if (this.css(alldivs[i], "contentdiv", "check")){ //check for DIVs with class "contentdiv"
+                       setting.contentdivs.push(alldivs[i])
+                               alldivs[i].style.display="none" //collapse all content DIVs to begin with
+               }
+       }
+},
+
+buildpaginate:function(setting){
+       this.buildcontentdivs(setting)
+       var sliderdiv=document.getElementById(setting.id)
+       var pdiv=document.getElementById("paginate-"+setting.id)
+       var phtml=""
+       var toc=setting.toc
+       var nextprev=setting.nextprev
+       if (typeof toc=="string" && toc!="markup" || typeof toc=="object"){
+               for (var i=1; i<=setting.contentdivs.length; i++){
+                       phtml+='<a href="#'+i+'" class="toc">'+(typeof toc=="string"? toc.replace(/#increment/, i) : toc[i-1])+'</a> '
+               }
+               phtml=(nextprev[0]!=''? '<a href="#prev" class="prev">'+nextprev[0]+'</a> ' : '') + phtml + (nextprev[1]!=''? '<a href="#next" class="next">'+nextprev[1]+'</a>' : '')
+               pdiv.innerHTML=phtml
+       }
+       var pdivlinks=pdiv.getElementsByTagName("a")
+       var toclinkscount=0 //var to keep track of actual # of toc links
+       for (var i=0; i<pdivlinks.length; i++){
+               if (this.css(pdivlinks[i], "toc", "check")){
+                       if (toclinkscount>setting.contentdivs.length-1){ //if this toc link is out of range (user defined more toc links then there are contents)
+                               pdivlinks[i].style.display="none" //hide this toc link
+                               continue
+                       }
+                       pdivlinks[i].setAttribute("rel", ++toclinkscount) //store page number inside toc link
+                       pdivlinks[i][setting.revealtype]=function(){
+                               featuredcontentslider.turnpage(setting, this.getAttribute("rel"))
+                               return false
+                       }
+                       setting.toclinks.push(pdivlinks[i])
+               }
+               else if (this.css(pdivlinks[i], "prev", "check") || this.css(pdivlinks[i], "next", "check")){ //check for links with class "prev" or "next"
+                       pdivlinks[i].onclick=function(){
+                               featuredcontentslider.turnpage(setting, this.className)
+                               return false
+                       }
+               }
+       }
+       this.turnpage(setting, setting.currentpage, true)
+       if (setting.autorotate[0]){ //if auto rotate enabled
+               pdiv[setting.revealtype]=function(){
+                       featuredcontentslider.cleartimer(setting, window["fcsautorun"+setting.id])
+               }
+               sliderdiv["onclick"]=function(){ //stop content slider when slides themselves are clicked on
+                       featuredcontentslider.cleartimer(setting, window["fcsautorun"+setting.id])
+               }
+               setting.autorotate[1]=setting.autorotate[1]+(1/setting.enablefade[1]*50) //add time to run fade animation (roughly) to delay between rotation
+        this.autorotate(setting)
+       }
+},
+
+urlparamselect:function(fcsid){
+       var result=window.location.search.match(new RegExp(fcsid+"=(\\d+)", "i")) //check for "?featuredcontentsliderid=2" in URL
+       return (result==null)? null : parseInt(RegExp.$1) //returns null or index, where index (int) is the selected tab's index
+},
+
+turnpage:function(setting, thepage, autocall){
+       var currentpage=setting.currentpage //current page # before change
+       var totalpages=setting.contentdivs.length
+       var turntopage=(/prev/i.test(thepage))? currentpage-1 : (/next/i.test(thepage))? currentpage+1 : parseInt(thepage)
+       turntopage=(turntopage<1)? totalpages : (turntopage>totalpages)? 1 : turntopage //test for out of bound and adjust
+       if (turntopage==setting.currentpage && typeof autocall=="undefined") //if a pagination link is clicked on repeatedly
+               return
+       setting.currentpage=turntopage
+       setting.contentdivs[turntopage-1].style.zIndex=++setting.topzindex
+       this.cleartimer(setting, window["fcsfade"+setting.id])
+       setting.cacheprevpage=setting.prevpage
+       if (setting.enablefade[0]==true){
+               setting.curopacity=0
+               this.fadeup(setting)
+       }
+       if (setting.enablefade[0]==false){ //if fade is disabled, fire onChange event immediately (verus after fade is complete)
+               setting.contentdivs[setting.prevpage-1].style.display="none" //collapse last content div shown (it was set to "block")
+               setting.onChange(setting.prevpage, setting.currentpage)
+       }
+       setting.contentdivs[turntopage-1].style.visibility="visible"
+       setting.contentdivs[turntopage-1].style.display="block"
+       if (setting.prevpage<=setting.toclinks.length) //make sure pagination link exists (may not if manually defined via "markup", and user omitted)
+               this.css(setting.toclinks[setting.prevpage-1], "selected", "remove")
+       if (turntopage<=setting.toclinks.length) //make sure pagination link exists (may not if manually defined via "markup", and user omitted)
+               this.css(setting.toclinks[turntopage-1], "selected", "add")
+       setting.prevpage=turntopage
+       if (this.enablepersist)
+               this.setCookie("fcspersist"+setting.id, turntopage)
+},
+
+setopacity:function(setting, value){ //Sets the opacity of targetobject based on the passed in value setting (0 to 1 and in between)
+       var targetobject=setting.contentdivs[setting.currentpage-1]
+       if (targetobject.filters && targetobject.filters[0]){ //IE syntax
+               if (typeof targetobject.filters[0].opacity=="number") //IE6
+                       targetobject.filters[0].opacity=value*100
+               else //IE 5.5
+                       targetobject.style.filter="alpha(opacity="+value*100+")"
+       }
+       else if (typeof targetobject.style.MozOpacity!="undefined") //Old Mozilla syntax
+               targetobject.style.MozOpacity=value
+       else if (typeof targetobject.style.opacity!="undefined") //Standard opacity syntax
+               targetobject.style.opacity=value
+       setting.curopacity=value
+},
+
+fadeup:function(setting){
+       if (setting.curopacity<1){
+               this.setopacity(setting, setting.curopacity+setting.enablefade[1])
+               window["fcsfade"+setting.id]=setTimeout(function(){featuredcontentslider.fadeup(setting)}, 10)
+       }
+       else{ //when fade is complete
+               if (setting.cacheprevpage!=setting.currentpage) //if previous content isn't the same as the current shown div (happens the first time the page loads/ script is run)
+                       setting.contentdivs[setting.cacheprevpage-1].style.display="none" //collapse last content div shown (it was set to "block")
+               setting.onChange(setting.cacheprevpage, setting.currentpage)
+       }
+},
+
+cleartimer:function(setting, timervar){
+       if (typeof timervar!="undefined"){
+               clearTimeout(timervar)
+               clearInterval(timervar)
+               if (setting.cacheprevpage!=setting.currentpage){ //if previous content isn't the same as the current shown div
+                       setting.contentdivs[setting.cacheprevpage-1].style.display="none"
+               }
+       }
+},
+
+css:function(el, targetclass, action){
+       var needle=new RegExp("(^|\\s+)"+targetclass+"($|\\s+)", "ig")
+       if (action=="check")
+               return needle.test(el.className)
+       else if (action=="remove")
+               el.className=el.className.replace(needle, "")
+       else if (action=="add")
+               el.className+=" "+targetclass
+},
+
+autorotate:function(setting){
+ window["fcsautorun"+setting.id]=setInterval(function(){featuredcontentslider.turnpage(setting, "next")}, setting.autorotate[1])
+},
+
+getCookie:function(Name){ 
+       var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
+       if (document.cookie.match(re)) //if cookie found
+               return document.cookie.match(re)[0].split("=")[1] //return its value
+       return null
+},
+
+setCookie:function(name, value){
+       document.cookie = name+"="+value
+
+},
+
+
+init:function(setting){
+       var persistedpage=this.getCookie("fcspersist"+setting.id) || 1
+       var urlselectedpage=this.urlparamselect(setting.id) //returns null or index from: mypage.htm?featuredcontentsliderid=index
+       this.settingcaches[setting.id]=setting //cache "setting" object
+       setting.contentdivs=[]
+       setting.toclinks=[]
+       setting.topzindex=0
+       setting.currentpage=urlselectedpage || ((this.enablepersist)? persistedpage : 1)
+       setting.prevpage=setting.currentpage
+       setting.revealtype="on"+(setting.revealtype || "click")
+       setting.curopacity=0
+       setting.onChange=setting.onChange || function(){}
+       if (setting.contentsource[0]=="inline")
+               this.buildpaginate(setting)
+       if (setting.contentsource[0]=="ajax")
+               this.ajaxconnect(setting)
+}
+
 }
\ No newline at end of file
index 326aead..83031bd 100644 (file)
-\r
-attachEvt( "common", "locationChanged", updateLoc );\r
-attachEvt("common", "run", function(){\r
-       setSelector(_ds,        getLocation()); _newlocation = getLocation();\r
-});  // sets default search to home library\r
-//attachEvt("common", "run", function(){setSelector(_ds,       "1"); _newlocation = "1";});\r
-\r
-var _ds;\r
-var _libselspan;\r
-var _libselslink;\r
-var _dselspan;\r
-var _newlocation = null;\r
-\r
-function depthSelInit() {\r
-       _ds = $('depth_selector'); \r
-       _ds.onchange = depthSelectorChanged;\r
-       _libselspan = $('lib_selector_span');\r
-       _libsellink = $('lib_selector_link');\r
-       _dselspan = $('depth_selector_span');\r
-\r
-       if( getLocation() == globalOrgTree.id() ) {\r
-               unHideMe( _libselspan );\r
-               _libsellink.onclick = _opacHandleLocationTagClick;\r
-       } else {\r
-               unHideMe( _dselspan );\r
-               //buildLocationSelector();\r
-       }\r
-}\r
-\r
-\r
-var orgTreeIsBuilt = false;\r
-function _opacHandleLocationTagClick() {\r
-\r
-       swapCanvas(G.ui.common.org_container);\r
-\r
-       if(!orgTreeIsBuilt) {\r
-               drawOrgTree();\r
-               orgTreeIsBuilt = true;\r
-       }\r
-\r
-}\r
-\r
-function depthSelGetDepth() {\r
-       var depth = parseInt(_ds.options[_ds.selectedIndex].value);\r
-       if(isNaN(depth)) depth = 0;\r
-       return depth;\r
-}\r
-\r
-function depthSelectorChanged() {\r
-       if(!_ds) return;\r
-       _newlocation = _ds.options[_ds.selectedIndex].value;\r
-}\r
-\r
-var chooseAnotherNode;\r
-function buildLocationSelector(newLoc) {\r
-\r
-       var loc;\r
-       if(newLoc != null) loc = newLoc;\r
-       else loc = getLocation();\r
-\r
-       if( loc == globalOrgTree.id() ) return;\r
-\r
-       var selector = _ds;\r
-       if(!chooseAnotherNode) \r
-               chooseAnotherNode = selector.removeChild(\r
-                       selector.getElementsByTagName("option")[0]);\r
-       var node = chooseAnotherNode;\r
-       removeChildren(selector);\r
-       \r
-       var location = findOrgUnit(loc);\r
-       var type;\r
-       if (location) type = findOrgType(location.ou_type());\r
-\r
-       while( type && location ) {\r
-               var n = node.cloneNode(true);   \r
-               n.setAttribute("value", type.depth());\r
-               removeChildren(n);\r
-               n.appendChild(text(type.opac_label()));\r
-               selector.appendChild(n);\r
-               location = findOrgUnit(location.parent_ou());\r
-               if(location) type = findOrgType(location.ou_type());\r
-               else type = null;\r
-       }\r
-\r
-       selector.appendChild(node);\r
-}\r
-\r
-function getNewSearchDepth() { return newSearchDepth; }\r
-function getNewSearchLocation() { return (isNull(_newlocation)) ? LOCATION : _newlocation; }\r
-function depthSelGetNewLoc() { return getNewSearchLocation(); }\r
-\r
-function updateLoc(location, depth) {\r
-       if( depth != null ) {\r
-               if(depth != 0 ){\r
-                       _libsellink.onclick = _opacHandleLocationTagClick;\r
-                       if( location == globalOrgTree.id() ) {\r
-                               hideMe( _dselspan );\r
-                               unHideMe( _libselspan );\r
-                       } else {\r
-                               buildLocationSelector(location);\r
-                               hideMe( _libselspan );\r
-                               unHideMe( _dselspan );\r
-                       }\r
-               }\r
-\r
-               setSelector(_ds, depth);\r
-               newSearchDepth = depth;\r
-       }\r
-\r
-       _newlocation = location;\r
-       runEvt('common','locationUpdated', location);\r
-}\r
+
+attachEvt( "common", "locationChanged", updateLoc );
+attachEvt("common", "run", function(){
+       setSelector(_ds,        getLocation()); _newlocation = getLocation();
+});  // sets default search to home library
+//attachEvt("common", "run", function(){setSelector(_ds,       "1"); _newlocation = "1";});
+
+var _ds;
+var _libselspan;
+var _libselslink;
+var _dselspan;
+var _newlocation = null;
+
+function depthSelInit() {
+       _ds = $('depth_selector'); 
+       _ds.onchange = depthSelectorChanged;
+       _libselspan = $('lib_selector_span');
+       _libsellink = $('lib_selector_link');
+       _dselspan = $('depth_selector_span');
+
+       if( getLocation() == globalOrgTree.id() ) {
+               unHideMe( _libselspan );
+               _libsellink.onclick = _opacHandleLocationTagClick;
+       } else {
+               unHideMe( _dselspan );
+               //buildLocationSelector();
+       }
+}
+
+
+var orgTreeIsBuilt = false;
+function _opacHandleLocationTagClick() {
+
+       swapCanvas(G.ui.common.org_container);
+
+       if(!orgTreeIsBuilt) {
+               drawOrgTree();
+               orgTreeIsBuilt = true;
+       }
+
+}
+
+function depthSelGetDepth() {
+       var depth = parseInt(_ds.options[_ds.selectedIndex].value);
+       if(isNaN(depth)) depth = 0;
+       return depth;
+}
+
+function depthSelectorChanged() {
+       if(!_ds) return;
+       _newlocation = _ds.options[_ds.selectedIndex].value;
+}
+
+var chooseAnotherNode;
+function buildLocationSelector(newLoc) {
+
+       var loc;
+       if(newLoc != null) loc = newLoc;
+       else loc = getLocation();
+
+       if( loc == globalOrgTree.id() ) return;
+
+       var selector = _ds;
+       if(!chooseAnotherNode) 
+               chooseAnotherNode = selector.removeChild(
+                       selector.getElementsByTagName("option")[0]);
+       var node = chooseAnotherNode;
+       removeChildren(selector);
+       
+       var location = findOrgUnit(loc);
+       var type;
+       if (location) type = findOrgType(location.ou_type());
+
+       while( type && location ) {
+               var n = node.cloneNode(true);   
+               n.setAttribute("value", type.depth());
+               removeChildren(n);
+               n.appendChild(text(type.opac_label()));
+               selector.appendChild(n);
+               location = findOrgUnit(location.parent_ou());
+               if(location) type = findOrgType(location.ou_type());
+               else type = null;
+       }
+
+       selector.appendChild(node);
+}
+
+function getNewSearchDepth() { return newSearchDepth; }
+function getNewSearchLocation() { return (isNull(_newlocation)) ? LOCATION : _newlocation; }
+function depthSelGetNewLoc() { return getNewSearchLocation(); }
+
+function updateLoc(location, depth) {
+       if( depth != null ) {
+               if(depth != 0 ){
+                       _libsellink.onclick = _opacHandleLocationTagClick;
+                       if( location == globalOrgTree.id() ) {
+                               hideMe( _dselspan );
+                               unHideMe( _libselspan );
+                       } else {
+                               buildLocationSelector(location);
+                               hideMe( _libselspan );
+                               unHideMe( _dselspan );
+                       }
+               }
+
+               setSelector(_ds, depth);
+               newSearchDepth = depth;
+       }
+
+       _newlocation = location;
+       runEvt('common','locationUpdated', location);
+}
index 2846700..79e56ae 100644 (file)
-var searchBarExpanded = false;\r
-/* our search selector boxes */\r
-var _ts, _fs;\r
-var isFrontPage = false;\r
-G.evt.common.init.push(searchBarInit);\r
-\r
-/* if set by the org selector, this will be the location used the\r
-       next time the search is submitted */\r
-var newSearchLocation; \r
-var newSearchDepth = null;\r
-\r
-\r
-function searchBarInit() {\r
-\r
-       _ts = G.ui.searchbar.type_selector;\r
-       _fs = G.ui.searchbar.form_selector;\r
-\r
-       try{G.ui.searchbar.text.focus();}catch(e){}\r
-       G.ui.searchbar.text.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };\r
-       _ts.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };\r
-       _fs.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };\r
-\r
-       G.ui.searchbar.submit.onclick = searchBarSubmit;\r
-\r
-       /* set up the selector objects, etc */\r
-       G.ui.searchbar.text.value = (getTerm() != null) ? getTerm() : "";\r
-       G.ui.searchbar.facets.value = (getFacet() != null) ? getFacet() : "";\r
-       setSelector(_ts,        getStype());\r
-       setSelector(_fs,        getForm());\r
-\r
-       depthSelInit();\r
-       \r
-       if(getSearches()) {\r
-               var searches = JSON2js(getSearches());\r
-               setSelector(_fs, searches[1].term);\r
-               if(!G.ui.searchbar.text.value) G.ui.searchbar.text.value = searches[0].term;            \r
-       }\r
-\r
-       if(!isFrontPage && (findCurrentPage() != MYOPAC)) {\r
-               attachEvt('common','depthChanged', searchBarSubmit);\r
-       }\r
-\r
-    if( (limit = $('opac.result.limit2avail')) ) {\r
-        if(getAvail()) limit.checked = true;\r
-        if(getSort() && getSortDir()) \r
-            setSelector($('opac.result.sort'), getSort()+'.'+getSortDir());\r
-    }\r
-       \r
-       if( (limit2 = $('opac.result.limit2avail2')) ) if(getAvail()) limit2.checked = true;\r
-}\r
-\r
-function searchBarSubmit(isFilterSort) {\r
-       var text = G.ui.searchbar.text.value;\r
-       var facet_text = isFrontPage ? '' : G.ui.searchbar.facets.value;\r
-       clearSearchParams();\r
-       if(!text || text == "" || text == "Search Keyword") return;\r
-       //var d = (newSearchDepth != null) ?  newSearchDepth : depthSelGetDepth();\r
-       var d = getDepth();\r
-       if(isNaN(d)) d = 0;\r
-       var args = {};\r
-       \r
-       if(SHOW_MR_DEFAULT || (isFilterSort && findCurrentPage() == MRESULT)) {\r
-               args.page                               = MRESULT;\r
-       } else {\r
-               args.page                               = RRESULT;\r
-               args[PARAM_RTYPE]               = _ts.options[_ts.selectedIndex].value;\r
-       }\r
-\r
-       args[PARAM_STYPE] = _ts.options[_ts.selectedIndex].value;\r
-       args[PARAM_LOCATION] = depthSelGetNewLoc();\r
-       args[PARAM_DEPTH]               = d;\r
-\r
-       var val = _fs.options[_fs.selectedIndex].value;\r
-       if(val!='') {\r
-               args[PARAM_SEARCHES] = '[{"term":"'+text+'","restrict":[{"tag":"245","subfield":"a"}]},{"term":"'+val+'","restrict":[{"tag":"998","subfield":"d"}]}]';\r
-               args[PARAM_ADVTYPE] = ADVTYPE_MARC;\r
-               args[PARAM_TERM] = "";\r
-               args[PARAM_FORM] = 'all';\r
-               args[PARAM_RTYPE] = RTYPE_MARC;\r
-       } else {\r
-               args[PARAM_TERM] = text;\r
-               args[PARAM_FACET]= facet_text;\r
-       }\r
-\r
-\r
-    if($('opac.result.limit2avail') && !arguments[1]) {\r
-        args[PARAM_AVAIL] = ($('opac.result.limit2avail').checked) ? 1 : '';\r
-        if( (val = getSelectorVal($('opac.result.sort'))) ) {\r
-            args[PARAM_SORT] = val.split('.')[0];\r
-            args[PARAM_SORT_DIR] = val.split('.')[1];\r
-        }\r
-    } else if(arguments[1]) {\r
-        args[PARAM_AVAIL] = (arguments[1].checked) ? 1 : '';\r
-        if( (val = getSelectorVal($('opac.result.sort'))) ) {\r
-            args[PARAM_SORT] = val.split('.')[0];\r
-            args[PARAM_SORT_DIR] = val.split('.')[1];\r
-        }\r
-       }\r
-\r
-       goTo(buildOPACLink(args));\r
-}\r
-\r
-\r
+var searchBarExpanded = false;
+/* our search selector boxes */
+var _ts, _fs;
+var isFrontPage = false;
+G.evt.common.init.push(searchBarInit);
+
+/* if set by the org selector, this will be the location used the
+       next time the search is submitted */
+var newSearchLocation; 
+var newSearchDepth = null;
+
+
+function searchBarInit() {
+
+       _ts = G.ui.searchbar.type_selector;
+       _fs = G.ui.searchbar.form_selector;
+
+       try{G.ui.searchbar.text.focus();}catch(e){}
+       G.ui.searchbar.text.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };
+       _ts.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };
+       _fs.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };
+
+       G.ui.searchbar.submit.onclick = searchBarSubmit;
+
+       /* set up the selector objects, etc */
+       G.ui.searchbar.text.value = (getTerm() != null) ? getTerm() : "";
+       G.ui.searchbar.facets.value = (getFacet() != null) ? getFacet() : "";
+       setSelector(_ts,        getStype());
+       setSelector(_fs,        getForm());
+
+       depthSelInit();
+       
+       if(getSearches()) {
+               var searches = JSON2js(getSearches());
+               setSelector(_fs, searches[1].term);
+               if(!G.ui.searchbar.text.value) G.ui.searchbar.text.value = searches[0].term;            
+       }
+
+       if(!isFrontPage && (findCurrentPage() != MYOPAC)) {
+               attachEvt('common','depthChanged', searchBarSubmit);
+       }
+
+    if( (limit = $('opac.result.limit2avail')) ) {
+        if(getAvail()) limit.checked = true;
+        if(getSort() && getSortDir()) 
+            setSelector($('opac.result.sort'), getSort()+'.'+getSortDir());
+    }
+       
+       if( (limit2 = $('opac.result.limit2avail2')) ) if(getAvail()) limit2.checked = true;
+}
+
+function searchBarSubmit(isFilterSort) {
+       var text = G.ui.searchbar.text.value;
+       var facet_text = isFrontPage ? '' : G.ui.searchbar.facets.value;
+       clearSearchParams();
+       if(!text || text == "" || text == "Search Keyword") return;
+       //var d = (newSearchDepth != null) ?  newSearchDepth : depthSelGetDepth();
+       var d = getDepth();
+       if(isNaN(d)) d = 0;
+       var args = {};
+       
+       if(SHOW_MR_DEFAULT || (isFilterSort && findCurrentPage() == MRESULT)) {
+               args.page                               = MRESULT;
+       } else {
+               args.page                               = RRESULT;
+               args[PARAM_RTYPE]               = _ts.options[_ts.selectedIndex].value;
+       }
+
+       args[PARAM_STYPE] = _ts.options[_ts.selectedIndex].value;
+       args[PARAM_LOCATION] = depthSelGetNewLoc();
+       args[PARAM_DEPTH]               = d;
+
+       var val = _fs.options[_fs.selectedIndex].value;
+       if(val!='') {
+               args[PARAM_SEARCHES] = '[{"term":"'+text+'","restrict":[{"tag":"245","subfield":"a"}]},{"term":"'+val+'","restrict":[{"tag":"998","subfield":"d"}]}]';
+               args[PARAM_ADVTYPE] = ADVTYPE_MARC;
+               args[PARAM_TERM] = "";
+               args[PARAM_FORM] = 'all';
+               args[PARAM_RTYPE] = RTYPE_MARC;
+       } else {
+               args[PARAM_TERM] = text;
+               args[PARAM_FACET]= facet_text;
+       }
+
+
+    if($('opac.result.limit2avail') && !arguments[1]) {
+        args[PARAM_AVAIL] = ($('opac.result.limit2avail').checked) ? 1 : '';
+        if( (val = getSelectorVal($('opac.result.sort'))) ) {
+            args[PARAM_SORT] = val.split('.')[0];
+            args[PARAM_SORT_DIR] = val.split('.')[1];
+        }
+    } else if(arguments[1]) {
+        args[PARAM_AVAIL] = (arguments[1].checked) ? 1 : '';
+        if( (val = getSelectorVal($('opac.result.sort'))) ) {
+            args[PARAM_SORT] = val.split('.')[0];
+            args[PARAM_SORT_DIR] = val.split('.')[1];
+        }
+       }
+
+       goTo(buildOPACLink(args));
+}
+
+
index 9e284cb..7d29dba 100644 (file)
-var holdsOrgSelectorBuilt = false;\r
-var holdArgs;\r
-\r
-/* \r
-note: metarecord holds have a holdable_formats field that contains\r
-item_type(s)-item_forms(s)-language\r
-item_form and language are optional - if language exist and no \r
-item_form is specified, use item_type(s)--language\r
-*/\r
-\r
-var noEmailMessage;\r
-var noEmailMessageXUL;\r
-\r
-function hideResultsPage(bool) {\r
-       if(!bool) {\r
-               unHideMe($('result_header'));\r
-               unHideMe($('tehSideBar'));\r
-               unHideMe($('facetSidebarContainer'));\r
-               unHideMe($('sidebar_div'));\r
-               unHideMe($('statusbar'));\r
-               unHideMe($('tips'));\r
-               unHideMe($('result_table_div'));\r
-               unHideMe($('results_header_nav1'));\r
-               unHideMe($('result_info_2'));\r
-               unHideMe($('results_header_bar'));\r
-       } else {\r
-               hideMe($('result_header'));\r
-               hideMe($('tehSideBar'));\r
-               hideMe($('facetSidebarContainer'));\r
-               hideMe($('sidebar_div'));\r
-               hideMe($('statusbar'));\r
-               hideMe($('tips'));\r
-               hideMe($('result_table_div'));\r
-               hideMe($('anonListTable'));\r
-               hideMe($('results_header_nav1'));\r
-               hideMe($('result_info_2'));\r
-               hideMe($('results_header_bar'));\r
-       }\r
-}\r
-\r
-function holdsHandleStaff() {\r
-\r
-    // if we know the recipient's barcode, use it\r
-    if(xulG.patron_barcode) return _holdsHandleStaff();\r
-\r
-       swapCanvas($('xulholds_box'));\r
-       $('xul_recipient_barcode').focus();\r
-       $('xul_recipient_barcode').onkeypress = function(evt) \r
-               {if(userPressedEnter(evt)) { _holdsHandleStaff(); } };\r
-       $('xul_recipient_barcode_submit').onclick = _holdsHandleStaff;\r
-       $('xul_recipient_me').onclick = _holdsHandleStaffMe;\r
-\r
-       $('xul_recipient_barcode').onkeyup = function(evt) {\r
-        if($('xul_recipient_barcode').value == '') \r
-            $('xul_recipient_me').disabled = false;\r
-        else\r
-            $('xul_recipient_me').disabled = true;\r
-    };\r
-}\r
-\r
-$('holds_frozen_thaw_input').onchange = function(){holdsVerifyThawDateUI('holds_frozen_thaw_input');}\r
-$('holds_frozen_thaw_input').onkeyup = function(){holdsVerifyThawDateUI('holds_frozen_thaw_input');}\r
-\r
-function _holdsHandleStaffMe() {\r
-       holdArgs.recipient = G.user;\r
-       holdsDrawEditor();\r
-}\r
-\r
-function _holdsHandleStaff() {\r
-       var barcode = xulG.patron_barcode || $('xul_recipient_barcode').value;\r
-       var user = grabUserByBarcode( G.user.session, barcode );\r
-\r
-       var evt;\r
-       if(evt = checkILSEvent(user)) {\r
-               alertILSEvent(user);\r
-               return;\r
-       }\r
-\r
-       if(!barcode || !user) {\r
-               alertId('holds_invalid_recipient', barcode);\r
-               return\r
-       }\r
-\r
-       grabUserPrefs(user);\r
-\r
-       holdArgs.recipient = user;\r
-       holdsDrawEditor();\r
-}\r
-\r
-\r
-\r
-/** args:\r
-  * record, volume, copy (ids)\r
-  * request, recipient, editHold (objects)\r
-  */\r
-\r
-function holdsDrawEditor(args) {\r
-       holdArgs = (args) ? args : holdArgs;\r
-\r
-    if(!noEmailMessage) noEmailMessage = $('holds_email').removeChild($('holds.no_email'));\r
-    if(!noEmailMessageXUL) noEmailMessageXUL = $('holds_email').removeChild($('holds.no_email.xul'));\r
-\r
-       if(isXUL() && holdArgs.recipient == null && holdArgs.editHold == null) {\r
-               holdsHandleStaff();\r
-               return;\r
-       }\r
-\r
-       if(!holdArgs.recipient) holdArgs.recipient = G.user;\r
-       if(!holdArgs.requestor) holdArgs.requestor = G.user;\r
-\r
-       if(!(holdArgs.requestor && holdArgs.requestor.session)) {\r
-               /*\r
-               alert("Please login first before placing a hold");\r
-               setCacheValue('returnURL',{href:window.location.href, record:holdArgs.record, type:holdArgs.type});\r
-               goTo(buildOPACLink({page:MYOPAC}, false, true));\r
-               return;\r
-               */\r
-               detachAllEvt('common','locationChanged');\r
-               attachEvt('common','loggedIn', holdsDrawEditor);\r
-               initLogin();\r
-               return;\r
-       }\r
-// flesh the args with the existing hold \r
-       if(holdArgs.editHold) holdArgsFromHold(holdArgs.editHold, holdArgs);\r
-\r
-       hideResultsPage(true);\r
-       holdsDrawWindow();\r
-}\r
-\r
-\r
-// updates the edit window with the existing hold's data \r
-function _holdsUpdateEditHold() {\r
-\r
-       var hold = holdArgs.editHold;\r
-       var qstats = holdArgs.status;\r
-\r
-       var orgsel = $('holds_org_selector');\r
-    var frozenbox = $('holds_frozen_chkbox');\r
-\r
-       setSelector(orgsel, hold.pickup_lib());\r
-\r
-       if( hold.capture_time() || qstats.status > 2 ) {\r
-        frozenbox.disabled = true;\r
-        $('holds_frozen_thaw_input').disabled = true;\r
-        if(qstats.status == 3) {\r
-            // no pickup lib changes while in-transit\r
-                   orgsel.disabled = true;\r
-        } else {\r
-            var orgs = fetchPermOrgs('UPDATE_PICKUP_LIB_FROM_HOLDS_SHELF');\r
-            if(orgs[0] == -1)\r
-                       orgsel.disabled = true;\r
-        }\r
-    } else {\r
-               orgsel.disabled = false;\r
-        frozenbox.disabled = false;\r
-    }\r
-\r
-\r
-       $('holds_submit').onclick = holdsEditHold;\r
-       $('holds_update').onclick = holdsEditHold;\r
-\r
-       if(hold.phone_notify()) {\r
-               $('holds_enable_phone').checked = true;\r
-               $('holds_phone').value = hold.phone_notify();\r
-\r
-       } else {\r
-               $('holds_phone').disabled = true;\r
-               $('holds_enable_phone').checked = false;\r
-       }\r
-\r
-       if(isTrue(hold.email_notify())) {\r
-               $('holds_enable_email').checked = true;\r
-\r
-       } else {\r
-               $('holds_enable_email').checked = false;\r
-       }\r
-\r
-    //$('holds_expire_time').setValue(dojo.date.stamp.fromISOString(hold.expire_time()));\r
-\r
-    /* populate the hold freezing info */\r
-    if(!frozenbox.disabled && isTrue(hold.frozen())) {\r
-        frozenbox.checked = true;\r
-        unHideMe($('hold_frozen_thaw_row'));\r
-        if(hold.thaw_date()) {\r
-            $('holds_frozen_thaw_input').value=dojo.date.stamp.fromISOString(hold.thaw_date());\r
-        } else {\r
-            $('holds_frozen_thaw_input').value='';\r
-        }\r
-    } else {\r
-        frozenbox.checked = false;\r
-        $('holds_frozen_thaw_input').value='';\r
-        hideMe($('hold_frozen_thaw_row'));\r
-    }\r
-}\r
-\r
-function holdsEditHold() {\r
-       var hold = holdsBuildHoldFromWindow();\r
-       if(!hold) return;\r
-       holdsUpdate(hold);\r
-       showCanvas();\r
-       if(holdArgs.onComplete)\r
-               holdArgs.onComplete(hold);\r
-}\r
-\r
-function holdArgsFromHold(hold, oargs) {\r
-       var args = (oargs) ? oargs : {};\r
-       args.type = hold.hold_type();\r
-       var target = hold.target();\r
-\r
-       switch(args.type) {\r
-               case 'M':\r
-                       args.metarecord = target;\r
-                       break;\r
-               case 'T':\r
-                       args.record = target;\r
-                       break;\r
-               case 'V':\r
-                       args.volume = target;\r
-                       break;\r
-               case 'C':\r
-                       args.copy = target;\r
-                       break;\r
-       }\r
-       return args;\r
-}\r
-\r
-function holdFetchObjects(hold, doneCallback) {\r
-       var args = (hold) ? holdArgsFromHold(hold) : holdArgs;\r
-       var type = args.type;\r
-\r
-       if( type == 'C' ) {\r
-               if( args.copyObject ) {\r
-\r
-                       args.copy = args.copyObject.id();\r
-                       args.volume = args.copyObject.call_number();\r
-                       _h_set_vol(args, doneCallback);\r
-\r
-               } else {\r
-                       var creq = new Request(FETCH_COPY, args.copy);\r
-\r
-                       creq.callback(\r
-                               function(r) {\r
-                                       var cp = r.getResultObject();\r
-                                       args.copyObject = cp;\r
-                                       args.volume = args.copyObject.call_number();\r
-                                       _h_set_vol(args, doneCallback);\r
-                               }\r
-                       );\r
-                       creq.send();\r
-               }\r
-       } else {\r
-               if( type == 'V' ) {\r
-                       _h_set_vol(args, doneCallback);\r
-\r
-               } else {\r
-                       if( type == 'T' ) {\r
-                               _h_set_rec(args, doneCallback);\r
-                       } else {\r
-                               _h_set_rec_descriptors(args, doneCallback);\r
-                       }\r
-               }\r
-       }\r
-\r
-       return args;\r
-}\r
-\r
-function _h_set_vol(args, doneCallback) {\r
-\r
-       if( args.volumeObject ) {\r
-               args.volume = args.volumeObject.id();\r
-               args.record = args.volumeObject.record();\r
-               _h_set_rec(args, doneCallback);\r
-\r
-       } else {\r
-\r
-               var vreq = new Request(FETCH_VOLUME, args.volume);\r
-               vreq.callback(\r
-                       function(r) {\r
-                               var vol = r.getResultObject();\r
-                               args.volumeObject = vol;\r
-                               args.record = vol.record();\r
-                               _h_set_rec(args, doneCallback);\r
-                       }\r
-               );\r
-               vreq.send();\r
-       }\r
-}\r
-\r
-function _h_set_rec(args, doneCallback) {\r
-\r
-       if(args.recordObject) \r
-               args.record = args.recordObject.doc_id();\r
-       else \r
-               args.recordObject = findRecord( args.record, 'T' );\r
-       \r
-       if( args.type == 'T' || args.type == 'M' ) \r
-               _h_set_rec_descriptors(args, doneCallback);\r
-       else \r
-               if(doneCallback) doneCallback(args);\r
-}\r
-\r
-\r
-function _h_set_rec_descriptors(args, doneCallback) {\r
-\r
-       // grab the list of record desciptors attached to this records metarecord \r
-       if( ! args.recordDescriptors )  {\r
-               var params = { record: args.record };\r
-\r
-               if( ! args.record ) {\r
-                       if( args.metarecord )\r
-                               params = { metarecord : args.metarecord };\r
-                       else \r
-                               params = { metarecord : args.metarecordObject.doc_id() };\r
-               }\r
-\r
-               var req = new Request(FETCH_MR_DESCRIPTORS, params );\r
-               req.callback(\r
-                       function(r) {\r
-                               var data = r.getResultObject();\r
-                               args.recordDescriptors = data.descriptors;\r
-                               args.metarecord = data.metarecord;\r
-                               if( args.type == 'M' && ! args.metarecordObject) \r
-                                       args.metarecordObject = findRecord(args.metarecord, 'M');       \r
-                                \r
-                               if(doneCallback) doneCallback(args);\r
-                       }\r
-               );\r
-               req.send();\r
-\r
-       } else {\r
-               if(doneCallback) doneCallback(args);\r
-       }\r
-\r
-       return args;\r
-}\r
-\r
-\r
-\r
-function holdsDrawWindow(bool) {\r
-       swapCanvas($('holds_box'));\r
-       $('holds_cancel').onclick = function(){\r
-               hideResultsPage(false);\r
-               hideMe($('holds_box'));\r
-               unHideMe($('canvas_main'));\r
-               //runEvt('common', 'holdUpdateCanceled'), showCanvas() \r
-       };\r
-       $('holds_submit').onclick = function(){holdsPlaceHold(holdsBuildHoldFromWindow())};\r
-       $('holds_update').onclick = function(){holdsPlaceHold(holdsBuildHoldFromWindow())};\r
-       holdFetchObjects(null, \r
-               function(){\r
-                       __holdsDrawWindow();\r
-\r
-                       if(holdArgs.editHold) {\r
-                               //hideMe($('holds_submit'));\r
-                               unHideMe($('holds_update'));\r
-                               var req = new Request(FETCH_HOLD_STATUS, \r
-                                       G.user.session, holdArgs.editHold.id());\r
-                               req.send(true);\r
-                               holdArgs.status = req.result();\r
-                               _holdsUpdateEditHold();\r
-                       }  \r
-               }\r
-       );\r
-}\r
-\r
-function selOrgChange(e) {\r
-       \r
-       $('holds_pickup_lib').innerHTML = this.options[this.selectedIndex].text;\r
-}\r
-\r
-function __holdsDrawWindow() {\r
-\r
-       var rec = holdArgs.recordObject;\r
-       var vol = holdArgs.volumeObject;\r
-       var copy = holdArgs.copyObject;\r
-       var mr = holdArgs.metarecordObject;\r
-\r
-       rec = (rec) ? rec : mr;\r
-\r
-       if(!holdsOrgSelectorBuilt) {\r
-               holdsBuildOrgSelector(null,0);\r
-               holdsOrgSelectorBuilt = true;\r
-               var selector = $('holds_org_selector');\r
-\r
-               /*\r
-               var o_loc = findOrgUnit(getOrigLocation());\r
-               var t = findOrgType(o_loc.ou_type());\r
-               if( t.can_have_users() ) \r
-                       setSelector(selector, o_loc.id());\r
-               else \r
-               */\r
-               selector.onchange = selOrgChange;\r
-               setSelector(selector, holdArgs.recipient.home_ou());\r
-       }\r
-       \r
-       var obj = findOrgUnit(holdArgs.recipient.home_ou());\r
-       $('holds_pickup_lib').innerHTML = obj.name();\r
-\r
-       /*\r
-       if(isXUL()) {\r
-               var dsel = $('holds_depth_selector');\r
-               unHideMe($('holds_depth_selector_row'));\r
-               if(dsel.getElementsByTagName('option').length == 0) {\r
-                       var types = globalOrgTypes;\r
-                       var depth = findOrgDepth(G.user.ws_ou());\r
-                       iterate(types, \r
-                               function(t) {\r
-                                       if(t.depth() > depth) return;\r
-                                       insertSelectorVal(dsel, -1, t.opac_label(), t.depth());\r
-                               }\r
-                       );\r
-               }\r
-       }\r
-       */\r
-\r
-       appendClear($('holds_recipient'), text(\r
-               holdArgs.recipient.family_name() + ', ' +  \r
-                       holdArgs.recipient.first_given_name()));\r
-       appendClear($('holds_title'), text(rec.title()));\r
-       appendClear($('holds_author'), text(rec.author()));\r
-\r
-       if( holdArgs.type == 'V' || holdArgs.type == 'C' ) {\r
-\r
-               unHideMe($('holds_type_row'));\r
-               unHideMe($('holds_cn_row'));\r
-               appendClear($('holds_cn'), text(holdArgs.volumeObject.label()));\r
-\r
-               if( holdArgs.type == 'V'  ) {\r
-                       unHideMe($('holds_is_cn'));\r
-                       hideMe($('holds_is_copy'));\r
-\r
-               } else {\r
-                       hideMe($('holds_is_cn'));\r
-                       unHideMe($('holds_is_copy'));\r
-                       unHideMe($('holds_copy_row'));\r
-                       appendClear($('holds_copy'), text(holdArgs.copyObject.barcode()));\r
-               }\r
-\r
-       } else {\r
-               hideMe($('holds_type_row'));\r
-               hideMe($('holds_copy_row'));\r
-               hideMe($('holds_cn_row'));\r
-       }\r
-\r
-       removeChildren($('holds_format'));\r
-\r
-       var mods_formats = rec.types_of_resource();\r
-       var formats;\r
-\r
-       if(holdArgs.recordDescriptors)\r
-               formats = holdArgs.recordDescriptors[0].item_type();\r
-\r
-       if( holdArgs.type == 'T' ) {\r
-               var desc = grep( holdArgs.recordDescriptors,\r
-                       function(i) {\r
-                               return (i.record() == holdArgs.record); \r
-                       }\r
-               );\r
-               formats = desc[0].item_type();\r
-       }\r
-\r
-       if( holdArgs.type == 'M' ) {\r
-               var data = holdsParseMRFormats(holdArgs.editHold.holdable_formats());\r
-               mods_formats = data.mods_formats;\r
-               formats = data.formats;\r
-       }\r
-\r
-\r
-       for( var i in mods_formats ) {\r
-               var res = mods_formats[i];\r
-               var img = elem("img");\r
-               setResourcePic(img, res);\r
-               $('holds_format').appendChild(img);\r
-               if(formats)\r
-                       $('holds_format').appendChild(text(' '+ MARCTypeToFriendly(formats[i]) +' '));\r
-               else\r
-                       $('holds_format').appendChild(text(' '+ mods_formats[i] +' '));\r
-               $('holds_format').appendChild(elem('br'));\r
-       }\r
-\r
-\r
-       $('holds_phone').value = (holdArgs.recipient.day_phone())?holdArgs.recipient.day_phone():"";\r
-       appendClear( $('holds_email'), text(holdArgs.recipient.email()));\r
-\r
-       var pref = holdArgs.recipient.prefs[PREF_HOLD_NOTIFY];\r
-\r
-       if(pref) {\r
-               if( ! pref.match(/email/i) ) {\r
-                       $('holds_enable_email').checked = false;\r
-               } else {\r
-                       $('holds_enable_email').checked = true;\r
-               }\r
-\r
-               if( ! pref.match(/phone/i) ) {\r
-                       $('holds_phone').disabled = true;\r
-                       $('holds_enable_phone').checked = false;\r
-               } else {\r
-                       $('holds_phone').disabled = false;\r
-                       $('holds_enable_phone').checked = true;\r
-               }\r
-       }\r
-\r
-    if(!holdArgs.recipient.email()) {\r
-               $('holds_enable_email').checked = false;        \r
-               $('holds_enable_email').disabled = true;\r
-        var message;\r
-        if(isXUL()) {\r
-            message = noEmailMessageXUL.cloneNode(true);\r
-               appendClear($('holds_email'), message);\r
-        } else {\r
-            message = noEmailMessage.cloneNode(true);\r
-               appendClear($('holds_email'), message);\r
-            $('holds.no_email.my_account').setAttribute('href', buildOPACLink({page:MYOPAC},null,true));\r
-        }\r
-        unHideMe(message);\r
-    }\r
-\r
-       if(!$('holds_phone').value) \r
-               $('holds_enable_phone').checked = false;        \r
-\r
-       appendClear($('holds_physical_desc'), text(rec.physical_description()));\r
-\r
-       if(holdArgs.type == 'M') hideMe($('hold_physical_desc_row'));\r
-\r
-       holdsSetFormatSelector();\r
-\r
-    $('holds_frozen_chkbox').checked = false;\r
-    hideMe($('hold_frozen_thaw_row'));\r
-\r
-    var interval = fetchOrgSettingDefault(holdArgs.recipient.home_ou(), 'circ.hold_expire_interval');\r
-    var secs = 0;\r
-    if(interval) {\r
-        secs = interval_to_seconds(interval);\r
-        var expire = new Date();\r
-        expire.setTime(expire.getTime() + Number(secs + '000'));\r
-        if(dijit.byId('holds_expire_time')) dijit.byId('holds_expire_time').setValue(expire);\r
-    }\r
-}\r
-\r
-function holdsParseMRFormats(str) {\r
-       var data = str.split(/-/);      \r
-\r
-       var formats = [];\r
-       var mods_formats = [];\r
-\r
-       for( var i = 0; i < data[0].length; i++ ) {\r
-               formats.push( data[0].charAt(i) );\r
-               mods_formats.push( MARCFormatToMods( formats[i] ) );\r
-       }\r
-       \r
-       formats = uniquify(formats);\r
-       mods_formats = uniquify(mods_formats);\r
-\r
-       return {\r
-               formats                 : formats,\r
-               mods_formats    : mods_formats,\r
-               lang                            : data[2],\r
-               largeprint              : data[1]\r
-       };\r
-}\r
-\r
-\r
-function holdsSetFormatSelector() {\r
-       var type = holdArgs.type;\r
-       if( type == 'C' || type == 'V' || holdArgs.editHold ) return;\r
-\r
-       var data                                = holdsGetFormats();\r
-       var avail_formats       = data.avail_formats;\r
-       var sel_formats = data.sel_formats;\r
-       holdArgs.language = data.lang;\r
-\r
-       unHideMe($('holds_alt_formats_row_extras'));\r
-       var selector = $('hold_alt_form_selector');\r
-\r
-       for( var i = 0; i < avail_formats.length; i++ ) {\r
-               var form = avail_formats[i];\r
-               unHideMe(findSelectorOptByValue(selector, form));\r
-       }\r
-}\r
-\r
-\r
-function holdsGetFormats() {\r
-\r
-       var lang;\r
-       var formats = [];\r
-       var sformats = []; // selected formats \r
-\r
-       var type = holdArgs.type;\r
-       var desc = holdArgs.recordDescriptors;\r
-       var rec = holdArgs.record;\r
-       var mrec = holdArgs.metarecord;\r
-\r
-       if( type == 'T' ) {\r
-\r
-               for( var i = 0; i < desc.length; i++ ) {\r
-                       var d = desc[i];\r
-                       if( d.record() == holdArgs.record ) {\r
-                               lang = d.item_lang();\r
-                               holdArgs.myFormat =  _t_f_2_format(d.item_type(), d.item_form());\r
-                               sformats.push(holdArgs.myFormat);\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-\r
-       for( var i = 0; i < desc.length; i++ ) {\r
-               var d = desc[i];\r
-               if( d.item_lang() != lang ) continue;\r
-               formats.push( _t_f_2_format(d.item_type(), d.item_form()));\r
-       }\r
-\r
-       formats = uniquify(formats);\r
-\r
-       return {\r
-               lang : lang,\r
-               avail_formats : formats, \r
-               sel_formats : sformats\r
-       };\r
-}\r
-\r
-\r
-\r
-function _t_f_2_format(type, form) {\r
-       if( form == 'd' ) return 'at-d';\r
-       return (type == 'a' || type == 't') ? 'at' : \r
-               ( type == 'i' || type == 'g' || type == 'j' ) ? type : null;\r
-}\r
-\r
-function holdsSetSelectedFormats() {\r
-\r
-       var cn = $('holds_alt_formats_row').className;\r
-       if( cn && cn.match(/hide_me/) ) return;\r
-\r
-       var selector = $('hold_alt_form_selector');\r
-       var vals = getSelectedList(selector);\r
-\r
-       if(vals.length == 0) return;\r
-\r
-       var fstring = "";\r
-\r
-       if( contains(vals, 'at-d') ) {\r
-               if( contains(vals, 'at') )\r
-                       fstring = 'at';\r
-               else \r
-                       fstring = 'at-d';\r
-       } else {\r
-               if( contains(vals, 'at') )\r
-                       fstring = 'at';\r
-       }\r
-\r
-       for( var i = 0; i < vals.length; i++ ) {\r
-               var val = vals[i];\r
-               if( !val.match(/at/) ) fstring = val + fstring;\r
-       }\r
-\r
-       if( holdArgs.language ) {\r
-               if( fstring.match(/-/) )\r
-                       fstring = fstring + '-' + holdArgs.language;\r
-               else\r
-                       fstring = fstring + '--' + holdArgs.language;\r
-       }\r
-       return fstring;\r
-}\r
-\r
-\r
-function holdsCheckPossibility(pickuplib, hold, recurse) {\r
-\r
-       var args = { \r
-               titleid : holdArgs.record,\r
-               volume_id : holdArgs.volume,\r
-               copy_id : holdArgs.copy,\r
-               hold_type : holdArgs.type,\r
-               patronid : holdArgs.recipient.id(),\r
-               depth : 0, \r
-               pickup_lib : pickuplib \r
-       };\r
-\r
-       if(recurse) {\r
-               /* if we're calling create again (recursing), \r
-                       we know that the hold possibility check already succeeded */\r
-               holdHandleCreateResponse({_recurse:true, _hold:hold}, true );\r
-\r
-       } else {\r
-               _debug("hold possible args = "+js2JSON(args));\r
-       \r
-               var req = new Request(CHECK_HOLD_POSSIBLE, G.user.session, args );\r
-       \r
-               req.request.alertEvent = false;\r
-               req.request._hold = hold;\r
-               req.request._recurse = recurse;\r
-               req.callback(holdHandleCreateResponse);\r
-               req.send();\r
-       }\r
-}\r
-\r
-\r
-function holdsBuildOrgSelector(node, sel) {\r
-\r
-       if(!node) node = globalOrgTree;\r
-    if(!isTrue(node.opac_visible())) return;\r
-\r
-       var selector = sel?sel:$('holds_org_selector');\r
-       var index = selector.options.length;\r
-\r
-       var type = findOrgType(node.ou_type());\r
-       var indent = type.depth() - 1;\r
-       var opt = setSelectorVal( selector, index, node.name(), node.id(), null, indent );\r
-       if(!type.can_have_users()) {\r
-               opt.disabled = true;\r
-               addCSSClass(opt, 'disabled_option');\r
-       }\r
-       \r
-       for( var i in node.children() ) {\r
-               var child = node.children()[i];\r
-               if(child) holdsBuildOrgSelector(child);\r
-       }\r
-}\r
-\r
-function holdsBuildHoldFromWindow() {\r
-\r
-       var org = getSelectorVal($('holds_org_selector'));\r
-       var node = findOrgUnit(org);\r
-       var ntype = findOrgType(node.ou_type());\r
-       if(!ntype.can_have_users()) {\r
-               alertId('holds_pick_good_org');\r
-               return;\r
-       }\r
-\r
-       var hold = new ahr();\r
-       if(holdArgs.editHold) {\r
-               hold = holdArgs.editHold;\r
-               holdArgs.editHold = null;\r
-       }\r
-\r
-       if( $('holds_enable_phone').checked ) {\r
-               var phone = $('holds_phone').value;\r
-               if( !phone || !phone.match(REGEX_PHONE) ) {\r
-                       alert($('holds_bad_phone').innerHTML);\r
-                       return null;\r
-               }\r
-               hold.phone_notify(phone);\r
-\r
-       } else {\r
-               hold.phone_notify("");\r
-       }\r
-\r
-       if( $('holds_enable_email').checked ) \r
-               hold.email_notify(1);\r
-       else\r
-               hold.email_notify(0);\r
-\r
-       var target;\r
-\r
-       switch(holdArgs.type) {\r
-               case 'M':\r
-                       target = holdArgs.metarecord; break;\r
-               case 'T':\r
-                       target = holdArgs.record; break;\r
-               case 'V':\r
-                       target = holdArgs.volume; break;\r
-               case 'C':\r
-                       target = holdArgs.copy; break;\r
-       }\r
-\r
-\r
-\r
-       hold.pickup_lib(org); \r
-       //hold.request_lib(org); \r
-       hold.requestor(holdArgs.requestor.id());\r
-       hold.usr(holdArgs.recipient.id());\r
-       hold.target(target);\r
-       hold.hold_type(holdArgs.type);\r
-\r
-    try{var expDate = dijit.byId('holds_expire_time').getValue();} catch(e){}\r
-    if(expDate) {\r
-        var expireDate = dojo.date.stamp.toISOString(expDate);\r
-        expireDate = holdsVerifyThawDate(expireDate); \r
-        if(expireDate)\r
-            hold.expire_time(expireDate);\r
-        else \r
-            return;\r
-    }\r
-\r
-    // see if this hold should be frozen and for how long\r
-    if($('holds_frozen_chkbox').checked) {\r
-        hold.frozen('t');\r
-        unHideMe($('hold_frozen_thaw_row'));\r
-        thawDate = dojo.date.stamp.toISOString(dijit.byId('holds_frozen_thaw_input').getValue());\r
-        if(thawDate) {\r
-            thawDate = holdsVerifyThawDate(thawDate); \r
-            if(thawDate) \r
-                hold.thaw_date(thawDate);\r
-            else\r
-                return;\r
-        } else {\r
-            hold.thaw_date(null);\r
-        }\r
-    } else {\r
-        hold.frozen('f');\r
-        hold.thaw_date(null);\r
-    }\r
-\r
-       //check for alternate hold formats \r
-       var fstring = holdsSetSelectedFormats();\r
-       if(fstring) { \r
-               hold.hold_type('M'); \r
-               hold.holdable_formats(fstring);\r
-               hold.target(holdArgs.metarecord);\r
-       }\r
-       return hold;\r
-}\r
-       \r
-function holdsPlaceHold(hold, recurse) {\r
-       if(!hold) return;\r
-       swapCanvas($('check_holds_box'));\r
-       holdsCheckPossibility(hold.pickup_lib(), hold, recurse);\r
-}\r
-\r
-\r
-function holdHandleCreateResponse(r, recurse) {\r
-\r
-       if(!recurse) {\r
-               var res = r.getResultObject();\r
-               if(checkILSEvent(res) || res.success != 1) {\r
-                       if(res.success != 1) {\r
-                               alert($('hold_not_allowed').innerHTML+(!res.last_event.desc?"":"\n\nHold failure description:\n"+res.last_event.desc));\r
-                       } else {\r
-                               if( res.textcode == 'PATRON_BARRED' ) {\r
-                                       alertId('hold_failed_patron_barred');\r
-                               } else {\r
-                                       alert($('hold_not_allowed').innerHTML+(!res.last_event.desc?"":"\n\nHold failure description:\n"+res.last_event.desc));\r
-                               }\r
-                       }\r
-                       swapCanvas($('holds_box'));\r
-                       return;\r
-               }\r
-        r._hold.selection_depth(res.depth);\r
-       }       \r
-\r
-       holdCreateHold(r._recurse, r._hold);\r
-       hideResultsPage(false);\r
-}\r
-\r
-\r
-function holdCreateHold( recurse, hold ) {\r
-       var method = CREATE_HOLD;\r
-       if(recurse) method = CREATE_HOLD_OVERRIDE;\r
-       var req = new Request( method, holdArgs.requestor.session, hold );\r
-       req.request.alertEvent = false;\r
-       req.send(true);\r
-       var res = req.result();\r
-       holdProcessResult(hold, res, recurse);\r
-\r
-       showCanvas();\r
-\r
-       runEvt('common', 'holdUpdated');\r
-}\r
-\r
-\r
-function holdProcessResult( hold, res, recurse ) {\r
-\r
-       if( res && res > -1 ) {\r
-               alert($('holds_success').innerHTML);\r
-               holdArgs = null;\r
-        if(isXUL() && typeof xulG.opac_hold_placed == 'function')\r
-            xulG.opac_hold_placed(res);\r
-\r
-       } else {\r
-\r
-               if( recurse ) {\r
-                       alert($('holds_failure').innerHTML);\r
-                       return;\r
-               }\r
-\r
-               if( grep(res, function(e) { return (e.textcode == 'HOLD_EXISTS'); }) ) {\r
-                       if( fetchPermOrgs('HOLD_EXISTS.override')[0] != -1 ) {\r
-                               if( confirm($('hold_dup_exists_override').innerHTML) ) {\r
-                                       return holdsPlaceHold(hold, true);\r
-                               }\r
-                return;\r
-\r
-                       } else {\r
-                               return alert($('hold_dup_exists').innerHTML);\r
-                       }\r
-               }\r
-\r
-               if( grep(res, function(e) { return (e.textcode == 'HOLD_ITEM_CHECKED_OUT'); }) ) {\r
-                       if( fetchPermOrgs('HOLD_ITEM_CHECKED_OUT.override')[0] != -1 ) {\r
-                               if( confirm($('hold_checked_out_override').innerHTML) ) {\r
-                                       return holdsPlaceHold(hold, true);\r
-                               }\r
-                return;\r
-\r
-                       } else {\r
-                               return alert($('hold_checked_out').innerHTML);\r
-                       }\r
-               }\r
-\r
-\r
-               alert($('holds_failure').innerHTML);\r
-       }\r
-}\r
-\r
-\r
-function holdsCancel(holdid, user) {\r
-       if(!user) user = G.user;\r
-       var req = new Request(CANCEL_HOLD, user.session, holdid, /* Patron via OPAC */ 6);\r
-       req.send(true);\r
-       return req.result();\r
-       runEvt('common', 'holdUpdated');\r
-}\r
-\r
-function holdsUpdate(hold, user) {\r
-       if(!user) user = G.user;\r
-       var req = new Request(UPDATE_HOLD, user.session, hold);\r
-       req.send(true);\r
-       var x = req.result(); // cause an exception if there is one \r
-       runEvt('common', 'holdUpdated');\r
-}\r
-\r
-/* verify that the thaw date is valid and after today */\r
-function holdsVerifyThawDate(dateString, isGreater) {\r
-    thawDate = dojo.date.stamp.fromISOString(dateString);\r
-    if(thawDate) {\r
-        if(isGreater) {\r
-            if(dojo.date.compare(thawDate) > 0) {\r
-                return dojo.date.stamp.toISOString(thawDate);\r
-            }\r
-        } else {\r
-            return dojo.date.stamp.toISOString(thawDate);\r
-        }\r
-    }\r
-    return null;\r
-}\r
-\r
-function holdsVerifyThawDateUI(element) {\r
-    value = dojo.date.stamp.toISOString(dijit.byId(element).getValue());\r
-\r
-    if(!value) {\r
-        removeCSSClass($(element), 'invalid_field');\r
-        return;\r
-    }\r
-\r
-    if(!holdsVerifyThawDate(value, true)) {\r
-        addCSSClass($(element), 'invalid_field');\r
-    } else {\r
-        removeCSSClass($(element), 'invalid_field');\r
-    }\r
-}\r
-\r
-\r
-function editHold(h) {\r
-       var row = $('myopac_holds_row_'+h);\r
-       var objs = [];\r
-       \r
-       objs['hold_pickup_lib'] = $n(row,'hold_pickup_lib');\r
-       objs['hold_pickup_lib_sel'] = $n(row,'hold_pickup_lib_sel');\r
-       objs['hold_active'] = $n(row,'hold_active');\r
-       objs['activate_label'] = $n(row,'activate_label');\r
-       objs['activate_date'] = $n(row,'activate_date');\r
-       objs['activate_box'] = $n(row,'activate_box');\r
-       objs['hold_expires_label'] = $n(row,'hold_expires_label');\r
-       objs['hold_expires'] = $n(row,'hold_expires');\r
-       objs['hold_expires_box'] = $n(row,'hold_expires_box');\r
-       objs['hold_active_sel'] = $n(row,'hold_active_sel');\r
-       objs['hold_edit_link'] = $n(row,'hold_edit_link');\r
-       objs['hold_save_link'] = $n(row,'hold_save_link');\r
-       objs['hold_cancel_link'] = $n(row,'hold_cancel_link');\r
-               \r
-       for(var i in objs) unHideMe(objs[i]);\r
-       \r
-       hideMe(objs['activate_date']);\r
-       hideMe(objs['hold_active']);\r
-       hideMe(objs['hold_expires']);\r
-       hideMe(objs['hold_pickup_lib']);\r
-       hideMe(objs['hold_edit_link']);\r
-       row.orig_bgcolor = row.style.background;\r
-       row.style.background= "#fcdf89";\r
-}\r
-\r
-function cancelHold(h) {\r
-       var row = $('myopac_holds_row_'+h);\r
-       var objs = [];\r
-       \r
-       objs['hold_pickup_lib'] = $n(row,'hold_pickup_lib');\r
-       objs['hold_pickup_lib_sel'] = $n(row,'hold_pickup_lib_sel');\r
-       objs['hold_active'] = $n(row,'hold_active');\r
-       objs['activate_label'] = $n(row,'activate_label');\r
-       objs['activate_date'] = $n(row,'activate_date');\r
-       objs['activate_box'] = $n(row,'activate_box');\r
-       objs['hold_expires_label'] = $n(row,'hold_expires_label');\r
-       objs['hold_expires'] = $n(row,'hold_expires');\r
-       objs['hold_expires_box'] = $n(row,'hold_expires_box');\r
-       objs['hold_active_sel'] = $n(row,'hold_active_sel');\r
-       objs['hold_edit_link'] = $n(row,'hold_edit_link');\r
-       objs['hold_save_link'] = $n(row,'hold_save_link');\r
-       objs['hold_cancel_link'] = $n(row,'hold_cancel_link');\r
-               \r
-       for(var i in objs) hideMe(objs[i]);\r
-       \r
-       unHideMe(objs['hold_edit_link']);\r
-       unHideMe(objs['hold_pickup_lib']);\r
-       unHideMe(objs['holds_active']);\r
-       unHideMe(objs['hold_active']);\r
-       unHideMe(objs['activate_date']);\r
-       unHideMe(objs['hold_expires']);\r
-       if(objs['hold_expires'].innerHTML) unHideMe(objs['hold_expires_label']);\r
-       if(objs['activate_date'].innerHTML) unHideMe(objs['activate_label']);\r
-       row.style.background=row.orig_bgcolor;\r
-}\r
-\r
-function saveHold(h) {\r
-       var row = $('myopac_holds_row_'+h);\r
-       var hold = holdsCache[holdsCacheMap[h]].hold;\r
-       \r
-       var activateDataBox = $n(row,'activate_box');\r
-       var expireDateBox = $n(row,'hold_expires_box');\r
-       var pickupLibSel = $n(row,'hold_pickup_lib_sel');\r
-       var activateSel = $n(row,'hold_active_sel');\r
-       var expireTime = dojo.date.stamp.toISOString(new Date(Date.parse(expireDateBox.value)),null);\r
-       var activateTime = dojo.date.stamp.toISOString(new Date(Date.parse(activateDataBox.value)),null);\r
-       if(parseInt(expireTime)) hold.expire_time(expireTime);\r
-       if(parseInt(activateTime)) hold.thaw_date(activateTime);\r
-       hold.frozen(activateSel.options[activateSel.selectedIndex].value);\r
-       hold.pickup_lib(pickupLibSel.options[pickupLibSel.selectedIndex].value)\r
-       \r
-       fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.hold.update'],{params:[G.user.session,hold],oncomplete:refreshHold});\r
-       row.style.background= isTrue(hold.frozen())?"#e5e5e5":"";\r
-       row.orig_bgcolor=row.style.background;\r
-}\r
-\r
-function updateHoldInfo(holdid,holdrow) {\r
-       var h = holdsCache[holdsCacheMap[holdid]].hold;\r
-       if(!h) return;\r
-       var row = holdrow?holdrow:$('myopac_holds_row_'+holdid);\r
-       if(!row) return;\r
-       \r
-       $n(row,'hold_pickup_lib').innerHTML = findOrgUnit(h.pickup_lib()).name();\r
-       $n(row,'hold_active').innerHTML = isTrue(h.frozen())?"Suspended":"Active";\r
-       \r
-       if(h.thaw_date()) {\r
-               var d = dojo.date.stamp.fromISOString(h.thaw_date());\r
-               $n(row, 'activate_date').innerHTML = dojo.date.locale.format(d, {selector: 'date', fullYear: true});\r
-               unHideMe($n(row,'activate_label'));\r
-               $n(row,'activate_box').value = dojo.date.locale.format(d, {selector:'date', fullYear: true});\r
-       }\r
-       \r
-       if(h.expire_time()) {\r
-               var exp_date = dojo.date.stamp.fromISOString(h.expire_time());\r
-               $n(row, 'hold_expires').innerHTML = dojo.date.locale.format(exp_date, {selector:'date', fullYear: true});\r
-               unHideMe($n(row,'hold_expires_label'));\r
-               $n(row,'hold_expires_box').value = dojo.date.locale.format(exp_date, {selector:'date', fullYear: true});\r
-       }\r
-}\r
-\r
-function refreshHold(r) {\r
-       var hold = r.recv().content();\r
-       if(!parseInt(hold)) return;\r
-       updateHoldInfo(hold);\r
-       cancelHold(hold);\r
-}\r
+var holdsOrgSelectorBuilt = false;
+var holdArgs;
+
+/* 
+note: metarecord holds have a holdable_formats field that contains
+item_type(s)-item_forms(s)-language
+item_form and language are optional - if language exist and no 
+item_form is specified, use item_type(s)--language
+*/
+
+var noEmailMessage;
+var noEmailMessageXUL;
+
+function hideResultsPage(bool) {
+       if(!bool) {
+               unHideMe($('result_header'));
+               unHideMe($('tehSideBar'));
+               unHideMe($('facetSidebarContainer'));
+               unHideMe($('sidebar_div'));
+               unHideMe($('statusbar'));
+               unHideMe($('tips'));
+               unHideMe($('result_table_div'));
+               unHideMe($('results_header_nav1'));
+               unHideMe($('result_info_2'));
+               unHideMe($('results_header_bar'));
+       } else {
+               hideMe($('result_header'));
+               hideMe($('tehSideBar'));
+               hideMe($('facetSidebarContainer'));
+               hideMe($('sidebar_div'));
+               hideMe($('statusbar'));
+               hideMe($('tips'));
+               hideMe($('result_table_div'));
+               hideMe($('anonListTable'));
+               hideMe($('results_header_nav1'));
+               hideMe($('result_info_2'));
+               hideMe($('results_header_bar'));
+       }
+}
+
+function holdsHandleStaff() {
+
+    // if we know the recipient's barcode, use it
+    if(xulG.patron_barcode) return _holdsHandleStaff();
+
+       swapCanvas($('xulholds_box'));
+       $('xul_recipient_barcode').focus();
+       $('xul_recipient_barcode').onkeypress = function(evt) 
+               {if(userPressedEnter(evt)) { _holdsHandleStaff(); } };
+       $('xul_recipient_barcode_submit').onclick = _holdsHandleStaff;
+       $('xul_recipient_me').onclick = _holdsHandleStaffMe;
+
+       $('xul_recipient_barcode').onkeyup = function(evt) {
+        if($('xul_recipient_barcode').value == '') 
+            $('xul_recipient_me').disabled = false;
+        else
+            $('xul_recipient_me').disabled = true;
+    };
+}
+
+$('holds_frozen_thaw_input').onchange = function(){holdsVerifyThawDateUI('holds_frozen_thaw_input');}
+$('holds_frozen_thaw_input').onkeyup = function(){holdsVerifyThawDateUI('holds_frozen_thaw_input');}
+
+function _holdsHandleStaffMe() {
+       holdArgs.recipient = G.user;
+       holdsDrawEditor();
+}
+
+function _holdsHandleStaff() {
+       var barcode = xulG.patron_barcode || $('xul_recipient_barcode').value;
+       var user = grabUserByBarcode( G.user.session, barcode );
+
+       var evt;
+       if(evt = checkILSEvent(user)) {
+               alertILSEvent(user);
+               return;
+       }
+
+       if(!barcode || !user) {
+               alertId('holds_invalid_recipient', barcode);
+               return
+       }
+
+       grabUserPrefs(user);
+
+       holdArgs.recipient = user;
+       holdsDrawEditor();
+}
+
+
+
+/** args:
+  * record, volume, copy (ids)
+  * request, recipient, editHold (objects)
+  */
+
+function holdsDrawEditor(args) {
+       holdArgs = (args) ? args : holdArgs;
+
+    if(!noEmailMessage) noEmailMessage = $('holds_email').removeChild($('holds.no_email'));
+    if(!noEmailMessageXUL) noEmailMessageXUL = $('holds_email').removeChild($('holds.no_email.xul'));
+
+       if(isXUL() && holdArgs.recipient == null && holdArgs.editHold == null) {
+               holdsHandleStaff();
+               return;
+       }
+
+       if(!holdArgs.recipient) holdArgs.recipient = G.user;
+       if(!holdArgs.requestor) holdArgs.requestor = G.user;
+
+       if(!(holdArgs.requestor && holdArgs.requestor.session)) {
+               /*
+               alert("Please login first before placing a hold");
+               setCacheValue('returnURL',{href:window.location.href, record:holdArgs.record, type:holdArgs.type});
+               goTo(buildOPACLink({page:MYOPAC}, false, true));
+               return;
+               */
+               detachAllEvt('common','locationChanged');
+               attachEvt('common','loggedIn', holdsDrawEditor);
+               initLogin();
+               return;
+       }
+// flesh the args with the existing hold 
+       if(holdArgs.editHold) holdArgsFromHold(holdArgs.editHold, holdArgs);
+
+       hideResultsPage(true);
+       holdsDrawWindow();
+}
+
+
+// updates the edit window with the existing hold's data 
+function _holdsUpdateEditHold() {
+
+       var hold = holdArgs.editHold;
+       var qstats = holdArgs.status;
+
+       var orgsel = $('holds_org_selector');
+    var frozenbox = $('holds_frozen_chkbox');
+
+       setSelector(orgsel, hold.pickup_lib());
+
+       if( hold.capture_time() || qstats.status > 2 ) {
+        frozenbox.disabled = true;
+        $('holds_frozen_thaw_input').disabled = true;
+        if(qstats.status == 3) {
+            // no pickup lib changes while in-transit
+                   orgsel.disabled = true;
+        } else {
+            var orgs = fetchPermOrgs('UPDATE_PICKUP_LIB_FROM_HOLDS_SHELF');
+            if(orgs[0] == -1)
+                       orgsel.disabled = true;
+        }
+    } else {
+               orgsel.disabled = false;
+        frozenbox.disabled = false;
+    }
+
+
+       $('holds_submit').onclick = holdsEditHold;
+       $('holds_update').onclick = holdsEditHold;
+
+       if(hold.phone_notify()) {
+               $('holds_enable_phone').checked = true;
+               $('holds_phone').value = hold.phone_notify();
+
+       } else {
+               $('holds_phone').disabled = true;
+               $('holds_enable_phone').checked = false;
+       }
+
+       if(isTrue(hold.email_notify())) {
+               $('holds_enable_email').checked = true;
+
+       } else {
+               $('holds_enable_email').checked = false;
+       }
+
+    //$('holds_expire_time').setValue(dojo.date.stamp.fromISOString(hold.expire_time()));
+
+    /* populate the hold freezing info */
+    if(!frozenbox.disabled && isTrue(hold.frozen())) {
+        frozenbox.checked = true;
+        unHideMe($('hold_frozen_thaw_row'));
+        if(hold.thaw_date()) {
+            $('holds_frozen_thaw_input').value=dojo.date.stamp.fromISOString(hold.thaw_date());
+        } else {
+            $('holds_frozen_thaw_input').value='';
+        }
+    } else {
+        frozenbox.checked = false;
+        $('holds_frozen_thaw_input').value='';
+        hideMe($('hold_frozen_thaw_row'));
+    }
+}
+
+function holdsEditHold() {
+       var hold = holdsBuildHoldFromWindow();
+       if(!hold) return;
+       holdsUpdate(hold);
+       showCanvas();
+       if(holdArgs.onComplete)
+               holdArgs.onComplete(hold);
+}
+
+function holdArgsFromHold(hold, oargs) {
+       var args = (oargs) ? oargs : {};
+       args.type = hold.hold_type();
+       var target = hold.target();
+
+       switch(args.type) {
+               case 'M':
+                       args.metarecord = target;
+                       break;
+               case 'T':
+                       args.record = target;
+                       break;
+               case 'V':
+                       args.volume = target;
+                       break;
+               case 'C':
+                       args.copy = target;
+                       break;
+       }
+       return args;
+}
+
+function holdFetchObjects(hold, doneCallback) {
+       var args = (hold) ? holdArgsFromHold(hold) : holdArgs;
+       var type = args.type;
+
+       if( type == 'C' ) {
+               if( args.copyObject ) {
+
+                       args.copy = args.copyObject.id();
+                       args.volume = args.copyObject.call_number();
+                       _h_set_vol(args, doneCallback);
+
+               } else {
+                       var creq = new Request(FETCH_COPY, args.copy);
+
+                       creq.callback(
+                               function(r) {
+                                       var cp = r.getResultObject();
+                                       args.copyObject = cp;
+                                       args.volume = args.copyObject.call_number();
+                                       _h_set_vol(args, doneCallback);
+                               }
+                       );
+                       creq.send();
+               }
+       } else {
+               if( type == 'V' ) {
+                       _h_set_vol(args, doneCallback);
+
+               } else {
+                       if( type == 'T' ) {
+                               _h_set_rec(args, doneCallback);
+                       } else {
+                               _h_set_rec_descriptors(args, doneCallback);
+                       }
+               }
+       }
+
+       return args;
+}
+
+function _h_set_vol(args, doneCallback) {
+
+       if( args.volumeObject ) {
+               args.volume = args.volumeObject.id();
+               args.record = args.volumeObject.record();
+               _h_set_rec(args, doneCallback);
+
+       } else {
+
+               var vreq = new Request(FETCH_VOLUME, args.volume);
+               vreq.callback(
+                       function(r) {
+                               var vol = r.getResultObject();
+                               args.volumeObject = vol;
+                               args.record = vol.record();
+                               _h_set_rec(args, doneCallback);
+                       }
+               );
+               vreq.send();
+       }
+}
+
+function _h_set_rec(args, doneCallback) {
+
+       if(args.recordObject) 
+               args.record = args.recordObject.doc_id();
+       else 
+               args.recordObject = findRecord( args.record, 'T' );
+       
+       if( args.type == 'T' || args.type == 'M' ) 
+               _h_set_rec_descriptors(args, doneCallback);
+       else 
+               if(doneCallback) doneCallback(args);
+}
+
+
+function _h_set_rec_descriptors(args, doneCallback) {
+
+       // grab the list of record desciptors attached to this records metarecord 
+       if( ! args.recordDescriptors )  {
+               var params = { record: args.record };
+
+               if( ! args.record ) {
+                       if( args.metarecord )
+                               params = { metarecord : args.metarecord };
+                       else 
+                               params = { metarecord : args.metarecordObject.doc_id() };
+               }
+
+               var req = new Request(FETCH_MR_DESCRIPTORS, params );
+               req.callback(
+                       function(r) {
+                               var data = r.getResultObject();
+                               args.recordDescriptors = data.descriptors;
+                               args.metarecord = data.metarecord;
+                               if( args.type == 'M' && ! args.metarecordObject) 
+                                       args.metarecordObject = findRecord(args.metarecord, 'M');       
+                                
+                               if(doneCallback) doneCallback(args);
+                       }
+               );
+               req.send();
+
+       } else {
+               if(doneCallback) doneCallback(args);
+       }
+
+       return args;
+}
+
+
+
+function holdsDrawWindow(bool) {
+       swapCanvas($('holds_box'));
+       $('holds_cancel').onclick = function(){
+               hideResultsPage(false);
+               hideMe($('holds_box'));
+               unHideMe($('canvas_main'));
+               //runEvt('common', 'holdUpdateCanceled'), showCanvas() 
+       };
+       $('holds_submit').onclick = function(){holdsPlaceHold(holdsBuildHoldFromWindow())};
+       $('holds_update').onclick = function(){holdsPlaceHold(holdsBuildHoldFromWindow())};
+       holdFetchObjects(null, 
+               function(){
+                       __holdsDrawWindow();
+
+                       if(holdArgs.editHold) {
+                               //hideMe($('holds_submit'));
+                               unHideMe($('holds_update'));
+                               var req = new Request(FETCH_HOLD_STATUS, 
+                                       G.user.session, holdArgs.editHold.id());
+                               req.send(true);
+                               holdArgs.status = req.result();
+                               _holdsUpdateEditHold();
+                       }  
+               }
+       );
+}
+
+function selOrgChange(e) {
+       
+       $('holds_pickup_lib').innerHTML = this.options[this.selectedIndex].text;
+}
+
+function __holdsDrawWindow() {
+
+       var rec = holdArgs.recordObject;
+       var vol = holdArgs.volumeObject;
+       var copy = holdArgs.copyObject;
+       var mr = holdArgs.metarecordObject;
+
+       rec = (rec) ? rec : mr;
+
+       if(!holdsOrgSelectorBuilt) {
+               holdsBuildOrgSelector(null,0);
+               holdsOrgSelectorBuilt = true;
+               var selector = $('holds_org_selector');
+
+               /*
+               var o_loc = findOrgUnit(getOrigLocation());
+               var t = findOrgType(o_loc.ou_type());
+               if( t.can_have_users() ) 
+                       setSelector(selector, o_loc.id());
+               else 
+               */
+               selector.onchange = selOrgChange;
+               setSelector(selector, holdArgs.recipient.home_ou());
+       }
+       
+       var obj = findOrgUnit(holdArgs.recipient.home_ou());
+       $('holds_pickup_lib').innerHTML = obj.name();
+
+       /*
+       if(isXUL()) {
+               var dsel = $('holds_depth_selector');
+               unHideMe($('holds_depth_selector_row'));
+               if(dsel.getElementsByTagName('option').length == 0) {
+                       var types = globalOrgTypes;
+                       var depth = findOrgDepth(G.user.ws_ou());
+                       iterate(types, 
+                               function(t) {
+                                       if(t.depth() > depth) return;
+                                       insertSelectorVal(dsel, -1, t.opac_label(), t.depth());
+                               }
+                       );
+               }
+       }
+       */
+
+       appendClear($('holds_recipient'), text(
+               holdArgs.recipient.family_name() + ', ' +  
+                       holdArgs.recipient.first_given_name()));
+       appendClear($('holds_title'), text(rec.title()));
+       appendClear($('holds_author'), text(rec.author()));
+
+       if( holdArgs.type == 'V' || holdArgs.type == 'C' ) {
+
+               unHideMe($('holds_type_row'));
+               unHideMe($('holds_cn_row'));
+               appendClear($('holds_cn'), text(holdArgs.volumeObject.label()));
+
+               if( holdArgs.type == 'V'  ) {
+                       unHideMe($('holds_is_cn'));
+                       hideMe($('holds_is_copy'));
+
+               } else {
+                       hideMe($('holds_is_cn'));
+                       unHideMe($('holds_is_copy'));
+                       unHideMe($('holds_copy_row'));
+                       appendClear($('holds_copy'), text(holdArgs.copyObject.barcode()));
+               }
+
+       } else {
+               hideMe($('holds_type_row'));
+               hideMe($('holds_copy_row'));
+               hideMe($('holds_cn_row'));
+       }
+
+       removeChildren($('holds_format'));
+
+       var mods_formats = rec.types_of_resource();
+       var formats;
+
+       if(holdArgs.recordDescriptors)
+               formats = holdArgs.recordDescriptors[0].item_type();
+
+       if( holdArgs.type == 'T' ) {
+               var desc = grep( holdArgs.recordDescriptors,
+                       function(i) {
+                               return (i.record() == holdArgs.record); 
+                       }
+               );
+               formats = desc[0].item_type();
+       }
+
+       if( holdArgs.type == 'M' ) {
+               var data = holdsParseMRFormats(holdArgs.editHold.holdable_formats());
+               mods_formats = data.mods_formats;
+               formats = data.formats;
+       }
+
+
+       for( var i in mods_formats ) {
+               var res = mods_formats[i];
+               var img = elem("img");
+               setResourcePic(img, res);
+               $('holds_format').appendChild(img);
+               if(formats)
+                       $('holds_format').appendChild(text(' '+ MARCTypeToFriendly(formats[i]) +' '));
+               else
+                       $('holds_format').appendChild(text(' '+ mods_formats[i] +' '));
+               $('holds_format').appendChild(elem('br'));
+       }
+
+
+       $('holds_phone').value = (holdArgs.recipient.day_phone())?holdArgs.recipient.day_phone():"";
+       appendClear( $('holds_email'), text(holdArgs.recipient.email()));
+
+       var pref = holdArgs.recipient.prefs[PREF_HOLD_NOTIFY];
+
+       if(pref) {
+               if( ! pref.match(/email/i) ) {
+                       $('holds_enable_email').checked = false;
+               } else {
+                       $('holds_enable_email').checked = true;
+               }
+
+               if( ! pref.match(/phone/i) ) {
+                       $('holds_phone').disabled = true;
+                       $('holds_enable_phone').checked = false;
+               } else {
+                       $('holds_phone').disabled = false;
+                       $('holds_enable_phone').checked = true;
+               }
+       }
+
+    if(!holdArgs.recipient.email()) {
+               $('holds_enable_email').checked = false;        
+               $('holds_enable_email').disabled = true;
+        var message;
+        if(isXUL()) {
+            message = noEmailMessageXUL.cloneNode(true);
+               appendClear($('holds_email'), message);
+        } else {
+            message = noEmailMessage.cloneNode(true);
+               appendClear($('holds_email'), message);
+            $('holds.no_email.my_account').setAttribute('href', buildOPACLink({page:MYOPAC},null,true));
+        }
+        unHideMe(message);
+    }
+
+       if(!$('holds_phone').value) 
+               $('holds_enable_phone').checked = false;        
+
+       appendClear($('holds_physical_desc'), text(rec.physical_description()));
+
+       if(holdArgs.type == 'M') hideMe($('hold_physical_desc_row'));
+
+       holdsSetFormatSelector();
+
+    $('holds_frozen_chkbox').checked = false;
+    hideMe($('hold_frozen_thaw_row'));
+
+    var interval = fetchOrgSettingDefault(holdArgs.recipient.home_ou(), 'circ.hold_expire_interval');
+    var secs = 0;
+    if(interval) {
+        secs = interval_to_seconds(interval);
+        var expire = new Date();
+        expire.setTime(expire.getTime() + Number(secs + '000'));
+        if(dijit.byId('holds_expire_time')) dijit.byId('holds_expire_time').setValue(expire);
+    }
+}
+
+function holdsParseMRFormats(str) {
+       var data = str.split(/-/);      
+
+       var formats = [];
+       var mods_formats = [];
+
+       for( var i = 0; i < data[0].length; i++ ) {
+               formats.push( data[0].charAt(i) );
+               mods_formats.push( MARCFormatToMods( formats[i] ) );
+       }
+       
+       formats = uniquify(formats);
+       mods_formats = uniquify(mods_formats);
+
+       return {
+               formats                 : formats,
+               mods_formats    : mods_formats,
+               lang                            : data[2],
+               largeprint              : data[1]
+       };
+}
+
+
+function holdsSetFormatSelector() {
+       var type = holdArgs.type;
+       if( type == 'C' || type == 'V' || holdArgs.editHold ) return;
+
+       var data                                = holdsGetFormats();
+       var avail_formats       = data.avail_formats;
+       var sel_formats = data.sel_formats;
+       holdArgs.language = data.lang;
+
+       unHideMe($('holds_alt_formats_row_extras'));
+       var selector = $('hold_alt_form_selector');
+
+       for( var i = 0; i < avail_formats.length; i++ ) {
+               var form = avail_formats[i];
+               unHideMe(findSelectorOptByValue(selector, form));
+       }
+}
+
+
+function holdsGetFormats() {
+
+       var lang;
+       var formats = [];
+       var sformats = []; // selected formats 
+
+       var type = holdArgs.type;
+       var desc = holdArgs.recordDescriptors;
+       var rec = holdArgs.record;
+       var mrec = holdArgs.metarecord;
+
+       if( type == 'T' ) {
+
+               for( var i = 0; i < desc.length; i++ ) {
+                       var d = desc[i];
+                       if( d.record() == holdArgs.record ) {
+                               lang = d.item_lang();
+                               holdArgs.myFormat =  _t_f_2_format(d.item_type(), d.item_form());
+                               sformats.push(holdArgs.myFormat);
+                               break;
+                       }
+               }
+       }
+
+       for( var i = 0; i < desc.length; i++ ) {
+               var d = desc[i];
+               if( d.item_lang() != lang ) continue;
+               formats.push( _t_f_2_format(d.item_type(), d.item_form()));
+       }
+
+       formats = uniquify(formats);
+
+       return {
+               lang : lang,
+               avail_formats : formats, 
+               sel_formats : sformats
+       };
+}
+
+
+
+function _t_f_2_format(type, form) {
+       if( form == 'd' ) return 'at-d';
+       return (type == 'a' || type == 't') ? 'at' : 
+               ( type == 'i' || type == 'g' || type == 'j' ) ? type : null;
+}
+
+function holdsSetSelectedFormats() {
+
+       var cn = $('holds_alt_formats_row').className;
+       if( cn && cn.match(/hide_me/) ) return;
+
+       var selector = $('hold_alt_form_selector');
+       var vals = getSelectedList(selector);
+
+       if(vals.length == 0) return;
+
+       var fstring = "";
+
+       if( contains(vals, 'at-d') ) {
+               if( contains(vals, 'at') )
+                       fstring = 'at';
+               else 
+                       fstring = 'at-d';
+       } else {
+               if( contains(vals, 'at') )
+                       fstring = 'at';
+       }
+
+       for( var i = 0; i < vals.length; i++ ) {
+               var val = vals[i];
+               if( !val.match(/at/) ) fstring = val + fstring;
+       }
+
+       if( holdArgs.language ) {
+               if( fstring.match(/-/) )
+                       fstring = fstring + '-' + holdArgs.language;
+               else
+                       fstring = fstring + '--' + holdArgs.language;
+       }
+       return fstring;
+}
+
+
+function holdsCheckPossibility(pickuplib, hold, recurse) {
+
+       var args = { 
+               titleid : holdArgs.record,
+               volume_id : holdArgs.volume,
+               copy_id : holdArgs.copy,
+               hold_type : holdArgs.type,
+               patronid : holdArgs.recipient.id(),
+               depth : 0, 
+               pickup_lib : pickuplib 
+       };
+
+       if(recurse) {
+               /* if we're calling create again (recursing), 
+                       we know that the hold possibility check already succeeded */
+               holdHandleCreateResponse({_recurse:true, _hold:hold}, true );
+
+       } else {
+               _debug("hold possible args = "+js2JSON(args));
+       
+               var req = new Request(CHECK_HOLD_POSSIBLE, G.user.session, args );
+       
+               req.request.alertEvent = false;
+               req.request._hold = hold;
+               req.request._recurse = recurse;
+               req.callback(holdHandleCreateResponse);
+               req.send();
+       }
+}
+
+
+function holdsBuildOrgSelector(node, sel) {
+
+       if(!node) node = globalOrgTree;
+    if(!isTrue(node.opac_visible())) return;
+
+       var selector = sel?sel:$('holds_org_selector');
+       var index = selector.options.length;
+
+       var type = findOrgType(node.ou_type());
+       var indent = type.depth() - 1;
+       var opt = setSelectorVal( selector, index, node.name(), node.id(), null, indent );
+       if(!type.can_have_users()) {
+               opt.disabled = true;
+               addCSSClass(opt, 'disabled_option');
+       }
+       
+       for( var i in node.children() ) {
+               var child = node.children()[i];
+               if(child) holdsBuildOrgSelector(child);
+       }
+}
+
+function holdsBuildHoldFromWindow() {
+
+       var org = getSelectorVal($('holds_org_selector'));
+       var node = findOrgUnit(org);
+       var ntype = findOrgType(node.ou_type());
+       if(!ntype.can_have_users()) {
+               alertId('holds_pick_good_org');
+               return;
+       }
+
+       var hold = new ahr();
+       if(holdArgs.editHold) {
+               hold = holdArgs.editHold;
+               holdArgs.editHold = null;
+       }
+
+       if( $('holds_enable_phone').checked ) {
+               var phone = $('holds_phone').value;
+               if( !phone || !phone.match(REGEX_PHONE) ) {
+                       alert($('holds_bad_phone').innerHTML);
+                       return null;
+               }
+               hold.phone_notify(phone);
+
+       } else {
+               hold.phone_notify("");
+       }
+
+       if( $('holds_enable_email').checked ) 
+               hold.email_notify(1);
+       else
+               hold.email_notify(0);
+
+       var target;
+
+       switch(holdArgs.type) {
+               case 'M':
+                       target = holdArgs.metarecord; break;
+               case 'T':
+                       target = holdArgs.record; break;
+               case 'V':
+                       target = holdArgs.volume; break;
+               case 'C':
+                       target = holdArgs.copy; break;
+       }
+
+
+
+       hold.pickup_lib(org); 
+       //hold.request_lib(org); 
+       hold.requestor(holdArgs.requestor.id());
+       hold.usr(holdArgs.recipient.id());
+       hold.target(target);
+       hold.hold_type(holdArgs.type);
+
+    try{var expDate = dijit.byId('holds_expire_time').getValue();} catch(e){}
+    if(expDate) {
+        var expireDate = dojo.date.stamp.toISOString(expDate);
+        expireDate = holdsVerifyThawDate(expireDate); 
+        if(expireDate)
+            hold.expire_time(expireDate);
+        else 
+            return;
+    }
+
+    // see if this hold should be frozen and for how long
+    if($('holds_frozen_chkbox').checked) {
+        hold.frozen('t');
+        unHideMe($('hold_frozen_thaw_row'));
+        thawDate = dojo.date.stamp.toISOString(dijit.byId('holds_frozen_thaw_input').getValue());
+        if(thawDate) {
+            thawDate = holdsVerifyThawDate(thawDate); 
+            if(thawDate) 
+                hold.thaw_date(thawDate);
+            else
+                return;
+        } else {
+            hold.thaw_date(null);
+        }
+    } else {
+        hold.frozen('f');
+        hold.thaw_date(null);
+    }
+
+       //check for alternate hold formats 
+       var fstring = holdsSetSelectedFormats();
+       if(fstring) { 
+               hold.hold_type('M'); 
+               hold.holdable_formats(fstring);
+               hold.target(holdArgs.metarecord);
+       }
+       return hold;
+}
+       
+function holdsPlaceHold(hold, recurse) {
+       if(!hold) return;
+       swapCanvas($('check_holds_box'));
+       holdsCheckPossibility(hold.pickup_lib(), hold, recurse);
+}
+
+
+function holdHandleCreateResponse(r, recurse) {
+
+       if(!recurse) {
+               var res = r.getResultObject();
+               if(checkILSEvent(res) || res.success != 1) {
+                       if(res.success != 1) {
+                               alert($('hold_not_allowed').innerHTML+(!res.last_event.desc?"":"\n\nHold failure description:\n"+res.last_event.desc));
+                       } else {
+                               if( res.textcode == 'PATRON_BARRED' ) {
+                                       alertId('hold_failed_patron_barred');
+                               } else {
+                                       alert($('hold_not_allowed').innerHTML+(!res.last_event.desc?"":"\n\nHold failure description:\n"+res.last_event.desc));
+                               }
+                       }
+                       swapCanvas($('holds_box'));
+                       return;
+               }
+        r._hold.selection_depth(res.depth);
+       }       
+
+       holdCreateHold(r._recurse, r._hold);
+       hideResultsPage(false);
+}
+
+
+function holdCreateHold( recurse, hold ) {
+       var method = CREATE_HOLD;
+       if(recurse) method = CREATE_HOLD_OVERRIDE;
+       var req = new Request( method, holdArgs.requestor.session, hold );
+       req.request.alertEvent = false;
+       req.send(true);
+       var res = req.result();
+       holdProcessResult(hold, res, recurse);
+
+       showCanvas();
+
+       runEvt('common', 'holdUpdated');
+}
+
+
+function holdProcessResult( hold, res, recurse ) {
+
+       if( res && res > -1 ) {
+               alert($('holds_success').innerHTML);
+               holdArgs = null;
+        if(isXUL() && typeof xulG.opac_hold_placed == 'function')
+            xulG.opac_hold_placed(res);
+
+       } else {
+
+               if( recurse ) {
+                       alert($('holds_failure').innerHTML);
+                       return;
+               }
+
+               if( grep(res, function(e) { return (e.textcode == 'HOLD_EXISTS'); }) ) {
+                       if( fetchPermOrgs('HOLD_EXISTS.override')[0] != -1 ) {
+                               if( confirm($('hold_dup_exists_override').innerHTML) ) {
+                                       return holdsPlaceHold(hold, true);
+                               }
+                return;
+
+                       } else {
+                               return alert($('hold_dup_exists').innerHTML);
+                       }
+               }
+
+               if( grep(res, function(e) { return (e.textcode == 'HOLD_ITEM_CHECKED_OUT'); }) ) {
+                       if( fetchPermOrgs('HOLD_ITEM_CHECKED_OUT.override')[0] != -1 ) {
+                               if( confirm($('hold_checked_out_override').innerHTML) ) {
+                                       return holdsPlaceHold(hold, true);
+                               }
+                return;
+
+                       } else {
+                               return alert($('hold_checked_out').innerHTML);
+                       }
+               }
+
+
+               alert($('holds_failure').innerHTML);
+       }
+}
+
+
+function holdsCancel(holdid, user) {
+       if(!user) user = G.user;
+       var req = new Request(CANCEL_HOLD, user.session, holdid, /* Patron via OPAC */ 6);
+       req.send(true);
+       return req.result();
+       runEvt('common', 'holdUpdated');
+}
+
+function holdsUpdate(hold, user) {
+       if(!user) user = G.user;
+       var req = new Request(UPDATE_HOLD, user.session, hold);
+       req.send(true);
+       var x = req.result(); // cause an exception if there is one 
+       runEvt('common', 'holdUpdated');
+}
+
+/* verify that the thaw date is valid and after today */
+function holdsVerifyThawDate(dateString, isGreater) {
+    thawDate = dojo.date.stamp.fromISOString(dateString);
+    if(thawDate) {
+        if(isGreater) {
+            if(dojo.date.compare(thawDate) > 0) {
+                return dojo.date.stamp.toISOString(thawDate);
+            }
+        } else {
+            return dojo.date.stamp.toISOString(thawDate);
+        }
+    }
+    return null;
+}
+
+function holdsVerifyThawDateUI(element) {
+    value = dojo.date.stamp.toISOString(dijit.byId(element).getValue());
+
+    if(!value) {
+        removeCSSClass($(element), 'invalid_field');
+        return;
+    }
+
+    if(!holdsVerifyThawDate(value, true)) {
+        addCSSClass($(element), 'invalid_field');
+    } else {
+        removeCSSClass($(element), 'invalid_field');
+    }
+}
+
+
+function editHold(h) {
+       var row = $('myopac_holds_row_'+h);
+       var objs = [];
+       
+       objs['hold_pickup_lib'] = $n(row,'hold_pickup_lib');
+       objs['hold_pickup_lib_sel'] = $n(row,'hold_pickup_lib_sel');
+       objs['hold_active'] = $n(row,'hold_active');
+       objs['activate_label'] = $n(row,'activate_label');
+       objs['activate_date'] = $n(row,'activate_date');
+       objs['activate_box'] = $n(row,'activate_box');
+       objs['hold_expires_label'] = $n(row,'hold_expires_label');
+       objs['hold_expires'] = $n(row,'hold_expires');
+       objs['hold_expires_box'] = $n(row,'hold_expires_box');
+       objs['hold_active_sel'] = $n(row,'hold_active_sel');
+       objs['hold_edit_link'] = $n(row,'hold_edit_link');
+       objs['hold_save_link'] = $n(row,'hold_save_link');
+       objs['hold_cancel_link'] = $n(row,'hold_cancel_link');
+               
+       for(var i in objs) unHideMe(objs[i]);
+       
+       hideMe(objs['activate_date']);
+       hideMe(objs['hold_active']);
+       hideMe(objs['hold_expires']);
+       hideMe(objs['hold_pickup_lib']);
+       hideMe(objs['hold_edit_link']);
+       row.orig_bgcolor = row.style.background;
+       row.style.background= "#fcdf89";
+}
+
+function cancelHold(h) {
+       var row = $('myopac_holds_row_'+h);
+       var objs = [];
+       
+       objs['hold_pickup_lib'] = $n(row,'hold_pickup_lib');
+       objs['hold_pickup_lib_sel'] = $n(row,'hold_pickup_lib_sel');
+       objs['hold_active'] = $n(row,'hold_active');
+       objs['activate_label'] = $n(row,'activate_label');
+       objs['activate_date'] = $n(row,'activate_date');
+       objs['activate_box'] = $n(row,'activate_box');
+       objs['hold_expires_label'] = $n(row,'hold_expires_label');
+       objs['hold_expires'] = $n(row,'hold_expires');
+       objs['hold_expires_box'] = $n(row,'hold_expires_box');
+       objs['hold_active_sel'] = $n(row,'hold_active_sel');
+       objs['hold_edit_link'] = $n(row,'hold_edit_link');
+       objs['hold_save_link'] = $n(row,'hold_save_link');
+       objs['hold_cancel_link'] = $n(row,'hold_cancel_link');
+               
+       for(var i in objs) hideMe(objs[i]);
+       
+       unHideMe(objs['hold_edit_link']);
+       unHideMe(objs['hold_pickup_lib']);
+       unHideMe(objs['holds_active']);
+       unHideMe(objs['hold_active']);
+       unHideMe(objs['activate_date']);
+       unHideMe(objs['hold_expires']);
+       if(objs['hold_expires'].innerHTML) unHideMe(objs['hold_expires_label']);
+       if(objs['activate_date'].innerHTML) unHideMe(objs['activate_label']);
+       row.style.background=row.orig_bgcolor;
+}
+
+function saveHold(h) {
+       var row = $('myopac_holds_row_'+h);
+       var hold = holdsCache[holdsCacheMap[h]].hold;
+       
+       var activateDataBox = $n(row,'activate_box');
+       var expireDateBox = $n(row,'hold_expires_box');
+       var pickupLibSel = $n(row,'hold_pickup_lib_sel');
+       var activateSel = $n(row,'hold_active_sel');
+       var expireTime = dojo.date.stamp.toISOString(new Date(Date.parse(expireDateBox.value)),null);
+       var activateTime = dojo.date.stamp.toISOString(new Date(Date.parse(activateDataBox.value)),null);
+       if(parseInt(expireTime)) hold.expire_time(expireTime);
+       if(parseInt(activateTime)) hold.thaw_date(activateTime);
+       hold.frozen(activateSel.options[activateSel.selectedIndex].value);
+       hold.pickup_lib(pickupLibSel.options[pickupLibSel.selectedIndex].value)
+       
+       fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.hold.update'],{params:[G.user.session,hold],oncomplete:refreshHold});
+       row.style.background= isTrue(hold.frozen())?"#e5e5e5":"";
+       row.orig_bgcolor=row.style.background;
+}
+
+function updateHoldInfo(holdid,holdrow) {
+       var h = holdsCache[holdsCacheMap[holdid]].hold;
+       if(!h) return;
+       var row = holdrow?holdrow:$('myopac_holds_row_'+holdid);
+       if(!row) return;
+       
+       $n(row,'hold_pickup_lib').innerHTML = findOrgUnit(h.pickup_lib()).name();
+       $n(row,'hold_active').innerHTML = isTrue(h.frozen())?"Suspended":"Active";
+       
+       if(h.thaw_date()) {
+               var d = dojo.date.stamp.fromISOString(h.thaw_date());
+               $n(row, 'activate_date').innerHTML = dojo.date.locale.format(d, {selector: 'date', fullYear: true});
+               unHideMe($n(row,'activate_label'));
+               $n(row,'activate_box').value = dojo.date.locale.format(d, {selector:'date', fullYear: true});
+       }
+       
+       if(h.expire_time()) {
+               var exp_date = dojo.date.stamp.fromISOString(h.expire_time());
+               $n(row, 'hold_expires').innerHTML = dojo.date.locale.format(exp_date, {selector:'date', fullYear: true});
+               unHideMe($n(row,'hold_expires_label'));
+               $n(row,'hold_expires_box').value = dojo.date.locale.format(exp_date, {selector:'date', fullYear: true});
+       }
+}
+
+function refreshHold(r) {
+       var hold = r.recv().content();
+       if(!parseInt(hold)) return;
+       updateHoldInfo(hold);
+       cancelHold(hold);
+}
index e6be8b3..7256b56 100644 (file)
-\r
-// constructor -\r
-// take docid and pull xml from server, then turn it into a JS object\r
-// MarcRecord.marcObj - JS object of marc data\r
-// MarcRecord.xml - marc XML data pulled from server\r
-function MarcRecord(docid) {\r
-       var xml = null;\r
-       var cgi = new CGI();\r
-       var xhr = buildXMLRequest();\r
-       var proto = (location.href.match(/^[Hh][Tt][Tt][Pp][Ss]:/))?"https://":"http://";\r
-       \r
-       xhr.open("GET",proto+cgi.server_name+"/opac/extras/supercat/retrieve/marcxml/record/"+docid, false);\r
-       xhr.send(null);\r
-       if(xhr.responseXML && xhr.responseXML.documentElement && xhr.status == 200) xml = xhr.responseXML.documentElement;\r
-       //this.toString = function() { return this.marcObj.toString(); };\r
-       this.xml = xml;\r
-       this.marcObj = this.XML2js(this.xml);\r
-}\r
-\r
-/* fields - string with 1 field or array of fields to process from the marc record\r
-   optional args (as object):\r
-     container  - string with dom id of container to fill with rendered data - if not present, MarcRecord.render() will return rendered code as a string instead\r
-     label      - string with 1 dom id or array of dom ids to unhide if marc data is present\r
-        searchType - will turn each subfield into a searchable link using the specified search type (e.g. STYPE_KEYWORD, found in config.js)\r
-        showAGR    - boolean value, set to true if marc field 880 data is needed for each matching field\r
-        showOnly   - string with 1 subfield or array of subfields to process\r
-        skipCodes  - string with 1 subfield or array of subfields to skip over\r
-        unlink     - only valid if searchType is present - string with 1 subfield or array of subfields to NOT turn into links (will still return its data though)\r
-        linkText   - string with 1 subfield or ordered array of subfields to check for link text, only valid if linkSrc is present, resulting fields will be turned into links using linkSrc as the href\r
-        linkSrc    - string with 1 subfield that contains the link href for linkText\r
-        fGlue      - if multiple matching fields exist in the marc record, join them together using fGlue.joinStr string, \r
-                       use fGlue.startStr to add code to the start of the set of matched fields\r
-                                   use fGlue.endStr to add code to the end of the set of matched fields\r
-        sGlue      - if mutiple subfields exist for each matched field, join them together using sGlue.joinStr sting,\r
-                       use sGlue.startStr to add code to the start of each match field\r
-                                       use sGlue.endStr to add code to the end of each field\r
-       \r
-author example:\r
-       MarcRecord.render(\r
-               ["100", "110", "111"],  // fields to look for\r
-               {\r
-                       "container":"rdetail_authors_inner", // DOM element to dump resulting code into (will clear the element's contents)\r
-                       "searchType":STYPE_AUTHOR,                       // make each subfield a search link using search type STYPE_AUTHOR\r
-                       "label":["rdetail_authors_link", "authors_lbl"],  // unHide these DOM elements if any matching fields ("100", "110", "111") are found in the marc record\r
-                       "sGlue":{"joinStr":" ", "endStr":"<br />"},       // join each subfield together with a space and add a <br /> element to the end\r
-                       "showAGR":true,                      // if matching 880 data is present, show it - sGlue treats it as if it were a new field\r
-                       "unlink":"d"                         // do NOT turn subfield "d" into a searchable link\r
-               }\r
-       );\r
-*/\r
-MarcRecord.prototype.render = function(fields, args) {\r
-  if(!fields) return;\r
-  var retVal = "";\r
-  var returnStr = false;\r
-  args = args || {};\r
-  if(typeof fields=="string") fields = [fields];\r
-  if(typeof args.label=="undefined") args.label = [];\r
-  if(typeof args.label=="string") args.label = [args.label];\r
-  if(typeof args.showOnly=="undefined") args.showOnly = [];\r
-  if(typeof args.showOnly=="string") args.showOnly = [args.showOnly];\r
-  if(typeof args.skipCodes=="undefined") args.skipCodes = [];\r
-  if(typeof args.skipCodes=="string") args.skipCodes = [args.skipCodes];\r
-  if(typeof args.unlink=="undefined") args.unlink = [];\r
-  if(typeof args.unlink=="string") args.unlink = [args.unlink];\r
-  if(typeof args.linkText=="undefined") args.linkText = [];\r
-  if(typeof args.linkText=="string") args.linkText = [args.linkText];\r
-  var cont = typeof args.container == "undefined" ? null : $(args.container);\r
-  if(!cont) returnStr = true;\r
-  \r
-  args.fGlue = args.fGlue || {};\r
-  args.sGlue = args.sGlue || {};\r
-  args.fGlue.startStr = args.fGlue.startStr || "";\r
-  args.fGlue.endStr = args.fGlue.endStr || "";\r
-  args.sGlue.startStr = args.sGlue.startStr || "";\r
-  args.sGlue.endStr = args.sGlue.endStr || "";\r
-  args.fGlue.joinStr = args.fGlue.joinStr || "";\r
-  args.sGlue.joinStr = args.sGlue.joinStr || "";\r
-  \r
-  for(var i in fields) {\r
-    var f = this.marcObj[fields[i]];\r
-    if(!f) continue;\r
-       for(var n in args.label) unHideMe($(args.label[n]));\r
-       \r
-       if(args.linkSrc) args.linkText.push(args.linkSrc);\r
-    f.args = {};\r
-    f.args.showAGR = args.showAGR || false;\r
-    f.args.skipCodes = args.skipCodes;\r
-       f.args.showOnly = args.showOnly;\r
-       f.args.unlink = args.unlink;\r
-       f.args.linkText = args.linkText;\r
-       f.args.linkSrc = args.linkSrc || null;\r
-       f.args.searchType = args.searchType || null;\r
-    f.args.sGlue = args.sGlue;\r
-  \r
-    var str = f.join(args.fGlue.joinStr);\r
-    str = args.fGlue.startStr + str + args.fGlue.endStr;\r
-  \r
-    if(returnStr) retVal+=str;\r
-    else cont.innerHTML += str;\r
-  }\r
-  \r
-  if(returnStr) return retVal;\r
-};\r
-\r
-// wrap each item in the array with an anchor tag for searching\r
-// excluding those subfields specified in 'codes'\r
-MarcRecord.prototype.buildSearchStr = function(arr, args, codes) {\r
-  for(var i in arr) {\r
-       var skip = false;\r
-       for(var n in args.unlink)\r
-         if(args.unlink[n]==codes[i]) skip = true;\r
-       if(skip) continue;\r
-       var args2 = {};\r
-       if( SHOW_MR_DEFAULT || findCurrentPage() == MRESULT ) {\r
-               args2.page = MRESULT;\r
-       } else {\r
-               args2.page = RRESULT;\r
-               args2[PARAM_RTYPE] = args.searchType;\r
-       }\r
-       args2[PARAM_OFFSET] = 0;\r
-       args2[PARAM_TERM] = arr[i];\r
-       args2[PARAM_STYPE] = args.searchType;\r
-       arr[i] = "<a href='"+buildOPACLink(args2).replace("'", "%27")+"'>"+arr[i]+"</a>";\r
-  }\r
-};\r
-\r
-// if field 880 exists, append its data to matching normal field\r
-// AGR = Alternate Graphic Representation -\r
-// typically used to display foreign languages\r
-MarcRecord.prototype.getAGRdata = function(field, args) {\r
-  var str = "";\r
-  var val = parseInt(field.split("-")[1]);\r
-  field = this.marcObj["880"][--val];\r
-  field.args = args;\r
-  str += field;\r
-  return str;\r
-};\r
-\r
-// toString function override for subfield objects\r
-MarcRecord.prototype.marcObjToStr = function() {\r
-  var str = "";\r
-  var str2 = ""; // AGR data\r
-  var args = this.args || this.master.marcObj[this.field].args || {"searchType":null, "linkSrc":null, "linkText":[], "unlink":[], "showOnly":[], "skipCodes":[], "showAGR":false, "sGlue":{"joinStr":"", "endStr":"", "startStr":""}};\r
-  var arr = [];\r
-  var subs = [];\r
-  var found = false;\r
-  for(var i in this.codes) {\r
-       var c = this.codes[i];\r
-       var skipCode = false;\r
-       for(var n in args.skipCodes) if(c==args.skipCodes[n]) skipCode = true;\r
-       if(skipCode) continue;\r
-       if(c=="6" && this[c][0].indexOf("880")>=0 && args.showAGR) str2+=this.master.getAGRdata(this[c][0], args);\r
-       if(c=="0" || c=="2" || c=="3" || c=="4" || c=="5" || c=="6" || c=="8") continue;\r
-       if(args.linkSrc && this[args.linkSrc]) {\r
-         var src = this[args.linkSrc][0];\r
-         for(var n in args.linkText) {\r
-               if(this[args.linkText[n]]) { arr.push("<a target='_blank' href='"+encodeURI(src)+"'>"+this[args.linkText[n]].join(args.sGlue.joinStr)+"</a>"); found = true; break; }\r
-         }\r
-         if(found) break;\r
-       }\r
-       subs.push(c);\r
-       if(args.showOnly.length) \r
-         for(var n in args.showOnly) { \r
-           if(args.showOnly[n]==c) arr = arr.concat(this[c]);\r
-         }\r
-       else arr = arr.concat(this[c]);\r
-  }\r
-  \r
-  if(args.searchType) this.master.buildSearchStr(arr, args, subs);\r
-  str += arr.join(args.sGlue.joinStr);\r
-  str = args.sGlue.startStr + str + args.sGlue.endStr;\r
-  return str+str2;\r
-};\r
-\r
-/* marc XML to JS object conversion function\r
-   resulting object will look similar to:\r
-   MarcRecord.marcObj = {\r
-        "245":[\r
-       {"a":["Title of item"], "c":["More title data"]},\r
-          {"a":["Another 245 field"], "c":["More title data"]}\r
-     ],\r
-        \r
-        "100":[\r
-          {"a":["Author", "Author last name"], "b":["Author life span"]},\r
-          {"a":["Author 2", "Author2 last name"], "b":["Author2 life span"]}\r
-     ]\r
-   }\r
-*/\r
-MarcRecord.prototype.XML2js = function(parent) {\r
-  var marc = {};\r
-  var nodes = parent.childNodes || [];\r
-  // field-level (and master) object augmentation\r
-  //marc.toString = this.marcObjToStr2;\r
-  marc.master = this; // link back to global parent object\r
-\r
-  for(var i=0; i<nodes.length; i++) {\r
-       var obj = nodes[i];\r
-       if(obj.hasChildNodes()) {\r
-         var tag = (obj.nodeName=="datafield")?obj.getAttribute("tag"):null;\r
-         if(obj.nodeName=="datafield") {\r
-               if(!marc[tag]) marc[tag] = [];\r
-               var subfields = {"codes":[], "order":[]};\r
-               // subfield object augmentation\r
-               subfields.toString = this.marcObjToStr;\r
-               subfields.master = this; // link back to global parent object\r
-               subfields.field = tag;\r
-               \r
-               var hasSubs = {};\r
-               for(var n=0; n<obj.childNodes.length; n++) {\r
-                 var child = obj.childNodes[n];\r
-                 if(child.nodeName=="subfield") {\r
-                       var code = child.getAttribute("code");\r
-                       if(!subfields[code]) subfields[code] = [];\r
-                       if(child && child.childNodes && child.childNodes[0])\r
-                               subfields[code].push(child.childNodes[0].textContent || child.childNodes[0].text);  // IE check\r
-                       if(!hasSubs[code]) subfields.codes.push(code);\r
-                       subfields.order.push(code);\r
-                       hasSubs[code] = true;\r
-                 }\r
-               }\r
-               marc[tag].push(subfields);\r
-         }\r
-         if(!tag) marc = this.XML2js(obj);\r
-       }\r
-  }\r
-  return marc;\r
-};\r
+
+// constructor -
+// take docid and pull xml from server, then turn it into a JS object
+// MarcRecord.marcObj - JS object of marc data
+// MarcRecord.xml - marc XML data pulled from server
+function MarcRecord(docid) {
+       var xml = null;
+       var cgi = new CGI();
+       var xhr = buildXMLRequest();
+       var proto = (location.href.match(/^[Hh][Tt][Tt][Pp][Ss]:/))?"https://":"http://";
+       
+       xhr.open("GET",proto+cgi.server_name+"/opac/extras/supercat/retrieve/marcxml/record/"+docid, false);
+       xhr.send(null);
+       if(xhr.responseXML && xhr.responseXML.documentElement && xhr.status == 200) xml = xhr.responseXML.documentElement;
+       //this.toString = function() { return this.marcObj.toString(); };
+       this.xml = xml;
+       this.marcObj = this.XML2js(this.xml);
+}
+
+/* fields - string with 1 field or array of fields to process from the marc record
+   optional args (as object):
+     container  - string with dom id of container to fill with rendered data - if not present, MarcRecord.render() will return rendered code as a string instead
+     label      - string with 1 dom id or array of dom ids to unhide if marc data is present
+        searchType - will turn each subfield into a searchable link using the specified search type (e.g. STYPE_KEYWORD, found in config.js)
+        showAGR    - boolean value, set to true if marc field 880 data is needed for each matching field
+        showOnly   - string with 1 subfield or array of subfields to process
+        skipCodes  - string with 1 subfield or array of subfields to skip over
+        unlink     - only valid if searchType is present - string with 1 subfield or array of subfields to NOT turn into links (will still return its data though)
+        linkText   - string with 1 subfield or ordered array of subfields to check for link text, only valid if linkSrc is present, resulting fields will be turned into links using linkSrc as the href
+        linkSrc    - string with 1 subfield that contains the link href for linkText
+        fGlue      - if multiple matching fields exist in the marc record, join them together using fGlue.joinStr string, 
+                       use fGlue.startStr to add code to the start of the set of matched fields
+                                   use fGlue.endStr to add code to the end of the set of matched fields
+        sGlue      - if mutiple subfields exist for each matched field, join them together using sGlue.joinStr sting,
+                       use sGlue.startStr to add code to the start of each match field
+                                       use sGlue.endStr to add code to the end of each field
+       
+author example:
+       MarcRecord.render(
+               ["100", "110", "111"],  // fields to look for
+               {
+                       "container":"rdetail_authors_inner", // DOM element to dump resulting code into (will clear the element's contents)
+                       "searchType":STYPE_AUTHOR,                       // make each subfield a search link using search type STYPE_AUTHOR
+                       "label":["rdetail_authors_link", "authors_lbl"],  // unHide these DOM elements if any matching fields ("100", "110", "111") are found in the marc record
+                       "sGlue":{"joinStr":" ", "endStr":"<br />"},       // join each subfield together with a space and add a <br /> element to the end
+                       "showAGR":true,                      // if matching 880 data is present, show it - sGlue treats it as if it were a new field
+                       "unlink":"d"                         // do NOT turn subfield "d" into a searchable link
+               }
+       );
+*/
+MarcRecord.prototype.render = function(fields, args) {
+  if(!fields) return;
+  var retVal = "";
+  var returnStr = false;
+  args = args || {};
+  if(typeof fields=="string") fields = [fields];
+  if(typeof args.label=="undefined") args.label = [];
+  if(typeof args.label=="string") args.label = [args.label];
+  if(typeof args.showOnly=="undefined") args.showOnly = [];
+  if(typeof args.showOnly=="string") args.showOnly = [args.showOnly];
+  if(typeof args.skipCodes=="undefined") args.skipCodes = [];
+  if(typeof args.skipCodes=="string") args.skipCodes = [args.skipCodes];
+  if(typeof args.unlink=="undefined") args.unlink = [];
+  if(typeof args.unlink=="string") args.unlink = [args.unlink];
+  if(typeof args.linkText=="undefined") args.linkText = [];
+  if(typeof args.linkText=="string") args.linkText = [args.linkText];
+  var cont = typeof args.container == "undefined" ? null : $(args.container);
+  if(!cont) returnStr = true;
+  
+  args.fGlue = args.fGlue || {};
+  args.sGlue = args.sGlue || {};
+  args.fGlue.startStr = args.fGlue.startStr || "";
+  args.fGlue.endStr = args.fGlue.endStr || "";
+  args.sGlue.startStr = args.sGlue.startStr || "";
+  args.sGlue.endStr = args.sGlue.endStr || "";
+  args.fGlue.joinStr = args.fGlue.joinStr || "";
+  args.sGlue.joinStr = args.sGlue.joinStr || "";
+  
+  for(var i in fields) {
+    var f = this.marcObj[fields[i]];
+    if(!f) continue;
+       for(var n in args.label) unHideMe($(args.label[n]));
+       
+       if(args.linkSrc) args.linkText.push(args.linkSrc);
+    f.args = {};
+    f.args.showAGR = args.showAGR || false;
+    f.args.skipCodes = args.skipCodes;
+       f.args.showOnly = args.showOnly;
+       f.args.unlink = args.unlink;
+       f.args.linkText = args.linkText;
+       f.args.linkSrc = args.linkSrc || null;
+       f.args.searchType = args.searchType || null;
+    f.args.sGlue = args.sGlue;
+  
+    var str = f.join(args.fGlue.joinStr);
+    str = args.fGlue.startStr + str + args.fGlue.endStr;
+  
+    if(returnStr) retVal+=str;
+    else cont.innerHTML += str;
+  }
+  
+  if(returnStr) return retVal;
+};
+
+// wrap each item in the array with an anchor tag for searching
+// excluding those subfields specified in 'codes'
+MarcRecord.prototype.buildSearchStr = function(arr, args, codes) {
+  for(var i in arr) {
+       var skip = false;
+       for(var n in args.unlink)
+         if(args.unlink[n]==codes[i]) skip = true;
+       if(skip) continue;
+       var args2 = {};
+       if( SHOW_MR_DEFAULT || findCurrentPage() == MRESULT ) {
+               args2.page = MRESULT;
+       } else {
+               args2.page = RRESULT;
+               args2[PARAM_RTYPE] = args.searchType;
+       }
+       args2[PARAM_OFFSET] = 0;
+       args2[PARAM_TERM] = arr[i];
+       args2[PARAM_STYPE] = args.searchType;
+       arr[i] = "<a href='"+buildOPACLink(args2).replace("'", "%27")+"'>"+arr[i]+"</a>";
+  }
+};
+
+// if field 880 exists, append its data to matching normal field
+// AGR = Alternate Graphic Representation -
+// typically used to display foreign languages
+MarcRecord.prototype.getAGRdata = function(field, args) {
+  var str = "";
+  var val = parseInt(field.split("-")[1]);
+  field = this.marcObj["880"][--val];
+  field.args = args;
+  str += field;
+  return str;
+};
+
+// toString function override for subfield objects
+MarcRecord.prototype.marcObjToStr = function() {
+  var str = "";
+  var str2 = ""; // AGR data
+  var args = this.args || this.master.marcObj[this.field].args || {"searchType":null, "linkSrc":null, "linkText":[], "unlink":[], "showOnly":[], "skipCodes":[], "showAGR":false, "sGlue":{"joinStr":"", "endStr":"", "startStr":""}};
+  var arr = [];
+  var subs = [];
+  var found = false;
+  for(var i in this.codes) {
+       var c = this.codes[i];
+       var skipCode = false;
+       for(var n in args.skipCodes) if(c==args.skipCodes[n]) skipCode = true;
+       if(skipCode) continue;
+       if(c=="6" && this[c][0].indexOf("880")>=0 && args.showAGR) str2+=this.master.getAGRdata(this[c][0], args);
+       if(c=="0" || c=="2" || c=="3" || c=="4" || c=="5" || c=="6" || c=="8") continue;
+       if(args.linkSrc && this[args.linkSrc]) {
+         var src = this[args.linkSrc][0];
+         for(var n in args.linkText) {
+               if(this[args.linkText[n]]) { arr.push("<a target='_blank' href='"+encodeURI(src)+"'>"+this[args.linkText[n]].join(args.sGlue.joinStr)+"</a>"); found = true; break; }
+         }
+         if(found) break;
+       }
+       subs.push(c);
+       if(args.showOnly.length) 
+         for(var n in args.showOnly) { 
+           if(args.showOnly[n]==c) arr = arr.concat(this[c]);
+         }
+       else arr = arr.concat(this[c]);
+  }
+  
+  if(args.searchType) this.master.buildSearchStr(arr, args, subs);
+  str += arr.join(args.sGlue.joinStr);
+  str = args.sGlue.startStr + str + args.sGlue.endStr;
+  return str+str2;
+};
+
+/* marc XML to JS object conversion function
+   resulting object will look similar to:
+   MarcRecord.marcObj = {
+        "245":[
+       {"a":["Title of item"], "c":["More title data"]},
+          {"a":["Another 245 field"], "c":["More title data"]}
+     ],
+        
+        "100":[
+          {"a":["Author", "Author last name"], "b":["Author life span"]},
+          {"a":["Author 2", "Author2 last name"], "b":["Author2 life span"]}
+     ]
+   }
+*/
+MarcRecord.prototype.XML2js = function(parent) {
+  var marc = {};
+  var nodes = parent.childNodes || [];
+  // field-level (and master) object augmentation
+  //marc.toString = this.marcObjToStr2;
+  marc.master = this; // link back to global parent object
+
+  for(var i=0; i<nodes.length; i++) {
+       var obj = nodes[i];
+       if(obj.hasChildNodes()) {
+         var tag = (obj.nodeName=="datafield")?obj.getAttribute("tag"):null;
+         if(obj.nodeName=="datafield") {
+               if(!marc[tag]) marc[tag] = [];
+               var subfields = {"codes":[], "order":[]};
+               // subfield object augmentation
+               subfields.toString = this.marcObjToStr;
+               subfields.master = this; // link back to global parent object
+               subfields.field = tag;
+               
+               var hasSubs = {};
+               for(var n=0; n<obj.childNodes.length; n++) {
+                 var child = obj.childNodes[n];
+                 if(child.nodeName=="subfield") {
+                       var code = child.getAttribute("code");
+                       if(!subfields[code]) subfields[code] = [];
+                       if(child && child.childNodes && child.childNodes[0])
+                               subfields[code].push(child.childNodes[0].textContent || child.childNodes[0].text);  // IE check
+                       if(!hasSubs[code]) subfields.codes.push(code);
+                       subfields.order.push(code);
+                       hasSubs[code] = true;
+                 }
+               }
+               marc[tag].push(subfields);
+         }
+         if(!tag) marc = this.XML2js(obj);
+       }
+  }
+  return marc;
+};
index a6a1c50..0faba0c 100644 (file)
-var searchBarExpanded = false;\r
-/* our search selector boxes */\r
-var _ts, _fs;\r
-var isFrontPage = false;\r
-G.evt.common.init.push(searchBarInit);\r
-\r
-/* if set by the org selector, this will be the location used the\r
-       next time the search is submitted */\r
-var newSearchLocation; \r
-var newSearchDepth = null;\r
-\r
-\r
-function searchBarInit() {\r
-\r
-       _ts = G.ui.searchbar.type_selector;\r
-       _fs = G.ui.searchbar.form_selector;\r
-\r
-       try{G.ui.searchbar.text.focus();}catch(e){}\r
-       G.ui.searchbar.text.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };\r
-       _ts.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };\r
-       _fs.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };\r
-\r
-       G.ui.searchbar.submit.onclick = searchBarSubmit;\r
-\r
-       /* set up the selector objects, etc */\r
-       G.ui.searchbar.text.value = (getTerm() != null) ? getTerm() : "";\r
-       G.ui.searchbar.facets.value = (getFacet() != null) ? getFacet() : "";\r
-       setSelector(_ts,        getStype());\r
-       setSelector(_fs,        getForm());\r
-\r
-       depthSelInit();\r
-       \r
-       if(getSearches()) {\r
-               var searches = JSON2js(getSearches());\r
-               setSelector(_fs, searches[1].term);\r
-               if(!G.ui.searchbar.text.value) G.ui.searchbar.text.value = searches[0].term;            \r
-       }\r
-\r
-       if(!isFrontPage && (findCurrentPage() != MYOPAC)) {\r
-               attachEvt('common','depthChanged', searchBarSubmit);\r
-       }\r
-\r
-    if( (limit = $('opac.result.limit2avail')) ) {\r
-        if(getAvail()) limit.checked = true;\r
-        if(getSort() && getSortDir()) \r
-            setSelector($('opac.result.sort'), getSort()+'.'+getSortDir());\r
-    }\r
-       \r
-       if( (limit2 = $('opac.result.limit2avail2')) ) if(getAvail()) limit2.checked = true;\r
-}\r
-\r
-function searchBarSubmit(isFilterSort) {\r
-       var text = G.ui.searchbar.text.value;\r
-       var facet_text = isFrontPage ? '' : G.ui.searchbar.facets.value;\r
-       clearSearchParams();\r
-       if(!text || text == "" || text == "Search Keyword") return;\r
-       //var d = (newSearchDepth != null) ?  newSearchDepth : depthSelGetDepth();\r
-       var d = getDepth();\r
-       if(isNaN(d)) d = 0;\r
-       var args = {};\r
-       \r
-       if(SHOW_MR_DEFAULT || (isFilterSort && findCurrentPage() == MRESULT)) {\r
-               args.page                               = MRESULT;\r
-       } else {\r
-               args.page                               = RRESULT;\r
-               args[PARAM_RTYPE]               = _ts.options[_ts.selectedIndex].value;\r
-       }\r
-\r
-// The following commented-out code does not do what it is apparently\r
-// intended to do and has no effect on search other than causing load\r
-/*\r
-       args[PARAM_STYPE] = _ts.options[_ts.selectedIndex].value;\r
-       args[PARAM_LOCATION] = depthSelGetNewLoc();\r
-       args[PARAM_DEPTH]               = d;\r
-\r
-       var val = _fs.options[_fs.selectedIndex].value;\r
-       if(val!='') {\r
-               args[PARAM_SEARCHES] = '[{"term":"'+text+'","restrict":[{"tag":"245","subfield":"a"}]},{"term":"'+val+'","restrict":[{"tag":"998","subfield":"d"}]}]';\r
-               args[PARAM_ADVTYPE] = ADVTYPE_MARC;\r
-               args[PARAM_TERM] = "";\r
-               args[PARAM_FORM] = 'all';\r
-               args[PARAM_RTYPE] = RTYPE_MARC;\r
-       } else {\r
-               args[PARAM_TERM] = text;\r
-               args[PARAM_FACET]= facet_text;\r
-       }\r
-*/\r
-\r
-    args[PARAM_STYPE]       = _ts.options[_ts.selectedIndex].value;\r
-    args[PARAM_TERM]        = text;\r
-    args[PARAM_FACET]       = facet_text;\r
-    args[PARAM_LOCATION] = depthSelGetNewLoc();\r
-    args[PARAM_DEPTH]       = d;\r
-    args[PARAM_FORM]        = _fs.options[_fs.selectedIndex].value;\r
-\r
-    if($('opac.result.limit2avail') && !arguments[1]) {\r
-        args[PARAM_AVAIL] = ($('opac.result.limit2avail').checked) ? 1 : '';\r
-        if( (val = getSelectorVal($('opac.result.sort'))) ) {\r
-            args[PARAM_SORT] = val.split('.')[0];\r
-            args[PARAM_SORT_DIR] = val.split('.')[1];\r
-        }\r
-    } else if(arguments[1]) {\r
-        args[PARAM_AVAIL] = (arguments[1].checked) ? 1 : '';\r
-        if( (val = getSelectorVal($('opac.result.sort'))) ) {\r
-            args[PARAM_SORT] = val.split('.')[0];\r
-            args[PARAM_SORT_DIR] = val.split('.')[1];\r
-        }\r
-       }\r
-\r
-       goTo(buildOPACLink(args));\r
-}\r
-\r
-\r
+var searchBarExpanded = false;
+/* our search selector boxes */
+var _ts, _fs;
+var isFrontPage = false;
+G.evt.common.init.push(searchBarInit);
+
+/* if set by the org selector, this will be the location used the
+       next time the search is submitted */
+var newSearchLocation; 
+var newSearchDepth = null;
+
+
+function searchBarInit() {
+
+       _ts = G.ui.searchbar.type_selector;
+       _fs = G.ui.searchbar.form_selector;
+
+       try{G.ui.searchbar.text.focus();}catch(e){}
+       G.ui.searchbar.text.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };
+       _ts.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };
+       _fs.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };
+
+       G.ui.searchbar.submit.onclick = searchBarSubmit;
+
+       /* set up the selector objects, etc */
+       G.ui.searchbar.text.value = (getTerm() != null) ? getTerm() : "";
+       G.ui.searchbar.facets.value = (getFacet() != null) ? getFacet() : "";
+       setSelector(_ts,        getStype());
+       setSelector(_fs,        getForm());
+
+       depthSelInit();
+       
+       if(getSearches()) {
+               var searches = JSON2js(getSearches());
+               setSelector(_fs, searches[1].term);
+               if(!G.ui.searchbar.text.value) G.ui.searchbar.text.value = searches[0].term;            
+       }
+
+       if(!isFrontPage && (findCurrentPage() != MYOPAC)) {
+               attachEvt('common','depthChanged', searchBarSubmit);
+       }
+
+    if( (limit = $('opac.result.limit2avail')) ) {
+        if(getAvail()) limit.checked = true;
+        if(getSort() && getSortDir()) 
+            setSelector($('opac.result.sort'), getSort()+'.'+getSortDir());
+    }
+       
+       if( (limit2 = $('opac.result.limit2avail2')) ) if(getAvail()) limit2.checked = true;
+}
+
+function searchBarSubmit(isFilterSort) {
+       var text = G.ui.searchbar.text.value;
+       var facet_text = isFrontPage ? '' : G.ui.searchbar.facets.value;
+       clearSearchParams();
+       if(!text || text == "" || text == "Search Keyword") return;
+       //var d = (newSearchDepth != null) ?  newSearchDepth : depthSelGetDepth();
+       var d = getDepth();
+       if(isNaN(d)) d = 0;
+       var args = {};
+       
+       if(SHOW_MR_DEFAULT || (isFilterSort && findCurrentPage() == MRESULT)) {
+               args.page                               = MRESULT;
+       } else {
+               args.page                               = RRESULT;
+               args[PARAM_RTYPE]               = _ts.options[_ts.selectedIndex].value;
+       }
+
+// The following commented-out code does not do what it is apparently
+// intended to do and has no effect on search other than causing load
+/*
+       args[PARAM_STYPE] = _ts.options[_ts.selectedIndex].value;
+       args[PARAM_LOCATION] = depthSelGetNewLoc();
+       args[PARAM_DEPTH]               = d;
+
+       var val = _fs.options[_fs.selectedIndex].value;
+       if(val!='') {
+               args[PARAM_SEARCHES] = '[{"term":"'+text+'","restrict":[{"tag":"245","subfield":"a"}]},{"term":"'+val+'","restrict":[{"tag":"998","subfield":"d"}]}]';
+               args[PARAM_ADVTYPE] = ADVTYPE_MARC;
+               args[PARAM_TERM] = "";
+               args[PARAM_FORM] = 'all';
+               args[PARAM_RTYPE] = RTYPE_MARC;
+       } else {
+               args[PARAM_TERM] = text;
+               args[PARAM_FACET]= facet_text;
+       }
+*/
+
+    args[PARAM_STYPE]       = _ts.options[_ts.selectedIndex].value;
+    args[PARAM_TERM]        = text;
+    args[PARAM_FACET]       = facet_text;
+    args[PARAM_LOCATION] = depthSelGetNewLoc();
+    args[PARAM_DEPTH]       = d;
+    args[PARAM_FORM]        = _fs.options[_fs.selectedIndex].value;
+
+    if($('opac.result.limit2avail') && !arguments[1]) {
+        args[PARAM_AVAIL] = ($('opac.result.limit2avail').checked) ? 1 : '';
+        if( (val = getSelectorVal($('opac.result.sort'))) ) {
+            args[PARAM_SORT] = val.split('.')[0];
+            args[PARAM_SORT_DIR] = val.split('.')[1];
+        }
+    } else if(arguments[1]) {
+        args[PARAM_AVAIL] = (arguments[1].checked) ? 1 : '';
+        if( (val = getSelectorVal($('opac.result.sort'))) ) {
+            args[PARAM_SORT] = val.split('.')[0];
+            args[PARAM_SORT_DIR] = val.split('.')[1];
+        }
+       }
+
+       goTo(buildOPACLink(args));
+}
+
+
index 35280ea..9059a17 100644 (file)
-var anonListCache;\r
-var webCacheKey;\r
-var userVitalStats;\r
-\r
-function opac_init() {\r
-       var advLink = getId("home_adv_search_link");\r
-       if(advLink) advLink.setAttribute("href", buildOPACLink({page:ADVANCED})); \r
-       getId("home_myopac_link").setAttribute("href", buildOPACLink({page:MYOPAC}, false, true));\r
-       getId("myopac_link").setAttribute("href", buildOPACLink({page:MYOPAC}, false, true));\r
-       getOrgs();\r
-       \r
-  var u = grabUser();\r
-  if(u) {\r
-       unHideMe($('dash_wrapper'));\r
-         //alert(fetchOrgSettingDefault(G.user.home_ou(), 'auth.persistent_login_interval'));\r
-       try {\r
-         var stats = fieldmapper.standardRequest(['open-ils.actor', 'open-ils.actor.user.opac.vital_stats'], {async:false, params:[u.session]});\r
-       } catch(e){}\r
-       userVitalStats = stats;\r
-       if(!stats) return;\r
-       \r
-       var dashfines = $('dash_fines');\r
-       if(stats.fines.balance_owed > 0) {\r
-               dashfines.style.color = "#f41d36";\r
-               dashfines.innerHTML = "$"+parseFloat(stats.fines.balance_owed).toFixed(2)\r
-       } else {\r
-               dashfines.style.fontWeight="normal";\r
-               dashfines.innerHTML = "No";\r
-       }\r
-       $('dash_user').innerHTML = u.first_given_name()+' '+u.family_name();\r
-       $('dash_checked').innerHTML = stats.checkouts.out+stats.checkouts.overdue;\r
-       $('dash_holds').innerHTML = stats.holds.total;\r
-       $('dash_pickup').innerHTML = stats.holds.ready;\r
-  } else unHideMe($('your-acct-login'));\r
-}\r
-\r
-function mySuperInitFunction() {\r
-       G.ui.common.now_searching = elem('div');\r
-       webCacheKey = cookieManager.read('sessionID');\r
-       var list = getCacheValue('anonListCache');\r
-       anonListCache = isTrue(list)?list:[];\r
-       if(anonListCache.length) try { unHideMe($('cacheListLink')); } catch(e){}\r
-       \r
-       if(G.user && G.user.prefs[PREF_DEF_LOCATION]!="1") {\r
-         G.user.prefs[PREF_DEF_LOCATION]="1";\r
-         LOCATION = "1";\r
-         commitUserPrefs();\r
-         setSelector($('depth_selector'),      getLocation());\r
-         _newlocation = getLocation();\r
-       }\r
-}\r
-\r
-function setCacheValue(field, value, timeout) {\r
-       if(!timeout) timeout = '30m';\r
-       var key = fieldmapper.standardRequest(['open-ils.actor','open-ils.actor.anon_cache.set_value'],{async:false, params:[webCacheKey, field, value]});\r
-       if(!isTrue(webCacheKey)) {\r
-               webCacheKey = key;\r
-               cookieManager.write('sessionID', webCacheKey, timeout);\r
-       }\r
-       return key;\r
-}\r
-\r
-function getCacheValue(field) {\r
-       if(!isTrue(webCacheKey)) return null;\r
-       var val = fieldmapper.standardRequest(['open-ils.actor','open-ils.actor.anon_cache.get_value'], {async:false, params:[webCacheKey, field]});\r
-       return val;\r
-}\r
-\r
-function isInAnonList(id) {\r
-       for(var i in anonListCache) {\r
-               if(anonListCache[i] == id) return true;\r
-       }       \r
-       return false;\r
-}\r
-\r
-var isCacheListDrawn = false;\r
-var anonListParent;\r
-var anonListTemp;\r
-function showCachedList() {\r
-       if(grabUser()) goTo(buildOPACLink({page:MYOPAC, 'acctpage':6}, false, true));\r
-       if(!anonListCache.length) {try { hideResultsPage(); } catch(e) {} hideMe($('anonListTable')); hideMe($('cacheListLink')); return;}\r
-       try { hideResultsPage(true); } catch(e) {}\r
-       unHideMe($('anonListTable'));\r
-       if(!isCacheListDrawn) fieldmapper.standardRequest(["open-ils.search","open-ils.search.biblio.record.mods_slim.retrieve"],{async:true, params:[anonListCache], oncomplete:drawCacheList});       \r
-}\r
-\r
-function drawCacheList(r) {\r
-       isCacheListDrawn = true;\r
-       var bibs = r.recv().content();\r
-       if(!anonListParent) anonListParent = $('anonListParent');\r
-       if(!anonListTemp) anonListTemp = anonListParent.removeChild($('anonListTemp'));\r
-       removeChildren(anonListParent);\r
-       $('anon_selector').checked = false;\r
-       \r
-       if(grabUser()) {\r
-               unHideMe($('holdsCacheSel'));\r
-               setSelector($('holdsCacheSel'), grabUser().home_ou());\r
-       }\r
-       \r
-       for(var i in bibs) {\r
-               var row = anonListTemp.cloneNode(true);\r
-               $n(row, 'anon_selector').doc_id = bibs[i].doc_id();\r
-               $n(row, 'curr_row').innerHTML = parseInt(i)+1;\r
-               $n(row, 'title').innerHTML = bibs[i].title();\r
-               anonListParent.appendChild(row);\r
-       }\r
-}\r
-\r
-function createBibHoldObject(org) {\r
-       if(!G.user) return null;\r
-       if(!org) org = G.user.home_ou();\r
-       \r
-       var node = findOrgUnit(org);\r
-       var ntype = findOrgType(node.ou_type());\r
-       if(!ntype.can_have_users()) return null;\r
-       \r
-       var hold = new ahr();\r
-       var interval = fetchOrgSettingDefault(G.user.home_ou(), 'circ.hold_expire_interval');\r
-       if(!interval) interval = 0;\r
-       var secs = interval_to_seconds(interval);\r
-       var expire = new Date();\r
-       expire.setTime(expire.getTime() + Number(secs + '000'));\r
-       var expireDate = holdsVerifyThawDate(dojo.date.stamp.toISOString(expire)); \r
-       \r
-       if(expireDate) hold.expire_time(expireDate);\r
-       hold.phone_notify("");\r
-       hold.email_notify(0);\r
-       hold.pickup_lib(org);\r
-       hold.usr(G.user.id());\r
-       hold.hold_type("T");\r
-       hold.frozen('f');\r
-       hold.thaw_date(null);\r
-       \r
-       return hold;\r
-}\r
-\r
-function batchHoldMyList(org, parent) {\r
-       if(!grabUser()) return;\r
-       if(!org) G.user.home_ou();\r
-       if(!parent) parent = $('myopac_bookbag_div');\r
-       \r
-       var nodes = dojo.query('input[name=list_action_chbx]', parent).filter(function(node, index){ return node.checked; });\r
-       if(!nodes.length) return;\r
-       var arr = [];\r
-       nodes.forEach(function(node, index){ arr.push(node.getAttribute("recordid")); });\r
-       var error = {err:""};\r
-       var resp = placeBatchHold(arr, org, error);\r
-       if(resp == -1) alert("Unable to place holds"); else alert(resp+" hold"+(resp==1?"":"s")+" placed successfully\n\n"+error.err);\r
-\r
-}\r
-\r
-function placeBatchHold(ids, org, error) { // array of bib IDs, pickup lib (optional), error msgs from holds (optional)\r
-       if(!grabUser() || !ids.length) return -1;\r
-       if(!org) org = G.user.home_ou();\r
-       \r
-       var holds = [];\r
-       var chkArr = [];\r
-       for(var i=0; i<ids.length; i++) {\r
-               holds[i] = createBibHoldObject(org);\r
-               holds[i].target(ids[i]);\r
-               chkArr.push({titleid: ids[i], volume_id: undefined, copy_id: undefined, hold_type: "T", patronid: G.user.id(), depth: 0, pickup_lib: org});\r
-       }\r
-       \r
-       var resp = fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.title_hold.is_possible.batch.atomic'], {async:false, params:[grabUser().session, chkArr]});\r
-       //if(resp.last_event) alert(resp.last_event.payload.fail_part); else alert('Mulit-hold successful\n'+resp.local_avail);\r
-       \r
-       var str = "";\r
-       var errCount = 0;\r
-       var flag = false;\r
-       for(var n in resp) {\r
-               if(!resp[n].success) {\r
-                       flag = true;\r
-                       str+=ids[n]+": "+(resp[n].last_event.desc==""?resp[n].last_event.textcode:resp[n].last_event.desc)+"\n";\r
-                       errCount++;\r
-               }\r
-       }\r
-       \r
-       if(str != "") error.err+=errCount+" hold"+(errCount==1?"":"s")+" not placed successfully\n"+str;\r
-       if(flag) return 0;\r
-       \r
-       var resp2 = fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.holds.create.batch.atomic'], {async:false, params:[grabUser().session, holds]});\r
-       var count = -1;\r
-       for(var t in resp2) {\r
-               if(typeof(resp2[t]) != "object") count++; else {\r
-                       str+=ids[t]+": "+resp2[t][0].desc+"\n";\r
-                       errCount++;\r
-               }\r
-       }\r
-       if(str != "") error.err+=errCount+" holds not placed successfully\n"+str;\r
-       return ++count;\r
-}\r
-\r
-function placeHoldOnCache() {\r
-       //holdsDrawWindow(true);\r
-       var holdsArr = [];\r
-       dojo.query('input[name=anon_selector]',$('anonListParent')).filter(function(node, index){\r
-               if(node.checked) holdsArr.push(node.doc_id+'');\r
-       });\r
-       \r
-       if(!holdsArr.length) return;\r
-       setCacheValue('saveAnonCache', holdsArr);\r
-       goTo(buildOPACLink({page:MYOPAC}, false, true));\r
-}\r
-\r
-function delSelCache(parent, name) {\r
-       if(!parent) parent = $('anonListParent');\r
-       if(!name) name = 'anon_selector';\r
-       anonListCache = [];\r
-       var found = false;\r
-       var nodes = dojo.query('input[name='+name+']',parent);\r
-       if(!nodes.length) nodes = dojo.query('.'+name,parent);\r
-       nodes.forEach(function(node, index){\r
-               if(!node.checked) anonListCache.push(node.doc_id); else {\r
-                       found = true;\r
-                       var holdsLink = $n($('result_table_template_'+node.doc_id), 'result_my_list_link');\r
-                       if(holdsLink) {\r
-                               removeChildren(holdsLink);\r
-                               holdsLink.innerHTML = '';\r
-                               holdsLink.appendChild(elem('img', {src:'/opac/skin/kcls/graphics/add_mylist.gif'}, null));\r
-                               holdsLink.title = "Add to my list";\r
-                       }\r
-               }\r
-       });\r
-       \r
-       if(found) {\r
-               isCacheListDrawn = false;\r
-               setCacheValue('anonListCache', anonListCache);\r
-               if(name=='anon_selector') showCachedList();\r
-       }\r
-}\r
-\r
-String.prototype.trim = function() {\r
-       return this.replace(/^\s+|\s+$/g,"");\r
-}\r
-String.prototype.ltrim = function() {\r
-       return this.replace(/^\s+/,"");\r
-}\r
-String.prototype.rtrim = function() {\r
-       return this.replace(/\s+$/,"");\r
-}\r
-\r
-\r
-//////////////////////\r
-//Stephen Chapman\r
-document.getElementsByClassName = function(cl) {\r
-var retnode = [];\r
-var myclass = new RegExp('\\b'+cl+'\\b');\r
-var elems = document.getElementsByTagName('*');\r
-for (var i = 0; i < elems.length; i++) {\r
-var classes = elems[i].className;\r
-if (myclass.test(classes)) retnode.push(elems[i]);\r
-}\r
-return retnode;\r
-};\r
-\r
-$c = document.getElementsByClassName;\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-function getOrgs() {\r
-  var tree = $('depth_selector');\r
-  buildOrgSel(tree, globalOrgTree, 0);\r
-  setSelector(tree, getLocation());\r
-  //setSelector(tree, "1");\r
-}\r
-\r
-function swapTabs(el) {\r
-  if(!el) return;\r
-  var tabs = dojo.query("a",el.parentNode.id);\r
-  for(var n=0; n< tabs.length;n++) {\r
-       var i = tabs[n];\r
-       if(i==el) {\r
-         unHideMe($(i.rel));\r
-         i.style.background="url('/opac/skin/kcls/graphics/"+i.id+"_on.gif') no-repeat bottom";\r
-       } else {\r
-         hideMe($(i.rel));\r
-         i.style.background="url('/opac/skin/kcls/graphics/"+i.id+"_off.gif') no-repeat bottom";\r
-       }\r
-  }\r
-}\r
-\r
-// walk the marc record dom - returns a concatenated string of the requested marc subfields\r
-// depth-first recursive function\r
-function walkXML(xml,field,subfield) {\r
-       if(!xml || !field || !subfield) return "";\r
-       var nodes = (xml.childNodes)?xml.childNodes:null;\r
-       if(!nodes) return "";\r
-       var str = "";\r
-       \r
-       for(var i=0; i<nodes.length; i++) {\r
-               var obj = nodes[i];\r
-               if(obj.hasChildNodes()) {\r
-                       var tag = (obj.nodeName=="datafield")?obj.getAttribute("tag"):"";\r
-                       if(tag==field) {\r
-                         for(var n=0; n<obj.childNodes.length; n++){\r
-                           var child = obj.childNodes[n];\r
-                           var code = (child.nodeName=="subfield")?child.getAttribute("code"):"";\r
-                           if(code==subfield) str += (child.textContent)?child.textContent:child.text; // IE check\r
-                         }\r
-                       }\r
-                       str += walkXML(obj,field,subfield);\r
-               }\r
-       }\r
-       return str;\r
-}\r
-\r
-// returns the requested marc data or passes it to callback if present\r
-// callback arg is optional\r
-function getMarcData(docid, field, subfield, callback) {\r
-       if(!docid || !field || !subfield) return "";\r
-       var cgi = new CGI();\r
-       var xhr = buildXMLRequest();\r
-       var proto = (location.href.match(/^[Hh][Tt][Tt][Pp][Ss]:/))?"https://":"http://";\r
-       \r
-       if(typeof(callback)=="function") {\r
-               xhr.onreadystatechange = function() {\r
-                               if(xhr.readyState==4 && xhr.status == 200) callback(walkXML(xhr.responseXML.documentElement,field.toLowerCase(),subfield.toLowerCase()), docid);\r
-               }\r
-       }\r
-       \r
-       xhr.open("GET",proto+cgi.server_name+"/opac/extras/supercat/retrieve/marcxml/record/"+docid,((callback)?true:false));\r
-       xhr.send(null);\r
-       \r
-       if(typeof(callback)!="function" && xhr.status == 200) {\r
-               return walkXML(xhr.responseXML.documentElement,field.toLowerCase(),subfield.toLowerCase());\r
-       } else return "";\r
-}\r
-\r
-function setFormatIcon(imgEl, type) {\r
-       if(!imgEl) return false;\r
-       if(!type) { hideMe(imgEl); return false; }\r
-       var img = "";\r
-       \r
-       switch(type.toLowerCase()) {\r
-         case "a": img="media_book.png"; break;\r
-         case "b": img="media_magazines.png"; break;\r
-         case "c": img="media_printedmusic.jpg"; break;\r
-         case "d": img="media_microform.jpg"; break;\r
-         case "e": img="media_equipment.png"; break;\r
-         case "f": img="media_films.png"; break;\r
-         case "g": img="media_films.png"; break;\r
-         case "h": img="media_dvd.jpg"; break;\r
-         case "i": img="media_bookoncassette.jpg"; break;\r
-         case "j": img="media_musiccd.png"; break;\r
-         case "k": img="media_musiccassette.jpg"; break;\r
-         case "l": img="media_musicrecord.jpg"; break;\r
-         case "m": img="media_software.jpg"; break;\r
-         case "n": img="media_bookoncd.png"; break;\r
-         case "o": img="media_kit.jpg"; break;\r
-         case "p": img="media_newspaper.jpg"; break;\r
-         case "q": img="media_largeprint.jpg"; break;\r
-         case "r": img="media_3dobject.jpg"; break;\r
-         case "s": img="media_slide.jpg"; break;\r
-         case "t": img="media_online.jpg"; break;\r
-         case "u": img="media_eaudio.jpg"; break;\r
-         case "v": img="media_ebooktext.png"; break;\r
-         case "w": img="media_eaudio.png"; break;\r
-         case "x": img="media_downloadmusic.png"; break;\r
-         case "y": img="media_downloadvideo.jpg"; break;\r
-         case "z": img="media_map.jpg"; break;\r
-         case "2": img="media_cassettewithbook.png"; break;\r
-         case "5": img="media_cdwithbook.png"; break;\r
-       }\r
-       \r
-       if(img) {\r
-               imgEl.title = get998dValue(type);\r
-               dojo.attr(imgEl, "src","/opac/skin/kcls/graphics/"+img);\r
-               dojo.attr(imgEl, "alt", get998dValue(type));\r
-       } else { hideMe(imgEl); return false; }\r
-       \r
-       unHideMe(imgEl);\r
-       return true;\r
-}\r
-\r
-function get998dValue(code) {\r
-       if(!code) code = "";\r
-       code = code.toLowerCase();\r
-       var Label = "";\r
-       \r
-       switch(code) {\r
-               case "a": Label = "Book"; break;\r
-               case "i": Label = "Book on cassette"; break;\r
-               case "n": Label = "Book on CD"; break;\r
-               case "x": Label = "Download music"; break;\r
-               case "y": Label = "Download video"; break;\r
-               case "h": Label = "DVD"; break;\r
-               case "w": Label = "eBook - Audio"; break;\r
-               case "v": Label = "eBook - Text"; break;\r
-               case "e": Label = "Equipment"; break;\r
-               case "f": Label = "Films"; break;\r
-               case "o": Label = "Kit"; break;\r
-               case "q": Label = "Large print"; break;\r
-               case "b": Label = "Magazine"; break;\r
-               case "d": Label = "Microform"; break;\r
-               case "k": Label = "Music cassette"; break;\r
-               case "j": Label = "Music CD"; break;\r
-               case "l": Label = "Music LP"; break;\r
-               case "p": Label = "Newspaper"; break;\r
-               case "t": Label = "Online"; break;\r
-               case "u": Label = "Player"; break;\r
-               case "c": Label = "Printed music"; break;\r
-               case "2": Label = "Read along with cassette"; break;\r
-               case "5": Label = "Read along with CD"; break;\r
-               case "c": Label = "Scores"; break;\r
-               case "m": Label = "Software"; break;\r
-               case "g": Label = "Video"; break;\r
-               case "r": Label = "3-D Object"; break;\r
-               case "z": Label = "Map"; break;\r
-               case "s": Label = "Slide set"; break;\r
-       }\r
-       return Label;\r
-}\r
-\r
-function mapLibUrl(lib) {\r
-       var url = "";\r
-       switch(lib) {\r
-               case "1489": url = "http://www.kcls.org/algonapacific/"; break;\r
-               case "1490": url = "http://www.kcls.org/auburn/"; break;\r
-               case "1492": url = "http://www.kcls.org/bellevue/"; break;\r
-               case "1491": url = "http://www.kcls.org/blackdiamond/"; break;\r
-               case "1493": url = "http://www.kcls.org/bothell/"; break;\r
-               case "1494": url = "http://www.kcls.org/boulevardpark/"; break;\r
-               case "1495": url = "http://www.kcls.org/burien/"; break;\r
-               case "1496": url = "http://www.kcls.org/carnation/"; break;\r
-               case "1497": url = "http://www.kcls.org/covington/"; break;\r
-               case "1502": url = "http://www.kcls.org/desmoines/"; break;\r
-               case "1503": url = "http://www.kcls.org/duvall/"; break;\r
-               case "1508": url = "http://www.kcls.org/fairwood/"; break;\r
-               case "1506": url = "http://www.kcls.org/fallcity/"; break;\r
-               case "1509": url = "http://www.kcls.org/federalway/"; break;\r
-               case "1505": url = "http://www.kcls.org/320th/"; break;\r
-               case "1507": url = "http://www.kcls.org/foster/"; break;\r
-               case "1513": url = "http://www.kcls.org/issaquah/"; break;\r
-               case "1519": url = "http://www.kcls.org/kenmore/"; break;\r
-               case "1520": url = "http://www.kcls.org/kent/"; break;\r
-               case "1517": url = "http://www.kcls.org/kingsgate/"; break;\r
-               case "1518": url = "http://www.kcls.org/kirkland/"; break;\r
-               case "1521": url = "http://www.kcls.org/lakeforestpark/"; break;\r
-               case "1522": url = "http://www.kcls.org/lakehills/"; break;\r
-               case "1499": url = "http://www.kcls.org/crossroads/"; break;\r
-               case "1538": url = "http://www.kcls.org/southcenter/"; break;\r
-               case "1527": url = "http://www.kcls.org/maplevalley/"; break;\r
-               case "1525": url = "http://www.kcls.org/mercerisland/"; break;\r
-               case "1526": url = "http://www.kcls.org/muckleshoot/"; break;\r
-               case "1529": url = "http://www.kcls.org/newportway/"; break;\r
-               case "1528": url = "http://www.kcls.org/northbend/"; break;\r
-               case "1533": url = "http://www.kcls.org/redmond/"; break;\r
-               case "1532": url = "http://www.kcls.org/richmondbeach/"; break;\r
-               case "1534": url = "http://www.kcls.org/sammamish/"; break;\r
-               case "1536": url = "http://www.kcls.org/skykomish/"; break;\r
-               case "1541": url = "http://www.kcls.org/skyway/"; break;\r
-               case "1537": url = "http://www.kcls.org/snoqualmie/"; break;\r
-               case "1546": url = "http://www.kcls.org/valleyview/"; break;\r
-               case "1545": url = "http://www.kcls.org/vashon/"; break;\r
-               case "1547": url = "http://www.kcls.org/whitecenter/"; break;\r
-               case "1548": url = "http://www.kcls.org/woodinville/"; break;\r
-               case "1549": url = "http://www.kcls.org/woodmont/"; break;\r
-               case "1535": url = "http://www.kcls.org/shoreline/"; break;\r
-               case "1540": url = "http://www.kcls.org/servicecenter/"; break;\r
-               case "1510": url = "http://www.kcls.org/greenbridge/"; break;\r
-               //case "": url = "http://www.kcls.org/federalway/#closure"; break;\r
-               case "1559": url = "http://www.kcls.org/libraryexpress/"; break;\r
-               case "1556": url = "http://www.kcls.org/renton/"; break;\r
-               case "1557": url = "http://www.kcls.org/rentonhighlands/"; break;\r
-               default: url = "";\r
-       }\r
-       return url;\r
-}\r
-\r
-function checkAll(parent, id, name) {//Object, string\r
-       var obj = typeof(id)=="object"?id:$(id);\r
-       if(!parent || !obj) return;\r
-       if(!name) name = id.toString();\r
-       var nodes = dojo.query('input[name='+name+']', parent);\r
-       if(!nodes.length) nodes = dojo.query('.'+name, parent);\r
-       nodes.forEach(function(node, index){\r
-               node.checked = obj.checked;\r
-       });\r
-}\r
-\r
-var blinkMeArr = [];\r
-function blinkMe(str,bool) {\r
-       var obj = $(str);\r
-       if(!obj) return;\r
-       \r
-       if(bool) {\r
-               clearInterval(blinkMeArr[str]);\r
-               hideMe(obj);\r
-       } else blinkMeArr[str] = setInterval(function(){\r
-               obj.blinker?hideMe(obj):unHideMe(obj);\r
-               obj.blinker=!obj.blinker;}, 500);\r
-}\r
-\r
-// null out all children of parent obj\r
-errCounter=0;\r
-errCounter2=0;\r
-function destroyObj(obj) {\r
-       errCounter++;\r
-       if(!obj) return;\r
-       errCounter2++;\r
-       for(var i in obj) {\r
-               if(typeof(obj[i])=="function" && i=="destroyObj") continue;\r
-               if(typeof(obj[i])=="object" && obj[i]!=null && typeof(obj[i].tagName)=="undefined") destroyObj(obj[i]);\r
-               try { obj[i]=null; } catch(e){}\r
-       }\r
-       obj=null;\r
-}\r
-\r
-attachEvt("common","init",mySuperInitFunction);\r
+var anonListCache;
+var webCacheKey;
+var userVitalStats;
+
+function opac_init() {
+       var advLink = getId("home_adv_search_link");
+       if(advLink) advLink.setAttribute("href", buildOPACLink({page:ADVANCED})); 
+       getId("home_myopac_link").setAttribute("href", buildOPACLink({page:MYOPAC}, false, true));
+       getId("myopac_link").setAttribute("href", buildOPACLink({page:MYOPAC}, false, true));
+       getOrgs();
+       
+  var u = grabUser();
+  if(u) {
+       unHideMe($('dash_wrapper'));
+         //alert(fetchOrgSettingDefault(G.user.home_ou(), 'auth.persistent_login_interval'));
+       try {
+         var stats = fieldmapper.standardRequest(['open-ils.actor', 'open-ils.actor.user.opac.vital_stats'], {async:false, params:[u.session]});
+       } catch(e){}
+       userVitalStats = stats;
+       if(!stats) return;
+       
+       var dashfines = $('dash_fines');
+       if(stats.fines.balance_owed > 0) {
+               dashfines.style.color = "#f41d36";
+               dashfines.innerHTML = "$"+parseFloat(stats.fines.balance_owed).toFixed(2)
+       } else {
+               dashfines.style.fontWeight="normal";
+               dashfines.innerHTML = "No";
+       }
+       $('dash_user').innerHTML = u.first_given_name()+' '+u.family_name();
+       $('dash_checked').innerHTML = stats.checkouts.out+stats.checkouts.overdue;
+       $('dash_holds').innerHTML = stats.holds.total;
+       $('dash_pickup').innerHTML = stats.holds.ready;
+  } else unHideMe($('your-acct-login'));
+}
+
+function mySuperInitFunction() {
+       G.ui.common.now_searching = elem('div');
+       webCacheKey = cookieManager.read('sessionID');
+       var list = getCacheValue('anonListCache');
+       anonListCache = isTrue(list)?list:[];
+       if(anonListCache.length) try { unHideMe($('cacheListLink')); } catch(e){}
+       
+       if(G.user && G.user.prefs[PREF_DEF_LOCATION]!="1") {
+         G.user.prefs[PREF_DEF_LOCATION]="1";
+         LOCATION = "1";
+         commitUserPrefs();
+         setSelector($('depth_selector'),      getLocation());
+         _newlocation = getLocation();
+       }
+}
+
+function setCacheValue(field, value, timeout) {
+       if(!timeout) timeout = '30m';
+       var key = fieldmapper.standardRequest(['open-ils.actor','open-ils.actor.anon_cache.set_value'],{async:false, params:[webCacheKey, field, value]});
+       if(!isTrue(webCacheKey)) {
+               webCacheKey = key;
+               cookieManager.write('sessionID', webCacheKey, timeout);
+       }
+       return key;
+}
+
+function getCacheValue(field) {
+       if(!isTrue(webCacheKey)) return null;
+       var val = fieldmapper.standardRequest(['open-ils.actor','open-ils.actor.anon_cache.get_value'], {async:false, params:[webCacheKey, field]});
+       return val;
+}
+
+function isInAnonList(id) {
+       for(var i in anonListCache) {
+               if(anonListCache[i] == id) return true;
+       }       
+       return false;
+}
+
+var isCacheListDrawn = false;
+var anonListParent;
+var anonListTemp;
+function showCachedList() {
+       if(grabUser()) goTo(buildOPACLink({page:MYOPAC, 'acctpage':6}, false, true));
+       if(!anonListCache.length) {try { hideResultsPage(); } catch(e) {} hideMe($('anonListTable')); hideMe($('cacheListLink')); return;}
+       try { hideResultsPage(true); } catch(e) {}
+       unHideMe($('anonListTable'));
+       if(!isCacheListDrawn) fieldmapper.standardRequest(["open-ils.search","open-ils.search.biblio.record.mods_slim.retrieve"],{async:true, params:[anonListCache], oncomplete:drawCacheList});       
+}
+
+function drawCacheList(r) {
+       isCacheListDrawn = true;
+       var bibs = r.recv().content();
+       if(!anonListParent) anonListParent = $('anonListParent');
+       if(!anonListTemp) anonListTemp = anonListParent.removeChild($('anonListTemp'));
+       removeChildren(anonListParent);
+       $('anon_selector').checked = false;
+       
+       if(grabUser()) {
+               unHideMe($('holdsCacheSel'));
+               setSelector($('holdsCacheSel'), grabUser().home_ou());
+       }
+       
+       for(var i in bibs) {
+               var row = anonListTemp.cloneNode(true);
+               $n(row, 'anon_selector').doc_id = bibs[i].doc_id();
+               $n(row, 'curr_row').innerHTML = parseInt(i)+1;
+               $n(row, 'title').innerHTML = bibs[i].title();
+               anonListParent.appendChild(row);
+       }
+}
+
+function createBibHoldObject(org) {
+       if(!G.user) return null;
+       if(!org) org = G.user.home_ou();
+       
+       var node = findOrgUnit(org);
+       var ntype = findOrgType(node.ou_type());
+       if(!ntype.can_have_users()) return null;
+       
+       var hold = new ahr();
+       var interval = fetchOrgSettingDefault(G.user.home_ou(), 'circ.hold_expire_interval');
+       if(!interval) interval = 0;
+       var secs = interval_to_seconds(interval);
+       var expire = new Date();
+       expire.setTime(expire.getTime() + Number(secs + '000'));
+       var expireDate = holdsVerifyThawDate(dojo.date.stamp.toISOString(expire)); 
+       
+       if(expireDate) hold.expire_time(expireDate);
+       hold.phone_notify("");
+       hold.email_notify(0);
+       hold.pickup_lib(org);
+       hold.usr(G.user.id());
+       hold.hold_type("T");
+       hold.frozen('f');
+       hold.thaw_date(null);
+       
+       return hold;
+}
+
+function batchHoldMyList(org, parent) {
+       if(!grabUser()) return;
+       if(!org) G.user.home_ou();
+       if(!parent) parent = $('myopac_bookbag_div');
+       
+       var nodes = dojo.query('input[name=list_action_chbx]', parent).filter(function(node, index){ return node.checked; });
+       if(!nodes.length) return;
+       var arr = [];
+       nodes.forEach(function(node, index){ arr.push(node.getAttribute("recordid")); });
+       var error = {err:""};
+       var resp = placeBatchHold(arr, org, error);
+       if(resp == -1) alert("Unable to place holds"); else alert(resp+" hold"+(resp==1?"":"s")+" placed successfully\n\n"+error.err);
+
+}
+
+function placeBatchHold(ids, org, error) { // array of bib IDs, pickup lib (optional), error msgs from holds (optional)
+       if(!grabUser() || !ids.length) return -1;
+       if(!org) org = G.user.home_ou();
+       
+       var holds = [];
+       var chkArr = [];
+       for(var i=0; i<ids.length; i++) {
+               holds[i] = createBibHoldObject(org);
+               holds[i].target(ids[i]);
+               chkArr.push({titleid: ids[i], volume_id: undefined, copy_id: undefined, hold_type: "T", patronid: G.user.id(), depth: 0, pickup_lib: org});
+       }
+       
+       var resp = fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.title_hold.is_possible.batch.atomic'], {async:false, params:[grabUser().session, chkArr]});
+       //if(resp.last_event) alert(resp.last_event.payload.fail_part); else alert('Mulit-hold successful\n'+resp.local_avail);
+       
+       var str = "";
+       var errCount = 0;
+       var flag = false;
+       for(var n in resp) {
+               if(!resp[n].success) {
+                       flag = true;
+                       str+=ids[n]+": "+(resp[n].last_event.desc==""?resp[n].last_event.textcode:resp[n].last_event.desc)+"\n";
+                       errCount++;
+               }
+       }
+       
+       if(str != "") error.err+=errCount+" hold"+(errCount==1?"":"s")+" not placed successfully\n"+str;
+       if(flag) return 0;
+       
+       var resp2 = fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.holds.create.batch.atomic'], {async:false, params:[grabUser().session, holds]});
+       var count = -1;
+       for(var t in resp2) {
+               if(typeof(resp2[t]) != "object") count++; else {
+                       str+=ids[t]+": "+resp2[t][0].desc+"\n";
+                       errCount++;
+               }
+       }
+       if(str != "") error.err+=errCount+" holds not placed successfully\n"+str;
+       return ++count;
+}
+
+function placeHoldOnCache() {
+       //holdsDrawWindow(true);
+       var holdsArr = [];
+       dojo.query('input[name=anon_selector]',$('anonListParent')).filter(function(node, index){
+               if(node.checked) holdsArr.push(node.doc_id+'');
+       });
+       
+       if(!holdsArr.length) return;
+       setCacheValue('saveAnonCache', holdsArr);
+       goTo(buildOPACLink({page:MYOPAC}, false, true));
+}
+
+function delSelCache(parent, name) {
+       if(!parent) parent = $('anonListParent');
+       if(!name) name = 'anon_selector';
+       anonListCache = [];
+       var found = false;
+       var nodes = dojo.query('input[name='+name+']',parent);
+       if(!nodes.length) nodes = dojo.query('.'+name,parent);
+       nodes.forEach(function(node, index){
+               if(!node.checked) anonListCache.push(node.doc_id); else {
+                       found = true;
+                       var holdsLink = $n($('result_table_template_'+node.doc_id), 'result_my_list_link');
+                       if(holdsLink) {
+                               removeChildren(holdsLink);
+                               holdsLink.innerHTML = '';
+                               holdsLink.appendChild(elem('img', {src:'/opac/skin/kcls/graphics/add_mylist.gif'}, null));
+                               holdsLink.title = "Add to my list";
+                       }
+               }
+       });
+       
+       if(found) {
+               isCacheListDrawn = false;
+               setCacheValue('anonListCache', anonListCache);
+               if(name=='anon_selector') showCachedList();
+       }
+}
+
+String.prototype.trim = function() {
+       return this.replace(/^\s+|\s+$/g,"");
+}
+String.prototype.ltrim = function() {
+       return this.replace(/^\s+/,"");
+}
+String.prototype.rtrim = function() {
+       return this.replace(/\s+$/,"");
+}
+
+
+//////////////////////
+//Stephen Chapman
+document.getElementsByClassName = function(cl) {
+var retnode = [];
+var myclass = new RegExp('\\b'+cl+'\\b');
+var elems = document.getElementsByTagName('*');
+for (var i = 0; i < elems.length; i++) {
+var classes = elems[i].className;
+if (myclass.test(classes)) retnode.push(elems[i]);
+}
+return retnode;
+};
+
+$c = document.getElementsByClassName;
+////////////////////////////////////////////////////////////////////////
+
+function getOrgs() {
+  var tree = $('depth_selector');
+  buildOrgSel(tree, globalOrgTree, 0);
+  setSelector(tree, getLocation());
+  //setSelector(tree, "1");
+}
+
+function swapTabs(el) {
+  if(!el) return;
+  var tabs = dojo.query("a",el.parentNode.id);
+  for(var n=0; n< tabs.length;n++) {
+       var i = tabs[n];
+       if(i==el) {
+         unHideMe($(i.rel));
+         i.style.background="url('/opac/skin/kcls/graphics/"+i.id+"_on.gif') no-repeat bottom";
+       } else {
+         hideMe($(i.rel));
+         i.style.background="url('/opac/skin/kcls/graphics/"+i.id+"_off.gif') no-repeat bottom";
+       }
+  }
+}
+
+// walk the marc record dom - returns a concatenated string of the requested marc subfields
+// depth-first recursive function
+function walkXML(xml,field,subfield) {
+       if(!xml || !field || !subfield) return "";
+       var nodes = (xml.childNodes)?xml.childNodes:null;
+       if(!nodes) return "";
+       var str = "";
+       
+       for(var i=0; i<nodes.length; i++) {
+               var obj = nodes[i];
+               if(obj.hasChildNodes()) {
+                       var tag = (obj.nodeName=="datafield")?obj.getAttribute("tag"):"";
+                       if(tag==field) {
+                         for(var n=0; n<obj.childNodes.length; n++){
+                           var child = obj.childNodes[n];
+                           var code = (child.nodeName=="subfield")?child.getAttribute("code"):"";
+                           if(code==subfield) str += (child.textContent)?child.textContent:child.text; // IE check
+                         }
+                       }
+                       str += walkXML(obj,field,subfield);
+               }
+       }
+       return str;
+}
+
+// returns the requested marc data or passes it to callback if present
+// callback arg is optional
+function getMarcData(docid, field, subfield, callback) {
+       if(!docid || !field || !subfield) return "";
+       var cgi = new CGI();
+       var xhr = buildXMLRequest();
+       var proto = (location.href.match(/^[Hh][Tt][Tt][Pp][Ss]:/))?"https://":"http://";
+       
+       if(typeof(callback)=="function") {
+               xhr.onreadystatechange = function() {
+                               if(xhr.readyState==4 && xhr.status == 200) callback(walkXML(xhr.responseXML.documentElement,field.toLowerCase(),subfield.toLowerCase()), docid);
+               }
+       }
+       
+       xhr.open("GET",proto+cgi.server_name+"/opac/extras/supercat/retrieve/marcxml/record/"+docid,((callback)?true:false));
+       xhr.send(null);
+       
+       if(typeof(callback)!="function" && xhr.status == 200) {
+               return walkXML(xhr.responseXML.documentElement,field.toLowerCase(),subfield.toLowerCase());
+       } else return "";
+}
+
+function setFormatIcon(imgEl, type) {
+       if(!imgEl) return false;
+       if(!type) { hideMe(imgEl); return false; }
+       var img = "";
+       
+       switch(type.toLowerCase()) {
+         case "a": img="media_book.png"; break;
+         case "b": img="media_magazines.png"; break;
+         case "c": img="media_printedmusic.jpg"; break;
+         case "d": img="media_microform.jpg"; break;
+         case "e": img="media_equipment.png"; break;
+         case "f": img="media_films.png"; break;
+         case "g": img="media_films.png"; break;
+         case "h": img="media_dvd.jpg"; break;
+         case "i": img="media_bookoncassette.jpg"; break;
+         case "j": img="media_musiccd.png"; break;
+         case "k": img="media_musiccassette.jpg"; break;
+         case "l": img="media_musicrecord.jpg"; break;
+         case "m": img="media_software.jpg"; break;
+         case "n": img="media_bookoncd.png"; break;
+         case "o": img="media_kit.jpg"; break;
+         case "p": img="media_newspaper.jpg"; break;
+         case "q": img="media_largeprint.jpg"; break;
+         case "r": img="media_3dobject.jpg"; break;
+         case "s": img="media_slide.jpg"; break;
+         case "t": img="media_online.jpg"; break;
+         case "u": img="media_eaudio.jpg"; break;
+         case "v": img="media_ebooktext.png"; break;
+         case "w": img="media_eaudio.png"; break;
+         case "x": img="media_downloadmusic.png"; break;
+         case "y": img="media_downloadvideo.jpg"; break;
+         case "z": img="media_map.jpg"; break;
+         case "2": img="media_cassettewithbook.png"; break;
+         case "5": img="media_cdwithbook.png"; break;
+       }
+       
+       if(img) {
+               imgEl.title = get998dValue(type);
+               dojo.attr(imgEl, "src","/opac/skin/kcls/graphics/"+img);
+               dojo.attr(imgEl, "alt", get998dValue(type));
+       } else { hideMe(imgEl); return false; }
+       
+       unHideMe(imgEl);
+       return true;
+}
+
+function get998dValue(code) {
+       if(!code) code = "";
+       code = code.toLowerCase();
+       var Label = "";
+       
+       switch(code) {
+               case "a": Label = "Book"; break;
+               case "i": Label = "Book on cassette"; break;
+               case "n": Label = "Book on CD"; break;
+               case "x": Label = "Download music"; break;
+               case "y": Label = "Download video"; break;
+               case "h": Label = "DVD"; break;
+               case "w": Label = "eBook - Audio"; break;
+               case "v": Label = "eBook - Text"; break;
+               case "e": Label = "Equipment"; break;
+               case "f": Label = "Films"; break;
+               case "o": Label = "Kit"; break;
+               case "q": Label = "Large print"; break;
+               case "b": Label = "Magazine"; break;
+               case "d": Label = "Microform"; break;
+               case "k": Label = "Music cassette"; break;
+               case "j": Label = "Music CD"; break;
+               case "l": Label = "Music LP"; break;
+               case "p": Label = "Newspaper"; break;
+               case "t": Label = "Online"; break;
+               case "u": Label = "Player"; break;
+               case "c": Label = "Printed music"; break;
+               case "2": Label = "Read along with cassette"; break;
+               case "5": Label = "Read along with CD"; break;
+               case "c": Label = "Scores"; break;
+               case "m": Label = "Software"; break;
+               case "g": Label = "Video"; break;
+               case "r": Label = "3-D Object"; break;
+               case "z": Label = "Map"; break;
+               case "s": Label = "Slide set"; break;
+       }
+       return Label;
+}
+
+function mapLibUrl(lib) {
+       var url = "";
+       switch(lib) {
+               case "1489": url = "http://www.kcls.org/algonapacific/"; break;
+               case "1490": url = "http://www.kcls.org/auburn/"; break;
+               case "1492": url = "http://www.kcls.org/bellevue/"; break;
+               case "1491": url = "http://www.kcls.org/blackdiamond/"; break;
+               case "1493": url = "http://www.kcls.org/bothell/"; break;
+               case "1494": url = "http://www.kcls.org/boulevardpark/"; break;
+               case "1495": url = "http://www.kcls.org/burien/"; break;
+               case "1496": url = "http://www.kcls.org/carnation/"; break;
+               case "1497": url = "http://www.kcls.org/covington/"; break;
+               case "1502": url = "http://www.kcls.org/desmoines/"; break;
+               case "1503": url = "http://www.kcls.org/duvall/"; break;
+               case "1508": url = "http://www.kcls.org/fairwood/"; break;
+               case "1506": url = "http://www.kcls.org/fallcity/"; break;
+               case "1509": url = "http://www.kcls.org/federalway/"; break;
+               case "1505": url = "http://www.kcls.org/320th/"; break;
+               case "1507": url = "http://www.kcls.org/foster/"; break;
+               case "1513": url = "http://www.kcls.org/issaquah/"; break;
+               case "1519": url = "http://www.kcls.org/kenmore/"; break;
+               case "1520": url = "http://www.kcls.org/kent/"; break;
+               case "1517": url = "http://www.kcls.org/kingsgate/"; break;
+               case "1518": url = "http://www.kcls.org/kirkland/"; break;
+               case "1521": url = "http://www.kcls.org/lakeforestpark/"; break;
+               case "1522": url = "http://www.kcls.org/lakehills/"; break;
+               case "1499": url = "http://www.kcls.org/crossroads/"; break;
+               case "1538": url = "http://www.kcls.org/southcenter/"; break;
+               case "1527": url = "http://www.kcls.org/maplevalley/"; break;
+               case "1525": url = "http://www.kcls.org/mercerisland/"; break;
+               case "1526": url = "http://www.kcls.org/muckleshoot/"; break;
+               case "1529": url = "http://www.kcls.org/newportway/"; break;
+               case "1528": url = "http://www.kcls.org/northbend/"; break;
+               case "1533": url = "http://www.kcls.org/redmond/"; break;
+               case "1532": url = "http://www.kcls.org/richmondbeach/"; break;
+               case "1534": url = "http://www.kcls.org/sammamish/"; break;
+               case "1536": url = "http://www.kcls.org/skykomish/"; break;
+               case "1541": url = "http://www.kcls.org/skyway/"; break;
+               case "1537": url = "http://www.kcls.org/snoqualmie/"; break;
+               case "1546": url = "http://www.kcls.org/valleyview/"; break;
+               case "1545": url = "http://www.kcls.org/vashon/"; break;
+               case "1547": url = "http://www.kcls.org/whitecenter/"; break;
+               case "1548": url = "http://www.kcls.org/woodinville/"; break;
+               case "1549": url = "http://www.kcls.org/woodmont/"; break;
+               case "1535": url = "http://www.kcls.org/shoreline/"; break;
+               case "1540": url = "http://www.kcls.org/servicecenter/"; break;
+               case "1510": url = "http://www.kcls.org/greenbridge/"; break;
+               //case "": url = "http://www.kcls.org/federalway/#closure"; break;
+               case "1559": url = "http://www.kcls.org/libraryexpress/"; break;
+               case "1556": url = "http://www.kcls.org/renton/"; break;
+               case "1557": url = "http://www.kcls.org/rentonhighlands/"; break;
+               default: url = "";
+       }
+       return url;
+}
+
+function checkAll(parent, id, name) {//Object, string
+       var obj = typeof(id)=="object"?id:$(id);
+       if(!parent || !obj) return;
+       if(!name) name = id.toString();
+       var nodes = dojo.query('input[name='+name+']', parent);
+       if(!nodes.length) nodes = dojo.query('.'+name, parent);
+       nodes.forEach(function(node, index){
+               node.checked = obj.checked;
+       });
+}
+
+var blinkMeArr = [];
+function blinkMe(str,bool) {
+       var obj = $(str);
+       if(!obj) return;
+       
+       if(bool) {
+               clearInterval(blinkMeArr[str]);
+               hideMe(obj);
+       } else blinkMeArr[str] = setInterval(function(){
+               obj.blinker?hideMe(obj):unHideMe(obj);
+               obj.blinker=!obj.blinker;}, 500);
+}
+
+// null out all children of parent obj
+errCounter=0;
+errCounter2=0;
+function destroyObj(obj) {
+       errCounter++;
+       if(!obj) return;
+       errCounter2++;
+       for(var i in obj) {
+               if(typeof(obj[i])=="function" && i=="destroyObj") continue;
+               if(typeof(obj[i])=="object" && obj[i]!=null && typeof(obj[i].tagName)=="undefined") destroyObj(obj[i]);
+               try { obj[i]=null; } catch(e){}
+       }
+       obj=null;
+}
+
+attachEvt("common","init",mySuperInitFunction);
index cb131d6..06c51c4 100644 (file)
-//var records = {};\r
-var records = [];\r
-var ranks = [];\r
-var onlyrecord = {};\r
-var table;\r
-var mresultPreCache = 200;\r
-var searchTimer;\r
-\r
-attachEvt("common", "unload", mresultUnload);\r
-attachEvt("common", "run", mresultDoSearch);\r
-attachEvt("result", "idsReceived", mresultSetRecords); \r
-attachEvt("result", "idsReceived", mresultCollectRecords); \r
-\r
-function mresultUnload() { removeChildren(table); table = null;}\r
-\r
-hideMe($('copyright_block')); \r
-\r
-function mresultDoSearch() {\r
-       TFORM = null; /* clear the rresult tform var so it's not propogated */\r
-\r
-       swapCanvas($('loading_alt'));\r
-       table = G.ui.result.main_table;\r
-\r
-    var holdTarget = new CGI().param('hold_target');\r
-    if(holdTarget != null) {\r
-        mresultHandlePlaceHold(holdTarget);\r
-        return;\r
-    }\r
-\r
-       while( table.parentNode.rows.length <= (getDisplayCount() + 1) )  \r
-               table.appendChild(G.ui.result.row_template.cloneNode(true));\r
-\r
-       if( (getSearches() || getAdvTerm()) && !getTerm() ) {\r
-               if(getAdvType() == ADVTYPE_MULTI ) mresultCollectAdvIds();\r
-\r
-       } else {\r
-               _mresultCollectIds(); \r
-               ADVTERM = "";\r
-               ADVTYPE = "";\r
-       }\r
-}\r
-\r
-function _mresultCollectIds() { \r
-       resultCollectSearchIds(true, SEARCH_MRS_QUERY, mresultHandleMRIds ); \r
-}\r
-\r
-function mresultCollectAdvIds() { \r
-       resultCollectSearchIds(false, SEARCH_MRS_QUERY, mresultHandleMRIds ); \r
-}\r
-\r
-\r
-function mresultHandleMRIds(r) {\r
-       var res = r.getResultObject();\r
-    resultCompiledSearch = res.compiled_search;\r
-    cookieManager.write(COOKIE_SEARCH, js2JSON(res.compiled_search), -1);\r
-       if(res.count != null) {\r
-               if( getOffset() == 0 ) HITCOUNT = res.count;\r
-               runEvt('result', 'hitCountReceived');\r
-       } \r
-       runEvt('result', 'idsReceived', res.ids);\r
-}\r
-\r
-\r
-\r
-function mresultSetRecords(idstruct) {\r
-       if(!idstruct) return;\r
-       var o = getOffset();\r
-       for( var x = o; x < idstruct.length + o; x++ ) {\r
-               if( idstruct[x-o] != null ) {\r
-                       var r = parseInt(idstruct[x - o][0]);\r
-                       var ra = parseFloat(idstruct[x - o][1]);\r
-                       var or = parseInt(idstruct[x - o][2]);\r
-                       if(!isNull(r) && !isNaN(r)) records[x] = r;\r
-                       if(!isNull(ra) && !isNaN(ra)) ranks[x] = ra;\r
-                       if(!isNull(or) && !isNaN(or)) onlyrecord[x] = or;\r
-               }\r
-       }\r
-\r
-       TOPRANK = ranks[getOffset()];\r
-}\r
-\r
-\r
-var recsReceivedCalled = false;\r
-function mresultCollectRecords() {\r
-       if(getHitCount() > 0 ) runEvt("result", "preCollectRecords");\r
-       var i = 0;\r
-       for( var x = getOffset(); x!= getDisplayCount() + getOffset(); x++ ) {\r
-               if(isNull(records[x])) break;\r
-               if(isNaN(records[x])) continue;\r
-               var req = new Request(FETCH_MRMODS, records[x]);\r
-\r
-               req.request.userdata = i++;\r
-\r
-               /* wait at most 10 seconds for the mods rec to come back */\r
-               /* this needs more testing  */\r
-               req.request.timeout(10); \r
-               req.request.abortCallback(\r
-                       function(){\r
-                               recordsHandled++;\r
-                if(resultPageIsDone()  && !recsReceivedCalled) {\r
-                    recsReceivedCalled = true;\r
-                                       runEvt('result', 'allRecordsReceived', recordsCache);\r
-                                       unHideMe($('copyright_block'));\r
-                               }\r
-                       }\r
-               );\r
-\r
-               req.callback(mresultHandleMods);\r
-               req.send();\r
-       }\r
-}\r
-\r
-function mresultHandleMods(r) {\r
-       var rec = r.getResultObject();\r
-       var pagePosition = r.userdata;\r
-       runEvt('result', 'recordReceived', rec, pagePosition, true);\r
-       if(rec) resultCollectCopyCounts(rec, pagePosition, FETCH_MR_COPY_COUNTS);\r
-       if(resultPageIsDone()) {\r
-               runEvt('result', 'allRecordsReceived', recordsCache);\r
-               unHideMe($('copyright_block')); /* *** */\r
-       }\r
-}\r
-\r
-function mresultHandlePlaceHold(target) {\r
-    function reload() {\r
-        location.href = location.href.replace(/&hold_target=\d+/, '');\r
-    }\r
-    attachEvt("common", "holdUpdated", reload);\r
-    attachEvt("common", "holdUpdateCanceled", reload);\r
-    attachEvt("common", "loginCanceled", reload);\r
-    holdsDrawEditor({record:target, type: 'M'});\r
-}\r
-\r
-\r
-\r
+//var records = {};
+var records = [];
+var ranks = [];
+var onlyrecord = {};
+var table;
+var mresultPreCache = 200;
+var searchTimer;
+
+attachEvt("common", "unload", mresultUnload);
+attachEvt("common", "run", mresultDoSearch);
+attachEvt("result", "idsReceived", mresultSetRecords); 
+attachEvt("result", "idsReceived", mresultCollectRecords); 
+
+function mresultUnload() { removeChildren(table); table = null;}
+
+hideMe($('copyright_block')); 
+
+function mresultDoSearch() {
+       TFORM = null; /* clear the rresult tform var so it's not propogated */
+
+       swapCanvas($('loading_alt'));
+       table = G.ui.result.main_table;
+
+    var holdTarget = new CGI().param('hold_target');
+    if(holdTarget != null) {
+        mresultHandlePlaceHold(holdTarget);
+        return;
+    }
+
+       while( table.parentNode.rows.length <= (getDisplayCount() + 1) )  
+               table.appendChild(G.ui.result.row_template.cloneNode(true));
+
+       if( (getSearches() || getAdvTerm()) && !getTerm() ) {
+               if(getAdvType() == ADVTYPE_MULTI ) mresultCollectAdvIds();
+
+       } else {
+               _mresultCollectIds(); 
+               ADVTERM = "";
+               ADVTYPE = "";
+       }
+}
+
+function _mresultCollectIds() { 
+       resultCollectSearchIds(true, SEARCH_MRS_QUERY, mresultHandleMRIds ); 
+}
+
+function mresultCollectAdvIds() { 
+       resultCollectSearchIds(false, SEARCH_MRS_QUERY, mresultHandleMRIds ); 
+}
+
+
+function mresultHandleMRIds(r) {
+       var res = r.getResultObject();
+    resultCompiledSearch = res.compiled_search;
+    cookieManager.write(COOKIE_SEARCH, js2JSON(res.compiled_search), -1);
+       if(res.count != null) {
+               if( getOffset() == 0 ) HITCOUNT = res.count;
+               runEvt('result', 'hitCountReceived');
+       } 
+       runEvt('result', 'idsReceived', res.ids);
+}
+
+
+
+function mresultSetRecords(idstruct) {
+       if(!idstruct) return;
+       var o = getOffset();
+       for( var x = o; x < idstruct.length + o; x++ ) {
+               if( idstruct[x-o] != null ) {
+                       var r = parseInt(idstruct[x - o][0]);
+                       var ra = parseFloat(idstruct[x - o][1]);
+                       var or = parseInt(idstruct[x - o][2]);
+                       if(!isNull(r) && !isNaN(r)) records[x] = r;
+                       if(!isNull(ra) && !isNaN(ra)) ranks[x] = ra;
+                       if(!isNull(or) && !isNaN(or)) onlyrecord[x] = or;
+               }
+       }
+
+       TOPRANK = ranks[getOffset()];
+}
+
+
+var recsReceivedCalled = false;
+function mresultCollectRecords() {
+       if(getHitCount() > 0 ) runEvt("result", "preCollectRecords");
+       var i = 0;
+       for( var x = getOffset(); x!= getDisplayCount() + getOffset(); x++ ) {
+               if(isNull(records[x])) break;
+               if(isNaN(records[x])) continue;
+               var req = new Request(FETCH_MRMODS, records[x]);
+
+               req.request.userdata = i++;
+
+               /* wait at most 10 seconds for the mods rec to come back */
+               /* this needs more testing  */
+               req.request.timeout(10); 
+               req.request.abortCallback(
+                       function(){
+                               recordsHandled++;
+                if(resultPageIsDone()  && !recsReceivedCalled) {
+                    recsReceivedCalled = true;
+                                       runEvt('result', 'allRecordsReceived', recordsCache);
+                                       unHideMe($('copyright_block'));
+                               }
+                       }
+               );
+
+               req.callback(mresultHandleMods);
+               req.send();
+       }
+}
+
+function mresultHandleMods(r) {
+       var rec = r.getResultObject();
+       var pagePosition = r.userdata;
+       runEvt('result', 'recordReceived', rec, pagePosition, true);
+       if(rec) resultCollectCopyCounts(rec, pagePosition, FETCH_MR_COPY_COUNTS);
+       if(resultPageIsDone()) {
+               runEvt('result', 'allRecordsReceived', recordsCache);
+               unHideMe($('copyright_block')); /* *** */
+       }
+}
+
+function mresultHandlePlaceHold(target) {
+    function reload() {
+        location.href = location.href.replace(/&hold_target=\d+/, '');
+    }
+    attachEvt("common", "holdUpdated", reload);
+    attachEvt("common", "holdUpdateCanceled", reload);
+    attachEvt("common", "loginCanceled", reload);
+    holdsDrawEditor({record:target, type: 'M'});
+}
+
+
+
index 987b040..8af56cf 100644 (file)
-\r
-//attachEvt("common", "run", myOPACInit );\r
-// force init to run after opac_init();\r
-dojo.addOnLoad(function(){setTimeout(myOPACInit, 0)});\r
-        \r
-attachEvt('common','locationUpdated', myopacReload );\r
-dojo.require('openils.Util');\r
-\r
-var FETCH_CONTAINER_DETAILS = ['open-ils.actor','open-ils.actor.container.flesh'];\r
-var FETCH_CHECKED_DETAILS = ['open-ils.circ','open-ils.circ.actor.user.checked_out.atomic'];\r
-var FETCH_CHECKED_HISTORY = ['open-ils.actor','open-ils.actor.history.circ.visible.atomic'];\r
-var FETCH_FAV_SEARCHES = ['open-ils.actor','open-ils.actor.user.saved_search.retrieve'];\r
-var FETCH_HOLD_DETAILS = ['open-ils.circ','open-ils.circ.hold.details.batch.retrieve.atomic'];\r
-var FETCH_MODS_BY_COPY = ['open-ils.search','open-ils.search.biblio.mods_from_copy'];\r
-var FETCH_CALL_NUMBER = ['open-ils.search','open-ils.search.callnumber.retrieve'];\r
-var FETCH_MODS_SLIM = ['open-ils.search','open-ils.search.biblio.record.mods_slim.retrieve'];\r
-var FETCH_FULL_USER = ['open-ils.actor','open-ils.actor.user.fleshed.retrieve'];\r
-var FETCH_HOLD_IDS = ['open-ils.circ','open-ils.circ.holds.id_list.retrieve'];\r
-var FETCH_COPY_OBJ = ['open-ils.search','open-ils.search.asset.copy.retrieve'];\r
-var FETCH_OPT_INS = ['open-ils.actor','open-ils.actor.event_def.opt_in.settings.atomic'];\r
-var FETCH_LISTS = ['open-ils.actor','open-ils.actor.container.flesh'];\r
-var PASS_RESET = ['open-ils.actor','open-ils.actor.patron.password_reset.request'];\r
-var PAY_BILLS = ['open-ils.circ','open-ils.circ.money.payment'];\r
-// number of api calls to run before firing myOPACPostCollect() -- helps make all data available first (avoids having to make sync'd calls)\r
-var TOTAL_CALLS = 6;\r
-\r
-var PREFS_HOLD_PHONE = "notification.hold.pickup.phone";\r
-var PREFS_HOLD_EMAIL = "notification.hold.pickup.email";\r
-var PREFS_PREDUE_3DAY = "notification.predue.email";\r
-var PREFS_OVER_FIRST = "notification.overdue.first.email";\r
-var PREFS_OVER_FIRST_P = "notification.overdue.first.phone";\r
-var PREFS_HOLD_EXPIRE = "notification.hold.expire.email";\r
-var PREFS_HOLD_CANCEL = "notification.hold.cancel.email";\r
-var PREFS_CIRC_HIST_AGE = "history.circ.retention_age";\r
-var PREFS_CIRC_HIST_START = "history.circ.retention_start";\r
-\r
-var listsCache = [];\r
-var holdsCache = [];\r
-var holdsCacheMap = [];\r
-var itemsOutCache = [];\r
-var callNumCache = [];\r
-var favsCache = [];\r
-var copyObjCache = [];\r
-var mvrObjCache = [];\r
-var itemsOutHistory = [];\r
-var userOptIns = [];\r
-var userOptInsMap = [];\r
-var fleshedLists = [];\r
-var imgFormatCache = [];\r
-var transCache = [];\r
-var fleshedContainers = {};\r
-var subPageObjs = {};\r
-\r
-var CIRC_HIST_PAGE_LIMIT = 10;\r
-var circHistPage = 0;\r
-var showXUL = false;\r
-var holdsList = null;\r
-var fleshedUser = null;\r
-var allowPendingAddr = false;\r
-var currPage = "";\r
-var templates = {};\r
-var containerTemplate;\r
-var containerTemplate2;\r
-var myopacGenericTransTemplate;\r
-var myopacCircTransTemplate;\r
-var addrRowTemplate;\r
-var notesTemplate;\r
-var myopacReturnToPayment = false;\r
-\r
-function myOPACInit() {\r
-       if(!(G.user && G.user.session)) {\r
-        initLogin();\r
-    } else {\r
-        allowPendingAddr = fetchOrgSettingDefault(G.user.home_ou(), 'opac.allow_pending_address');\r
-        if(allowPendingAddr) unHideMe($('myopac_pending_addr_td'));\r
-\r
-               unHideMe($('myopac_tabs'));\r
-               currPage = "summary";\r
-               holdsList = getCacheValue('saveAnonCache');\r
-               if(holdsList) { currPage = "holds"; swapTabs($('acct_holds')); setCacheValue('saveAnonCache', null); TOTAL_CALLS -= 2; }\r
-               var retUrl = getCacheValue('returnURL');\r
-               if(retUrl) { setCacheValue('returnURL', null); setCacheValue('showHoldEditor', {record:retUrl.record, type:retUrl.type}); window.location=retUrl.href; }\r
-               \r
-               var sel = $('myopac_new_home');\r
-               buildOrgSel(sel, globalOrgTree, 0);\r
-               setSelector(sel, G.user.home_ou());\r
-               \r
-               switch(new CGI().param('acctpage')) {\r
-                       case "1": currPage = "summary";  break;\r
-                       case "2": currPage = "checked"; swapTabs($('acct_checked_out')); break;\r
-                       case "3": currPage = "holds"; swapTabs($('acct_holds')); break;\r
-                       case "4": currPage = "prefs"; swapTabs($('acct_prefs')); break;\r
-                       case "5": currPage = "fines"; swapTabs($('acct_favs')); break;\r
-                       case "6": currPage = "bookbag"; swapTabs($('acct_lists')); break;\r
-               }\r
-               \r
-               if(!isXUL()) {\r
-                       unHideMe($('myopac_summary_email_change'));\r
-                       unHideMe($('myopac_summary_password_change'));\r
-                       unHideMe($('myopac_summary_username_change'));\r
-               } else {\r
-                       unHideMe($('myopac_summary_phone1_change'));\r
-                       unHideMe($('myopac_summary_phone2_change'));\r
-                       unHideMe($('myopac_summary_phone3_change'));\r
-               }\r
-\r
-\r
-        fieldmapper.standardRequest(FETCH_FULL_USER, {async:true, params:[G.user.session, G.user.id()],\r
-            oncomplete:function(r) {\r
-                               showXUL = isXUL();\r
-                fleshedUser = openils.Util.readResponse(r);\r
-                               myOPACShowFines(true);\r
-                myOPACShowUser(false);\r
-                       myOPACChangePage(currPage);\r
-                       myOPACInitTemplates();\r
-                       myOPACInitSubpages();\r
-                       //myOPACShowBookbags(true);\r
-                       if(holdsList) doBatchAnonHolds();\r
-                       showCanvas();\r
-            }\r
-        });\r
-       }\r
-}\r
-\r
-function myopacReload() {\r
-       var a = {};\r
-       a[PARAM_LOCATION] = getNewSearchLocation();\r
-       a[PARAM_DEPTH] = getNewSearchDepth();\r
-       hideMe($('canvas_main'));\r
-       goTo(buildOPACLink(a, true));\r
-}\r
-\r
-function myOPACChangePage( page ) {\r
-       var s = $("myopac_summary_td");\r
-       var c = $("myopac_checked_td");\r
-       var f = $("myopac_fines_td");\r
-       var h = $("myopac_holds_td");\r
-       var p = $("myopac_prefs_td");\r
-       var b = $('myopac_bookbag_td');\r
-\r
-       var ss = $("myopac_summary_div");\r
-       var cc = $("myopac_checked_div");\r
-       var ff = $("myopac_fines_div");\r
-       var hh = $("myopac_holds_div");\r
-       var pp = $("myopac_prefs_div");\r
-       var bb = $('myopac_bookbag_div');\r
-\r
-       hideMe(ss);\r
-       hideMe(cc); hideMe(ff);\r
-       hideMe(hh); hideMe(pp);\r
-       hideMe(bb);\r
-\r
-    if(page != 'prefs')\r
-        myopacReturnToPayment = false;\r
-\r
-    var oncomplete = null;\r
-\r
-       switch( page ) {\r
-               case "summary": unHideMe(ss);\r
-                       if($('show_fines_link').innerHTML=="Hide Overdue Materials") unHideMe(ff);\r
-            oncomplete = myOPACDrawSummary;\r
-                       break;\r
-\r
-               case "checked": \r
-            unHideMe(cc); \r
-            oncomplete = drawCheckedPage;\r
-            break;\r
-\r
-               case "holds": \r
-            unHideMe(hh); \r
-            oncomplete = drawHoldsPage;\r
-            break;\r
-\r
-               case "prefs": \r
-            unHideMe(pp); \r
-            oncomplete = myOPACShowPrefs;\r
-            break;\r
-\r
-               case 'bookbag': \r
-            unHideMe(bb); \r
-            break;\r
-       }\r
-       currPage = page;\r
-    myOPACGrabPageData(page, oncomplete);\r
-}\r
-\r
-var fetchedPages={}\r
-function myOPACGrabPageData(page, oncomplete) {\r
-    if(fetchedPages[page]) return;\r
-    fetchedPages[page] = true;\r
-\r
-    switch(page) {\r
-\r
-               case "summary": \r
-            oncomplete();\r
-            break;\r
-\r
-               case "checked": \r
-\r
-               progressDialog.show(true);\r
-               fieldmapper.standardRequest(FETCH_CHECKED_DETAILS, {async:true, params:[G.user.session, G.user.id()],\r
-                       oncomplete:function(r) {\r
-                       progressDialog.hide();\r
-                               itemsOutCache = openils.Util.readResponse(r);\r
-                    oncomplete();\r
-                       }\r
-               });\r
-\r
-            break;\r
-\r
-               case "holds": \r
-\r
-                       holdsCache=null;\r
-            fieldmapper.standardRequest(FETCH_HOLD_IDS, {async:true, params:[G.user.session, G.user.id()], \r
-                oncomplete: function(r) { \r
-                               oncomplete(false, openils.Util.readResponse(r));\r
-\r
-                                       /*\r
-                    var holdids = openils.Util.readResponse(r);\r
-                    fieldmapper.standardRequest(FETCH_HOLD_DETAILS, {async:true, params:[G.user.session, holdids], \r
-                        oncomplete: function(rr) {\r
-                               progressDialog.hide();\r
-                            var holds = openils.Util.readResponse(rr);\r
-                            holdsCache = holds;\r
-                            setTimeout(function(){oncomplete()}, 150); // give the progress dialog a chance to clear out\r
-                                                       oncomplete();\r
-                        }\r
-                    });\r
-                                       */\r
-                }\r
-            });\r
-\r
-            break;\r
-\r
-               case "prefs": \r
-            fieldmapper.standardRequest(FETCH_OPT_INS, {async:true, params:[G.user.session],\r
-                oncomplete:function(r) {\r
-                    userOptIns = openils.Util.readResponse(r);\r
-                    for(var i=0; i<userOptIns.length; i++) userOptInsMap[userOptIns[i].name()] = i;\r
-                    oncomplete();\r
-                }\r
-            });\r
-\r
-            break;\r
-\r
-               case 'bookbag': \r
-            myOPACShowBookbags(true);\r
-            break;\r
-    }\r
-}\r
-\r
-\r
-function myOPACDrawSummary() {\r
-    var stats = userVitalStats; // see misc.js\r
-       if(!stats) return;\r
-       $('myopac_sum_pickup').innerHTML = "("+stats.holds.ready+")";\r
-       $('myopac_sum_checked').innerHTML = "("+ (stats.checkouts.out+stats.checkouts.overdue) +")";\r
-       $('myopac_sum_holds').innerHTML = "("+stats.holds.total+")";\r
-    if(stats.fines.balance_owed > 0) {\r
-        var bal = $('myopac_sum_fines_bal');\r
-        bal.style.color = "red";\r
-        appendClear(bal, text("$" + Number(stats.fines.balance_owed).toFixed(2)));\r
-               showFinesDiv($('show_fines_link'));\r
-               unHideMe($('pay_fines_btn1'));\r
-               unHideMe($('show_fines_link'));\r
-    }\r
-}\r
-\r
-function myOPACInitTemplates() {\r
-       //holds page\r
-       if(!templates.holdsParent) templates.holdsParent = $('holds_temp_parent');\r
-       if(!templates.holdsTemp) templates.holdsTemp = templates.holdsParent.removeChild($('acct_holds_temp'));\r
-       //checked out page\r
-       if(!templates.checkedParent) templates.checkedParent = $('checked_temp_parent');\r
-       if(!templates.checkedTemp) templates.checkedTemp = templates.checkedParent.removeChild($('acct_checked_temp'));\r
-       //checked history page\r
-       if(!templates.circHistPar) templates.circHistPar = $('acct_checked_hist_parent');\r
-       if(!templates.circHistTemp) templates.circHistTemp = templates.circHistPar.removeChild($('acct_checked_hist_temp'));\r
-}\r
-\r
-// link-up all the Account sub-pages for switchSubPage()\r
-function myOPACInitSubpages() {\r
-       // create a primary object for each page...\r
-       subPageObjs.checked = {};\r
-       subPageObjs.holds = {};\r
-       subPageObjs.prefs = {};\r
-       \r
-       // ... then create an array for each sub-page\r
-       subPageObjs.checked.main = [];\r
-       subPageObjs.checked.hist = [];\r
-       subPageObjs.holds.main = [];\r
-       subPageObjs.holds.hist = [];\r
-       subPageObjs.prefs.info = [];\r
-       subPageObjs.prefs.notify = [];\r
-       subPageObjs.prefs.search = [];\r
-       \r
-       // add .header to each primary page object and link to the page's blue header bar.\r
-       // add ['header'] to each sub-page array and put the text to display\r
-       subPageObjs.checked.header = $('acct_checked_header');\r
-       subPageObjs.checked.main['header'] = "Current Items Checked Out";\r
-       subPageObjs.checked.hist['header'] = "Check Out History";\r
-       subPageObjs.checked.main.push($('checked_label'));\r
-       subPageObjs.checked.hist.push($('checked_link'));\r
-       subPageObjs.checked.main.push($('checked_hist_link'));\r
-       subPageObjs.checked.hist.push($('checked_hist_label'));\r
-       subPageObjs.checked.main.push($('checked_main'));\r
-       subPageObjs.checked.hist.push($('checked_hist'));\r
-       \r
-       subPageObjs.holds.header = $('acct_holds_header');\r
-       subPageObjs.holds.main['header'] = "Current Items on Hold";\r
-       subPageObjs.holds.hist['header'] = "Holds History";\r
-       subPageObjs.holds.main.push($('holds_label'));\r
-       subPageObjs.holds.hist.push($('holds_link'));\r
-       subPageObjs.holds.main.push($('holds_hist_link'));\r
-       subPageObjs.holds.hist.push($('holds_hist_label'));\r
-       subPageObjs.holds.main.push($('holds_main'));\r
-       subPageObjs.holds.hist.push($('holds_hist_table'));\r
-       \r
-       subPageObjs.prefs.header = $('acct_prefs_header');\r
-       subPageObjs.prefs.info['header'] = "Account Information and Preferences";\r
-       subPageObjs.prefs.notify['header'] = "Notification Preferences";\r
-       subPageObjs.prefs.search['header'] = "Search Preferences";\r
-       subPageObjs.prefs.info.push($('prefs_info_lbl'));\r
-       subPageObjs.prefs.notify.push($('prefs_info_link'));\r
-       subPageObjs.prefs.notify.push($('prefs_notify_lbl'));\r
-       subPageObjs.prefs.info.push($('prefs_notify_link'));\r
-       subPageObjs.prefs.search.push($('prefs_search_lbl'));\r
-       subPageObjs.prefs.info.push($('prefs_search_link'));\r
-       subPageObjs.prefs.notify.push($('prefs_search_link'));\r
-       subPageObjs.prefs.search.push($('prefs_notify_link'));\r
-       subPageObjs.prefs.search.push($('prefs_info_link'));\r
-       subPageObjs.prefs.info.push($('acct_info_main'));\r
-       subPageObjs.prefs.search.push($('acct_search_main'));\r
-       subPageObjs.prefs.notify.push($('acct_notify_main'));\r
-       subPageObjs.prefs.notify.push($('acct_prefs_save'));\r
-       subPageObjs.prefs.search.push($('acct_prefs_save'));\r
-}\r
-\r
-function fetchAllHolds() {\r
-}\r
-\r
-var myopacForceHoldsRedraw = false;\r
-function drawHoldsPage(sort, holdIds) {\r
-       if(sort == undefined) sort = true;\r
-       if(!templates.holdsParent || !templates.holdsTemp) return;\r
-       var parent = templates.holdsParent;\r
-       var temp = templates.holdsTemp;\r
-       var holdsReady = 0;\r
-       \r
-       if(myopacForceHoldsRedraw) {\r
-               holdsCache = fieldmapper.standardRequest(FETCH_HOLD_DETAILS, {async:false, params:[G.user.session, \r
-                       fieldmapper.standardRequest(FETCH_HOLD_IDS, {async:false, params:[G.user.session, G.user.id()]})\r
-               ]});\r
-       }\r
-\r
-       if(sort) holdsCache = holdsCache.sort(function(a, b) {\r
-               if(a.status==4) return -1;\r
-               if(b.status==4) return 1;\r
-               if(isTrue(a.hold.frozen())) return 1;\r
-               if(isTrue(b.hold.frozen())) return -1;\r
-               return dojo.date.stamp.fromISOString(a.hold.request_time()) > dojo.date.stamp.fromISOString(b.hold.request_time())?1:-1;\r
-       });\r
-       \r
-    function allHoldsFetched() {\r
-        holdsCacheMap=[];\r
-        for(var i=0; i<holdsCache.length; i++) holdsCacheMap[holdsCache[i].hold.id()] = i;\r
-        $('myopac_sum_pickup').innerHTML = "("+holdsReady+")";\r
-        if(!holdsCache.length) parent.appendChild(elem('div',{style:"font-weight:bold;font-size:14px;width:100%;text-align:center;",align:'center'},'No holds found.'));\r
-    }\r
-\r
-       removeChildren(parent);\r
-    if(holdsCache) {\r
-           for(var i in holdsCache) {\r
-            var row = temp.cloneNode(true);\r
-            var hold = holdsCache[i];\r
-            drawOneHold(hold, row, parent);\r
-            parent.appendChild(row);\r
-                       //parent.appendChild(elem('tr').appendChild(elem('td', {'colspan':'10'}).appendChild(elem('div', {'style':'position:absolute;'}).appendChild(elem('div', {'style':'position:relative;'}).appendChild(elem('div', {'style':'width:974px;height:1px;background:#dcdbdb;'}))))));\r
-                       //      <tr><td colspan="10"><div style="position:absolute;"><div style="position:relative;"><div style="width:974px;height:1px;background:#dcdbdb;"></div></div></div></td></tr>  \r
-\r
-            if(hold.status == 4) holdsReady++;\r
-        }\r
-        allHoldsFetched();\r
-\r
-    } else if(holdIds) {\r
-\r
-        holdsCache = [];\r
-        var holdsReceived = 0;\r
-\r
-        dojo.forEach(holdIds,\r
-            function(holdId) {\r
-                var row = temp.cloneNode(true);\r
-                dojo.style(row, 'visibility', 'hidden');\r
-                parent.appendChild(row);\r
-                               \r
-                       //parent.appendChild(elem('tr').appendChild(elem('td', {'colspan':'10'}).appendChild(elem('div', {'style':'position:absolute;'}).appendChild(elem('div', {'style':'position:relative;'}).appendChild(elem('div', {'style':'width:974px;height:1px;background:#dcdbdb;'}))))));\r
-                       \r
-                fieldmapper.standardRequest(FETCH_HOLD_DETAILS, {async:true, params:[G.user.session, [holdId]], \r
-                    oncomplete: function(rr) {\r
-                        var hold = openils.Util.readResponse(rr)[0];\r
-                        holdsCache.push(hold);\r
-                        dojo.style(row, 'visibility', 'visible');\r
-                        drawOneHold(hold, row, parent);\r
-                        if(hold.status == 4) holdsReady++;\r
-                        if(++holdsReceived == holdIds.length)\r
-                            allHoldsFetched();\r
-                    }\r
-                });\r
-            }\r
-        );\r
-    }\r
-}\r
-\r
-function drawOneHold(h, row, parent) {\r
-       var imgTD = null;\r
-       var imgEl = null;\r
-       var d = null;\r
-       var exp_date;\r
-       var suffix = "";\r
-\r
-    row.id = "myopac_holds_row_" + h.hold.id();\r
-    var form = $n(row, "myopac_holds_formats");\r
-    form.id = "myopac_holds_form_" + h.hold.id();\r
-    $n(row,'hold_pickup_lib_span').appendChild($('hold_pickup_lib_temp').cloneNode(true));\r
-    \r
-    var tree = $n(row,'hold_pickup_lib_sel');\r
-    buildOrgSelAlt(tree, globalOrgTree, 0);\r
-    setSelector(tree, h.hold.pickup_lib());\r
-    $n(row,'check_all_holds').holdid = h.hold.id();\r
-    $n(row,'hold_edit_link').setAttribute('href','javascript:editHold('+h.hold.id()+');'); \r
-    $n(row,'hold_cancel_link').setAttribute('href','javascript:cancelHold('+h.hold.id()+');');\r
-    $n(row,'hold_save_link').setAttribute('href','javascript:saveHold('+h.hold.id()+');');\r
-    var activeSel = $n(row,'hold_active_sel');\r
-    activeSel.selectedIndex = isTrue(h.hold.frozen())?1:0;\r
-    \r
-    //var djBox = $n(row,'activate_box').parentNode.parentNode.parentNode;\r
-    //djBox.id=djBox.id+h.hold.id();\r
-    //var blah = dojo.query('input',$n(row,'activate_box').parentNode)[0];\r
-    //blah.id = djBox.getAttribute("widgetId")+h.hold.id();\r
-    //$().id = djBox.id+h.hold.id();\r
-    //djBox.setAttribute("widgetId", djBox.getAttribute("widgetId")+h.hold.id());\r
-    \r
-    $n(row,'hold_pickup_lib').innerHTML = findOrgUnit(h.hold.pickup_lib()).name();\r
-    $n(row,'hold_active').innerHTML = isTrue(h.hold.frozen())?"Suspended":"Active";\r
-    if(isTrue(h.hold.frozen())) row.style.background="#e5e5e5";\r
-    \r
-    if(h.hold.thaw_date()) {\r
-        d = dojo.date.stamp.fromISOString(h.hold.thaw_date());\r
-        $n(row, 'activate_date').innerHTML = dojo.date.locale.format(d, {selector: 'date', fullYear: true});\r
-        unHideMe($n(row,'activate_label'));\r
-        $n(row,'activate_box').value = dojo.date.locale.format(d, {selector:'date', fullYear: true});\r
-    }\r
-    \r
-    if(h.hold.expire_time()) {\r
-        exp_date = dojo.date.stamp.fromISOString(h.hold.expire_time().replace(/(T\d\d:\d\d:\d\d)([+-]\d\d)(\d)/, "$1$2:$3"))\r
-        $n(row, 'hold_expires').innerHTML = dojo.date.locale.format(exp_date, {selector:'date', fullYear: true});\r
-        unHideMe($n(row,'hold_expires_label'));\r
-        $n(row,'hold_expires_box').value = dojo.date.locale.format(exp_date, {selector:'date', fullYear: true});\r
-    }\r
-    \r
-    buildTitleDetailLink(h.mvr, $n(row,'myopac_holds_title_link'));\r
-    $n(row,'myopac_holds_title_link').title = h.mvr.title();\r
-    \r
-    imgTD = $n(row, "myopac_holds_formats");\r
-    imgEl = elem('img');\r
-    imgEl.className = 'hide_me';\r
-    imgEl.name = 'format_icon_'+h.hold.id();\r
-    imgTD.appendChild(imgEl);\r
-    if(imgFormatCache[h.hold.id()]==null) imgFormatCache[h.hold.id()] = getMarcData(h.mvr.doc_id(),"998","d");\r
-    setFormatIcon(imgEl, imgFormatCache[h.hold.id()]);\r
-    \r
-    $n(row,'myopac_holds_author').innerHTML = h.mvr.author();\r
-    \r
-    if( h.status == 4) {\r
-        $n(row,'acct_holds_status').innerHTML = "<span style='color:blue;font-weight:bold;'>Ready for Pickup</span>";\r
-        hideMe($n(row,'holds_editor_row'));\r
-        unHideMe($n(row,'holds_ready_row'));\r
-        if(h.hold.shelf_expire_time()) $n(row,'hold_ready_expire').innerHTML = \r
-            dojo.date.locale.format(dojo.date.stamp.fromISOString(h.hold.shelf_expire_time()), {selector:'date', fullYear: true});;\r
-    } else {\r
-        var num = h.queue_position+'';\r
-        suffix = (num.charAt(num.length-1)=="1")?"st":(num.charAt(num.length-1)=="2")?"nd":(num.charAt(num.length-1)=="3")?"rd":"th";\r
-        if(num=="11" || num=="12" || num=="13") suffix = "th";\r
-        $n(row,'acct_holds_status').innerHTML = h.queue_position+suffix+" hold on "+h.potential_copies+" circulating cop"+(h.potential_copies==1?"y":"ies");\r
-    }\r
-}\r
-\r
-var checkedDrawn = true;\r
-function drawCheckedPage(sort) {\r
-       if(sort==undefined) sort = true;\r
-       if(!templates.checkedParent || !templates.checkedTemp) return;\r
-       var parent = templates.checkedParent;\r
-       var temp = templates.checkedTemp;\r
-       \r
-       if(!checkedDrawn) itemsOutCache = fieldmapper.standardRequest(FETCH_CHECKED_DETAILS, {async:false, params:[G.user.session, G.user.id()]});\r
-       if(sort) itemsOutCache = itemsOutCache.sort(function(a, b) {\r
-               if(dojo.date.stamp.fromISOString(a.circ.due_date()) > dojo.date.stamp.fromISOString(b.circ.due_date())) return 1;\r
-               return -1;\r
-       });\r
-       checkedDrawn = true;\r
-       \r
-       removeChildren(parent);\r
-       for(var i in itemsOutCache) {\r
-               var row = temp.cloneNode(true);\r
-               var out = itemsOutCache[i];\r
-               //row.id = "myopac_holds_row_" + out.hold.id();\r
-               if(!mvrObjCache[out.circ.target_copy()]) mvrObjCache[out.circ.target_copy()] = out.record;\r
-               if(!copyObjCache[out.copy.id()]) copyObjCache[out.copy.id()] = out.copy;\r
-                               \r
-               if(out.circ.due_date()) {\r
-                       var exp_date = dojo.date.stamp.fromISOString(out.circ.due_date());\r
-                       if(exp_date<(new Date())) $n(row,'due_date').style.color="red";\r
-                       $n(row, 'due_date').innerHTML = dojo.date.locale.format(exp_date, {selector:'date', fullYear: true});\r
-               }\r
-               \r
-               $n(row, 'renewals').innerHTML = out.circ.renewal_remaining();\r
-               buildTitleDetailLink(out.record, $n(row,'title'));\r
-               if(out.record.author()) $n(row, 'author').appendChild(text(" / "+out.record.author()));\r
-               dojo.attr($n(row, 'check_all_checked'), 'circid', out.circ.id())\r
-               $n(row,'title').title = out.record.title();\r
-               $n(row, 'barcode').innerHTML = out.copy.barcode();\r
-               if(callNumCache[out.copy.call_number()]==null) callNumCache[out.copy.call_number()] = fieldmapper.standardRequest(FETCH_CALL_NUMBER, {async:false, params:[out.copy.call_number()]});\r
-               $n(row, 'call_number').innerHTML = callNumCache[out.copy.call_number()].label();\r
-               \r
-               parent.appendChild(row);\r
-       }\r
-       \r
-       if(!itemsOutCache.length) parent.appendChild(elem('div',{style:"font-weight:bold;font-size:14px;width:100%;text-align:center;",align:'center'},'No items checked out.'));\r
-}\r
-\r
-var circHistDrawn = true;\r
-function drawCircHistory(sort, offset) {\r
-       if(sort==undefined) sort = true;\r
-       if(offset==undefined) offset = circHistPage; else circHistPage = offset;\r
-       if(!templates.circHistPar || !templates.circHistTemp) return;\r
-       var parent = templates.circHistPar;\r
-       var temp = templates.circHistTemp;\r
-       \r
-       if(!circHistDrawn) itemsOutHistory = fieldmapper.standardRequest(FETCH_CHECKED_HISTORY, {async:false, params:[G.user.session, G.user.id(), {'limit':CIRC_HIST_PAGE_LIMIT, 'offset':offset}]});\r
-       circHistDrawn = true;\r
-       \r
-       removeChildren(parent);\r
-       for(var i in itemsOutHistory) {\r
-               var row = temp.cloneNode(true);\r
-               var h = itemsOutHistory[i];\r
-               if(mvrObjCache[h.circ.target_copy()]==null) mvrObjCache[h.circ.target_copy()] = fieldmapper.standardRequest(FETCH_MODS_BY_COPY, {async:false, params:[h.circ.target_copy()]});\r
-               var mvr = mvrObjCache[h.circ.target_copy()];\r
-               \r
-               if(mvr && !mvr.desc) {\r
-                       buildTitleDetailLink(mvr, $n(row, 'title'));\r
-                       $n(row, 'title').title = mvr.title();\r
-                       $n(row, 'author').innerHTML = mvr.author();\r
-                       \r
-                       //dojo.date.locale.format(dojo.date.stamp.fromISOString(), {selector:'date', fullYear: true});\r
-               }\r
-               \r
-               //date formatting and coloring\r
-               var ret = $n(row, 'returned');\r
-               var due = $n(row, 'due_date');\r
-               $n(row, 'checkout').innerHTML = dojo.date.locale.format(dojo.date.stamp.fromISOString(h.circ.create_time()), {selector:'date', fullYear: true});\r
-               due.innerHTML = dojo.date.locale.format(dojo.date.stamp.fromISOString(h.circ.due_date()), {selector:'date', fullYear: true});\r
-               if(!h.circ.checkin_time() && new Date() > dojo.date.stamp.fromISOString(h.circ.due_date())) due.style.color="red";\r
-               if(h.circ.checkin_time() && dojo.date.stamp.fromISOString(h.circ.checkin_time()) > dojo.date.stamp.fromISOString(h.circ.due_date())) ret.style.color="red";\r
-               if(h.circ.checkin_time()) ret.innerHTML = dojo.date.locale.format(dojo.date.stamp.fromISOString(h.circ.checkin_time()), {selector:'date', fullYear: true});\r
-               else ret.innerHTML = "Checked Out";\r
-               \r
-               if(copyObjCache[h.circ.target_copy()]==null) copyObjCache[h.circ.target_copy()] = fieldmapper.standardRequest(FETCH_COPY_OBJ, {async:false, params:[h.circ.target_copy()]});\r
-               if(callNumCache[copyObjCache[h.circ.target_copy()].call_number()]==null)\r
-                       callNumCache[copyObjCache[h.circ.target_copy()].call_number()] = fieldmapper.standardRequest(FETCH_CALL_NUMBER, {async:false, params:[copyObjCache[h.circ.target_copy()].call_number()]});\r
-               \r
-               if(copyObjCache[h.circ.target_copy()] && callNumCache[copyObjCache[h.circ.target_copy()].call_number()])\r
-                       $n(row,'call_number').innerHTML = callNumCache[copyObjCache[h.circ.target_copy()].call_number()].label();\r
-               parent.appendChild(row);\r
-       }\r
-       \r
-       if(!itemsOutHistory.length) {\r
-               parent.appendChild(elem('tr').appendChild(elem('td',{style:"font-weight:bold;font-size:14px;width:100%;text-align:center;",align:'center'},'No items found.')));\r
-               return;\r
-       }\r
-       \r
-       //build pagination\r
-       var pageTR = elem('tr');\r
-       var pageTD = elem('td', {'align':'center', 'colspan':'5'}, null);\r
-       \r
-       var offPrev = offset - CIRC_HIST_PAGE_LIMIT;\r
-       var offNext = offset + CIRC_HIST_PAGE_LIMIT;\r
-       if(offset==0) offPrev = 0;\r
-       \r
-       if(offset!=0) var prev = elem('a', {'href':'javascript: circHistDrawn = false; drawCircHistory(true,'+offPrev+');'}, '< Previous');\r
-       else var prev = elem('span', null, '< Previous');\r
-       if(itemsOutHistory.length<CIRC_HIST_PAGE_LIMIT) var next = elem('span', null, 'Next >');\r
-       else var next = elem('a', {'href':'javascript:  circHistDrawn = false; drawCircHistory(true,'+offNext+');'}, 'Next >');\r
-       \r
-       pageTD.appendChild(prev);\r
-       pageTD.appendChild(elem('span', null, '    '));\r
-       pageTD.appendChild(next);\r
-       pageTR.appendChild(pageTD);\r
-       parent.appendChild(pageTR);\r
-}\r
-\r
-function myOPACShowPrefs() {\r
-       grabUserPrefs();\r
-       myOPACShowHitsPer();\r
-       myOPACShowDefFont();\r
-       myOPACShowDefLocation();\r
-       myOPACShowNotifyPrefs();\r
-       hideMe($('myopac_prefs_loading'));\r
-}\r
-\r
-var defSearchLocationDrawn = false;\r
-var defDepthIndex = 0;\r
-function myOPACShowDefLocation() {\r
-\r
-       var selector = $('prefs_def_location');\r
-       var rsel = $('prefs_def_range');\r
-\r
-       if(!defSearchLocationDrawn) {\r
-               defSearchLocationDrawn = true;\r
-               var org = G.user.prefs[PREF_DEF_LOCATION];\r
-\r
-               if(!org) {\r
-                       $('myopac_pref_home_lib').checked = true;\r
-                       $('prefs_def_location').disabled = true;\r
-                       org = G.user.home_ou();\r
-               }\r
-               buildOrgSel(selector, globalOrgTree, 0);\r
-\r
-               globalOrgTypes = globalOrgTypes.sort(\r
-                       function(a, b) {\r
-                               if( a.depth() < b.depth() ) return -1;\r
-                               return 1;\r
-                       }\r
-               );\r
-\r
-               iterate(globalOrgTypes,\r
-                       function(t) {\r
-                               if( t.depth() <= findOrgDepth(org) ) {\r
-                                       setSelectorVal(rsel, defDepthIndex++, t.opac_label(), t.depth());\r
-                                       if( t.depth() == findOrgDepth(org)) \r
-                                               setSelector(rsel, t.depth());\r
-                               }\r
-                       }\r
-               );\r
-       }\r
-\r
-       setSelector(selector, org);\r
-}\r
-\r
-function myOPACShowNotifyPrefs() {\r
-       var preEmail = $(PREFS_PREDUE_3DAY);\r
-       var overEmail = $(PREFS_OVER_FIRST);\r
-       var overPhone = $(PREFS_OVER_FIRST_P);\r
-       var holdsCancel = $(PREFS_HOLD_CANCEL);\r
-       var holdsExpire = $(PREFS_HOLD_EXPIRE);\r
-       var holdsEmail = $("opac.hold_notify.email");\r
-       var holdsPhone = $("opac.hold_notify.phone");\r
-       if(G.user.prefs[PREFS_CIRC_HIST_START]) { $('circHistStart').checked = true; }\r
-       \r
-       if(preEmail && typeof(G.user.prefs[PREFS_PREDUE_3DAY])   !="undefined") preEmail.checked    = G.user.prefs[PREFS_PREDUE_3DAY];\r
-       if(overEmail && typeof(G.user.prefs[PREFS_OVER_FIRST])   !="undefined") overEmail.checked   = G.user.prefs[PREFS_OVER_FIRST];\r
-       if(overPhone && typeof(G.user.prefs[PREFS_OVER_FIRST_P]) !="undefined") overPhone.checked   = G.user.prefs[PREFS_OVER_FIRST_P];\r
-       if(holdsCancel && typeof(G.user.prefs[PREFS_HOLD_CANCEL])!="undefined") holdsCancel.checked = G.user.prefs[PREFS_HOLD_CANCEL];\r
-       if(holdsExpire && typeof(G.user.prefs[PREFS_HOLD_EXPIRE])!="undefined") holdsExpire.checked = G.user.prefs[PREFS_HOLD_EXPIRE];\r
-       if(holdsPhone && typeof(G.user.prefs[PREFS_HOLD_PHONE])  !="undefined") holdsPhone.checked  = G.user.prefs[PREFS_HOLD_PHONE];\r
-       if(holdsEmail && typeof(G.user.prefs[PREFS_HOLD_EMAIL])  !="undefined") holdsEmail.checked  = G.user.prefs[PREFS_HOLD_EMAIL];\r
-}\r
-\r
-function myOPACShowHitsPer() {\r
-       var hits = 10;\r
-       if(G.user.prefs[PREF_HITS_PER])\r
-               hits = G.user.prefs[PREF_HITS_PER];\r
-       var hitsSel = $('prefs_hits_per');\r
-       setSelector(hitsSel, hits);\r
-}\r
-\r
-function myOPACShowDefFont() {\r
-       var font;\r
-       if(G.user.prefs[PREF_DEF_FONT])\r
-               font = G.user.prefs[PREF_DEF_FONT];\r
-       else font = "regular";\r
-       setSelector($('prefs_def_font'), font);\r
-}\r
-\r
-function myOPACShowUser(bool) {\r
-       if(bool) fleshedUser = fieldmapper.standardRequest(FETCH_FULL_USER, {async:false, params:[G.user.session, G.user.id()]});\r
-       var user = fleshedUser;\r
-       \r
-    var expireDate = dojo.date.stamp.fromISOString(user.expire_date());\r
-    if( expireDate < new Date() ) {\r
-        appendClear($('myopac.expired.date'), expireDate.iso8601Format('YMD'));\r
-        unHideMe($('myopac.expired.alert'));\r
-    }\r
-\r
-       var iv1 = user.ident_value()+'';\r
-    if (iv1.length > 4 && iv1.match(/\d{4}/)) iv1 = iv1.substring(0,4) + '***********';\r
-\r
-       appendClear($('myopac_sum_name'),text(user.first_given_name()+" "+(user.family_name()==null?"":user.family_name())));   \r
-       appendClear($('myopac_summary_prefix'),text(user.first_given_name()+" "+(user.family_name()==null?"":user.family_name())));\r
-       appendClear($('myopac_summary_homelib'),text(findOrgUnit(user.home_ou()).name()));\r
-\r
-       appendClear($('myopac_summary_dayphone'),text(user.day_phone()));\r
-       appendClear($('myopac_summary_eveningphone'),text(user.evening_phone()));\r
-       appendClear($('myopac_summary_otherphone'),text(user.other_phone()));\r
-       appendClear($('myopac_summary_suffix'),text(user.suffix()));\r
-       appendClear($('myopac_summary_username'),text(user.usrname()));\r
-       appendClear($('myopac_summary_email'),text(user.email()));\r
-       appendClear($('myopac_summary_barcode'),text(user.card().barcode()));\r
-       appendClear($('myopac_summary_ident1'),text(iv1));\r
-       appendClear($('myopac_summary_create_date'),text(_trimTime(user.create_date())));\r
-\r
-       var req = new Request( \r
-               FETCH_USER_NOTES, G.user.session, {pub:1, patronid:G.user.id()});\r
-       req.callback(myopacDrawNotes);\r
-       req.send();\r
-\r
-       var tbody = $('myopac_addr_tbody');\r
-       var template;\r
-\r
-       if(addrRowTemplate) { \r
-               template = addrRowTemplate;\r
-       } else {\r
-               template = tbody.removeChild($('myopac_addr_row'));\r
-               addrRowTemplate = template;\r
-       }\r
-       removeChildren(tbody);\r
-\r
-    var addrs = user.addresses();\r
-       for( var a in addrs ) {\r
-        var addr = addrs[a];\r
-        if(!allowPendingAddr && isTrue(addr.pending()))\r
-            continue;\r
-        if(addr.replaces() != null) continue;\r
-               var row = template.cloneNode(true);\r
-               myOPACDrawAddr(row, addr, addrs);\r
-               tbody.appendChild(row);\r
-       }\r
-}\r
-\r
-function myopacDrawNotes(r) {\r
-       var notes = r.getResultObject();\r
-       var tbody = $('myopac.notes.tbody');\r
-       if(!notesTemplate)\r
-               notesTemplate = tbody.removeChild($('myopac.notes.tr'));\r
-       removeChildren(tbody);\r
-\r
-       iterate(notes, \r
-               function(note) {\r
-                       unHideMe($('myopac.notes.div'));\r
-                       var row = notesTemplate.cloneNode(true);\r
-                       $n(row, 'title').appendChild(text(note.title()));\r
-                       $n(row, 'value').appendChild(text(note.value()));\r
-                       tbody.appendChild(row);\r
-               }\r
-       );\r
-}\r
-\r
-function myOPACDrawAddr(row, addr, addrs) {\r
-    appendClear($n(row, 'myopac_addr_type'),text(addr.address_type()));\r
-    appendClear($n(row, 'myopac_addr_street'),text(addr.street1()));\r
-    appendClear($n(row, 'myopac_addr_street2'),text(addr.street2()));\r
-    appendClear($n(row, 'myopac_addr_city'),text(addr.city()));\r
-    appendClear($n(row, 'myopac_addr_county'),text(addr.county()));\r
-    appendClear($n(row, 'myopac_addr_state'),text(addr.state()));\r
-    appendClear($n(row, 'myopac_addr_country'),text(addr.country()));\r
-    appendClear($n(row, 'myopac_addr_zip'),text(addr.post_code()));\r
-\r
-    if(!allowPendingAddr) return;\r
-\r
-    $n(row, 'myopac_addr_edit_link').onclick = function(){myopacEditAddress(addr)};\r
-    unHideMe($n(row, 'myopac_addr_edit_td'));\r
-\r
-    /* if we have a replacement address, plop it into the table next to this addr */\r
-    var repl = grep(addrs, function(a) { return a.replaces() == addr.id(); });\r
-\r
-    $n(row, 'myopac_pending_addr_td').id = 'myopac_pending_addr_td_' + addr.id();\r
-\r
-    if(repl) {\r
-        hideMe($n(row, 'myopac_addr_edit_td')); // hide the edit link\r
-        repl = repl[0];\r
-        myopacSetAddrInputs(row, repl);\r
-    }\r
-}\r
-\r
-function myopacEditAddress(addr) {\r
-    var td = $('myopac_pending_addr_td_' + addr.id());\r
-    var row = td.parentNode;\r
-    myopacSetAddrInputs(row, addr);\r
-}\r
-\r
-function myopacSetAddrInputs(row, addr, prefix) {\r
-    unHideMe($n(row, 'myopac_pending_addr_td'));\r
-    $n(row, 'myopac_pending_addr_type').value = addr.address_type();\r
-    $n(row, 'myopac_pending_addr_street').value = addr.street1();\r
-    $n(row, 'myopac_pending_addr_street2').value = addr.street2();\r
-    $n(row, 'myopac_pending_addr_city').value = addr.city();\r
-    $n(row, 'myopac_pending_addr_county').value = addr.county();\r
-    $n(row, 'myopac_pending_addr_state').value = addr.state();\r
-    $n(row, 'myopac_pending_addr_country').value = addr.country();\r
-    $n(row, 'myopac_pending_addr_zip').value = addr.post_code();\r
-    $n(row, 'myopac_pending_addr_edit_link').onclick = function(){myopacSaveAddress(row, addr)};\r
-    $n(row, 'myopac_pending_addr_del_link').onclick = function(){myopacSaveAddress(row, addr, true)};\r
-}\r
-\r
-function _trimTime(time) { \r
-       if(!time) return ""; \r
-    var d = dojo.date.stamp.fromISOString(time);\r
-    if(!d) return ""; /* date parse failed */\r
-    return d.iso8601Format('YMD');\r
-}\r
-\r
-function _trimSeconds(time) { \r
-    if(!time) return ""; \r
-    var d = dojo.date.stamp.fromISOString(time);\r
-    if(!d) return ""; /* date parse failed */\r
-    return d.iso8601Format('YMDHM',null,true,true);\r
-}\r
-\r
-function myopacSaveAddress(row, addr, deleteMe) {\r
-    if(addr.replaces() == null) {\r
-        var repl = new aua();\r
-        repl.usr(addr.usr());\r
-        repl.address_type(addr.address_type());\r
-        repl.within_city_limits(addr.within_city_limits());\r
-        repl.replaces(addr.id());\r
-        repl.pending('t');\r
-        repl.isnew(true);\r
-        repl.id(null);\r
-        addr = repl;\r
-    }\r
-\r
-    if(deleteMe) {\r
-        if(addr.id() == null) {\r
-            hideMe($n(row, 'myopac_pending_addr_td'));\r
-            return;\r
-        }\r
-        addr.isdeleted(true);\r
-    } else {\r
-        addr.address_type($n(row, 'myopac_pending_addr_type').value);\r
-        addr.street1($n(row, 'myopac_pending_addr_street').value);\r
-        addr.street2($n(row, 'myopac_pending_addr_street2').value);\r
-        addr.city($n(row, 'myopac_pending_addr_city').value);\r
-        addr.county($n(row, 'myopac_pending_addr_county').value);\r
-        addr.state($n(row, 'myopac_pending_addr_state').value);\r
-        addr.country($n(row, 'myopac_pending_addr_country').value);\r
-        addr.post_code($n(row, 'myopac_pending_addr_zip').value);\r
-    }\r
-\r
-       var req = new Request('open-ils.actor:open-ils.actor.user.address.pending.cud', G.user.session, addr);\r
-\r
-    req.callback(\r
-        function(r) {\r
-            var resp = r.getResultObject(); \r
-\r
-            if(addr.isnew()) {\r
-                // new, add to list of addrs\r
-                addr.id(resp);\r
-                fleshedUser.addresses().push(addr);\r
-            } else {\r
-                // deleted, remove from list of addrs\r
-                if(addr.isdeleted()) {\r
-                    hideMe($n(row, 'myopac_pending_addr_td'));\r
-                    var addrs = [];\r
-                    for(var i in fleshedUser.addresses()) {\r
-                        var a = fleshedUser.addresses()[i];\r
-                        if(a.id() != addr.id()) addrs.push(a);\r
-                    }\r
-                    fleshedUser.addresses(addrs);\r
-                }\r
-            }\r
-           alertId('myopac_addr_changes_saved');\r
-        }\r
-    );\r
-    req.send();\r
-}\r
-\r
-function myOPACSavePrefs() {\r
-       G.user.prefs[PREF_HITS_PER] = getSelectorVal($('prefs_hits_per'));\r
-       G.user.prefs[PREF_DEF_FONT] = getSelectorVal($('prefs_def_font'));\r
-       G.user.prefs[PREF_DEF_DEPTH] = getSelectorVal($('prefs_def_range'));\r
-       \r
-       var holdsPhone = $("opac.hold_notify.phone");\r
-       var holdsEmail = $("opac.hold_notify.email");\r
-       var circStartBox = $('circHistStart').checked;\r
-       var circStart = null;\r
-       circStart = (circStartBox && G.user.prefs[PREFS_CIRC_HIST_START])?G.user.prefs[PREFS_CIRC_HIST_START]:dojo.date.stamp.toISOString(new Date());\r
-       if(!circStartBox) circStart = null;\r
-       \r
-       G.user.prefs[PREFS_HOLD_PHONE] = holdsPhone.checked;\r
-       G.user.prefs[PREFS_HOLD_EMAIL] = holdsEmail.checked;\r
-       G.user.prefs[PREFS_PREDUE_3DAY] = $(PREFS_PREDUE_3DAY).checked;\r
-       G.user.prefs[PREFS_OVER_FIRST] = $(PREFS_OVER_FIRST).checked;\r
-       G.user.prefs[PREFS_OVER_FIRST_P] = $(PREFS_OVER_FIRST_P).checked;\r
-       G.user.prefs[PREFS_HOLD_EXPIRE] = $(PREFS_HOLD_EXPIRE).checked;\r
-       G.user.prefs[PREFS_HOLD_CANCEL] = $(PREFS_HOLD_CANCEL).checked;\r
-       //G.user.prefs[PREFS_CIRC_HIST_AGE] = "2592000";\r
-       G.user.prefs[PREFS_CIRC_HIST_START] = circStart;\r
-\r
-       if( $('myopac_pref_home_lib').checked == true )\r
-               G.user.prefs[PREF_DEF_LOCATION] = null;\r
-       else\r
-               G.user.prefs[PREF_DEF_LOCATION] = getSelectorVal($('prefs_def_location'));\r
-\r
-  try {\r
-       if(commitUserPrefs())\r
-               alert($('prefs_update_success').innerHTML);\r
-       else alert($('prefs_update_failure').innerHTML);\r
-  } catch(e) {\r
-       alert(e);  \r
-  }\r
-       fieldmapper.standardRequest(FETCH_CHECKED_HISTORY,{params:[G.user.session, G.user.id()],oncomplete:function(r){\r
-               var resp = r.recv();\r
-               if(resp) resp = resp.content();\r
-       }});\r
-}\r
-\r
-function myOPACUpdateEmail() {\r
-       var email = $('myopac_new_email').value;\r
-       if(email == null || email == "") {\r
-               alert($('myopac_email_error').innerHTML);\r
-               return;\r
-       }\r
-\r
-       var req = new Request(UPDATE_EMAIL, G.user.session, email );\r
-       req.send(true);\r
-       if(req.result()) {\r
-               //G.user.email(email);\r
-        // force re-fetch to pick up latest last_xact_id\r
-        grabUser(null, true);\r
-               hideMe($('myopac_update_email_row'));\r
-               userShown = false;\r
-               alertId('myopac_email_success');\r
-               myOPACShowUser(true);\r
-\r
-        // user got here after trying to make a payment then deciding \r
-        // the email addr needed updating.  take the user back to the \r
-        // in-progress payment form\r
-        if(myopacReturnToPayment) {\r
-            myopacReturnToPayment = false;\r
-            myOPACChangePage("summary");\r
-            $('myopac-cc-email').innerHTML = email;\r
-        }\r
-               return;\r
-       }\r
-\r
-       alert($('myopac_email_failure').innerHTML);\r
-}\r
-\r
-function myOPACUpdatePassword() {\r
-       var curpassword = $('myopac_current_password').value;\r
-       var password = $('myopac_new_password').value;\r
-       var password2 = $('myopac_new_password2').value;\r
-\r
-       if(     curpassword == null || curpassword == "" || \r
-                       password == null || password == "" || \r
-                       password2 == null || password2 == "" || password != password2 ) {\r
-               alert($('myopac_password_error').innerHTML);\r
-               return;\r
-       }\r
-\r
-       if(!strongPassword(password, true)) return;\r
-\r
-       var req = new Request(UPDATE_PASSWORD, G.user.session, password, curpassword );\r
-       req.send(true);\r
-       if(req.result()) {\r
-        grabUser(null, true);\r
-               hideMe($('myopac_update_password_row'));\r
-               userShown = false;\r
-               alertId('myopac_password_success');\r
-               myOPACShowUser(true);\r
-               return;\r
-       }\r
-\r
-       alert($('myopac_password_failure').innerHTML);\r
-}\r
-\r
-function myOPACUpdatePhone(which) {\r
-       if(!which) return;\r
-       var tr = $('myopac_update_phone'+which+'_row');\r
-       var input = $('myopac_new_phone'+which);\r
-       if(!tr || !input) return;\r
-       var val = input.value;\r
-       if(!val.match(REGEX_PHONE)) {\r
-               alert("Not a valid phone number. Should be in the form ###-###-####");\r
-               input.focus();\r
-               input.select();\r
-               return;\r
-       }\r
-       \r
-       var newUser = fleshedUser.clone(true);\r
-       switch(which) {\r
-               case "1": newUser.day_phone(val); break;\r
-               case "2": newUser.evening_phone(val); break;\r
-               case "3": newUser.other_phone(val); break;\r
-       }\r
-       \r
-       newUser.ischanged("t");\r
-       var resp = fieldmapper.standardRequest(['open-ils.actor', 'open-ils.actor.patron.update'], {async:false, params:[G.user.session, newUser]});\r
-       if(typeof(resp.desc)=="undefined") {\r
-               hideMe(tr);\r
-               userShown = false;\r
-               fleshedUser = resp;\r
-               alert("Phone number updated successfully.");\r
-               myOPACShowUser(true);\r
-       } else {\r
-               alert(resp.textcode+'\n'+resp.desc);\r
-               input.focus();\r
-               input.select();\r
-       }\r
-}\r
-\r
-function myOPACUpdateUsername() {\r
-       var username = $('myopac_new_username').value;\r
-       if(username == null || username == "") {\r
-               alert($('myopac_username_error').innerHTML);\r
-               return;\r
-       }\r
-\r
-       if( username.match(/.*\s.*/) ) {\r
-               alert($('myopac_invalid_username').innerHTML);\r
-               return;\r
-       }\r
-\r
-    r = fetchOrgSettingDefault(globalOrgTree.id(), 'opac.barcode_regex');\r
-    if(r) REGEX_BARCODE = new RegExp(r);\r
-\r
-    if(username.match(REGEX_BARCODE)) {\r
-        alert($('myopac_invalid_username').innerHTML);\r
-        return;\r
-    }\r
-\r
-       /* first see if the requested username is taken */\r
-       var req = new Request(CHECK_USERNAME, G.user.session, username);\r
-       req.send(true);\r
-       var res = req.result();\r
-       if( res !== null && res != G.user.id() ) {\r
-               alertId('myopac_username_dup');\r
-               return;\r
-       }\r
-\r
-       var req = new Request(UPDATE_USERNAME, G.user.session, username );\r
-       req.send(true);\r
-       if(req.result()) {\r
-\r
-               var evt;\r
-               var res = req.result();\r
-               if(evt = checkILSEvent(res)) {\r
-                       alertILSEvent(res);\r
-                       return;\r
-               }\r
-\r
-        grabUser(null, true);\r
-               hideMe($('myopac_update_username_row'));\r
-               userShown = false;\r
-               alertId('myopac_username_success');\r
-               myOPACShowUser(true);\r
-               return;\r
-       }\r
-\r
-       alert($('myopac_username_failure').innerHTML);\r
-}\r
-\r
-function iForgotMyPassword(un,email) {\r
-       if(!un) return;\r
-       //var type = un.match(/^\d+$/)?'barcode':'username';\r
-       fieldmapper.standardRequest(PASS_RESET,{params:['barcode',un,email],oncomplete:function(rr){\r
-               var resp = rr.recv().content();\r
-               if(resp.textcode=="ACTOR_USER_NOT_FOUND") fieldmapper.standardRequest(PASS_RESET,{params:['username',un,email],oncomplete:function(r){\r
-                       var resp2 = r.recv().content();\r
-                       if(resp2.textcode) alert(resp2.textcode+'\n'+resp2.desc);\r
-                       else { alert("Password reset request sent successfully."); unHideMe($('login_box'));hideMe($('forget_pw')); }\r
-               }}); else {\r
-                       if(resp.textcode) alert(resp.textcode+'\n'+resp.desc);\r
-                       else { alert("Password reset request sent successfully."); unHideMe($('login_box'));hideMe($('forget_pw')); }\r
-               }\r
-       }});\r
-}\r
-\r
-function myOPACShowBookbags(force) {\r
-       if(anonListCache.length) drawAnonLists(force); else hideMe($('acct_list_template2'));\r
-       var wrapper = $('acct_lists_prime');\r
-       if(!containerTemplate) containerTemplate = wrapper.removeChild($('acct_list_template')); else if(!force) return;\r
-       if(!wrapper) return;\r
-       \r
-       var containers = containerFetchAll();\r
-       \r
-       var found = false;\r
-       for(var i in containers) {\r
-               found = true;\r
-               var cont = containers[i];\r
-               fleshedContainers[cont.id()] = cont;\r
-               var temp = containerTemplate.cloneNode(true);\r
-               var title = $n(temp, 'list_name');\r
-               var share = $n(temp, 'share_list_link');\r
-               var rem = $n(temp, 'remove_list');\r
-               if(!title || !share || !rem) continue;\r
-               \r
-               title.appendChild(text(cont.name()));\r
-               share.onclick = myListAction;\r
-               share.listID = cont.id();\r
-               rem.value='delete';\r
-               rem.onclick = myListAction;\r
-               rem.listID = cont.id();\r
-               temp.setAttribute("id",temp.id + '_' + cont.id());\r
-               \r
-               if(containers.length>1) {\r
-                       var sel = $n(temp, 'list_actions');\r
-                       var optg = elem('optgroup', {label:'Move Items to'});\r
-                       for(var n in containers) {\r
-                               var cont2 = containers[n];\r
-                               if(cont2.id()==cont.id()) continue;\r
-                               var opt = elem('option', {value:'move', container:cont2.id()}, cont2.name());\r
-                               optg.appendChild(opt);\r
-                       }\r
-                       sel.appendChild(optg);\r
-               }\r
-               \r
-               if(isTrue(cont.pub())) {\r
-                       share.value='hide';\r
-                       share.innerHTML = 'Un-share';\r
-                       share.title='';\r
-                       var link = $n(temp,'share_list_rss');\r
-                       link.setAttribute('href', buildExtrasLink( 'feed/bookbag/rss2-full/'+cont.id(), false));\r
-                       unHideMe(link);\r
-               } else {\r
-                       share.value='share';\r
-                       share.title = 'Sharing this bookbag will allow the contents of the bookbag to be seen by others.'\r
-                       share.innerHTML = 'Share';\r
-               }\r
-               \r
-               wrapper.appendChild(temp);\r
-               // grab container items after adding each list to the page\r
-               fieldmapper.standardRequest(FETCH_CONTAINER_DETAILS,{params:[G.user.session, 'biblio', cont.id()],oncomplete:drawListItemRows});\r
-       }\r
-       \r
-       if(!found) wrapper.appendChild(elem("div",{style:"font-weight:bold;text-align:center;font-size:14px;"},"You have not created any lists"));\r
-       \r
-       var anonSel = $('sel_all_list_anon');\r
-       if(!anonSel) return;\r
-       var optg2 = elem('optgroup', {label:'Move Items to', id:'anon_list_grp'});\r
-       for(var t in containers) {\r
-               var cont3 = containers[t];\r
-               var opt2 = elem('option', {value:'move', container:cont3.id()}, cont3.name());\r
-               optg2.appendChild(opt2);\r
-       }\r
-       anonSel.appendChild(optg2);\r
-}\r
-\r
-function drawAnonLists() {\r
-       var cont = $('acct_list_template2');\r
-       var bibs = fieldmapper.standardRequest(FETCH_MODS_SLIM, {async:false, params:[anonListCache]});\r
-       \r
-       var tbody = $('anon_list_tbody');\r
-       for(var i in bibs) {\r
-               var it = bibs[i];\r
-               var tr = elem('tr');\r
-               var td1 = elem('td',{style:'padding-right:5px;'},it.title());\r
-               var td2 = elem('td',{width:'1'});\r
-               var el = elem('input',{type:'checkbox', name:'list_action_chbx', recordid:it.doc_id()+'', doc_id:it.doc_id()+'', listID:'anon'});\r
-               el.className = "list_action_chbx";\r
-               el.name="list_action_chbx";\r
-               td2.appendChild(el);\r
-               tr.appendChild(td2);\r
-               tr.appendChild(td1);\r
-               tbody.appendChild(tr);\r
-       }\r
-       unHideMe(cont);\r
-}\r
-\r
-function drawListItemRows(r) {\r
-       var fleshed = r.recv().content();\r
-       if(!fleshed) return;\r
-       var modsArr = [];\r
-       \r
-       var temp = $('acct_list_template_'+fleshed.id());\r
-       if(!temp) return;\r
-       var tbody = $n(temp,'list_tbody');\r
-       if(!tbody) return;\r
-       var items = fleshed.items();\r
-\r
-       for(var i=0; i<items.length; i++) {\r
-               var it = items[i];\r
-               var tr = elem('tr');\r
-               var td1 = elem('td',{'class':'list_item_title_'+it.target_biblio_record_entry(), style:'padding-right:5px;'});\r
-               td1.className = 'list_item_title_'+it.target_biblio_record_entry();\r
-               var td2 = elem('td',{width:'1'});\r
-               \r
-               var el = elem('input',{type:'checkbox', name:'list_action_chbx','class':'list_action_chbx', recordid:it.target_biblio_record_entry()+'', itemID:it.id()+'',listID:fleshed.id()});\r
-               el.name="list_action_chbx";\r
-               el.className="list_action_chbx";\r
-               td2.appendChild(el);\r
-               tr.appendChild(td2);\r
-               tr.appendChild(td1);\r
-               tbody.appendChild(tr);\r
-               modsArr[i] = it.target_biblio_record_entry();\r
-       }\r
-       \r
-       // yay for batching requests\r
-       if(modsArr.length) {\r
-               fieldmapper.standardRequest(FETCH_MODS_SLIM,{params:[modsArr],oncomplete:drawListItemTitles});\r
-       } else {\r
-               var tr = elem('tr');\r
-               var td = elem('td',{style:"font-weight:bold;font-size:14px;",align:'center'},'No items have been added to this list yet.');\r
-               td.style.fontWeight='bold';\r
-               td.style.fontSize='14px';\r
-               tr.appendChild(td);\r
-               tbody.appendChild(tr);\r
-       }\r
-}\r
-\r
-function drawListItemTitles(r) {\r
-       var rec = r.recv().content();\r
-       if(!rec) return;\r
-       for(var i in rec) {\r
-               var rows = dojo.query('.list_item_title_'+rec[i].doc_id()); //$c('list_item_title_'+rec[i].doc_id());\r
-               for(var n in rows) rows[n].innerHTML = rec[i].title();\r
-       }\r
-}\r
-\r
-function addMyList() {\r
-       var name = $('mylist_new').value;       \r
-       if(!name) return false;\r
-\r
-       var exists = false;\r
-       for( var c in fleshedContainers ) { exists = true; break; }\r
-\r
-       /* let them know what they are getting into... */\r
-       if(!exists) if(!confirm($('bb_create_warning').innerHTML)) return false;\r
-       var result = containerCreate( name, $('shareListYes').checked );\r
-       var code = checkILSEvent(result);\r
-       if(code) { alertILSEvent(result); return false; }\r
-       //if(result) alert($('myopac_bb_update_success').innerHTML);\r
-       $('mylist_new').value="";\r
-       $('shareListYes').checked = false;\r
-       $('shareListNo').checked = true;\r
-       reloadMyLists();\r
-       return true;\r
-}\r
-\r
-function myListAction() {\r
-       if(!this.listID) return;\r
-       switch(this.value) {\r
-               case "delete": myOPACDeleteBookbag(this.listID); break;\r
-               case  "share": myOPACMakeBBPublished(this.listID); break;\r
-               case   "hide": myOPACMakeBBPublished(this.listID, true); break;\r
-       }\r
-}\r
-\r
-function myOPACMakeBBPublished(bbid, hideme) {\r
-       var bb = fleshedContainers[bbid];\r
-\r
-       if(hideme) {\r
-               if(!confirm($('myopac_make_unpublished_confirm').innerHTML)) return;\r
-               bb.pub('f');\r
-       } else {\r
-               if(!confirm($('myopac_make_published_confirm').innerHTML)) return;\r
-               bb.pub('t');\r
-       }\r
-\r
-       var result = containerUpdate(bb);\r
-       var code = checkILSEvent(result);\r
-       if(code) { alertILSEvent(result); return; }\r
-\r
-       //alert($('myopac_bb_update_success').innerHTML);\r
-       reloadMyLists();\r
-}\r
-\r
-function myOPACDeleteBookbag(id) {\r
-       if( confirm( $('myopac_delete_bookbag_warn').innerHTML ) ) {\r
-               var result = containerDelete(id);\r
-               var code = checkILSEvent(result);\r
-               if(code) { alertILSEvent(result); return; }\r
-               //alert($('myopac_bb_update_success').innerHTML);\r
-               //hideMe($('myopac_bookbag_items_table'));\r
-               //hideMe($('myopac_bookbag_items_name'));\r
-               //hideMe($('myopac_bookbag_no_items'));\r
-               reloadMyLists();\r
-       }\r
-}\r
-\r
-function reloadMyLists() {\r
-       var prime = $('acct_lists_prime');\r
-       var anon = $('anon_list_tbody');\r
-       $('sel_all_list_anon').removeChild($('anon_list_grp'));\r
-       removeChildren(prime);\r
-       removeChildren(anon);\r
-       prime.innerHTML = "";\r
-       myOPACShowBookbags(true);\r
-}\r
-\r
-function removeSelectedItems(parent) {\r
-       if(!parent) parent = $('acct_lists_prime');\r
-       var items = dojo.query('input[name=list_action_chbx]', parent);\r
-       if(!items.length) items = dojo.query('.list_action_chbx', parent);\r
-       items.filter(function(item, index, arr){return item.checked;},this);\r
-       \r
-       if(items.length) {\r
-               for(var i=0; i<items.length; i++) {\r
-                       var box = items[i];\r
-                       if(box.checked) {\r
-                               containerRemoveItem(box.getAttribute("itemID"));\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-var finesShown = false;\r
-function myOPACShowFines(showing) {\r
-       if(finesShown) return; finesShown = true;\r
-       var req = new Request(FETCH_FINES_SUMMARY, G.user.session, G.user.id() );\r
-    req.request.__showing = showing;\r
-       req.callback(_myOPACShowFines);\r
-       req.send();\r
-}\r
-\r
-function _myOPACShowFines(r) {\r
-       hideMe($('myopac_fines_summary_loading'));\r
-       unHideMe($('myopac_fines_summary_row'));\r
-\r
-       var summary = r.getResultObject();\r
-       var total       = "0.00";\r
-       var paid        = "0.00";\r
-       var balance = "0.00";\r
-       var balance2 = "0.00";\r
-       \r
-       if( instanceOf(summary,mous) ) {\r
-               total           = _finesFormatNumber(summary.total_owed());\r
-               paid            = _finesFormatNumber(summary.total_paid());\r
-               balance = _finesFormatNumber(summary.balance_owed());\r
-               balance2 = _finesFormatNumber(summary.balance_owed());\r
-\r
-               var req = new Request(\r
-            'open-ils.actor:open-ils.actor.user.transactions.have_balance.fleshed', \r
-            G.user.session, G.user.id() );\r
-\r
-               req.callback(myOPACShowTransactions);\r
-               req.send();\r
-       }\r
-\r
-       if(parseFloat(balance2) > 0.00) {\r
-               var bal = $('myopac_sum_fines_bal');\r
-               bal.style.color = "red";\r
-               appendClear(bal,text("$"+balance2));\r
-               unHideMe($('myopac_sum_fines'));\r
-               unHideMe($('myopac_sum_fines_slim'));\r
-               unHideMe($('pay_fines_btn'));\r
-        if(!r.__showing)\r
-                   showFinesDiv($('show_fines_link'));\r
-       }\r
-\r
-       appendClear($('myopac_fines_summary_total'), text(total));\r
-       appendClear($('myopac_fines_summary_paid'), text(paid));\r
-       appendClear($('myopac_fines_summary_balance'), text(balance));\r
-}\r
-\r
-function _finesFormatNumber(num) {\r
-       if(isNull(num)) num = 0;\r
-       num = num + "";\r
-       if(num.length < 2 || !num.match(/\./)) num += ".00";\r
-       if(num.match(/\./) && num.charAt(num.length-2) == '.') num += "0";\r
-       return num;\r
-}\r
-\r
-function _trimTime(time) { \r
-       if(!time) return ""; \r
-    var d = dojo.date.stamp.fromISOString(time);\r
-    if(!d) return ""; /* date parse failed */\r
-    return d.iso8601Format('YMD');\r
-}\r
-\r
-function _trimSeconds(time) { \r
-    if(!time) return ""; \r
-    var d = dojo.date.stamp.fromISOString(time);\r
-    if(!d) return ""; /* date parse failed */\r
-    return d.iso8601Format('YMDHM',null,true,true);\r
-}\r
-\r
-function myOPACShowTransactions(r) {\r
-       var transactions = r.getResultObject();\r
-       \r
-       if(!myopacGenericTransTemplate) myopacGenericTransTemplate = $('myopac_trans_tbody').removeChild($('myopac_trans_row'));\r
-       if(!myopacCircTransTemplate) myopacCircTransTemplate = $('myopac_circ_trans_tbody').removeChild($('myopac_circ_trans_row'));\r
-       removeChildren($('myopac_trans_tbody'));\r
-       removeChildren($('myopac_circ_trans_tbody'));\r
-       transCache = [];\r
-\r
-    transactions = transactions.sort(\r
-        function(a, b) {\r
-            if(a.transaction.xact_start() < b.transaction.xact_start())\r
-                return 1;\r
-            else return -1;\r
-        }\r
-    );\r
-       \r
-       for( var idx in transactions ) {\r
-               var trans       = transactions[idx].transaction;\r
-               var record      = transactions[idx].record;\r
-               var circ        = transactions[idx].circ;\r
-               transCache[trans.id()] = transactions[idx];\r
-\r
-               if(trans.xact_type() == 'circulation') myOPACShowCircTransaction(trans, record, circ);\r
-               else if(trans.xact_type() == 'grocery') myopacShowGenericTransaction( trans );\r
-       }\r
-}\r
-\r
-// for toggling between payments and fines tabs\r
-function showFinesTab() {\r
-    hideMe($("myopac_payments_div"));\r
-    unHideMe($("pay-fines-image"));\r
-    unHideMe($("myopac_trans_div"));\r
-    unHideMe($("myopac_circ_trans_div"));\r
-    $('acct_fines_tab').style.background="url('/opac/skin/kcls/graphics/acct_fines_on.jpg') no-repeat bottom";\r
-    $('acct_payments_tab').style.background="url('/opac/skin/kcls/graphics/acct_payments_off.jpg') no-repeat bottom";\r
-}\r
-\r
-var paymentsDrawn = false;\r
-function myopacDrawPayments() {\r
-\r
-    unHideMe($("myopac_payments_div")); \r
-    hideMe($("myopac_circ_trans_div"));\r
-    hideMe($("myopac_trans_div"));\r
-    hideMe($("pay-fines-image"));\r
-    $('acct_fines_tab').style.background="url('/opac/skin/kcls/graphics/acct_fines_off.jpg') no-repeat bottom";\r
-    $('acct_payments_tab').style.background="url('/opac/skin/kcls/graphics/acct_payments_on.jpg') no-repeat bottom";\r
-\r
-    if(paymentsDrawn) return;\r
-    paymentsDrawn = true;\r
-\r
-    var before = new Date()\r
-    before.setFullYear(before.getFullYear() - 1);\r
-    // KCLS limits payment history view to 1 year.  This will eventually be expanded \r
-    // out to a history view page, but for now, just fetch what's needed.\r
-    var req = new Request(\r
-        'open-ils.actor:open-ils.actor.user.payments.retrieve', \r
-        G.user.session, G.user.id(), \r
-        {"where":{"payment_ts":{">=":dojo.date.stamp.toISOString(before)}}});\r
-\r
-    req.callback(_myopacDrawPayments);\r
-    req.send();\r
-}\r
-\r
-function _myopacDrawPayments(r) {\r
-\r
-    var payments = r.getResultObject();\r
-    var tbody = $('myopac_payments_tbody');\r
-    rowTmpl = tbody.removeChild($('myopac_payments_tmpl'));\r
-\r
-    dojo.forEach(payments,\r
-        function(payment) {\r
-            var row = rowTmpl.cloneNode(true);\r
-            $n(row, 'date').innerHTML =  dojo.date.locale.format( \r
-                dojo.date.stamp.fromISOString(payment.mp.payment_ts()),\r
-                {selector:'date', fullYear: true}\r
-            );\r
-            $n(row, 'for').innerHTML = (payment.title) ? payment.title : payment.last_billing_type;\r
-            $n(row, 'amount').innerHTML += Number(payment.mp.amount()).toFixed(2);\r
-            if(payment.mp.payment_type() == 'credit_card_payment') {\r
-                $n(row, 'print_recpt').onclick = function () { printPaymentReceipt([payment.mp.id()]) };\r
-                $n(row, 'email_recpt').onclick = function () { emailPaymentReceipt([payment.mp.id()]) };\r
-            } else {\r
-                $n(row, 'print_recpt').parentNode.style.visibility = 'hidden';\r
-            }\r
-            tbody.appendChild(row);\r
-        }\r
-    );\r
-}\r
-\r
-function emailPaymentReceipt(paymentIds, callback) {\r
-\r
-    if(!G.user.email()) {\r
-        if(callback) callback();\r
-        return;\r
-    }\r
-\r
-    progressDialog.show(true);\r
-\r
-    fieldmapper.standardRequest(\r
-        ['open-ils.circ', 'open-ils.circ.money.payment_receipt.email'],\r
-        {\r
-            async : true,\r
-            params : [G.user.session, paymentIds],\r
-            oncomplete : function(r) {\r
-                progressDialog.hide();\r
-                openils.Util.readResponse(r);\r
-                if(callback) callback();\r
-            }\r
-        }\r
-    );\r
-}\r
-\r
-function dateFromISO(d) {\r
-    if(!d) return '';\r
-    return dojo.date.locale.format( \r
-        dojo.date.stamp.fromISOString(d),\r
-        {selector:'date', fullYear: true}\r
-    );\r
-}\r
-\r
-function myopacShowGenericTransaction( trans ) {\r
-       var tbody = $('myopac_trans_tbody');\r
-\r
-       var row = myopacGenericTransTemplate.cloneNode(true);\r
-       $n(row,'myopac_trans_start').appendChild(text(dateFromISO(trans.xact_start())));\r
-       $n(row,'myopac_trans_last_payment').appendChild(text(dateFromISO(trans.last_payment_ts())));\r
-       $n(row,'myopac_trans_init_amount').appendChild(text(_finesFormatNumber(trans.total_owed())));\r
-       $n(row,'myopac_trans_total_paid').appendChild(text(_finesFormatNumber(trans.total_paid())));\r
-       $n(row,'myopac_trans_balance').appendChild(text(_finesFormatNumber(trans.balance_owed())));\r
-       $n(row,'selector').balance_owed = trans.balance_owed();\r
-       $n(row,'selector').setAttribute("xact", trans.id());\r
-\r
-       var req = new Request(FETCH_MONEY_BILLING, G.user.session, trans.id());\r
-       req.send(true);\r
-       var bills = req.result();\r
-       if(bills && bills[0]) $n(row,'myopac_trans_bill_type').appendChild(text(bills[0].billing_type()));\r
-\r
-       tbody.appendChild(row);\r
-       unHideMe($('myopac_trans_div'));\r
-}\r
-\r
-function myOPACShowCircTransaction(trans, record, circ) {\r
-       var tbody = $('myopac_circ_trans_tbody');\r
-\r
-       var row = myopacCircTransTemplate.cloneNode(true);\r
-       if(record) {\r
-               buildTitleDetailLink(record, $n(row,'myopac_circ_trans_title'));\r
-               $n(row,'myopac_circ_trans_author').appendChild(text(normalize(truncate(record.author(), 65))));\r
-       } else {\r
-               var req = new Request( FETCH_COPY, circ.target_copy() );\r
-               req.alertEvents = false;\r
-               req.send(true);\r
-               var copy = req.result();\r
-               if( copy ) {\r
-                       $n(row,'myopac_circ_trans_title').appendChild(text(copy.dummy_title()));\r
-                       $n(row,'myopac_circ_trans_author').appendChild(text(copy.dummy_author()));\r
-               }\r
-       }\r
-       \r
-       $n(row,'myopac_circ_trans_start').appendChild(text(dateFromISO(trans.xact_start())));\r
-\r
-    var due = dateFromISO(circ.due_date());\r
-       var checkin = dateFromISO(circ.stop_fines_time());\r
-\r
-       $n(row,'myopac_circ_trans_due').appendChild(text(due))\r
-       if(checkin) appendClear($n(row,'myopac_circ_trans_finished'), text(checkin));\r
-       if(circ.stop_fines() == 'LOST') appendClear($n(row,'myopac_circ_trans_finished'), text(circ.stop_fines()));\r
-       if(circ.stop_fines() == 'CLAIMSRETURNED') appendClear($n(row,'myopac_circ_trans_finished'), text(""));\r
-       $n(row,'myopac_circ_trans_balance').appendChild(text(_finesFormatNumber(trans.balance_owed())));\r
-       $n(row,'selector').balance_owed = trans.balance_owed();\r
-       $n(row,'selector').setAttribute("xact",trans.id()); \r
-\r
-       tbody.appendChild(row);\r
-       unHideMe($('myopac_circ_trans_div'));\r
-}\r
-\r
-function showFinesDiv(el) {\r
-       if(!el) return;\r
-       if($('myopac_fines_div').className.indexOf('hide_me')>=0) { \r
-               unHideMe($('myopac_fines_div'));\r
-               el.innerHTML="Hide Overdue Materials";\r
-        if(!finesShown) {\r
-            myOPACShowFines(true);\r
-        }\r
-       } else {\r
-               hideMe($('myopac_fines_div'));\r
-               el.innerHTML="Show Overdue Materials";\r
-       }\r
-}\r
-\r
-var ecom_event_map = {\r
-    CREDIT_PROCESSOR_DECLINED_TRANSACTION : \r
-        'Sorry. Your payment has been declined. Please confirm your information is entered correctly or contact your credit card company.',\r
-    CREDIT_PROCESSOR_INVALID_CC_NUMBER : \r
-        'The credit card number entered is not valid.  Please confirm your information is entered correctly or contact your credit card company.',\r
-    SUCCESS : 'Your payment has been approved' \r
-}\r
-\r
-function showPaymentForm() {\r
-       unHideMe($('pay_fines_now'));\r
-       hideMe($('acct_sum'));\r
-    hideMe($('cc-payment-error-message'));\r
-       drawPayFinesPage(\r
-               G.user,\r
-               getSelectedFinesTotal(),\r
-               getSelectedFineTransactions(),\r
-               function(resp) {\r
-            unHideMe($('cc-payment-error-message'));\r
-                       if(resp.textcode) {\r
-                var message = ecom_event_map[resp.textcode] || resp.textcode+'\n'+resp.desc + '';\r
-                $('cc-payment-error-message').innerHTML = message;\r
-                               return;\r
-                       }\r
-                       G.user.last_xact_id(resp.last_xact_id); // update to match latest from server\r
-            $('cc-payment-error-message').innerHTML = ecom_event_map.SUCCESS;\r
-                       printPaymentReceipt(resp.payments);\r
-            emailPaymentReceipt(resp.payments);\r
-                       hideMe($('pay_fines_now'));unHideMe($('acct_sum'));\r
-                       finesShown = false;\r
-                       myOPACShowFines();              \r
-                       showFinesDiv($('show_fines_link'));\r
-               }\r
-       );\r
-}\r
-\r
-function getSelectedFinesTotal() {\r
-    var total = 0;\r
-    dojo.forEach(\r
-        dojo.query("[name=selector]", $('myopac_circ_trans_tbody')),\r
-        function(input) { if(input.checked && input.getAttribute("xact")) total += Number(input.balance_owed); }\r
-    );\r
-       \r
-    dojo.forEach(\r
-        dojo.query("[name=selector]", $('myopac_trans_tbody')),\r
-        function(input) { if(input.checked && input.getAttribute("xact")) total += Number(input.balance_owed); }\r
-    );\r
-    return total.toFixed(2);\r
-}\r
-\r
-function getSelectedFineTransactions() {\r
-       var set1 = dojo.query("[name=selector]", $('myopac_circ_trans_tbody')).\r
-        filter(function (o) { return o.checked }).\r
-               map(function (o) {return [o.getAttribute("xact"), Number(o.balance_owed).toFixed(2)];}\r
-        );\r
-       var set2 = dojo.query("[name=selector]", $('myopac_trans_tbody')).\r
-        filter(function (o) { return o.checked }).\r
-               map(function (o) {return [o.getAttribute("xact"), Number(o.balance_owed).toFixed(2)];}\r
-        );\r
-       var obj = set1.concat(set2);\r
-       return obj.filter(function(el){return el[0]==null?false:true;});\r
-}\r
-\r
-var payFinesDrawn = false;\r
-function drawPayFinesPage(patron, total, xacts, onPaymentSubmit) {\r
-    if (typeof(this.authtoken) == "undefined")\r
-        this.authtoken = patron.session;\r
-\r
-    dojo.query("span", "oils-selfck-cc-payment-summary")[0].innerHTML = total;\r
-\r
-    $('myopac-cc-email').innerHTML = patron.email();\r
-    oilsSelfckCCNumber.attr('value', '');\r
-    oilsSelfckCCCVV.attr('value', '');\r
-    oilsSelfckCCMonth.attr('value', '01');\r
-    oilsSelfckCCYear.attr('value', new Date().getFullYear());\r
-    oilsSelfckCCFName.attr('value', patron.first_given_name());\r
-    oilsSelfckCCLName.attr('value', patron.family_name());\r
-\r
-    var addr = patron.billing_address() || patron.mailing_address();\r
-\r
-    if (typeof(addr) != "object") {\r
-        /* still don't have usable address? try getting better user object. */\r
-        fieldmapper.standardRequest(\r
-            FETCH_FULL_USER, {\r
-                "params": [patron.session, patron.id(), ["billing_address", "mailing_address"]],\r
-                "async": false,\r
-                "oncomplete": function(r) {\r
-                    var usr = r.recv().content();\r
-                    if (usr) addr = usr.billing_address() || usr.mailing_address();\r
-                }\r
-            }\r
-        );\r
-    }\r
-\r
-    if (addr) {\r
-        oilsSelfckCCStreet.attr('value', addr.street1()+' '+addr.street2());\r
-        oilsSelfckCCCity.attr('value', addr.city());\r
-        oilsSelfckCCState.attr('value', addr.state());\r
-        oilsSelfckCCZip.attr('value', addr.post_code());\r
-    }\r
-\r
-    dojo.connect(oilsSelfckEditDetails, 'onChange',\r
-        function(newVal) {\r
-            dojo.forEach(\r
-                [oilsSelfckCCFName, oilsSelfckCCLName, oilsSelfckCCStreet, oilsSelfckCCCity, oilsSelfckCCState, oilsSelfckCCZip],\r
-                function(dij) { dij.attr('disabled', !newVal); }\r
-            );\r
-        }\r
-    );\r
-\r
-    if(!payFinesDrawn) {\r
-               dojo.connect(oilsSelfckCCSubmit, 'onClick',\r
-          function() {\r
-            hideMe($('pay_fines_now'));\r
-            unHideMe($('pay_fines_confirm'));\r
-\r
-            $('pay_fines_confirm_amount').innerHTML = \r
-                dojo.query("span", "oils-selfck-cc-payment-summary")[0].innerHTML;\r
-\r
-            dojo.connect(payConfirmSubmit, 'onClick', \r
-                function() { \r
-                    if (typeof(progressDialog) != "undefined") progressDialog.show(true);\r
-                    unHideMe($('pay_fines_now'));\r
-                    hideMe($('pay_fines_confirm'));\r
-                    sendCCPayment(patron, xacts, onPaymentSubmit);\r
-                } \r
-            );\r
-\r
-            dojo.connect(payConfirmCancel, 'onClick', \r
-                function() { \r
-                    unHideMe($('pay_fines_now'));\r
-                    hideMe($('pay_fines_confirm'));\r
-                }\r
-            );\r
-\r
-            /*\r
-                       if(!confirm("Are you sure?")) return;\r
-            sendCCPayment(patron, xacts, onPaymentSubmit);\r
-            */\r
-          }\r
-       );\r
-               payFinesDrawn = true;\r
-       }\r
-       \r
-       var selFines = $('selectedFines');\r
-       removeChildren(selFines);\r
-       for(var i in xacts) {\r
-               var xact = transCache[xacts[i][0]];\r
-               if(!xact) continue;\r
-               var tr = elem('tr');\r
-               var td1 = elem('td', {}, xact["record"]?xact.record.title():xact.transaction.last_billing_type());\r
-               var td2 = elem('td', {'nowrap':'nowrap', 'valign':'top'}, '$'+xact.transaction.balance_owed());\r
-               td2.style.paddingLeft = '5px';\r
-               td2.style.color = 'red';\r
-               tr.appendChild(td1);\r
-               tr.appendChild(td2);\r
-               selFines.appendChild(tr);\r
-       }\r
-}\r
-\r
-function sendCCPayment(patron, xacts, onPaymentSubmit) {\r
-    // in this context, patron will always be G.user.  set it explicitly \r
-    // to pick up the latest last_xact_id value\r
-    patron = G.user;\r
-\r
-    var args = {\r
-        userid : patron.id(),\r
-        payment_type : 'credit_card_payment',\r
-        payments : xacts,\r
-        cc_args : {\r
-            where_process : 1,\r
-            //type :  'MasterCard',//oilsSelfckCCType.attr('value'),\r
-            number : oilsSelfckCCNumber.attr('value'),\r
-            cvv2 : oilsSelfckCCCVV.attr('value'),\r
-            expire_year : oilsSelfckCCYear.attr('value'),\r
-            expire_month : oilsSelfckCCMonth.attr('value'),\r
-            billing_first : oilsSelfckCCFName.attr('value'),\r
-            billing_last : oilsSelfckCCLName.attr('value'),\r
-            billing_address : oilsSelfckCCStreet.attr('value'),\r
-            billing_city : oilsSelfckCCCity.attr('value'),\r
-            billing_state : oilsSelfckCCState.attr('value'),\r
-            billing_zip : oilsSelfckCCZip.attr('value')\r
-        }\r
-    }\r
-\r
-    var resp = fieldmapper.standardRequest(PAY_BILLS,{params : [patron.session, args, patron.last_xact_id()]});\r
-    if (typeof(progressDialog) != "undefined")\r
-        progressDialog.hide();\r
-\r
-    if (typeof(onPaymentSubmit) == "function") {\r
-        onPaymentSubmit(resp);\r
-    } else {\r
-        var evt = openils.Event.parse(resp);\r
-        if (evt) alert(evt);\r
-    }\r
-}\r
-\r
-function myopacSelectedHoldsRows() {\r
-    var r = [];\r
-       var cb;\r
-    var rows = dojo.query('[name=acct_holds_temp]',$("holds_temp_parent"));\r
-    for(var i = 0; i < rows.length; i++) {\r
-        cb = $n(rows[i], 'check_all_holds');\r
-        if(cb && cb.checked)\r
-            r.push(rows[i]);\r
-    }\r
-    return r;\r
-}\r
-\r
-var myopacProcessedHolds = 0;\r
-var myopacHoldsToProcess = 0;\r
-function myopacDoHoldAction() {\r
-    var selectedRows = myopacSelectedHoldsRows();\r
-    var action = getSelectorVal($('acct_holds_actions'));\r
-    $('myopac_holds_actions_none').selected = true;\r
-    if(selectedRows.length == 0) return;\r
-\r
-    myopacProcessedHolds = 0;\r
-\r
-    if(!confirmId('myopac.holds.'+action+'.confirm')) return;\r
-    //myopacSelectNoneHolds(); /* clear the selection */\r
-\r
-\r
-    /* first, let's collect the holds that actually need processing and\r
-        collect the full process count while we're at it */\r
-    var holds = [];\r
-    for(var i = 0; i < selectedRows.length; i++) {\r
-               var ahold = $n(selectedRows[i],'check_all_holds');\r
-        var hold = holdsCache[holdsCacheMap[ahold.holdid]];\r
-        var qstats = hold.status;\r
-        switch(action) {\r
-            case 'cancel':\r
-                holds.push(hold.hold);\r
-                break;\r
-            case 'thaw_date':\r
-            case 'thaw':\r
-                if(isTrue(hold.hold.frozen()))\r
-                    holds.push(hold.hold);\r
-                break;\r
-            case 'freeze':\r
-                if(!isTrue(hold.hold.frozen()) && qstats < 3)\r
-                    holds.push(hold.hold);\r
-                break;\r
-        }\r
-    }\r
-\r
-    myopacHoldsToProcess = holds;\r
-    if(myopacHoldsToProcess.length == 0) return;\r
-\r
-    if(action == 'thaw_date' || action == 'freeze') \r
-        myopacDrawHoldThawDateForm();\r
-    else\r
-    myopacProcessHolds(action);\r
-}\r
-\r
-function myopacDrawHoldThawDateForm() {\r
-    hideMe($('myopac_holds_div'));\r
-    unHideMe($('myopac_holds_thaw_date_form'));\r
-    $('myopac_holds_thaw_date_input').focus();\r
-}\r
-\r
-function myopacApplyThawDate() {\r
-    var dateString = dijit.byId('myopac_holds_thaw_date_input').getValue();\r
-    if(dateString) {\r
-        dateString = dojo.date.stamp.toISOString(dateString);\r
-        if(dateString) {\r
-            dateString = holdsVerifyThawDate(dateString);\r
-            if(!dateString) return;\r
-        } else {\r
-            dateString = null;\r
-        }\r
-    }\r
-       unHideMe($('myopac_holds_div'));\r
-    hideMe($('myopac_holds_thaw_date_form'));\r
-    myopacProcessHolds('freeze', dateString);\r
-}\r
-\r
-\r
-function myopacProcessHolds(action, thawDate) {\r
-       progressDialog.show(true);\r
-   // myopacShowHoldProcessing();\r
-    /* now we process them */\r
-    for(var i = 0; i < myopacHoldsToProcess.length; i++) {\r
-        var hold = myopacHoldsToProcess[i];\r
-        \r
-        var req;\r
-        switch(action) { \r
-\r
-            case 'cancel':\r
-                req = new Request(CANCEL_HOLD, G.user.session, hold.id());\r
-                break;\r
-    \r
-            case 'thaw':\r
-                hold.frozen('f');\r
-                hold.thaw_date(null);\r
-                req = new Request(UPDATE_HOLD, G.user.session, hold);\r
-                break;\r
-\r
-            case 'thaw_date':\r
-            case 'freeze':\r
-                hold.frozen('t');\r
-                hold.thaw_date(thawDate); \r
-                req = new Request(UPDATE_HOLD, G.user.session, hold);\r
-                break;\r
-                //thawDate = prompt($('myopac.holds.freeze.select_thaw').innerHTML);\r
-\r
-        }\r
-\r
-        req.callback(myopacBatchHoldCallback);\r
-        req.send();\r
-        req = null;\r
-    }\r
-}\r
-\r
-function myopacBatchHoldCallback(r) {\r
-       var res = r.getResultObject();\r
-       myopacHoldsToProcess = grep(myopacHoldsToProcess, function(i) { return (i.id() != res); }); \r
-       if(!myopacHoldsToProcess || ++myopacProcessedHolds >= myopacHoldsToProcess.length) {\r
-         //alert(res);\r
-         progressDialog.hide();\r
-         myopacForceHoldsRedraw = true;\r
-         $('check_all_holds').checked = false;\r
-         drawHoldsPage();\r
-       }\r
-}\r
-\r
-function myOPACRenewSelected() {\r
-   var rows = dojo.query('input[name=check_all_checked]',$('checked_temp_parent')).filter(function(n,i){ return n.checked; });\r
-   __renew_circs = [];\r
-       if(!rows.length || !confirm($('myopac_renew_confirm').innerHTML)) return;\r
-   __success_count = 0;\r
-   __fail_count = 0;\r
-\r
-   for( var i = 0; i < rows.length; i++ ) {\r
-      var row = rows[i];\r
-      var circ_id = row.getAttribute('circid');\r
-\r
-          var circ;\r
-          for( var j = 0; j != itemsOutCache.length; j++ ) \r
-                  if(itemsOutCache[j].circ.id() == circ_id)\r
-                          circ = itemsOutCache[j].circ;\r
-\r
-      __renew_circs.push(circ);\r
-   }\r
-\r
-    if( __renew_circs.length == 0 ) return;\r
-\r
-    //unHideMe($('my_renewing'));\r
-    //moClearCheckedTable();\r
-\r
-    for( var i = 0; i < __renew_circs.length; i++ ) {\r
-        var circ = __renew_circs[i];\r
-        moRenewCirc( circ.target_copy(), G.user.id(), circ );\r
-    }\r
-}\r
-\r
-var __renew_circs = [];\r
-var __rewnew_errors = [];\r
-var __success_count = 0;\r
-var __fail_count = 0;\r
-function moRenewCirc(copy_id, user_id, circ) {\r
-\r
-   _debug('renewing circ ' + circ.id() + ' with copy ' + copy_id);\r
-   var req = new Request(RENEW_CIRC, G.user.session, \r
-      {  patron : user_id, \r
-         copyid : copy_id, \r
-         opac_renewal : 1\r
-      } \r
-   );\r
-\r
-   req.request.alertEvent = false;\r
-   req.callback(myHandleRenewResponse);\r
-   req.request.circ = circ;\r
-   req.send();\r
-}\r
-\r
-/* handles the circ renew results */\r
-\r
-function myHandleRenewResponse(r) {\r
-   try{ var res = r.getResultObject(); } catch(e){ alert("Renew Error\n\n"+e); __renew_circs = []; __rewnew_errors = []; return; }\r
-   var circ = r.circ;\r
-\r
-   /* remove this circ from the list of circs to renew */\r
-   if(checkILSEvent(res) || checkILSEvent(res[0])) {\r
-          var str1 = truncate(mvrObjCache[circ.target_copy()].title(),65)+'\n';\r
-          if(res.ilsevent) str1 += res.ilsevent+': '+res.desc+'\n'; else for(var i in res) str1 += res[i].ilsevent+': '+res[i].desc+'\n';\r
-          __rewnew_errors[circ.id()] = str1;\r
-   }\r
-   __renew_circs = grep(__renew_circs, function(i) { return (i.id() != circ.id()); });\r
-   _debug("handling renew result for " + circ.id());\r
-\r
-   if(checkILSEvent(res) || checkILSEvent(res[0])) __fail_count++;\r
-      //alertIdText('myopac_renew_fail', __circ_titles[circ.id()]);\r
-   else __success_count++;\r
-   \r
-   if(__renew_circs) return; /* more to come */\r
-   __renew_circs = [];\r
-   \r
-   var str = "";\r
-   if(__success_count) str+= __success_count+" items renewed successfully";\r
-   if(__fail_count) str+=__fail_count+" items did not renew.";\r
-   str+='\n\n';\r
-   for(var i in __rewnew_errors) str+=__rewnew_errors[i]+'\n';\r
-   \r
-   if(__success_count || __fail_count) alert(str);\r
-   __rewnew_errors = [];\r
-\r
-       //if( __success_count > 0 )\r
-    //  alertIdText('myopac_renew_success', __success_count);\r
-\r
-   hideMe($('my_renewing'));\r
-   checkedDrawn = false;\r
-    drawCheckedPage();\r
-       $('check_all_checked').checked = false;\r
-}\r
-\r
-\r
-function moveToNewList(parent, dest) {\r
-       if(!parent || !dest) return;\r
-       \r
-       var items = dojo.query('input[name=list_action_chbx]', parent);\r
-       if(!items.length) items = dojo.query('.list_action_chbx', parent);\r
-       items.filter(function(item, index, arr){return item.checked;},this);\r
-       \r
-       if(items.length) {\r
-               for(var i=0; i<items.length; i++) {\r
-                       var box = items[i];\r
-                       if(box.checked) {\r
-                               containerCreateItem(dest, box.getAttribute("recordid"));\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-function listSaveAction() {\r
-       var lists = dojo.query('select[name=list_actions]',$('temp_wrapper')).filter(function(n,i){\r
-               return n.options[n.selectedIndex].value!="0"\r
-       });\r
-       \r
-       if(lists.length) { if(!confirm("Proceed with the selected action(s)?")) return; } else return;\r
-       progressDialog.show(true);\r
-       var updateHolds = false;\r
-       var updateLists = false;\r
-       \r
-       lists.forEach(function(n,i){\r
-               var val = n.options[n.selectedIndex].value;\r
-               if(val=="0") return;\r
-               var p = n.parentNode.parentNode.parentNode.parentNode.parentNode;\r
-               switch(val) {\r
-                       case "hold": batchHoldMyList(null, p); updateHolds = true; break;\r
-                       case "move": if(n.id=='sel_all_list_anon') delSelCache(p, 'list_action_chbx');\r
-                                                               else removeSelectedItems(p); moveToNewList(p, n.options[n.selectedIndex].getAttribute("container"));\r
-                                                 updateLists = true; break;\r
-                       case "remove": if(n.id=='sel_all_list_anon') delSelCache(p, 'list_action_chbx');\r
-                                                               else removeSelectedItems(p);\r
-                                                  updateLists = true; break;\r
-               }\r
-               setSelector(n, "0");\r
-       });\r
-       \r
-       if(updateLists) reloadMyLists();\r
-       if(updateHolds) { myopacForceHoldsRedraw = true; drawHoldsPage(); }\r
-       progressDialog.hide();\r
-}\r
-\r
-var itemsOutHistoryInitialFetch = false;\r
-function switchSubPage(page, subpage) {\r
-       if(!page || !subpage) return;\r
-       \r
-       var pg = subPageObjs[page]; if(!pg) return;\r
-       var spg = subPageObjs[page][subpage]; if(!spg) return;\r
-       \r
-       for(var i in pg) { if(i!='header') for(var n in pg[i]){ if(pg[i][n] || n!='header') hideMe(pg[i][n]); } }\r
-       for(var t in spg) { if(spg[t] || t!='header') unHideMe(spg[t]); }\r
-       \r
-       pg.header.innerHTML = spg.header;\r
-\r
-    if(page == 'checked' && subpage == 'hist') {\r
-        if(!itemsOutHistoryInitialFetch) {\r
-            itemsOutHistoryInitialFetch = true;\r
-            progressDialog.show(true);\r
-               fieldmapper.standardRequest(FETCH_CHECKED_HISTORY, {async:true, params:[G.user.session, G.user.id(), {'limit':CIRC_HIST_PAGE_LIMIT, 'offset':0}],\r
-                       oncomplete:function(r) {\r
-                    progressDialog.hide();\r
-                    itemsOutHistory = openils.Util.readResponse(r);\r
-                    drawCircHistory();\r
-                       }\r
-               });\r
-        }\r
-    }\r
-}\r
-\r
-function doBatchAnonHolds() {\r
-       var error = {err:""};\r
-       var resp = placeBatchHold(holdsList, G.user.home_ou(), error);\r
-       if(resp == -1) alert("Unable to place holds"); else {\r
-         alert(resp+" hold"+(resp==1?"":"s")+" placed successfully\n\n"+error.err);\r
-       }\r
-       \r
-       holdsList = null;\r
-       myopacForceHoldsRedraw = true;\r
-       drawHoldsPage();\r
-}\r
-\r
-function myOPACUpdateHomeOU() {\r
-       var sel = $('myopac_new_home');\r
-       \r
-}\r
-\r
-var sortOrder = true;\r
-function sortHolds(by) {\r
-       if(!by) return;\r
-       \r
-       sortOrder = !sortOrder;\r
-       switch(by.toLowerCase()) {\r
-               case "format":\r
-               holdsCache = holdsCache.sort(function(a, b) {\r
-                       if(sortOrder) return get998dValue(imgFormatCache[a.hold.id()])<get998dValue(imgFormatCache[b.hold.id()])?-1:1;\r
-                               else      return get998dValue(imgFormatCache[a.hold.id()])>get998dValue(imgFormatCache[b.hold.id()])?-1:1;\r
-               });\r
-               break;\r
-               case "title":\r
-               holdsCache = holdsCache.sort(function(a, b) {\r
-                       if(sortOrder) return a.mvr.title()<b.mvr.title()?-1:1;\r
-                               else      return a.mvr.title()>b.mvr.title()?-1:1;\r
-               });\r
-               break;\r
-               case "pickup":\r
-               holdsCache = holdsCache.sort(function(a, b) {\r
-                       if(sortOrder) return findOrgUnit(a.hold.pickup_lib()).name()<findOrgUnit(b.hold.pickup_lib()).name()?-1:1;\r
-                               else      return findOrgUnit(a.hold.pickup_lib()).name()>findOrgUnit(b.hold.pickup_lib()).name()?-1:1;\r
-               });\r
-               break;\r
-               case "author":\r
-               holdsCache = holdsCache.sort(function(a, b) {\r
-                       if(sortOrder) return a.mvr.author()<b.mvr.author()?-1:1;\r
-                               else      return a.mvr.author()>b.mvr.author()?-1:1;\r
-               });\r
-               break;\r
-               case "status":\r
-               if(sortOrder) {\r
-                       drawHoldsPage(true);\r
-                       return;\r
-               } else {\r
-                       holdsCache = holdsCache.sort(function(a, b) {\r
-                               if(a.status==4) return 1;\r
-                               if(b.status==4) return -1;\r
-                               if(isTrue(a.hold.frozen())) return -1;\r
-                               if(isTrue(b.hold.frozen())) return 1;\r
-                               return dojo.date.stamp.fromISOString(a.hold.request_time()) > dojo.date.stamp.fromISOString(b.hold.request_time())?-1:1;\r
-                       });                     \r
-               }\r
-       }\r
-       \r
-       drawHoldsPage(false);\r
-}\r
-\r
-function sortChecked(by) {\r
-       if(!by) return;\r
-       \r
-       sortOrder = !sortOrder;\r
-       switch(by.toLowerCase()) {\r
-               case "title":\r
-               itemsOutCache = itemsOutCache.sort(function(a, b) {\r
-                       if(sortOrder) return a.record.title()<b.record.title()?-1:1;\r
-                               else      return a.record.title()>b.record.title()?-1:1;\r
-               });\r
-               break;\r
-               case "author":\r
-               itemsOutCache = itemsOutCache.sort(function(a, b) {\r
-                       if(sortOrder) return a.record.author()<b.record.author()?-1:1;\r
-                               else      return a.record.author()>b.record.author()?-1:1;\r
-               });\r
-               break;\r
-               case "due":\r
-               if(sortOrder) {\r
-                       drawCheckedPage(); return;\r
-               } else itemsOutCache = itemsOutCache.sort(function(a, b) {\r
-                       return dojo.date.stamp.fromISOString(a.circ.due_date()) < dojo.date.stamp.fromISOString(b.circ.due_date())?1:-1;\r
-               });\r
-               break;\r
-               case "barcode":\r
-               itemsOutCache = itemsOutCache.sort(function(a, b) {\r
-                       if(sortOrder) return Number(a.copy.barcode())<Number(b.copy.barcode())?-1:1;\r
-                               else      return Number(a.copy.barcode())>Number(b.copy.barcode())?-1:1;\r
-               });\r
-               break;\r
-               case "cn":\r
-               itemsOutCache = itemsOutCache.sort(function(a, b) {\r
-                       if(sortOrder) return callNumCache[a.copy.call_number()]<callNumCache[b.copy.call_number()] ?-1:1;\r
-                               else      return callNumCache[a.copy.call_number()]>callNumCache[b.copy.call_number()]?-1:1;\r
-               });\r
-               break;\r
-               case "renews":\r
-               itemsOutCache = itemsOutCache.sort(function(a, b) {\r
-                       if(sortOrder) return Number(a.circ.renewal_remaining())<Number(b.circ.renewal_remaining())?-1:1;\r
-                               else      return Number(a.circ.renewal_remaining())>Number(b.circ.renewal_remaining())?-1:1;\r
-               });\r
-               break;\r
-       }\r
-       \r
-       drawCheckedPage(false);\r
-}\r
-\r
-function sortCheckedHist(by) {\r
-       if(!by) return;\r
-       \r
-       sortOrder = !sortOrder;\r
-       switch(by.toLowerCase()) {\r
-               case "title":\r
-               itemsOutHistory = itemsOutHistory.sort(function(a, b) {\r
-                       if(mvrObjCache[a.circ.target_copy()].title()==null) return 1;\r
-                       if(mvrObjCache[b.circ.target_copy()].title()==null) return -1;\r
-                       if(sortOrder) return mvrObjCache[a.circ.target_copy()].title().toLowerCase()<mvrObjCache[b.circ.target_copy()].title().toLowerCase()?-1:1;\r
-                               else      return mvrObjCache[a.circ.target_copy()].title().toLowerCase()>mvrObjCache[b.circ.target_copy()].title().toLowerCase()?-1:1;\r
-               });\r
-               break;\r
-               case "author":\r
-               itemsOutHistory = itemsOutHistory.sort(function(a, b) {\r
-                       if(mvrObjCache[a.circ.target_copy()].author()==null) return 1;\r
-                       if(mvrObjCache[b.circ.target_copy()].author()==null) return -1;\r
-                       if(sortOrder) return mvrObjCache[a.circ.target_copy()].author().toLowerCase()<mvrObjCache[b.circ.target_copy()].author().toLowerCase()?1:-1;\r
-                               else      return mvrObjCache[a.circ.target_copy()].author().toLowerCase()>mvrObjCache[b.circ.target_copy()].author().toLowerCase()?1:-1;\r
-               });\r
-               break;\r
-               case "duedate":\r
-               if(sortOrder) {\r
-                       drawCheckedPage(); return;\r
-               } else itemsOutHistory = itemsOutHistory.sort(function(a, b) {\r
-                       return dojo.date.stamp.fromISOString(a.circ.due_date()) < dojo.date.stamp.fromISOString(b.circ.due_date())?1:-1;\r
-               });\r
-               break;\r
-               case "cn":\r
-               itemsOutHistory = itemsOutHistory.sort(function(a, b) {\r
-                                                                               // ya, i know, but it gets the job done.\r
-                       if(sortOrder) return callNumCache[copyObjCache[a.circ.target_copy()].call_number()].label().toLowerCase()<callNumCache[copyObjCache[b.circ.target_copy()].call_number()].label().toLowerCase()?-1:1;\r
-                               else      return callNumCache[copyObjCache[a.circ.target_copy()].call_number()].label().toLowerCase()>callNumCache[copyObjCache[b.circ.target_copy()].call_number()].label().toLowerCase()?-1:1;\r
-               });\r
-               break;\r
-       }\r
-       \r
-       drawCircHistory(false);\r
-}\r
-\r
-function printData(data, numItems, callback) {\r
-\r
-    //unHideMe($('receipt-print-frame-wrapper'));\r
-    receiptPrintDialog.show();\r
-\r
-    var frame = window["receipt-frame"];\r
-    frame.document.body.innerHTML = data;\r
-\r
-    var cancel = $('receipt-view-print-cancel');\r
-    cancel.onclick = function() {\r
-        frame.document.body.innerHTML = '';\r
-       // hideMe($('receipt-print-frame-wrapper'));\r
-        receiptPrintDialog.hide();\r
-    }\r
-\r
-    $('receipt-view-print-button').onclick = function() {\r
-        frame.focus();\r
-        frame.print();\r
-        var sleepTime = 1000;\r
-        if(numItems > 0) \r
-            sleepTime += (numItems / 2) * 1000;\r
-\r
-        setTimeout(\r
-            function() { \r
-                cancel.onclick();\r
-                if(callback) callback(); // fire optional post-print callback\r
-            },\r
-            sleepTime \r
-        );\r
-    };\r
-}\r
-\r
-\r
-function printPaymentReceipt(paymentIds, callback) {\r
-    progressDialog.show(true);\r
-\r
-    fieldmapper.standardRequest(\r
-        ['open-ils.circ', 'open-ils.circ.money.payment_receipt.print'],\r
-        {\r
-            async : true,\r
-            params : [G.user.session, paymentIds],\r
-            oncomplete : function(r) {\r
-                var resp = openils.Util.readResponse(r);\r
-                var output = "";\r
-                               if(resp) output = resp.template_output();\r
-                progressDialog.hide();\r
-                if(output) {\r
-                    printData(output.data(), 1, callback); \r
-                } else {\r
-                    var error = resp.error_output();\r
-                    if(error) {\r
-                        throw new Error("Error creating receipt: " + error.data());\r
-                    } else {\r
-                        throw new Error("No receipt data returned from server");\r
-                    }\r
-                }\r
-            }\r
-        }\r
-    );\r
-}\r
-\r
-function printFinesReceipt(callback) {\r
-    progressDialog.show(true);\r
-\r
-    var params = [\r
-        G.user.session, \r
-        G.user.ws_ou(),\r
-        null,\r
-        'format.selfcheck.fines',\r
-        'print-on-demand',\r
-        [G.user.id()]\r
-    ];\r
-\r
-    fieldmapper.standardRequest(\r
-        ['open-ils.circ', 'open-ils.circ.fire_user_trigger_events'],\r
-        {   \r
-            async : true,\r
-            params : params,\r
-            oncomplete : function(r) {\r
-                progressDialog.hide();\r
-                var resp = openils.Util.readResponse(r);\r
-                var output = resp.template_output();\r
-                if(output) {\r
-                    printData(output.data(), 240, callback); \r
-                } else {\r
-                    var error = resp.error_output();\r
-                    if(error) {\r
-                        throw new Error("Error creating receipt: " + error.data());\r
-                    } else {\r
-                        throw new Error("No receipt data returned from server");\r
-                    }\r
-                }\r
-            }\r
-        }\r
-    );\r
-}\r
-\r
-function buildOrgSelAlt(selector, org, offset, namecol) {\r
- if(!namecol) namecol = 'name';\r
- if(!showXUL && !isTrue(org.opac_visible())) return; // for some reason, isXUL() is rather slow when used in a decently sized loop.\r
- insertSelectorVal( selector, -1,\r
- org[namecol](), org.id(), null, findOrgDepth(org) - offset );\r
- var kids = org.children();\r
- if (kids) {\r
- for( var c = 0; c < kids.length; c++ )\r
- buildOrgSelAlt( selector, kids[c], offset, namecol);\r
- }\r
-}\r
+
+//attachEvt("common", "run", myOPACInit );
+// force init to run after opac_init();
+dojo.addOnLoad(function(){setTimeout(myOPACInit, 0)});
+        
+attachEvt('common','locationUpdated', myopacReload );
+dojo.require('openils.Util');
+
+var FETCH_CONTAINER_DETAILS = ['open-ils.actor','open-ils.actor.container.flesh'];
+var FETCH_CHECKED_DETAILS = ['open-ils.circ','open-ils.circ.actor.user.checked_out.atomic'];
+var FETCH_CHECKED_HISTORY = ['open-ils.actor','open-ils.actor.history.circ.visible.atomic'];
+var FETCH_FAV_SEARCHES = ['open-ils.actor','open-ils.actor.user.saved_search.retrieve'];
+var FETCH_HOLD_DETAILS = ['open-ils.circ','open-ils.circ.hold.details.batch.retrieve.atomic'];
+var FETCH_MODS_BY_COPY = ['open-ils.search','open-ils.search.biblio.mods_from_copy'];
+var FETCH_CALL_NUMBER = ['open-ils.search','open-ils.search.callnumber.retrieve'];
+var FETCH_MODS_SLIM = ['open-ils.search','open-ils.search.biblio.record.mods_slim.retrieve'];
+var FETCH_FULL_USER = ['open-ils.actor','open-ils.actor.user.fleshed.retrieve'];
+var FETCH_HOLD_IDS = ['open-ils.circ','open-ils.circ.holds.id_list.retrieve'];
+var FETCH_COPY_OBJ = ['open-ils.search','open-ils.search.asset.copy.retrieve'];
+var FETCH_OPT_INS = ['open-ils.actor','open-ils.actor.event_def.opt_in.settings.atomic'];
+var FETCH_LISTS = ['open-ils.actor','open-ils.actor.container.flesh'];
+var PASS_RESET = ['open-ils.actor','open-ils.actor.patron.password_reset.request'];
+var PAY_BILLS = ['open-ils.circ','open-ils.circ.money.payment'];
+// number of api calls to run before firing myOPACPostCollect() -- helps make all data available first (avoids having to make sync'd calls)
+var TOTAL_CALLS = 6;
+
+var PREFS_HOLD_PHONE = "notification.hold.pickup.phone";
+var PREFS_HOLD_EMAIL = "notification.hold.pickup.email";
+var PREFS_PREDUE_3DAY = "notification.predue.email";
+var PREFS_OVER_FIRST = "notification.overdue.first.email";
+var PREFS_OVER_FIRST_P = "notification.overdue.first.phone";
+var PREFS_HOLD_EXPIRE = "notification.hold.expire.email";
+var PREFS_HOLD_CANCEL = "notification.hold.cancel.email";
+var PREFS_CIRC_HIST_AGE = "history.circ.retention_age";
+var PREFS_CIRC_HIST_START = "history.circ.retention_start";
+
+var listsCache = [];
+var holdsCache = [];
+var holdsCacheMap = [];
+var itemsOutCache = [];
+var callNumCache = [];
+var favsCache = [];
+var copyObjCache = [];
+var mvrObjCache = [];
+var itemsOutHistory = [];
+var userOptIns = [];
+var userOptInsMap = [];
+var fleshedLists = [];
+var imgFormatCache = [];
+var transCache = [];
+var fleshedContainers = {};
+var subPageObjs = {};
+
+var CIRC_HIST_PAGE_LIMIT = 10;
+var circHistPage = 0;
+var showXUL = false;
+var holdsList = null;
+var fleshedUser = null;
+var allowPendingAddr = false;
+var currPage = "";
+var templates = {};
+var containerTemplate;
+var containerTemplate2;
+var myopacGenericTransTemplate;
+var myopacCircTransTemplate;
+var addrRowTemplate;
+var notesTemplate;
+var myopacReturnToPayment = false;
+
+function myOPACInit() {
+       if(!(G.user && G.user.session)) {
+        initLogin();
+    } else {
+        allowPendingAddr = fetchOrgSettingDefault(G.user.home_ou(), 'opac.allow_pending_address');
+        if(allowPendingAddr) unHideMe($('myopac_pending_addr_td'));
+
+               unHideMe($('myopac_tabs'));
+               currPage = "summary";
+               holdsList = getCacheValue('saveAnonCache');
+               if(holdsList) { currPage = "holds"; swapTabs($('acct_holds')); setCacheValue('saveAnonCache', null); TOTAL_CALLS -= 2; }
+               var retUrl = getCacheValue('returnURL');
+               if(retUrl) { setCacheValue('returnURL', null); setCacheValue('showHoldEditor', {record:retUrl.record, type:retUrl.type}); window.location=retUrl.href; }
+               
+               var sel = $('myopac_new_home');
+               buildOrgSel(sel, globalOrgTree, 0);
+               setSelector(sel, G.user.home_ou());
+               
+               switch(new CGI().param('acctpage')) {
+                       case "1": currPage = "summary";  break;
+                       case "2": currPage = "checked"; swapTabs($('acct_checked_out')); break;
+                       case "3": currPage = "holds"; swapTabs($('acct_holds')); break;
+                       case "4": currPage = "prefs"; swapTabs($('acct_prefs')); break;
+                       case "5": currPage = "fines"; swapTabs($('acct_favs')); break;
+                       case "6": currPage = "bookbag"; swapTabs($('acct_lists')); break;
+               }
+               
+               if(!isXUL()) {
+                       unHideMe($('myopac_summary_email_change'));
+                       unHideMe($('myopac_summary_password_change'));
+                       unHideMe($('myopac_summary_username_change'));
+               } else {
+                       unHideMe($('myopac_summary_phone1_change'));
+                       unHideMe($('myopac_summary_phone2_change'));
+                       unHideMe($('myopac_summary_phone3_change'));
+               }
+
+
+        fieldmapper.standardRequest(FETCH_FULL_USER, {async:true, params:[G.user.session, G.user.id()],
+            oncomplete:function(r) {
+                               showXUL = isXUL();
+                fleshedUser = openils.Util.readResponse(r);
+                               myOPACShowFines(true);
+                myOPACShowUser(false);
+                       myOPACChangePage(currPage);
+                       myOPACInitTemplates();
+                       myOPACInitSubpages();
+                       //myOPACShowBookbags(true);
+                       if(holdsList) doBatchAnonHolds();
+                       showCanvas();
+            }
+        });
+       }
+}
+
+function myopacReload() {
+       var a = {};
+       a[PARAM_LOCATION] = getNewSearchLocation();
+       a[PARAM_DEPTH] = getNewSearchDepth();
+       hideMe($('canvas_main'));
+       goTo(buildOPACLink(a, true));
+}
+
+function myOPACChangePage( page ) {
+       var s = $("myopac_summary_td");
+       var c = $("myopac_checked_td");
+       var f = $("myopac_fines_td");
+       var h = $("myopac_holds_td");
+       var p = $("myopac_prefs_td");
+       var b = $('myopac_bookbag_td');
+
+       var ss = $("myopac_summary_div");
+       var cc = $("myopac_checked_div");
+       var ff = $("myopac_fines_div");
+       var hh = $("myopac_holds_div");
+       var pp = $("myopac_prefs_div");
+       var bb = $('myopac_bookbag_div');
+
+       hideMe(ss);
+       hideMe(cc); hideMe(ff);
+       hideMe(hh); hideMe(pp);
+       hideMe(bb);
+
+    if(page != 'prefs')
+        myopacReturnToPayment = false;
+
+    var oncomplete = null;
+
+       switch( page ) {
+               case "summary": unHideMe(ss);
+                       if($('show_fines_link').innerHTML=="Hide Overdue Materials") unHideMe(ff);
+            oncomplete = myOPACDrawSummary;
+                       break;
+
+               case "checked": 
+            unHideMe(cc); 
+            oncomplete = drawCheckedPage;
+            break;
+
+               case "holds": 
+            unHideMe(hh); 
+            oncomplete = drawHoldsPage;
+            break;
+
+               case "prefs": 
+            unHideMe(pp); 
+            oncomplete = myOPACShowPrefs;
+            break;
+
+               case 'bookbag': 
+            unHideMe(bb); 
+            break;
+       }
+       currPage = page;
+    myOPACGrabPageData(page, oncomplete);
+}
+
+var fetchedPages={}
+function myOPACGrabPageData(page, oncomplete) {
+    if(fetchedPages[page]) return;
+    fetchedPages[page] = true;
+
+    switch(page) {
+
+               case "summary": 
+            oncomplete();
+            break;
+
+               case "checked": 
+
+               progressDialog.show(true);
+               fieldmapper.standardRequest(FETCH_CHECKED_DETAILS, {async:true, params:[G.user.session, G.user.id()],
+                       oncomplete:function(r) {
+                       progressDialog.hide();
+                               itemsOutCache = openils.Util.readResponse(r);
+                    oncomplete();
+                       }
+               });
+
+            break;
+
+               case "holds": 
+
+                       holdsCache=null;
+            fieldmapper.standardRequest(FETCH_HOLD_IDS, {async:true, params:[G.user.session, G.user.id()], 
+                oncomplete: function(r) { 
+                               oncomplete(false, openils.Util.readResponse(r));
+
+                                       /*
+                    var holdids = openils.Util.readResponse(r);
+                    fieldmapper.standardRequest(FETCH_HOLD_DETAILS, {async:true, params:[G.user.session, holdids], 
+                        oncomplete: function(rr) {
+                               progressDialog.hide();
+                            var holds = openils.Util.readResponse(rr);
+                            holdsCache = holds;
+                            setTimeout(function(){oncomplete()}, 150); // give the progress dialog a chance to clear out
+                                                       oncomplete();
+                        }
+                    });
+                                       */
+                }
+            });
+
+            break;
+
+               case "prefs": 
+            fieldmapper.standardRequest(FETCH_OPT_INS, {async:true, params:[G.user.session],
+                oncomplete:function(r) {
+                    userOptIns = openils.Util.readResponse(r);
+                    for(var i=0; i<userOptIns.length; i++) userOptInsMap[userOptIns[i].name()] = i;
+                    oncomplete();
+                }
+            });
+
+            break;
+
+               case 'bookbag': 
+            myOPACShowBookbags(true);
+            break;
+    }
+}
+
+
+function myOPACDrawSummary() {
+    var stats = userVitalStats; // see misc.js
+       if(!stats) return;
+       $('myopac_sum_pickup').innerHTML = "("+stats.holds.ready+")";
+       $('myopac_sum_checked').innerHTML = "("+ (stats.checkouts.out+stats.checkouts.overdue) +")";
+       $('myopac_sum_holds').innerHTML = "("+stats.holds.total+")";
+    if(stats.fines.balance_owed > 0) {
+        var bal = $('myopac_sum_fines_bal');
+        bal.style.color = "red";
+        appendClear(bal, text("$" + Number(stats.fines.balance_owed).toFixed(2)));
+               showFinesDiv($('show_fines_link'));
+               unHideMe($('pay_fines_btn1'));
+               unHideMe($('show_fines_link'));
+    }
+}
+
+function myOPACInitTemplates() {
+       //holds page
+       if(!templates.holdsParent) templates.holdsParent = $('holds_temp_parent');
+       if(!templates.holdsTemp) templates.holdsTemp = templates.holdsParent.removeChild($('acct_holds_temp'));
+       //checked out page
+       if(!templates.checkedParent) templates.checkedParent = $('checked_temp_parent');
+       if(!templates.checkedTemp) templates.checkedTemp = templates.checkedParent.removeChild($('acct_checked_temp'));
+       //checked history page
+       if(!templates.circHistPar) templates.circHistPar = $('acct_checked_hist_parent');
+       if(!templates.circHistTemp) templates.circHistTemp = templates.circHistPar.removeChild($('acct_checked_hist_temp'));
+}
+
+// link-up all the Account sub-pages for switchSubPage()
+function myOPACInitSubpages() {
+       // create a primary object for each page...
+       subPageObjs.checked = {};
+       subPageObjs.holds = {};
+       subPageObjs.prefs = {};
+       
+       // ... then create an array for each sub-page
+       subPageObjs.checked.main = [];
+       subPageObjs.checked.hist = [];
+       subPageObjs.holds.main = [];
+       subPageObjs.holds.hist = [];
+       subPageObjs.prefs.info = [];
+       subPageObjs.prefs.notify = [];
+       subPageObjs.prefs.search = [];
+       
+       // add .header to each primary page object and link to the page's blue header bar.
+       // add ['header'] to each sub-page array and put the text to display
+       subPageObjs.checked.header = $('acct_checked_header');
+       subPageObjs.checked.main['header'] = "Current Items Checked Out";
+       subPageObjs.checked.hist['header'] = "Check Out History";
+       subPageObjs.checked.main.push($('checked_label'));
+       subPageObjs.checked.hist.push($('checked_link'));
+       subPageObjs.checked.main.push($('checked_hist_link'));
+       subPageObjs.checked.hist.push($('checked_hist_label'));
+       subPageObjs.checked.main.push($('checked_main'));
+       subPageObjs.checked.hist.push($('checked_hist'));
+       
+       subPageObjs.holds.header = $('acct_holds_header');
+       subPageObjs.holds.main['header'] = "Current Items on Hold";
+       subPageObjs.holds.hist['header'] = "Holds History";
+       subPageObjs.holds.main.push($('holds_label'));
+       subPageObjs.holds.hist.push($('holds_link'));
+       subPageObjs.holds.main.push($('holds_hist_link'));
+       subPageObjs.holds.hist.push($('holds_hist_label'));
+       subPageObjs.holds.main.push($('holds_main'));
+       subPageObjs.holds.hist.push($('holds_hist_table'));
+       
+       subPageObjs.prefs.header = $('acct_prefs_header');
+       subPageObjs.prefs.info['header'] = "Account Information and Preferences";
+       subPageObjs.prefs.notify['header'] = "Notification Preferences";
+       subPageObjs.prefs.search['header'] = "Search Preferences";
+       subPageObjs.prefs.info.push($('prefs_info_lbl'));
+       subPageObjs.prefs.notify.push($('prefs_info_link'));
+       subPageObjs.prefs.notify.push($('prefs_notify_lbl'));
+       subPageObjs.prefs.info.push($('prefs_notify_link'));
+       subPageObjs.prefs.search.push($('prefs_search_lbl'));
+       subPageObjs.prefs.info.push($('prefs_search_link'));
+       subPageObjs.prefs.notify.push($('prefs_search_link'));
+       subPageObjs.prefs.search.push($('prefs_notify_link'));
+       subPageObjs.prefs.search.push($('prefs_info_link'));
+       subPageObjs.prefs.info.push($('acct_info_main'));
+       subPageObjs.prefs.search.push($('acct_search_main'));
+       subPageObjs.prefs.notify.push($('acct_notify_main'));
+       subPageObjs.prefs.notify.push($('acct_prefs_save'));
+       subPageObjs.prefs.search.push($('acct_prefs_save'));
+}
+
+function fetchAllHolds() {
+}
+
+var myopacForceHoldsRedraw = false;
+function drawHoldsPage(sort, holdIds) {
+       if(sort == undefined) sort = true;
+       if(!templates.holdsParent || !templates.holdsTemp) return;
+       var parent = templates.holdsParent;
+       var temp = templates.holdsTemp;
+       var holdsReady = 0;
+       
+       if(myopacForceHoldsRedraw) {
+               holdsCache = fieldmapper.standardRequest(FETCH_HOLD_DETAILS, {async:false, params:[G.user.session, 
+                       fieldmapper.standardRequest(FETCH_HOLD_IDS, {async:false, params:[G.user.session, G.user.id()]})
+               ]});
+       }
+
+       if(sort) holdsCache = holdsCache.sort(function(a, b) {
+               if(a.status==4) return -1;
+               if(b.status==4) return 1;
+               if(isTrue(a.hold.frozen())) return 1;
+               if(isTrue(b.hold.frozen())) return -1;
+               return dojo.date.stamp.fromISOString(a.hold.request_time()) > dojo.date.stamp.fromISOString(b.hold.request_time())?1:-1;
+       });
+       
+    function allHoldsFetched() {
+        holdsCacheMap=[];
+        for(var i=0; i<holdsCache.length; i++) holdsCacheMap[holdsCache[i].hold.id()] = i;
+        $('myopac_sum_pickup').innerHTML = "("+holdsReady+")";
+        if(!holdsCache.length) parent.appendChild(elem('div',{style:"font-weight:bold;font-size:14px;width:100%;text-align:center;",align:'center'},'No holds found.'));
+    }
+
+       removeChildren(parent);
+    if(holdsCache) {
+           for(var i in holdsCache) {
+            var row = temp.cloneNode(true);
+            var hold = holdsCache[i];
+            drawOneHold(hold, row, parent);
+            parent.appendChild(row);
+                       //parent.appendChild(elem('tr').appendChild(elem('td', {'colspan':'10'}).appendChild(elem('div', {'style':'position:absolute;'}).appendChild(elem('div', {'style':'position:relative;'}).appendChild(elem('div', {'style':'width:974px;height:1px;background:#dcdbdb;'}))))));
+                       //      <tr><td colspan="10"><div style="position:absolute;"><div style="position:relative;"><div style="width:974px;height:1px;background:#dcdbdb;"></div></div></div></td></tr>  
+
+            if(hold.status == 4) holdsReady++;
+        }
+        allHoldsFetched();
+
+    } else if(holdIds) {
+
+        holdsCache = [];
+        var holdsReceived = 0;
+
+        dojo.forEach(holdIds,
+            function(holdId) {
+                var row = temp.cloneNode(true);
+                dojo.style(row, 'visibility', 'hidden');
+                parent.appendChild(row);
+                               
+                       //parent.appendChild(elem('tr').appendChild(elem('td', {'colspan':'10'}).appendChild(elem('div', {'style':'position:absolute;'}).appendChild(elem('div', {'style':'position:relative;'}).appendChild(elem('div', {'style':'width:974px;height:1px;background:#dcdbdb;'}))))));
+                       
+                fieldmapper.standardRequest(FETCH_HOLD_DETAILS, {async:true, params:[G.user.session, [holdId]], 
+                    oncomplete: function(rr) {
+                        var hold = openils.Util.readResponse(rr)[0];
+                        holdsCache.push(hold);
+                        dojo.style(row, 'visibility', 'visible');
+                        drawOneHold(hold, row, parent);
+                        if(hold.status == 4) holdsReady++;
+                        if(++holdsReceived == holdIds.length)
+                            allHoldsFetched();
+                    }
+                });
+            }
+        );
+    }
+}
+
+function drawOneHold(h, row, parent) {
+       var imgTD = null;
+       var imgEl = null;
+       var d = null;
+       var exp_date;
+       var suffix = "";
+
+    row.id = "myopac_holds_row_" + h.hold.id();
+    var form = $n(row, "myopac_holds_formats");
+    form.id = "myopac_holds_form_" + h.hold.id();
+    $n(row,'hold_pickup_lib_span').appendChild($('hold_pickup_lib_temp').cloneNode(true));
+    
+    var tree = $n(row,'hold_pickup_lib_sel');
+    buildOrgSelAlt(tree, globalOrgTree, 0);
+    setSelector(tree, h.hold.pickup_lib());
+    $n(row,'check_all_holds').holdid = h.hold.id();
+    $n(row,'hold_edit_link').setAttribute('href','javascript:editHold('+h.hold.id()+');'); 
+    $n(row,'hold_cancel_link').setAttribute('href','javascript:cancelHold('+h.hold.id()+');');
+    $n(row,'hold_save_link').setAttribute('href','javascript:saveHold('+h.hold.id()+');');
+    var activeSel = $n(row,'hold_active_sel');
+    activeSel.selectedIndex = isTrue(h.hold.frozen())?1:0;
+    
+    //var djBox = $n(row,'activate_box').parentNode.parentNode.parentNode;
+    //djBox.id=djBox.id+h.hold.id();
+    //var blah = dojo.query('input',$n(row,'activate_box').parentNode)[0];
+    //blah.id = djBox.getAttribute("widgetId")+h.hold.id();
+    //$().id = djBox.id+h.hold.id();
+    //djBox.setAttribute("widgetId", djBox.getAttribute("widgetId")+h.hold.id());
+    
+    $n(row,'hold_pickup_lib').innerHTML = findOrgUnit(h.hold.pickup_lib()).name();
+    $n(row,'hold_active').innerHTML = isTrue(h.hold.frozen())?"Suspended":"Active";
+    if(isTrue(h.hold.frozen())) row.style.background="#e5e5e5";
+    
+    if(h.hold.thaw_date()) {
+        d = dojo.date.stamp.fromISOString(h.hold.thaw_date());
+        $n(row, 'activate_date').innerHTML = dojo.date.locale.format(d, {selector: 'date', fullYear: true});
+        unHideMe($n(row,'activate_label'));
+        $n(row,'activate_box').value = dojo.date.locale.format(d, {selector:'date', fullYear: true});
+    }
+    
+    if(h.hold.expire_time()) {
+        exp_date = dojo.date.stamp.fromISOString(h.hold.expire_time().replace(/(T\d\d:\d\d:\d\d)([+-]\d\d)(\d)/, "$1$2:$3"))
+        $n(row, 'hold_expires').innerHTML = dojo.date.locale.format(exp_date, {selector:'date', fullYear: true});
+        unHideMe($n(row,'hold_expires_label'));
+        $n(row,'hold_expires_box').value = dojo.date.locale.format(exp_date, {selector:'date', fullYear: true});
+    }
+    
+    buildTitleDetailLink(h.mvr, $n(row,'myopac_holds_title_link'));
+    $n(row,'myopac_holds_title_link').title = h.mvr.title();
+    
+    imgTD = $n(row, "myopac_holds_formats");
+    imgEl = elem('img');
+    imgEl.className = 'hide_me';
+    imgEl.name = 'format_icon_'+h.hold.id();
+    imgTD.appendChild(imgEl);
+    if(imgFormatCache[h.hold.id()]==null) imgFormatCache[h.hold.id()] = getMarcData(h.mvr.doc_id(),"998","d");
+    setFormatIcon(imgEl, imgFormatCache[h.hold.id()]);
+    
+    $n(row,'myopac_holds_author').innerHTML = h.mvr.author();
+    
+    if( h.status == 4) {
+        $n(row,'acct_holds_status').innerHTML = "<span style='color:blue;font-weight:bold;'>Ready for Pickup</span>";
+        hideMe($n(row,'holds_editor_row'));
+        unHideMe($n(row,'holds_ready_row'));
+        if(h.hold.shelf_expire_time()) $n(row,'hold_ready_expire').innerHTML = 
+            dojo.date.locale.format(dojo.date.stamp.fromISOString(h.hold.shelf_expire_time()), {selector:'date', fullYear: true});;
+    } else {
+        var num = h.queue_position+'';
+        suffix = (num.charAt(num.length-1)=="1")?"st":(num.charAt(num.length-1)=="2")?"nd":(num.charAt(num.length-1)=="3")?"rd":"th";
+        if(num=="11" || num=="12" || num=="13") suffix = "th";
+        $n(row,'acct_holds_status').innerHTML = h.queue_position+suffix+" hold on "+h.potential_copies+" circulating cop"+(h.potential_copies==1?"y":"ies");
+    }
+}
+
+var checkedDrawn = true;
+function drawCheckedPage(sort) {
+       if(sort==undefined) sort = true;
+       if(!templates.checkedParent || !templates.checkedTemp) return;
+       var parent = templates.checkedParent;
+       var temp = templates.checkedTemp;
+       
+       if(!checkedDrawn) itemsOutCache = fieldmapper.standardRequest(FETCH_CHECKED_DETAILS, {async:false, params:[G.user.session, G.user.id()]});
+       if(sort) itemsOutCache = itemsOutCache.sort(function(a, b) {
+               if(dojo.date.stamp.fromISOString(a.circ.due_date()) > dojo.date.stamp.fromISOString(b.circ.due_date())) return 1;
+               return -1;
+       });
+       checkedDrawn = true;
+       
+       removeChildren(parent);
+       for(var i in itemsOutCache) {
+               var row = temp.cloneNode(true);
+               var out = itemsOutCache[i];
+               //row.id = "myopac_holds_row_" + out.hold.id();
+               if(!mvrObjCache[out.circ.target_copy()]) mvrObjCache[out.circ.target_copy()] = out.record;
+               if(!copyObjCache[out.copy.id()]) copyObjCache[out.copy.id()] = out.copy;
+                               
+               if(out.circ.due_date()) {
+                       var exp_date = dojo.date.stamp.fromISOString(out.circ.due_date());
+                       if(exp_date<(new Date())) $n(row,'due_date').style.color="red";
+                       $n(row, 'due_date').innerHTML = dojo.date.locale.format(exp_date, {selector:'date', fullYear: true});
+               }
+               
+               $n(row, 'renewals').innerHTML = out.circ.renewal_remaining();
+               buildTitleDetailLink(out.record, $n(row,'title'));
+               if(out.record.author()) $n(row, 'author').appendChild(text(" / "+out.record.author()));
+               dojo.attr($n(row, 'check_all_checked'), 'circid', out.circ.id())
+               $n(row,'title').title = out.record.title();
+               $n(row, 'barcode').innerHTML = out.copy.barcode();
+               if(callNumCache[out.copy.call_number()]==null) callNumCache[out.copy.call_number()] = fieldmapper.standardRequest(FETCH_CALL_NUMBER, {async:false, params:[out.copy.call_number()]});
+               $n(row, 'call_number').innerHTML = callNumCache[out.copy.call_number()].label();
+               
+               parent.appendChild(row);
+       }
+       
+       if(!itemsOutCache.length) parent.appendChild(elem('div',{style:"font-weight:bold;font-size:14px;width:100%;text-align:center;",align:'center'},'No items checked out.'));
+}
+
+var circHistDrawn = true;
+function drawCircHistory(sort, offset) {
+       if(sort==undefined) sort = true;
+       if(offset==undefined) offset = circHistPage; else circHistPage = offset;
+       if(!templates.circHistPar || !templates.circHistTemp) return;
+       var parent = templates.circHistPar;
+       var temp = templates.circHistTemp;
+       
+       if(!circHistDrawn) itemsOutHistory = fieldmapper.standardRequest(FETCH_CHECKED_HISTORY, {async:false, params:[G.user.session, G.user.id(), {'limit':CIRC_HIST_PAGE_LIMIT, 'offset':offset}]});
+       circHistDrawn = true;
+       
+       removeChildren(parent);
+       for(var i in itemsOutHistory) {
+               var row = temp.cloneNode(true);
+               var h = itemsOutHistory[i];
+               if(mvrObjCache[h.circ.target_copy()]==null) mvrObjCache[h.circ.target_copy()] = fieldmapper.standardRequest(FETCH_MODS_BY_COPY, {async:false, params:[h.circ.target_copy()]});
+               var mvr = mvrObjCache[h.circ.target_copy()];
+               
+               if(mvr && !mvr.desc) {
+                       buildTitleDetailLink(mvr, $n(row, 'title'));
+                       $n(row, 'title').title = mvr.title();
+                       $n(row, 'author').innerHTML = mvr.author();
+                       
+                       //dojo.date.locale.format(dojo.date.stamp.fromISOString(), {selector:'date', fullYear: true});
+               }
+               
+               //date formatting and coloring
+               var ret = $n(row, 'returned');
+               var due = $n(row, 'due_date');
+               $n(row, 'checkout').innerHTML = dojo.date.locale.format(dojo.date.stamp.fromISOString(h.circ.create_time()), {selector:'date', fullYear: true});
+               due.innerHTML = dojo.date.locale.format(dojo.date.stamp.fromISOString(h.circ.due_date()), {selector:'date', fullYear: true});
+               if(!h.circ.checkin_time() && new Date() > dojo.date.stamp.fromISOString(h.circ.due_date())) due.style.color="red";
+               if(h.circ.checkin_time() && dojo.date.stamp.fromISOString(h.circ.checkin_time()) > dojo.date.stamp.fromISOString(h.circ.due_date())) ret.style.color="red";
+               if(h.circ.checkin_time()) ret.innerHTML = dojo.date.locale.format(dojo.date.stamp.fromISOString(h.circ.checkin_time()), {selector:'date', fullYear: true});
+               else ret.innerHTML = "Checked Out";
+               
+               if(copyObjCache[h.circ.target_copy()]==null) copyObjCache[h.circ.target_copy()] = fieldmapper.standardRequest(FETCH_COPY_OBJ, {async:false, params:[h.circ.target_copy()]});
+               if(callNumCache[copyObjCache[h.circ.target_copy()].call_number()]==null)
+                       callNumCache[copyObjCache[h.circ.target_copy()].call_number()] = fieldmapper.standardRequest(FETCH_CALL_NUMBER, {async:false, params:[copyObjCache[h.circ.target_copy()].call_number()]});
+               
+               if(copyObjCache[h.circ.target_copy()] && callNumCache[copyObjCache[h.circ.target_copy()].call_number()])
+                       $n(row,'call_number').innerHTML = callNumCache[copyObjCache[h.circ.target_copy()].call_number()].label();
+               parent.appendChild(row);
+       }
+       
+       if(!itemsOutHistory.length) {
+               parent.appendChild(elem('tr').appendChild(elem('td',{style:"font-weight:bold;font-size:14px;width:100%;text-align:center;",align:'center'},'No items found.')));
+               return;
+       }
+       
+       //build pagination
+       var pageTR = elem('tr');
+       var pageTD = elem('td', {'align':'center', 'colspan':'5'}, null);
+       
+       var offPrev = offset - CIRC_HIST_PAGE_LIMIT;
+       var offNext = offset + CIRC_HIST_PAGE_LIMIT;
+       if(offset==0) offPrev = 0;
+       
+       if(offset!=0) var prev = elem('a', {'href':'javascript: circHistDrawn = false; drawCircHistory(true,'+offPrev+');'}, '< Previous');
+       else var prev = elem('span', null, '< Previous');
+       if(itemsOutHistory.length<CIRC_HIST_PAGE_LIMIT) var next = elem('span', null, 'Next >');
+       else var next = elem('a', {'href':'javascript:  circHistDrawn = false; drawCircHistory(true,'+offNext+');'}, 'Next >');
+       
+       pageTD.appendChild(prev);
+       pageTD.appendChild(elem('span', null, '    '));
+       pageTD.appendChild(next);
+       pageTR.appendChild(pageTD);
+       parent.appendChild(pageTR);
+}
+
+function myOPACShowPrefs() {
+       grabUserPrefs();
+       myOPACShowHitsPer();
+       myOPACShowDefFont();
+       myOPACShowDefLocation();
+       myOPACShowNotifyPrefs();
+       hideMe($('myopac_prefs_loading'));
+}
+
+var defSearchLocationDrawn = false;
+var defDepthIndex = 0;
+function myOPACShowDefLocation() {
+
+       var selector = $('prefs_def_location');
+       var rsel = $('prefs_def_range');
+
+       if(!defSearchLocationDrawn) {
+               defSearchLocationDrawn = true;
+               var org = G.user.prefs[PREF_DEF_LOCATION];
+
+               if(!org) {
+                       $('myopac_pref_home_lib').checked = true;
+                       $('prefs_def_location').disabled = true;
+                       org = G.user.home_ou();
+               }
+               buildOrgSel(selector, globalOrgTree, 0);
+
+               globalOrgTypes = globalOrgTypes.sort(
+                       function(a, b) {
+                               if( a.depth() < b.depth() ) return -1;
+                               return 1;
+                       }
+               );
+
+               iterate(globalOrgTypes,
+                       function(t) {
+                               if( t.depth() <= findOrgDepth(org) ) {
+                                       setSelectorVal(rsel, defDepthIndex++, t.opac_label(), t.depth());
+                                       if( t.depth() == findOrgDepth(org)) 
+                                               setSelector(rsel, t.depth());
+                               }
+                       }
+               );
+       }
+
+       setSelector(selector, org);
+}
+
+function myOPACShowNotifyPrefs() {
+       var preEmail = $(PREFS_PREDUE_3DAY);
+       var overEmail = $(PREFS_OVER_FIRST);
+       var overPhone = $(PREFS_OVER_FIRST_P);
+       var holdsCancel = $(PREFS_HOLD_CANCEL);
+       var holdsExpire = $(PREFS_HOLD_EXPIRE);
+       var holdsEmail = $("opac.hold_notify.email");
+       var holdsPhone = $("opac.hold_notify.phone");
+       if(G.user.prefs[PREFS_CIRC_HIST_START]) { $('circHistStart').checked = true; }
+       
+       if(preEmail && typeof(G.user.prefs[PREFS_PREDUE_3DAY])   !="undefined") preEmail.checked    = G.user.prefs[PREFS_PREDUE_3DAY];
+       if(overEmail && typeof(G.user.prefs[PREFS_OVER_FIRST])   !="undefined") overEmail.checked   = G.user.prefs[PREFS_OVER_FIRST];
+       if(overPhone && typeof(G.user.prefs[PREFS_OVER_FIRST_P]) !="undefined") overPhone.checked   = G.user.prefs[PREFS_OVER_FIRST_P];
+       if(holdsCancel && typeof(G.user.prefs[PREFS_HOLD_CANCEL])!="undefined") holdsCancel.checked = G.user.prefs[PREFS_HOLD_CANCEL];
+       if(holdsExpire && typeof(G.user.prefs[PREFS_HOLD_EXPIRE])!="undefined") holdsExpire.checked = G.user.prefs[PREFS_HOLD_EXPIRE];
+       if(holdsPhone && typeof(G.user.prefs[PREFS_HOLD_PHONE])  !="undefined") holdsPhone.checked  = G.user.prefs[PREFS_HOLD_PHONE];
+       if(holdsEmail && typeof(G.user.prefs[PREFS_HOLD_EMAIL])  !="undefined") holdsEmail.checked  = G.user.prefs[PREFS_HOLD_EMAIL];
+}
+
+function myOPACShowHitsPer() {
+       var hits = 10;
+       if(G.user.prefs[PREF_HITS_PER])
+               hits = G.user.prefs[PREF_HITS_PER];
+       var hitsSel = $('prefs_hits_per');
+       setSelector(hitsSel, hits);
+}
+
+function myOPACShowDefFont() {
+       var font;
+       if(G.user.prefs[PREF_DEF_FONT])
+               font = G.user.prefs[PREF_DEF_FONT];
+       else font = "regular";
+       setSelector($('prefs_def_font'), font);
+}
+
+function myOPACShowUser(bool) {
+       if(bool) fleshedUser = fieldmapper.standardRequest(FETCH_FULL_USER, {async:false, params:[G.user.session, G.user.id()]});
+       var user = fleshedUser;
+       
+    var expireDate = dojo.date.stamp.fromISOString(user.expire_date());
+    if( expireDate < new Date() ) {
+        appendClear($('myopac.expired.date'), expireDate.iso8601Format('YMD'));
+        unHideMe($('myopac.expired.alert'));
+    }
+
+       var iv1 = user.ident_value()+'';
+    if (iv1.length > 4 && iv1.match(/\d{4}/)) iv1 = iv1.substring(0,4) + '***********';
+
+       appendClear($('myopac_sum_name'),text(user.first_given_name()+" "+(user.family_name()==null?"":user.family_name())));   
+       appendClear($('myopac_summary_prefix'),text(user.first_given_name()+" "+(user.family_name()==null?"":user.family_name())));
+       appendClear($('myopac_summary_homelib'),text(findOrgUnit(user.home_ou()).name()));
+
+       appendClear($('myopac_summary_dayphone'),text(user.day_phone()));
+       appendClear($('myopac_summary_eveningphone'),text(user.evening_phone()));
+       appendClear($('myopac_summary_otherphone'),text(user.other_phone()));
+       appendClear($('myopac_summary_suffix'),text(user.suffix()));
+       appendClear($('myopac_summary_username'),text(user.usrname()));
+       appendClear($('myopac_summary_email'),text(user.email()));
+       appendClear($('myopac_summary_barcode'),text(user.card().barcode()));
+       appendClear($('myopac_summary_ident1'),text(iv1));
+       appendClear($('myopac_summary_create_date'),text(_trimTime(user.create_date())));
+
+       var req = new Request( 
+               FETCH_USER_NOTES, G.user.session, {pub:1, patronid:G.user.id()});
+       req.callback(myopacDrawNotes);
+       req.send();
+
+       var tbody = $('myopac_addr_tbody');
+       var template;
+
+       if(addrRowTemplate) { 
+               template = addrRowTemplate;
+       } else {
+               template = tbody.removeChild($('myopac_addr_row'));
+               addrRowTemplate = template;
+       }
+       removeChildren(tbody);
+
+    var addrs = user.addresses();
+       for( var a in addrs ) {
+        var addr = addrs[a];
+        if(!allowPendingAddr && isTrue(addr.pending()))
+            continue;
+        if(addr.replaces() != null) continue;
+               var row = template.cloneNode(true);
+               myOPACDrawAddr(row, addr, addrs);
+               tbody.appendChild(row);
+       }
+}
+
+function myopacDrawNotes(r) {
+       var notes = r.getResultObject();
+       var tbody = $('myopac.notes.tbody');
+       if(!notesTemplate)
+               notesTemplate = tbody.removeChild($('myopac.notes.tr'));
+       removeChildren(tbody);
+
+       iterate(notes, 
+               function(note) {
+                       unHideMe($('myopac.notes.div'));
+                       var row = notesTemplate.cloneNode(true);
+                       $n(row, 'title').appendChild(text(note.title()));
+                       $n(row, 'value').appendChild(text(note.value()));
+                       tbody.appendChild(row);
+               }
+       );
+}
+
+function myOPACDrawAddr(row, addr, addrs) {
+    appendClear($n(row, 'myopac_addr_type'),text(addr.address_type()));
+    appendClear($n(row, 'myopac_addr_street'),text(addr.street1()));
+    appendClear($n(row, 'myopac_addr_street2'),text(addr.street2()));
+    appendClear($n(row, 'myopac_addr_city'),text(addr.city()));
+    appendClear($n(row, 'myopac_addr_county'),text(addr.county()));
+    appendClear($n(row, 'myopac_addr_state'),text(addr.state()));
+    appendClear($n(row, 'myopac_addr_country'),text(addr.country()));
+    appendClear($n(row, 'myopac_addr_zip'),text(addr.post_code()));
+
+    if(!allowPendingAddr) return;
+
+    $n(row, 'myopac_addr_edit_link').onclick = function(){myopacEditAddress(addr)};
+    unHideMe($n(row, 'myopac_addr_edit_td'));
+
+    /* if we have a replacement address, plop it into the table next to this addr */
+    var repl = grep(addrs, function(a) { return a.replaces() == addr.id(); });
+
+    $n(row, 'myopac_pending_addr_td').id = 'myopac_pending_addr_td_' + addr.id();
+
+    if(repl) {
+        hideMe($n(row, 'myopac_addr_edit_td')); // hide the edit link
+        repl = repl[0];
+        myopacSetAddrInputs(row, repl);
+    }
+}
+
+function myopacEditAddress(addr) {
+    var td = $('myopac_pending_addr_td_' + addr.id());
+    var row = td.parentNode;
+    myopacSetAddrInputs(row, addr);
+}
+
+function myopacSetAddrInputs(row, addr, prefix) {
+    unHideMe($n(row, 'myopac_pending_addr_td'));
+    $n(row, 'myopac_pending_addr_type').value = addr.address_type();
+    $n(row, 'myopac_pending_addr_street').value = addr.street1();
+    $n(row, 'myopac_pending_addr_street2').value = addr.street2();
+    $n(row, 'myopac_pending_addr_city').value = addr.city();
+    $n(row, 'myopac_pending_addr_county').value = addr.county();
+    $n(row, 'myopac_pending_addr_state').value = addr.state();
+    $n(row, 'myopac_pending_addr_country').value = addr.country();
+    $n(row, 'myopac_pending_addr_zip').value = addr.post_code();
+    $n(row, 'myopac_pending_addr_edit_link').onclick = function(){myopacSaveAddress(row, addr)};
+    $n(row, 'myopac_pending_addr_del_link').onclick = function(){myopacSaveAddress(row, addr, true)};
+}
+
+function _trimTime(time) { 
+       if(!time) return ""; 
+    var d = dojo.date.stamp.fromISOString(time);
+    if(!d) return ""; /* date parse failed */
+    return d.iso8601Format('YMD');
+}
+
+function _trimSeconds(time) { 
+    if(!time) return ""; 
+    var d = dojo.date.stamp.fromISOString(time);
+    if(!d) return ""; /* date parse failed */
+    return d.iso8601Format('YMDHM',null,true,true);
+}
+
+function myopacSaveAddress(row, addr, deleteMe) {
+    if(addr.replaces() == null) {
+        var repl = new aua();
+        repl.usr(addr.usr());
+        repl.address_type(addr.address_type());
+        repl.within_city_limits(addr.within_city_limits());
+        repl.replaces(addr.id());
+        repl.pending('t');
+        repl.isnew(true);
+        repl.id(null);
+        addr = repl;
+    }
+
+    if(deleteMe) {
+        if(addr.id() == null) {
+            hideMe($n(row, 'myopac_pending_addr_td'));
+            return;
+        }
+        addr.isdeleted(true);
+    } else {
+        addr.address_type($n(row, 'myopac_pending_addr_type').value);
+        addr.street1($n(row, 'myopac_pending_addr_street').value);
+        addr.street2($n(row, 'myopac_pending_addr_street2').value);
+        addr.city($n(row, 'myopac_pending_addr_city').value);
+        addr.county($n(row, 'myopac_pending_addr_county').value);
+        addr.state($n(row, 'myopac_pending_addr_state').value);
+        addr.country($n(row, 'myopac_pending_addr_country').value);
+        addr.post_code($n(row, 'myopac_pending_addr_zip').value);
+    }
+
+       var req = new Request('open-ils.actor:open-ils.actor.user.address.pending.cud', G.user.session, addr);
+
+    req.callback(
+        function(r) {
+            var resp = r.getResultObject(); 
+
+            if(addr.isnew()) {
+                // new, add to list of addrs
+                addr.id(resp);
+                fleshedUser.addresses().push(addr);
+            } else {
+                // deleted, remove from list of addrs
+                if(addr.isdeleted()) {
+                    hideMe($n(row, 'myopac_pending_addr_td'));
+                    var addrs = [];
+                    for(var i in fleshedUser.addresses()) {
+                        var a = fleshedUser.addresses()[i];
+                        if(a.id() != addr.id()) addrs.push(a);
+                    }
+                    fleshedUser.addresses(addrs);
+                }
+            }
+           alertId('myopac_addr_changes_saved');
+        }
+    );
+    req.send();
+}
+
+function myOPACSavePrefs() {
+       G.user.prefs[PREF_HITS_PER] = getSelectorVal($('prefs_hits_per'));
+       G.user.prefs[PREF_DEF_FONT] = getSelectorVal($('prefs_def_font'));
+       G.user.prefs[PREF_DEF_DEPTH] = getSelectorVal($('prefs_def_range'));
+       
+       var holdsPhone = $("opac.hold_notify.phone");
+       var holdsEmail = $("opac.hold_notify.email");
+       var circStartBox = $('circHistStart').checked;
+       var circStart = null;
+       circStart = (circStartBox && G.user.prefs[PREFS_CIRC_HIST_START])?G.user.prefs[PREFS_CIRC_HIST_START]:dojo.date.stamp.toISOString(new Date());
+       if(!circStartBox) circStart = null;
+       
+       G.user.prefs[PREFS_HOLD_PHONE] = holdsPhone.checked;
+       G.user.prefs[PREFS_HOLD_EMAIL] = holdsEmail.checked;
+       G.user.prefs[PREFS_PREDUE_3DAY] = $(PREFS_PREDUE_3DAY).checked;
+       G.user.prefs[PREFS_OVER_FIRST] = $(PREFS_OVER_FIRST).checked;
+       G.user.prefs[PREFS_OVER_FIRST_P] = $(PREFS_OVER_FIRST_P).checked;
+       G.user.prefs[PREFS_HOLD_EXPIRE] = $(PREFS_HOLD_EXPIRE).checked;
+       G.user.prefs[PREFS_HOLD_CANCEL] = $(PREFS_HOLD_CANCEL).checked;
+       //G.user.prefs[PREFS_CIRC_HIST_AGE] = "2592000";
+       G.user.prefs[PREFS_CIRC_HIST_START] = circStart;
+
+       if( $('myopac_pref_home_lib').checked == true )
+               G.user.prefs[PREF_DEF_LOCATION] = null;
+       else
+               G.user.prefs[PREF_DEF_LOCATION] = getSelectorVal($('prefs_def_location'));
+
+  try {
+       if(commitUserPrefs())
+               alert($('prefs_update_success').innerHTML);
+       else alert($('prefs_update_failure').innerHTML);
+  } catch(e) {
+       alert(e);  
+  }
+       fieldmapper.standardRequest(FETCH_CHECKED_HISTORY,{params:[G.user.session, G.user.id()],oncomplete:function(r){
+               var resp = r.recv();
+               if(resp) resp = resp.content();
+       }});
+}
+
+function myOPACUpdateEmail() {
+       var email = $('myopac_new_email').value;
+       if(email == null || email == "") {
+               alert($('myopac_email_error').innerHTML);
+               return;
+       }
+
+       var req = new Request(UPDATE_EMAIL, G.user.session, email );
+       req.send(true);
+       if(req.result()) {
+               //G.user.email(email);
+        // force re-fetch to pick up latest last_xact_id
+        grabUser(null, true);
+               hideMe($('myopac_update_email_row'));
+               userShown = false;
+               alertId('myopac_email_success');
+               myOPACShowUser(true);
+
+        // user got here after trying to make a payment then deciding 
+        // the email addr needed updating.  take the user back to the 
+        // in-progress payment form
+        if(myopacReturnToPayment) {
+            myopacReturnToPayment = false;
+            myOPACChangePage("summary");
+            $('myopac-cc-email').innerHTML = email;
+        }
+               return;
+       }
+
+       alert($('myopac_email_failure').innerHTML);
+}
+
+function myOPACUpdatePassword() {
+       var curpassword = $('myopac_current_password').value;
+       var password = $('myopac_new_password').value;
+       var password2 = $('myopac_new_password2').value;
+
+       if(     curpassword == null || curpassword == "" || 
+                       password == null || password == "" || 
+                       password2 == null || password2 == "" || password != password2 ) {
+               alert($('myopac_password_error').innerHTML);
+               return;
+       }
+
+       if(!strongPassword(password, true)) return;
+
+       var req = new Request(UPDATE_PASSWORD, G.user.session, password, curpassword );
+       req.send(true);
+       if(req.result()) {
+        grabUser(null, true);
+               hideMe($('myopac_update_password_row'));
+               userShown = false;
+               alertId('myopac_password_success');
+               myOPACShowUser(true);
+               return;
+       }
+
+       alert($('myopac_password_failure').innerHTML);
+}
+
+function myOPACUpdatePhone(which) {
+       if(!which) return;
+       var tr = $('myopac_update_phone'+which+'_row');
+       var input = $('myopac_new_phone'+which);
+       if(!tr || !input) return;
+       var val = input.value;
+       if(!val.match(REGEX_PHONE)) {
+               alert("Not a valid phone number. Should be in the form ###-###-####");
+               input.focus();
+               input.select();
+               return;
+       }
+       
+       var newUser = fleshedUser.clone(true);
+       switch(which) {
+               case "1": newUser.day_phone(val); break;
+               case "2": newUser.evening_phone(val); break;
+               case "3": newUser.other_phone(val); break;
+       }
+       
+       newUser.ischanged("t");
+       var resp = fieldmapper.standardRequest(['open-ils.actor', 'open-ils.actor.patron.update'], {async:false, params:[G.user.session, newUser]});
+       if(typeof(resp.desc)=="undefined") {
+               hideMe(tr);
+               userShown = false;
+               fleshedUser = resp;
+               alert("Phone number updated successfully.");
+               myOPACShowUser(true);
+       } else {
+               alert(resp.textcode+'\n'+resp.desc);
+               input.focus();
+               input.select();
+       }
+}
+
+function myOPACUpdateUsername() {
+       var username = $('myopac_new_username').value;
+       if(username == null || username == "") {
+               alert($('myopac_username_error').innerHTML);
+               return;
+       }
+
+       if( username.match(/.*\s.*/) ) {
+               alert($('myopac_invalid_username').innerHTML);
+               return;
+       }
+
+    r = fetchOrgSettingDefault(globalOrgTree.id(), 'opac.barcode_regex');
+    if(r) REGEX_BARCODE = new RegExp(r);
+
+    if(username.match(REGEX_BARCODE)) {
+        alert($('myopac_invalid_username').innerHTML);
+        return;
+    }
+
+       /* first see if the requested username is taken */
+       var req = new Request(CHECK_USERNAME, G.user.session, username);
+       req.send(true);
+       var res = req.result();
+       if( res !== null && res != G.user.id() ) {
+               alertId('myopac_username_dup');
+               return;
+       }
+
+       var req = new Request(UPDATE_USERNAME, G.user.session, username );
+       req.send(true);
+       if(req.result()) {
+
+               var evt;
+               var res = req.result();
+               if(evt = checkILSEvent(res)) {
+                       alertILSEvent(res);
+                       return;
+               }
+
+        grabUser(null, true);
+               hideMe($('myopac_update_username_row'));
+               userShown = false;
+               alertId('myopac_username_success');
+               myOPACShowUser(true);
+               return;
+       }
+
+       alert($('myopac_username_failure').innerHTML);
+}
+
+function iForgotMyPassword(un,email) {
+       if(!un) return;
+       //var type = un.match(/^\d+$/)?'barcode':'username';
+       fieldmapper.standardRequest(PASS_RESET,{params:['barcode',un,email],oncomplete:function(rr){
+               var resp = rr.recv().content();
+               if(resp.textcode=="ACTOR_USER_NOT_FOUND") fieldmapper.standardRequest(PASS_RESET,{params:['username',un,email],oncomplete:function(r){
+                       var resp2 = r.recv().content();
+                       if(resp2.textcode) alert(resp2.textcode+'\n'+resp2.desc);
+                       else { alert("Password reset request sent successfully."); unHideMe($('login_box'));hideMe($('forget_pw')); }
+               }}); else {
+                       if(resp.textcode) alert(resp.textcode+'\n'+resp.desc);
+                       else { alert("Password reset request sent successfully."); unHideMe($('login_box'));hideMe($('forget_pw')); }
+               }
+       }});
+}
+
+function myOPACShowBookbags(force) {
+       if(anonListCache.length) drawAnonLists(force); else hideMe($('acct_list_template2'));
+       var wrapper = $('acct_lists_prime');
+       if(!containerTemplate) containerTemplate = wrapper.removeChild($('acct_list_template')); else if(!force) return;
+       if(!wrapper) return;
+       
+       var containers = containerFetchAll();
+       
+       var found = false;
+       for(var i in containers) {
+               found = true;
+               var cont = containers[i];
+               fleshedContainers[cont.id()] = cont;
+               var temp = containerTemplate.cloneNode(true);
+               var title = $n(temp, 'list_name');
+               var share = $n(temp, 'share_list_link');
+               var rem = $n(temp, 'remove_list');
+               if(!title || !share || !rem) continue;
+               
+               title.appendChild(text(cont.name()));
+               share.onclick = myListAction;
+               share.listID = cont.id();
+               rem.value='delete';
+               rem.onclick = myListAction;
+               rem.listID = cont.id();
+               temp.setAttribute("id",temp.id + '_' + cont.id());
+               
+               if(containers.length>1) {
+                       var sel = $n(temp, 'list_actions');
+                       var optg = elem('optgroup', {label:'Move Items to'});
+                       for(var n in containers) {
+                               var cont2 = containers[n];
+                               if(cont2.id()==cont.id()) continue;
+                               var opt = elem('option', {value:'move', container:cont2.id()}, cont2.name());
+                               optg.appendChild(opt);
+                       }
+                       sel.appendChild(optg);
+               }
+               
+               if(isTrue(cont.pub())) {
+                       share.value='hide';
+                       share.innerHTML = 'Un-share';
+                       share.title='';
+                       var link = $n(temp,'share_list_rss');
+                       link.setAttribute('href', buildExtrasLink( 'feed/bookbag/rss2-full/'+cont.id(), false));
+                       unHideMe(link);
+               } else {
+                       share.value='share';
+                       share.title = 'Sharing this bookbag will allow the contents of the bookbag to be seen by others.'
+                       share.innerHTML = 'Share';
+               }
+               
+               wrapper.appendChild(temp);
+               // grab container items after adding each list to the page
+               fieldmapper.standardRequest(FETCH_CONTAINER_DETAILS,{params:[G.user.session, 'biblio', cont.id()],oncomplete:drawListItemRows});
+       }
+       
+       if(!found) wrapper.appendChild(elem("div",{style:"font-weight:bold;text-align:center;font-size:14px;"},"You have not created any lists"));
+       
+       var anonSel = $('sel_all_list_anon');
+       if(!anonSel) return;
+       var optg2 = elem('optgroup', {label:'Move Items to', id:'anon_list_grp'});
+       for(var t in containers) {
+               var cont3 = containers[t];
+               var opt2 = elem('option', {value:'move', container:cont3.id()}, cont3.name());
+               optg2.appendChild(opt2);
+       }
+       anonSel.appendChild(optg2);
+}
+
+function drawAnonLists() {
+       var cont = $('acct_list_template2');
+       var bibs = fieldmapper.standardRequest(FETCH_MODS_SLIM, {async:false, params:[anonListCache]});
+       
+       var tbody = $('anon_list_tbody');
+       for(var i in bibs) {
+               var it = bibs[i];
+               var tr = elem('tr');
+               var td1 = elem('td',{style:'padding-right:5px;'},it.title());
+               var td2 = elem('td',{width:'1'});
+               var el = elem('input',{type:'checkbox', name:'list_action_chbx', recordid:it.doc_id()+'', doc_id:it.doc_id()+'', listID:'anon'});
+               el.className = "list_action_chbx";
+               el.name="list_action_chbx";
+               td2.appendChild(el);
+               tr.appendChild(td2);
+               tr.appendChild(td1);
+               tbody.appendChild(tr);
+       }
+       unHideMe(cont);
+}
+
+function drawListItemRows(r) {
+       var fleshed = r.recv().content();
+       if(!fleshed) return;
+       var modsArr = [];
+       
+       var temp = $('acct_list_template_'+fleshed.id());
+       if(!temp) return;
+       var tbody = $n(temp,'list_tbody');
+       if(!tbody) return;
+       var items = fleshed.items();
+
+       for(var i=0; i<items.length; i++) {
+               var it = items[i];
+               var tr = elem('tr');
+               var td1 = elem('td',{'class':'list_item_title_'+it.target_biblio_record_entry(), style:'padding-right:5px;'});
+               td1.className = 'list_item_title_'+it.target_biblio_record_entry();
+               var td2 = elem('td',{width:'1'});
+               
+               var el = elem('input',{type:'checkbox', name:'list_action_chbx','class':'list_action_chbx', recordid:it.target_biblio_record_entry()+'', itemID:it.id()+'',listID:fleshed.id()});
+               el.name="list_action_chbx";
+               el.className="list_action_chbx";
+               td2.appendChild(el);
+               tr.appendChild(td2);
+               tr.appendChild(td1);
+               tbody.appendChild(tr);
+               modsArr[i] = it.target_biblio_record_entry();
+       }
+       
+       // yay for batching requests
+       if(modsArr.length) {
+               fieldmapper.standardRequest(FETCH_MODS_SLIM,{params:[modsArr],oncomplete:drawListItemTitles});
+       } else {
+               var tr = elem('tr');
+               var td = elem('td',{style:"font-weight:bold;font-size:14px;",align:'center'},'No items have been added to this list yet.');
+               td.style.fontWeight='bold';
+               td.style.fontSize='14px';
+               tr.appendChild(td);
+               tbody.appendChild(tr);
+       }
+}
+
+function drawListItemTitles(r) {
+       var rec = r.recv().content();
+       if(!rec) return;
+       for(var i in rec) {
+               var rows = dojo.query('.list_item_title_'+rec[i].doc_id()); //$c('list_item_title_'+rec[i].doc_id());
+               for(var n in rows) rows[n].innerHTML = rec[i].title();
+       }
+}
+
+function addMyList() {
+       var name = $('mylist_new').value;       
+       if(!name) return false;
+
+       var exists = false;
+       for( var c in fleshedContainers ) { exists = true; break; }
+
+       /* let them know what they are getting into... */
+       if(!exists) if(!confirm($('bb_create_warning').innerHTML)) return false;
+       var result = containerCreate( name, $('shareListYes').checked );
+       var code = checkILSEvent(result);
+       if(code) { alertILSEvent(result); return false; }
+       //if(result) alert($('myopac_bb_update_success').innerHTML);
+       $('mylist_new').value="";
+       $('shareListYes').checked = false;
+       $('shareListNo').checked = true;
+       reloadMyLists();
+       return true;
+}
+
+function myListAction() {
+       if(!this.listID) return;
+       switch(this.value) {
+               case "delete": myOPACDeleteBookbag(this.listID); break;
+               case  "share": myOPACMakeBBPublished(this.listID); break;
+               case   "hide": myOPACMakeBBPublished(this.listID, true); break;
+       }
+}
+
+function myOPACMakeBBPublished(bbid, hideme) {
+       var bb = fleshedContainers[bbid];
+
+       if(hideme) {
+               if(!confirm($('myopac_make_unpublished_confirm').innerHTML)) return;
+               bb.pub('f');
+       } else {
+               if(!confirm($('myopac_make_published_confirm').innerHTML)) return;
+               bb.pub('t');
+       }
+
+       var result = containerUpdate(bb);
+       var code = checkILSEvent(result);
+       if(code) { alertILSEvent(result); return; }
+
+       //alert($('myopac_bb_update_success').innerHTML);
+       reloadMyLists();
+}
+
+function myOPACDeleteBookbag(id) {
+       if( confirm( $('myopac_delete_bookbag_warn').innerHTML ) ) {
+               var result = containerDelete(id);
+               var code = checkILSEvent(result);
+               if(code) { alertILSEvent(result); return; }
+               //alert($('myopac_bb_update_success').innerHTML);
+               //hideMe($('myopac_bookbag_items_table'));
+               //hideMe($('myopac_bookbag_items_name'));
+               //hideMe($('myopac_bookbag_no_items'));
+               reloadMyLists();
+       }
+}
+
+function reloadMyLists() {
+       var prime = $('acct_lists_prime');
+       var anon = $('anon_list_tbody');
+       $('sel_all_list_anon').removeChild($('anon_list_grp'));
+       removeChildren(prime);
+       removeChildren(anon);
+       prime.innerHTML = "";
+       myOPACShowBookbags(true);
+}
+
+function removeSelectedItems(parent) {
+       if(!parent) parent = $('acct_lists_prime');
+       var items = dojo.query('input[name=list_action_chbx]', parent);
+       if(!items.length) items = dojo.query('.list_action_chbx', parent);
+       items.filter(function(item, index, arr){return item.checked;},this);
+       
+       if(items.length) {
+               for(var i=0; i<items.length; i++) {
+                       var box = items[i];
+                       if(box.checked) {
+                               containerRemoveItem(box.getAttribute("itemID"));
+                       }
+               }
+       }
+}
+
+var finesShown = false;
+function myOPACShowFines(showing) {
+       if(finesShown) return; finesShown = true;
+       var req = new Request(FETCH_FINES_SUMMARY, G.user.session, G.user.id() );
+    req.request.__showing = showing;
+       req.callback(_myOPACShowFines);
+       req.send();
+}
+
+function _myOPACShowFines(r) {
+       hideMe($('myopac_fines_summary_loading'));
+       unHideMe($('myopac_fines_summary_row'));
+
+       var summary = r.getResultObject();
+       var total       = "0.00";
+       var paid        = "0.00";
+       var balance = "0.00";
+       var balance2 = "0.00";
+       
+       if( instanceOf(summary,mous) ) {
+               total           = _finesFormatNumber(summary.total_owed());
+               paid            = _finesFormatNumber(summary.total_paid());
+               balance = _finesFormatNumber(summary.balance_owed());
+               balance2 = _finesFormatNumber(summary.balance_owed());
+
+               var req = new Request(
+            'open-ils.actor:open-ils.actor.user.transactions.have_balance.fleshed', 
+            G.user.session, G.user.id() );
+
+               req.callback(myOPACShowTransactions);
+               req.send();
+       }
+
+       if(parseFloat(balance2) > 0.00) {
+               var bal = $('myopac_sum_fines_bal');
+               bal.style.color = "red";
+               appendClear(bal,text("$"+balance2));
+               unHideMe($('myopac_sum_fines'));
+               unHideMe($('myopac_sum_fines_slim'));
+               unHideMe($('pay_fines_btn'));
+        if(!r.__showing)
+                   showFinesDiv($('show_fines_link'));
+       }
+
+       appendClear($('myopac_fines_summary_total'), text(total));
+       appendClear($('myopac_fines_summary_paid'), text(paid));
+       appendClear($('myopac_fines_summary_balance'), text(balance));
+}
+
+function _finesFormatNumber(num) {
+       if(isNull(num)) num = 0;
+       num = num + "";
+       if(num.length < 2 || !num.match(/\./)) num += ".00";
+       if(num.match(/\./) && num.charAt(num.length-2) == '.') num += "0";
+       return num;
+}
+
+function _trimTime(time) { 
+       if(!time) return ""; 
+    var d = dojo.date.stamp.fromISOString(time);
+    if(!d) return ""; /* date parse failed */
+    return d.iso8601Format('YMD');
+}
+
+function _trimSeconds(time) { 
+    if(!time) return ""; 
+    var d = dojo.date.stamp.fromISOString(time);
+    if(!d) return ""; /* date parse failed */
+    return d.iso8601Format('YMDHM',null,true,true);
+}
+
+function myOPACShowTransactions(r) {
+       var transactions = r.getResultObject();
+       
+       if(!myopacGenericTransTemplate) myopacGenericTransTemplate = $('myopac_trans_tbody').removeChild($('myopac_trans_row'));
+       if(!myopacCircTransTemplate) myopacCircTransTemplate = $('myopac_circ_trans_tbody').removeChild($('myopac_circ_trans_row'));
+       removeChildren($('myopac_trans_tbody'));
+       removeChildren($('myopac_circ_trans_tbody'));
+       transCache = [];
+
+    transactions = transactions.sort(
+        function(a, b) {
+            if(a.transaction.xact_start() < b.transaction.xact_start())
+                return 1;
+            else return -1;
+        }
+    );
+       
+       for( var idx in transactions ) {
+               var trans       = transactions[idx].transaction;
+               var record      = transactions[idx].record;
+               var circ        = transactions[idx].circ;
+               transCache[trans.id()] = transactions[idx];
+
+               if(trans.xact_type() == 'circulation') myOPACShowCircTransaction(trans, record, circ);
+               else if(trans.xact_type() == 'grocery') myopacShowGenericTransaction( trans );
+       }
+}
+
+// for toggling between payments and fines tabs
+function showFinesTab() {
+    hideMe($("myopac_payments_div"));
+    unHideMe($("pay-fines-image"));
+    unHideMe($("myopac_trans_div"));
+    unHideMe($("myopac_circ_trans_div"));
+    $('acct_fines_tab').style.background="url('/opac/skin/kcls/graphics/acct_fines_on.jpg') no-repeat bottom";
+    $('acct_payments_tab').style.background="url('/opac/skin/kcls/graphics/acct_payments_off.jpg') no-repeat bottom";
+}
+
+var paymentsDrawn = false;
+function myopacDrawPayments() {
+
+    unHideMe($("myopac_payments_div")); 
+    hideMe($("myopac_circ_trans_div"));
+    hideMe($("myopac_trans_div"));
+    hideMe($("pay-fines-image"));
+    $('acct_fines_tab').style.background="url('/opac/skin/kcls/graphics/acct_fines_off.jpg') no-repeat bottom";
+    $('acct_payments_tab').style.background="url('/opac/skin/kcls/graphics/acct_payments_on.jpg') no-repeat bottom";
+
+    if(paymentsDrawn) return;
+    paymentsDrawn = true;
+
+    var before = new Date()
+    before.setFullYear(before.getFullYear() - 1);
+    // KCLS limits payment history view to 1 year.  This will eventually be expanded 
+    // out to a history view page, but for now, just fetch what's needed.
+    var req = new Request(
+        'open-ils.actor:open-ils.actor.user.payments.retrieve', 
+        G.user.session, G.user.id(), 
+        {"where":{"payment_ts":{">=":dojo.date.stamp.toISOString(before)}}});
+
+    req.callback(_myopacDrawPayments);
+    req.send();
+}
+
+function _myopacDrawPayments(r) {
+
+    var payments = r.getResultObject();
+    var tbody = $('myopac_payments_tbody');
+    rowTmpl = tbody.removeChild($('myopac_payments_tmpl'));
+
+    dojo.forEach(payments,
+        function(payment) {
+            var row = rowTmpl.cloneNode(true);
+            $n(row, 'date').innerHTML =  dojo.date.locale.format( 
+                dojo.date.stamp.fromISOString(payment.mp.payment_ts()),
+                {selector:'date', fullYear: true}
+            );
+            $n(row, 'for').innerHTML = (payment.title) ? payment.title : payment.last_billing_type;
+            $n(row, 'amount').innerHTML += Number(payment.mp.amount()).toFixed(2);
+            if(payment.mp.payment_type() == 'credit_card_payment') {
+                $n(row, 'print_recpt').onclick = function () { printPaymentReceipt([payment.mp.id()]) };
+                $n(row, 'email_recpt').onclick = function () { emailPaymentReceipt([payment.mp.id()]) };
+            } else {
+                $n(row, 'print_recpt').parentNode.style.visibility = 'hidden';
+            }
+            tbody.appendChild(row);
+        }
+    );
+}
+
+function emailPaymentReceipt(paymentIds, callback) {
+
+    if(!G.user.email()) {
+        if(callback) callback();
+        return;
+    }
+
+    progressDialog.show(true);
+
+    fieldmapper.standardRequest(
+        ['open-ils.circ', 'open-ils.circ.money.payment_receipt.email'],
+        {
+            async : true,
+            params : [G.user.session, paymentIds],
+            oncomplete : function(r) {
+                progressDialog.hide();
+                openils.Util.readResponse(r);
+                if(callback) callback();
+            }
+        }
+    );
+}
+
+function dateFromISO(d) {
+    if(!d) return '';
+    return dojo.date.locale.format( 
+        dojo.date.stamp.fromISOString(d),
+        {selector:'date', fullYear: true}
+    );
+}
+
+function myopacShowGenericTransaction( trans ) {
+       var tbody = $('myopac_trans_tbody');
+
+       var row = myopacGenericTransTemplate.cloneNode(true);
+       $n(row,'myopac_trans_start').appendChild(text(dateFromISO(trans.xact_start())));
+       $n(row,'myopac_trans_last_payment').appendChild(text(dateFromISO(trans.last_payment_ts())));
+       $n(row,'myopac_trans_init_amount').appendChild(text(_finesFormatNumber(trans.total_owed())));
+       $n(row,'myopac_trans_total_paid').appendChild(text(_finesFormatNumber(trans.total_paid())));
+       $n(row,'myopac_trans_balance').appendChild(text(_finesFormatNumber(trans.balance_owed())));
+       $n(row,'selector').balance_owed = trans.balance_owed();
+       $n(row,'selector').setAttribute("xact", trans.id());
+
+       var req = new Request(FETCH_MONEY_BILLING, G.user.session, trans.id());
+       req.send(true);
+       var bills = req.result();
+       if(bills && bills[0]) $n(row,'myopac_trans_bill_type').appendChild(text(bills[0].billing_type()));
+
+       tbody.appendChild(row);
+       unHideMe($('myopac_trans_div'));
+}
+
+function myOPACShowCircTransaction(trans, record, circ) {
+       var tbody = $('myopac_circ_trans_tbody');
+
+       var row = myopacCircTransTemplate.cloneNode(true);
+       if(record) {
+               buildTitleDetailLink(record, $n(row,'myopac_circ_trans_title'));
+               $n(row,'myopac_circ_trans_author').appendChild(text(normalize(truncate(record.author(), 65))));
+       } else {
+               var req = new Request( FETCH_COPY, circ.target_copy() );
+               req.alertEvents = false;
+               req.send(true);
+               var copy = req.result();
+               if( copy ) {
+                       $n(row,'myopac_circ_trans_title').appendChild(text(copy.dummy_title()));
+                       $n(row,'myopac_circ_trans_author').appendChild(text(copy.dummy_author()));
+               }
+       }
+       
+       $n(row,'myopac_circ_trans_start').appendChild(text(dateFromISO(trans.xact_start())));
+
+    var due = dateFromISO(circ.due_date());
+       var checkin = dateFromISO(circ.stop_fines_time());
+
+       $n(row,'myopac_circ_trans_due').appendChild(text(due))
+       if(checkin) appendClear($n(row,'myopac_circ_trans_finished'), text(checkin));
+       if(circ.stop_fines() == 'LOST') appendClear($n(row,'myopac_circ_trans_finished'), text(circ.stop_fines()));
+       if(circ.stop_fines() == 'CLAIMSRETURNED') appendClear($n(row,'myopac_circ_trans_finished'), text(""));
+       $n(row,'myopac_circ_trans_balance').appendChild(text(_finesFormatNumber(trans.balance_owed())));
+       $n(row,'selector').balance_owed = trans.balance_owed();
+       $n(row,'selector').setAttribute("xact",trans.id()); 
+
+       tbody.appendChild(row);
+       unHideMe($('myopac_circ_trans_div'));
+}
+
+function showFinesDiv(el) {
+       if(!el) return;
+       if($('myopac_fines_div').className.indexOf('hide_me')>=0) { 
+               unHideMe($('myopac_fines_div'));
+               el.innerHTML="Hide Overdue Materials";
+        if(!finesShown) {
+            myOPACShowFines(true);
+        }
+       } else {
+               hideMe($('myopac_fines_div'));
+               el.innerHTML="Show Overdue Materials";
+       }
+}
+
+var ecom_event_map = {
+    CREDIT_PROCESSOR_DECLINED_TRANSACTION : 
+        'Sorry. Your payment has been declined. Please confirm your information is entered correctly or contact your credit card company.',
+    CREDIT_PROCESSOR_INVALID_CC_NUMBER : 
+        'The credit card number entered is not valid.  Please confirm your information is entered correctly or contact your credit card company.',
+    SUCCESS : 'Your payment has been approved' 
+}
+
+function showPaymentForm() {
+       unHideMe($('pay_fines_now'));
+       hideMe($('acct_sum'));
+    hideMe($('cc-payment-error-message'));
+       drawPayFinesPage(
+               G.user,
+               getSelectedFinesTotal(),
+               getSelectedFineTransactions(),
+               function(resp) {
+            unHideMe($('cc-payment-error-message'));
+                       if(resp.textcode) {
+                var message = ecom_event_map[resp.textcode] || resp.textcode+'\n'+resp.desc + '';
+                $('cc-payment-error-message').innerHTML = message;
+                               return;
+                       }
+                       G.user.last_xact_id(resp.last_xact_id); // update to match latest from server
+            $('cc-payment-error-message').innerHTML = ecom_event_map.SUCCESS;
+                       printPaymentReceipt(resp.payments);
+            emailPaymentReceipt(resp.payments);
+                       hideMe($('pay_fines_now'));unHideMe($('acct_sum'));
+                       finesShown = false;
+                       myOPACShowFines();              
+                       showFinesDiv($('show_fines_link'));
+               }
+       );
+}
+
+function getSelectedFinesTotal() {
+    var total = 0;
+    dojo.forEach(
+        dojo.query("[name=selector]", $('myopac_circ_trans_tbody')),
+        function(input) { if(input.checked && input.getAttribute("xact")) total += Number(input.balance_owed); }
+    );
+       
+    dojo.forEach(
+        dojo.query("[name=selector]", $('myopac_trans_tbody')),
+        function(input) { if(input.checked && input.getAttribute("xact")) total += Number(input.balance_owed); }
+    );
+    return total.toFixed(2);
+}
+
+function getSelectedFineTransactions() {
+       var set1 = dojo.query("[name=selector]", $('myopac_circ_trans_tbody')).
+        filter(function (o) { return o.checked }).
+               map(function (o) {return [o.getAttribute("xact"), Number(o.balance_owed).toFixed(2)];}
+        );
+       var set2 = dojo.query("[name=selector]", $('myopac_trans_tbody')).
+        filter(function (o) { return o.checked }).
+               map(function (o) {return [o.getAttribute("xact"), Number(o.balance_owed).toFixed(2)];}
+        );
+       var obj = set1.concat(set2);
+       return obj.filter(function(el){return el[0]==null?false:true;});
+}
+
+var payFinesDrawn = false;
+function drawPayFinesPage(patron, total, xacts, onPaymentSubmit) {
+    if (typeof(this.authtoken) == "undefined")
+        this.authtoken = patron.session;
+
+    dojo.query("span", "oils-selfck-cc-payment-summary")[0].innerHTML = total;
+
+    $('myopac-cc-email').innerHTML = patron.email();
+    oilsSelfckCCNumber.attr('value', '');
+    oilsSelfckCCCVV.attr('value', '');
+    oilsSelfckCCMonth.attr('value', '01');
+    oilsSelfckCCYear.attr('value', new Date().getFullYear());
+    oilsSelfckCCFName.attr('value', patron.first_given_name());
+    oilsSelfckCCLName.attr('value', patron.family_name());
+
+    var addr = patron.billing_address() || patron.mailing_address();
+
+    if (typeof(addr) != "object") {
+        /* still don't have usable address? try getting better user object. */
+        fieldmapper.standardRequest(
+            FETCH_FULL_USER, {
+                "params": [patron.session, patron.id(), ["billing_address", "mailing_address"]],
+                "async": false,
+                "oncomplete": function(r) {
+                    var usr = r.recv().content();
+                    if (usr) addr = usr.billing_address() || usr.mailing_address();
+                }
+            }
+        );
+    }
+
+    if (addr) {
+        oilsSelfckCCStreet.attr('value', addr.street1()+' '+addr.street2());
+        oilsSelfckCCCity.attr('value', addr.city());
+        oilsSelfckCCState.attr('value', addr.state());
+        oilsSelfckCCZip.attr('value', addr.post_code());
+    }
+
+    dojo.connect(oilsSelfckEditDetails, 'onChange',
+        function(newVal) {
+            dojo.forEach(
+                [oilsSelfckCCFName, oilsSelfckCCLName, oilsSelfckCCStreet, oilsSelfckCCCity, oilsSelfckCCState, oilsSelfckCCZip],
+                function(dij) { dij.attr('disabled', !newVal); }
+            );
+        }
+    );
+
+    if(!payFinesDrawn) {
+               dojo.connect(oilsSelfckCCSubmit, 'onClick',
+          function() {
+            hideMe($('pay_fines_now'));
+            unHideMe($('pay_fines_confirm'));
+
+            $('pay_fines_confirm_amount').innerHTML = 
+                dojo.query("span", "oils-selfck-cc-payment-summary")[0].innerHTML;
+
+            dojo.connect(payConfirmSubmit, 'onClick', 
+                function() { 
+                    if (typeof(progressDialog) != "undefined") progressDialog.show(true);
+                    unHideMe($('pay_fines_now'));
+                    hideMe($('pay_fines_confirm'));
+                    sendCCPayment(patron, xacts, onPaymentSubmit);
+                } 
+            );
+
+            dojo.connect(payConfirmCancel, 'onClick', 
+                function() { 
+                    unHideMe($('pay_fines_now'));
+                    hideMe($('pay_fines_confirm'));
+                }
+            );
+
+            /*
+                       if(!confirm("Are you sure?")) return;
+            sendCCPayment(patron, xacts, onPaymentSubmit);
+            */
+          }
+       );
+               payFinesDrawn = true;
+       }
+       
+       var selFines = $('selectedFines');
+       removeChildren(selFines);
+       for(var i in xacts) {
+               var xact = transCache[xacts[i][0]];
+               if(!xact) continue;
+               var tr = elem('tr');
+               var td1 = elem('td', {}, xact["record"]?xact.record.title():xact.transaction.last_billing_type());
+               var td2 = elem('td', {'nowrap':'nowrap', 'valign':'top'}, '$'+xact.transaction.balance_owed());
+               td2.style.paddingLeft = '5px';
+               td2.style.color = 'red';
+               tr.appendChild(td1);
+               tr.appendChild(td2);
+               selFines.appendChild(tr);
+       }
+}
+
+function sendCCPayment(patron, xacts, onPaymentSubmit) {
+    // in this context, patron will always be G.user.  set it explicitly 
+    // to pick up the latest last_xact_id value
+    patron = G.user;
+
+    var args = {
+        userid : patron.id(),
+        payment_type : 'credit_card_payment',
+        payments : xacts,
+        cc_args : {
+            where_process : 1,
+            //type :  'MasterCard',//oilsSelfckCCType.attr('value'),
+            number : oilsSelfckCCNumber.attr('value'),
+            cvv2 : oilsSelfckCCCVV.attr('value'),
+            expire_year : oilsSelfckCCYear.attr('value'),
+            expire_month : oilsSelfckCCMonth.attr('value'),
+            billing_first : oilsSelfckCCFName.attr('value'),
+            billing_last : oilsSelfckCCLName.attr('value'),
+            billing_address : oilsSelfckCCStreet.attr('value'),
+            billing_city : oilsSelfckCCCity.attr('value'),
+            billing_state : oilsSelfckCCState.attr('value'),
+            billing_zip : oilsSelfckCCZip.attr('value')
+        }
+    }
+
+    var resp = fieldmapper.standardRequest(PAY_BILLS,{params : [patron.session, args, patron.last_xact_id()]});
+    if (typeof(progressDialog) != "undefined")
+        progressDialog.hide();
+
+    if (typeof(onPaymentSubmit) == "function") {
+        onPaymentSubmit(resp);
+    } else {
+        var evt = openils.Event.parse(resp);
+        if (evt) alert(evt);
+    }
+}
+
+function myopacSelectedHoldsRows() {
+    var r = [];
+       var cb;
+    var rows = dojo.query('[name=acct_holds_temp]',$("holds_temp_parent"));
+    for(var i = 0; i < rows.length; i++) {
+        cb = $n(rows[i], 'check_all_holds');
+        if(cb && cb.checked)
+            r.push(rows[i]);
+    }
+    return r;
+}
+
+var myopacProcessedHolds = 0;
+var myopacHoldsToProcess = 0;
+function myopacDoHoldAction() {
+    var selectedRows = myopacSelectedHoldsRows();
+    var action = getSelectorVal($('acct_holds_actions'));
+    $('myopac_holds_actions_none').selected = true;
+    if(selectedRows.length == 0) return;
+
+    myopacProcessedHolds = 0;
+
+    if(!confirmId('myopac.holds.'+action+'.confirm')) return;
+    //myopacSelectNoneHolds(); /* clear the selection */
+
+
+    /* first, let's collect the holds that actually need processing and
+        collect the full process count while we're at it */
+    var holds = [];
+    for(var i = 0; i < selectedRows.length; i++) {
+               var ahold = $n(selectedRows[i],'check_all_holds');
+        var hold = holdsCache[holdsCacheMap[ahold.holdid]];
+        var qstats = hold.status;
+        switch(action) {
+            case 'cancel':
+                holds.push(hold.hold);
+                break;
+            case 'thaw_date':
+            case 'thaw':
+                if(isTrue(hold.hold.frozen()))
+                    holds.push(hold.hold);
+                break;
+            case 'freeze':
+                if(!isTrue(hold.hold.frozen()) && qstats < 3)
+                    holds.push(hold.hold);
+                break;
+        }
+    }
+
+    myopacHoldsToProcess = holds;
+    if(myopacHoldsToProcess.length == 0) return;
+
+    if(action == 'thaw_date' || action == 'freeze') 
+        myopacDrawHoldThawDateForm();
+    else
+    myopacProcessHolds(action);
+}
+
+function myopacDrawHoldThawDateForm() {
+    hideMe($('myopac_holds_div'));
+    unHideMe($('myopac_holds_thaw_date_form'));
+    $('myopac_holds_thaw_date_input').focus();
+}
+
+function myopacApplyThawDate() {
+    var dateString = dijit.byId('myopac_holds_thaw_date_input').getValue();
+    if(dateString) {
+        dateString = dojo.date.stamp.toISOString(dateString);
+        if(dateString) {
+            dateString = holdsVerifyThawDate(dateString);
+            if(!dateString) return;
+        } else {
+            dateString = null;
+        }
+    }
+       unHideMe($('myopac_holds_div'));
+    hideMe($('myopac_holds_thaw_date_form'));
+    myopacProcessHolds('freeze', dateString);
+}
+
+
+function myopacProcessHolds(action, thawDate) {
+       progressDialog.show(true);
+   // myopacShowHoldProcessing();
+    /* now we process them */
+    for(var i = 0; i < myopacHoldsToProcess.length; i++) {
+        var hold = myopacHoldsToProcess[i];
+        
+        var req;
+        switch(action) { 
+
+            case 'cancel':
+                req = new Request(CANCEL_HOLD, G.user.session, hold.id());
+                break;
+    
+            case 'thaw':
+                hold.frozen('f');
+                hold.thaw_date(null);
+                req = new Request(UPDATE_HOLD, G.user.session, hold);
+                break;
+
+            case 'thaw_date':
+            case 'freeze':
+                hold.frozen('t');
+                hold.thaw_date(thawDate); 
+                req = new Request(UPDATE_HOLD, G.user.session, hold);
+                break;
+                //thawDate = prompt($('myopac.holds.freeze.select_thaw').innerHTML);
+
+        }
+
+        req.callback(myopacBatchHoldCallback);
+        req.send();
+        req = null;
+    }
+}
+
+function myopacBatchHoldCallback(r) {
+       var res = r.getResultObject();
+       myopacHoldsToProcess = grep(myopacHoldsToProcess, function(i) { return (i.id() != res); }); 
+       if(!myopacHoldsToProcess || ++myopacProcessedHolds >= myopacHoldsToProcess.length) {
+         //alert(res);
+         progressDialog.hide();
+         myopacForceHoldsRedraw = true;
+         $('check_all_holds').checked = false;
+         drawHoldsPage();
+       }
+}
+
+function myOPACRenewSelected() {
+   var rows = dojo.query('input[name=check_all_checked]',$('checked_temp_parent')).filter(function(n,i){ return n.checked; });
+   __renew_circs = [];
+       if(!rows.length || !confirm($('myopac_renew_confirm').innerHTML)) return;
+   __success_count = 0;
+   __fail_count = 0;
+
+   for( var i = 0; i < rows.length; i++ ) {
+      var row = rows[i];
+      var circ_id = row.getAttribute('circid');
+
+          var circ;
+          for( var j = 0; j != itemsOutCache.length; j++ ) 
+                  if(itemsOutCache[j].circ.id() == circ_id)
+                          circ = itemsOutCache[j].circ;
+
+      __renew_circs.push(circ);
+   }
+
+    if( __renew_circs.length == 0 ) return;
+
+    //unHideMe($('my_renewing'));
+    //moClearCheckedTable();
+
+    for( var i = 0; i < __renew_circs.length; i++ ) {
+        var circ = __renew_circs[i];
+        moRenewCirc( circ.target_copy(), G.user.id(), circ );
+    }
+}
+
+var __renew_circs = [];
+var __rewnew_errors = [];
+var __success_count = 0;
+var __fail_count = 0;
+function moRenewCirc(copy_id, user_id, circ) {
+
+   _debug('renewing circ ' + circ.id() + ' with copy ' + copy_id);
+   var req = new Request(RENEW_CIRC, G.user.session, 
+      {  patron : user_id, 
+         copyid : copy_id, 
+         opac_renewal : 1
+      } 
+   );
+
+   req.request.alertEvent = false;
+   req.callback(myHandleRenewResponse);
+   req.request.circ = circ;
+   req.send();
+}
+
+/* handles the circ renew results */
+
+function myHandleRenewResponse(r) {
+   try{ var res = r.getResultObject(); } catch(e){ alert("Renew Error\n\n"+e); __renew_circs = []; __rewnew_errors = []; return; }
+   var circ = r.circ;
+
+   /* remove this circ from the list of circs to renew */
+   if(checkILSEvent(res) || checkILSEvent(res[0])) {
+          var str1 = truncate(mvrObjCache[circ.target_copy()].title(),65)+'\n';
+          if(res.ilsevent) str1 += res.ilsevent+': '+res.desc+'\n'; else for(var i in res) str1 += res[i].ilsevent+': '+res[i].desc+'\n';
+          __rewnew_errors[circ.id()] = str1;
+   }
+   __renew_circs = grep(__renew_circs, function(i) { return (i.id() != circ.id()); });
+   _debug("handling renew result for " + circ.id());
+
+   if(checkILSEvent(res) || checkILSEvent(res[0])) __fail_count++;
+      //alertIdText('myopac_renew_fail', __circ_titles[circ.id()]);
+   else __success_count++;
+   
+   if(__renew_circs) return; /* more to come */
+   __renew_circs = [];
+   
+   var str = "";
+   if(__success_count) str+= __success_count+" items renewed successfully";
+   if(__fail_count) str+=__fail_count+" items did not renew.";
+   str+='\n\n';
+   for(var i in __rewnew_errors) str+=__rewnew_errors[i]+'\n';
+   
+   if(__success_count || __fail_count) alert(str);
+   __rewnew_errors = [];
+
+       //if( __success_count > 0 )
+    //  alertIdText('myopac_renew_success', __success_count);
+
+   hideMe($('my_renewing'));
+   checkedDrawn = false;
+    drawCheckedPage();
+       $('check_all_checked').checked = false;
+}
+
+
+function moveToNewList(parent, dest) {
+       if(!parent || !dest) return;
+       
+       var items = dojo.query('input[name=list_action_chbx]', parent);
+       if(!items.length) items = dojo.query('.list_action_chbx', parent);
+       items.filter(function(item, index, arr){return item.checked;},this);
+       
+       if(items.length) {
+               for(var i=0; i<items.length; i++) {
+                       var box = items[i];
+                       if(box.checked) {
+                               containerCreateItem(dest, box.getAttribute("recordid"));
+                       }
+               }
+       }
+}
+
+function listSaveAction() {
+       var lists = dojo.query('select[name=list_actions]',$('temp_wrapper')).filter(function(n,i){
+               return n.options[n.selectedIndex].value!="0"
+       });
+       
+       if(lists.length) { if(!confirm("Proceed with the selected action(s)?")) return; } else return;
+       progressDialog.show(true);
+       var updateHolds = false;
+       var updateLists = false;
+       
+       lists.forEach(function(n,i){
+               var val = n.options[n.selectedIndex].value;
+               if(val=="0") return;
+               var p = n.parentNode.parentNode.parentNode.parentNode.parentNode;
+               switch(val) {
+                       case "hold": batchHoldMyList(null, p); updateHolds = true; break;
+                       case "move": if(n.id=='sel_all_list_anon') delSelCache(p, 'list_action_chbx');
+                                                               else removeSelectedItems(p); moveToNewList(p, n.options[n.selectedIndex].getAttribute("container"));
+                                                 updateLists = true; break;
+                       case "remove": if(n.id=='sel_all_list_anon') delSelCache(p, 'list_action_chbx');
+                                                               else removeSelectedItems(p);
+                                                  updateLists = true; break;
+               }
+               setSelector(n, "0");
+       });
+       
+       if(updateLists) reloadMyLists();
+       if(updateHolds) { myopacForceHoldsRedraw = true; drawHoldsPage(); }
+       progressDialog.hide();
+}
+
+var itemsOutHistoryInitialFetch = false;
+function switchSubPage(page, subpage) {
+       if(!page || !subpage) return;
+       
+       var pg = subPageObjs[page]; if(!pg) return;
+       var spg = subPageObjs[page][subpage]; if(!spg) return;
+       
+       for(var i in pg) { if(i!='header') for(var n in pg[i]){ if(pg[i][n] || n!='header') hideMe(pg[i][n]); } }
+       for(var t in spg) { if(spg[t] || t!='header') unHideMe(spg[t]); }
+       
+       pg.header.innerHTML = spg.header;
+
+    if(page == 'checked' && subpage == 'hist') {
+        if(!itemsOutHistoryInitialFetch) {
+            itemsOutHistoryInitialFetch = true;
+            progressDialog.show(true);
+               fieldmapper.standardRequest(FETCH_CHECKED_HISTORY, {async:true, params:[G.user.session, G.user.id(), {'limit':CIRC_HIST_PAGE_LIMIT, 'offset':0}],
+                       oncomplete:function(r) {
+                    progressDialog.hide();
+                    itemsOutHistory = openils.Util.readResponse(r);
+                    drawCircHistory();
+                       }
+               });
+        }
+    }
+}
+
+function doBatchAnonHolds() {
+       var error = {err:""};
+       var resp = placeBatchHold(holdsList, G.user.home_ou(), error);
+       if(resp == -1) alert("Unable to place holds"); else {
+         alert(resp+" hold"+(resp==1?"":"s")+" placed successfully\n\n"+error.err);
+       }
+       
+       holdsList = null;
+       myopacForceHoldsRedraw = true;
+       drawHoldsPage();
+}
+
+function myOPACUpdateHomeOU() {
+       var sel = $('myopac_new_home');
+       
+}
+
+var sortOrder = true;
+function sortHolds(by) {
+       if(!by) return;
+       
+       sortOrder = !sortOrder;
+       switch(by.toLowerCase()) {
+               case "format":
+               holdsCache = holdsCache.sort(function(a, b) {
+                       if(sortOrder) return get998dValue(imgFormatCache[a.hold.id()])<get998dValue(imgFormatCache[b.hold.id()])?-1:1;
+                               else      return get998dValue(imgFormatCache[a.hold.id()])>get998dValue(imgFormatCache[b.hold.id()])?-1:1;
+               });
+               break;
+               case "title":
+               holdsCache = holdsCache.sort(function(a, b) {
+                       if(sortOrder) return a.mvr.title()<b.mvr.title()?-1:1;
+                               else      return a.mvr.title()>b.mvr.title()?-1:1;
+               });
+               break;
+               case "pickup":
+               holdsCache = holdsCache.sort(function(a, b) {
+                       if(sortOrder) return findOrgUnit(a.hold.pickup_lib()).name()<findOrgUnit(b.hold.pickup_lib()).name()?-1:1;
+                               else      return findOrgUnit(a.hold.pickup_lib()).name()>findOrgUnit(b.hold.pickup_lib()).name()?-1:1;
+               });
+               break;
+               case "author":
+               holdsCache = holdsCache.sort(function(a, b) {
+                       if(sortOrder) return a.mvr.author()<b.mvr.author()?-1:1;
+                               else      return a.mvr.author()>b.mvr.author()?-1:1;
+               });
+               break;
+               case "status":
+               if(sortOrder) {
+                       drawHoldsPage(true);
+                       return;
+               } else {
+                       holdsCache = holdsCache.sort(function(a, b) {
+                               if(a.status==4) return 1;
+                               if(b.status==4) return -1;
+                               if(isTrue(a.hold.frozen())) return -1;
+                               if(isTrue(b.hold.frozen())) return 1;
+                               return dojo.date.stamp.fromISOString(a.hold.request_time()) > dojo.date.stamp.fromISOString(b.hold.request_time())?-1:1;
+                       });                     
+               }
+       }
+       
+       drawHoldsPage(false);
+}
+
+function sortChecked(by) {
+       if(!by) return;
+       
+       sortOrder = !sortOrder;
+       switch(by.toLowerCase()) {
+               case "title":
+               itemsOutCache = itemsOutCache.sort(function(a, b) {
+                       if(sortOrder) return a.record.title()<b.record.title()?-1:1;
+                               else      return a.record.title()>b.record.title()?-1:1;
+               });
+               break;
+               case "author":
+               itemsOutCache = itemsOutCache.sort(function(a, b) {
+                       if(sortOrder) return a.record.author()<b.record.author()?-1:1;
+                               else      return a.record.author()>b.record.author()?-1:1;
+               });
+               break;
+               case "due":
+               if(sortOrder) {
+                       drawCheckedPage(); return;
+               } else itemsOutCache = itemsOutCache.sort(function(a, b) {
+                       return dojo.date.stamp.fromISOString(a.circ.due_date()) < dojo.date.stamp.fromISOString(b.circ.due_date())?1:-1;
+               });
+               break;
+               case "barcode":
+               itemsOutCache = itemsOutCache.sort(function(a, b) {
+                       if(sortOrder) return Number(a.copy.barcode())<Number(b.copy.barcode())?-1:1;
+                               else      return Number(a.copy.barcode())>Number(b.copy.barcode())?-1:1;
+               });
+               break;
+               case "cn":
+               itemsOutCache = itemsOutCache.sort(function(a, b) {
+                       if(sortOrder) return callNumCache[a.copy.call_number()]<callNumCache[b.copy.call_number()] ?-1:1;
+                               else      return callNumCache[a.copy.call_number()]>callNumCache[b.copy.call_number()]?-1:1;
+               });
+               break;
+               case "renews":
+               itemsOutCache = itemsOutCache.sort(function(a, b) {
+                       if(sortOrder) return Number(a.circ.renewal_remaining())<Number(b.circ.renewal_remaining())?-1:1;
+                               else      return Number(a.circ.renewal_remaining())>Number(b.circ.renewal_remaining())?-1:1;
+               });
+               break;
+       }
+       
+       drawCheckedPage(false);
+}
+
+function sortCheckedHist(by) {
+       if(!by) return;
+       
+       sortOrder = !sortOrder;
+       switch(by.toLowerCase()) {
+               case "title":
+               itemsOutHistory = itemsOutHistory.sort(function(a, b) {
+                       if(mvrObjCache[a.circ.target_copy()].title()==null) return 1;
+                       if(mvrObjCache[b.circ.target_copy()].title()==null) return -1;
+                       if(sortOrder) return mvrObjCache[a.circ.target_copy()].title().toLowerCase()<mvrObjCache[b.circ.target_copy()].title().toLowerCase()?-1:1;
+                               else      return mvrObjCache[a.circ.target_copy()].title().toLowerCase()>mvrObjCache[b.circ.target_copy()].title().toLowerCase()?-1:1;
+               });
+               break;
+               case "author":
+               itemsOutHistory = itemsOutHistory.sort(function(a, b) {
+                       if(mvrObjCache[a.circ.target_copy()].author()==null) return 1;
+                       if(mvrObjCache[b.circ.target_copy()].author()==null) return -1;
+                       if(sortOrder) return mvrObjCache[a.circ.target_copy()].author().toLowerCase()<mvrObjCache[b.circ.target_copy()].author().toLowerCase()?1:-1;
+                               else      return mvrObjCache[a.circ.target_copy()].author().toLowerCase()>mvrObjCache[b.circ.target_copy()].author().toLowerCase()?1:-1;
+               });
+               break;
+               case "duedate":
+               if(sortOrder) {
+                       drawCheckedPage(); return;
+               } else itemsOutHistory = itemsOutHistory.sort(function(a, b) {
+                       return dojo.date.stamp.fromISOString(a.circ.due_date()) < dojo.date.stamp.fromISOString(b.circ.due_date())?1:-1;
+               });
+               break;
+               case "cn":
+               itemsOutHistory = itemsOutHistory.sort(function(a, b) {
+                                                                               // ya, i know, but it gets the job done.
+                       if(sortOrder) return callNumCache[copyObjCache[a.circ.target_copy()].call_number()].label().toLowerCase()<callNumCache[copyObjCache[b.circ.target_copy()].call_number()].label().toLowerCase()?-1:1;
+                               else      return callNumCache[copyObjCache[a.circ.target_copy()].call_number()].label().toLowerCase()>callNumCache[copyObjCache[b.circ.target_copy()].call_number()].label().toLowerCase()?-1:1;
+               });
+               break;
+       }
+       
+       drawCircHistory(false);
+}
+
+function printData(data, numItems, callback) {
+
+    //unHideMe($('receipt-print-frame-wrapper'));
+    receiptPrintDialog.show();
+
+    var frame = window["receipt-frame"];
+    frame.document.body.innerHTML = data;
+
+    var cancel = $('receipt-view-print-cancel');
+    cancel.onclick = function() {
+        frame.document.body.innerHTML = '';
+       // hideMe($('receipt-print-frame-wrapper'));
+        receiptPrintDialog.hide();
+    }
+
+    $('receipt-view-print-button').onclick = function() {
+        frame.focus();
+        frame.print();
+        var sleepTime = 1000;
+        if(numItems > 0) 
+            sleepTime += (numItems / 2) * 1000;
+
+        setTimeout(
+            function() { 
+                cancel.onclick();
+                if(callback) callback(); // fire optional post-print callback
+            },
+            sleepTime 
+        );
+    };
+}
+
+
+function printPaymentReceipt(paymentIds, callback) {
+    progressDialog.show(true);
+
+    fieldmapper.standardRequest(
+        ['open-ils.circ', 'open-ils.circ.money.payment_receipt.print'],
+        {
+            async : true,
+            params : [G.user.session, paymentIds],
+            oncomplete : function(r) {
+                var resp = openils.Util.readResponse(r);
+                var output = "";
+                               if(resp) output = resp.template_output();
+                progressDialog.hide();
+                if(output) {
+                    printData(output.data(), 1, callback); 
+                } else {
+                    var error = resp.error_output();
+                    if(error) {
+                        throw new Error("Error creating receipt: " + error.data());
+                    } else {
+                        throw new Error("No receipt data returned from server");
+                    }
+                }
+            }
+        }
+    );
+}
+
+function printFinesReceipt(callback) {
+    progressDialog.show(true);
+
+    var params = [
+        G.user.session, 
+        G.user.ws_ou(),
+        null,
+        'format.selfcheck.fines',
+        'print-on-demand',
+        [G.user.id()]
+    ];
+
+    fieldmapper.standardRequest(
+        ['open-ils.circ', 'open-ils.circ.fire_user_trigger_events'],
+        {   
+            async : true,
+            params : params,
+            oncomplete : function(r) {
+                progressDialog.hide();
+                var resp = openils.Util.readResponse(r);
+                var output = resp.template_output();
+                if(output) {
+                    printData(output.data(), 240, callback); 
+                } else {
+                    var error = resp.error_output();
+                    if(error) {
+                        throw new Error("Error creating receipt: " + error.data());
+                    } else {
+                        throw new Error("No receipt data returned from server");
+                    }
+                }
+            }
+        }
+    );
+}
+
+function buildOrgSelAlt(selector, org, offset, namecol) {
+ if(!namecol) namecol = 'name';
+ if(!showXUL && !isTrue(org.opac_visible())) return; // for some reason, isXUL() is rather slow when used in a decently sized loop.
+ insertSelectorVal( selector, -1,
+ org[namecol](), org.id(), null, findOrgDepth(org) - offset );
+ var kids = org.children();
+ if (kids) {
+ for( var c = 0; c < kids.length; c++ )
+ buildOrgSelAlt( selector, kids[c], offset, namecol);
+ }
+}
index 22765c3..2d00adb 100644 (file)
-/* */\r
-\r
-if(findCurrentPage()==RDETAIL){\r
-detachAllEvt('common', 'run');\r
-attachEvt("common", "run", rdetailDraw);\r
-attachEvt("rdetail", "recordDrawn", rdetailBuildStatusColumns);\r
-attachEvt("rdetail", "recordDrawn", rdetailBuildInfoRows);\r
-attachEvt("rdetail", "recordDrawn", rdetailGetPageIds);\r
-\r
-/* Per-skin configuration settings */\r
-var rdetailLocalOnly = true;\r
-var rdetailShowLocal = true;\r
-var rdetailShowCopyLocation = true;\r
-var rdetailGoogleBookPreview = false;\r
-var rdetailDisplaySerialHoldings = true;\r
-var rdetailEnableRefWorks = false;\r
-var rdetailRefWorksHost = 'http://www.refworks.com';\r
-\r
-/* vars vars vars */\r
-var record = null;\r
-var marc = null;\r
-var cp_statuses = null;\r
-var recordsCache = [];\r
-\r
-var copyRowParent = null;\r
-var copyRow = null;\r
-var statusRow = null;\r
-var numStatuses = null;\r
-var defaultCN;\r
-var callnumberCache = {};\r
-var globalCNCache = {};\r
-var localTOC;\r
-var cachedRecords;\r
-var _statusPositions = {};\r
-var opac_strings;\r
-var copyObjs = [];\r
-var copyObjsCN = [];\r
-var copyObjsCount = 0;\r
-\r
-var nextContainerIndex;\r
-\r
-var nextRecord;\r
-var prevRecord;\r
-\r
-var rdetailPrev = null;\r
-var rdetailNext = null;\r
-var rdetailStart = null;\r
-var rdetailEnd = null;\r
-\r
-if(location.href.match(/&place_hold=1/)) {\r
-    // prevent load flicker between canvases\r
-    hideMe(dojo.byId('canvas_main'));\r
-}\r
-\r
-/* serials are currently the only use of Dojo strings in the OPAC */\r
-       if (rdetailDisplaySerialHoldings) {\r
-               dojo.require("dijit.Menu");\r
-               dojo.require("dijit.form.Button");\r
-               dojo.requireLocalization("openils.opac", "opac");\r
-               opac_strings = dojo.i18n.getLocalization("openils.opac", "opac");\r
-       }\r
-}\r
-\r
-function rdetailReload() {\r
-       var args = {};\r
-       args[PARAM_LOCATION] = getNewSearchLocation();\r
-       args[PARAM_DEPTH] = depthSelGetDepth();\r
-       goTo(buildOPACLink(args));\r
-}\r
-\r
-/* looks to see if we have a next and/or previous record in the\r
-   record cache, if so, set up the nav links */\r
-function rdetailSetPaging(ids) {\r
-\r
-       cachedRecords = {};\r
-       cachedRecords.ids = ids;\r
-\r
-       for( var i = 0; i < cachedRecords.ids.length; i++ ) {\r
-               var rec = cachedRecords.ids[i];\r
-               if( rec == getRid() ) {\r
-                       if( i > 0 ) prevRecord = cachedRecords.ids[i-1];\r
-                       if( i < cachedRecords.ids.length - 1 )\r
-                               nextRecord = cachedRecords.ids[i+1];\r
-                       break;\r
-               }\r
-       }\r
-\r
-       $('np_offset').appendChild(text(i + 1));\r
-       $('np_count').appendChild(text(getHitCount()));\r
-\r
-       if(prevRecord) {\r
-               //unHideMe($('np_table'));\r
-               unHideMe($('rdetail_result_count'));\r
-               unHideMe($('np_prev'));\r
-               unHideMe($('np_start'));\r
-               rdetailPrev = function() { _rdetailNav(prevRecord); };\r
-               rdetailStart = function() { _rdetailNav(cachedRecords.ids[0]); };\r
-       }\r
-\r
-       if(nextRecord) {\r
-               //unHideMe($('np_table'));\r
-               unHideMe($('rdetail_result_count'));\r
-               unHideMe($('np_next'));\r
-               unHideMe($('np_end'));\r
-               rdetailNext = function() { _rdetailNav(nextRecord); };\r
-               rdetailEnd = function() { _rdetailNav(cachedRecords.ids[cachedRecords.ids.length-1]); };\r
-       }\r
-\r
-       runEvt('rdetail', 'nextPrevDrawn', i, cachedRecords.ids.length);\r
-}\r
-\r
-\r
-function _rdetailNav(id, offset) {\r
-       var args = {};\r
-       args[PARAM_RID] = id;\r
-       goTo(buildOPACLink(args));\r
-}\r
-\r
-function rdetailHandlePlaceHold() {\r
-    function reload() {\r
-        location.href = location.href.replace(/&place_hold=1/, '');\r
-    }\r
-    attachEvt("common", "holdUpdated", reload);\r
-    attachEvt("common", "holdUpdateCanceled", reload);\r
-    attachEvt("common", "loginCanceled", reload);\r
-    holdsDrawEditor({record:getRid(), type: 'T'});\r
-}\r
-\r
-function ridPreDraw() {\r
-       if(isInAnonList(parseInt(getRid()))) {\r
-               var mylist = $('add_mylist');\r
-               mylist.innerHTML = 'Remove from my list';\r
-               mylist.title = 'Remove from my list';\r
-       }\r
-       \r
-       record = new mvr();\r
-       record.doc_id(getRid());\r
-       \r
-       fieldmapper.standardRequest(["open-ils.search","open-ils.search.biblio.record.copy_count"], {'params':[getLocation(), getRid(), getForm()], 'oncomplete':drawCopyCounts});\r
-}\r
-\r
-function rdetailDraw() {\r
-    if(new CGI().param('place_hold')) {\r
-       rdetailHandlePlaceHold();\r
-        return;\r
-    }\r
-\r
-       detachAllEvt('common','depthChanged');\r
-       detachAllEvt('common','locationUpdated');\r
-       attachEvt('common','depthChanged', rdetailReload);\r
-       attachEvt('common','locationUpdated', rdetailReload);\r
-       attachEvt('common','holdUpdated', rdetailReload);\r
-       attachEvt('common','holdUpdateCanceled', rdetailReload);\r
-\r
-       copyRowParent = G.ui.rdetail.cp_info_row.parentNode;\r
-       copyRow = copyRowParent.removeChild(G.ui.rdetail.cp_info_row);\r
-       statusRow = G.ui.rdetail.cp_status.parentNode;\r
-       statusRow.id = '__rdsrow';\r
-\r
-       G.ui.rdetail.cp_info_local.onclick = rdetailShowLocalCopies;\r
-       G.ui.rdetail.cp_info_all.onclick = rdetailShowAllCopies;\r
-       \r
-    $('rdetail_place_hold').onclick = function() {\r
-        var src = location.href;\r
-        if(forceLoginSSL && src.match(/^http:/)) {\r
-            src = src.replace(/^http:/, 'https:');\r
-            if(!src.match(/&place_hold=1/)) {\r
-                src += '&place_hold=1';\r
-            }\r
-            location.href = src;\r
-        } else {\r
-           holdsDrawEditor({record:record.doc_id(), type:'T'});\r
-        }\r
-    }\r
-       \r
-       if(getLocation() == globalOrgTree.id())\r
-               hideMe(G.ui.rdetail.cp_info_all);\r
-\r
-    if(getRid()) {\r
-               ridPreDraw();\r
-               marc = new MarcRecord(getRid());\r
-               drawMarcData();\r
-                  //var req = new Request(FETCH_RMODS, getRid());\r
-                  //req.callback(_rdetailDraw);  \r
-                  //req.send();  \r
\r
-    } else { // No record ID was specified\r
\r
-         // If we have an ISBN in the URL, let's try to find that record\r
-         // This allows direct linking by ISBN.\r
-         // Note, this uses the first record it finds\r
-         if(getRtype() == RTYPE_ISBN) {\r
-                  var req = fieldmapper.standardRequest(['open-ils.search','open-ils.search.biblio.isbn'], {'params':[getAdvTerm()]});\r
-                  if(req && req.count > 0) RID = req.ids[0];\r
-                  ridPreDraw();\r
-                  marc = new MarcRecord(getRid());\r
-                  drawMarcData();\r
-                  //var req2 = new Request(FETCH_RMODS, getRid());\r
-                  //req2.callback(_rdetailDraw);\r
-                  //req2.send();\r
-          }\r
-   }\r
-    \r
-       var isbn = cleanISBN(marc.marcObj["020"] ? marc.marcObj["020"][0]["a"][0] : (marc.marcObj["024"]?marc.marcObj["024"][0]["a"][0]:"0"));\r
-       $('rdetail_image').src = buildISBNSrc(isbn);\r
-       $('rdetail_img_link').href = buildISBNSrc(isbn, "large");\r
-       unHideMe($('rdetail_img_link'));\r
-       \r
-       $('content_cafe_summary').src="http://contentcafe2.btol.com/ContentCafeClient/ContentCafe.aspx?UserID=KC72927&Password=CC14647&ItemKey="+isbn+"&Options=Y";\r
-           // ChiliFresh\r
-    if (chilifresh && chilifresh != '(none)' && isbn) {\r
-        $('chilifreshReviewLink').setAttribute('id','isbn_'+isbn);\r
-        $('chilifreshReviewResult').setAttribute('id','chili_review_'+isbn);\r
-        try {\r
-            chili_init();\r
-               unHideMe($('rdetail_awards_link'));\r
-               unHideMe($('rdetail_chilifresh_reviews'));\r
-                       unHideMe($('rdetail_chilifresh_lbl'));\r
-        } catch(E) {\r
-            alert(E + '\n');\r
-        }\r
-    }\r
-       \r
-    // Novelist\r
-    if (novelist && isbn) {\r
-        unHideMe($('rdetail_awards_link'));\r
-               unHideMe($('rdetail_novelist_lbl'));\r
-               unHideMe($('rdetail_novelist_div'));\r
-               var isbnEl = elem("div",null,"ISBN "+isbn);\r
-               isbnEl.className = "hide_me";\r
-               document.body.appendChild(isbnEl);\r
-    }\r
-       \r
-       fieldmapper.standardRequest(["open-ils.search","open-ils.search.biblio.copy_counts.summary.retrieve"], {"async":true, "params":[getRid()], "oncomplete":function(r){\r
-           var res = []; if(r) res = r.recv(); if(res) res = res.content();\r
-               for(var i in res) {\r
-                 copyObjsCN[res[i][0]] = res[i][1];\r
-                 fieldmapper.standardRequest(["open-ils.search", "open-ils.search.asset.copy.retrieve_by_cn_label"], {"async":true, "params":[getRid(), res[i][1], res[i][0]], "oncomplete":getCopyIDs});\r
-               }\r
-       }});\r
-       \r
-runEvt("rdetail", "recordDrawn");\r
-\r
-       if (rdetailDisplaySerialHoldings) {\r
-               var req = new Request(FETCH_MFHD_SUMMARY, getRid());\r
-               req.callback(_holdingsDraw);\r
-               req.send();\r
-               if (isXUL()) {\r
-                       var here = findOrgUnit(getLocation());\r
-                       dojo.place("<div id='mfhd_ad_menu' class='hide_me'></div>", "rdetail_details_table", "after");\r
-                       var mfhd_add = new dijit.Menu({style:"float: right;"});\r
-                       new dijit.MenuItem({onClick:function(){\r
-                               var req = new Request(CREATE_MFHD_RECORD, G.user.session, 1, here.id(), getRid());\r
-                               var res = req.send();\r
-                               alert(dojo.string.substitute(opac_strings.CREATED_MFHD_RECORD, [here.name()]));\r
-                       }, label:opac_strings.CREATE_MFHD}).placeAt(mfhd_add);\r
-                       mfhd_add.placeAt('mfhd_ad_menu');\r
-               }\r
-       }\r
-\r
-       detachAllEvt("result", "idsReceived");\r
-       G.evt.result.hitCountReceived = [];\r
-       G.evt.result.recordReceived = [];\r
-       G.evt.result.copyCountsReceived = [];\r
-       G.evt.result.allRecordsReceived = [];\r
-       //unHideMe($('rdetail_copy_info_link'));\r
-}\r
-\r
-function getCopyIDs(r) {\r
-  var res = []; if(r) res = r.recv(); if(res) res = res.content();\r
-  copyObjsCount += res.length;\r
-  if(res.length) fieldmapper.standardRequest(["open-ils.search", "open-ils.search.asset.copy.fleshed.batch.retrieve"], {"async":true, "params":[res], "oncomplete":getCopyObjs});\r
-}\r
-\r
-function getCopyObjs(r) {\r
-  var res = []; if(r) res = r.recv(); if(res) res = res.content();\r
-  if(res.length) copyObjs = copyObjs.concat(res);\r
-  if(copyObjs.length >= copyObjsCount) drawCopyStatusDetails();\r
-}\r
-\r
-function drawCopyStatusDetails() {\r
-  var tehTR = $('rdetails_status_head');\r
-  if(!tehTR) return;\r
-  var showLibCount = 5;\r
-  \r
-  if(getOrigLocation()) copyObjs.sort(function(a,b) {\r
-       if(a.circ_lib().id()==getOrigLocation()) return -1;\r
-       if(b.circ_lib().id()==getOrigLocation()) return 1;\r
-       return a.circ_lib().name().toLowerCase()>=b.circ_lib().name().toLowerCase()?1:-1;\r
-  }); else copyObjs.sort(function(a,b){\r
-       return a.circ_lib().name().toLowerCase()>=b.circ_lib().name().toLowerCase()?1:-1;\r
-  });\r
-  \r
-  if(copyObjs.length) unHideMe($('rdetails_status'));\r
-  for(var i in copyObjs) {\r
-       var obj = copyObjs[i];\r
-       if(!isTrue(obj.circ_lib().opac_visible())) { showLibCount++; continue; }\r
-       var par = i<showLibCount?tehTR.parentNode:$('rdetails_status2');\r
-       var newRow = elem('tr');\r
-       var lib_td = elem('td',{nowrap:"nowrap"});\r
-       var url = mapLibUrl(obj.circ_lib().id()+"");\r
-       var libLink = null;\r
-       if(!url) libLink = elem('span', null, obj.circ_lib().name());\r
-       else libLink = elem('a',{"href":url, "title":"View information about the "+obj.circ_lib().name()+" library"}, obj.circ_lib().name());\r
-       lib_td.appendChild(libLink);\r
-       var status = elem('td',{"nowrap":"nowrap", "id":"copy_status_"+obj.id()});\r
-       \r
-       newRow.appendChild(lib_td);\r
-       newRow.appendChild(elem('td',{nowrap:"nowrap"},copyObjsCN[obj.circ_lib().id()]));\r
-       newRow.appendChild(elem('td',{nowrap:"nowrap"},obj.location().name()));\r
-       newRow.appendChild(elem('td',{nowrap:"nowrap"},obj.status().name()));\r
-       newRow.appendChild(status);\r
-       par.appendChild(newRow);\r
-       \r
-       if(obj.status().id()==1)\r
-               fieldmapper.standardRequest(["open-ils.circ","open-ils.circ.copy.due_date.retrieve"], {"params":[obj.id()], "oncomplete":drawCopyStatus});\r
-  }\r
-  if(copyObjs.length>showLibCount) unHideMe($('rdetail_locs_expand'));\r
-}\r
-\r
-function drawCopyStatus(r) {\r
-  var res = null; if(r) res = r.recv(); if(res) res = res.content();\r
-  if(!res) return;\r
-  var cell = $("copy_status_"+r.params[0]);\r
-  if(cell) cell.innerHTML = dojo.date.locale.format(dojo.date.stamp.fromISOString(res), {selector:'date', fullYear: true, datePattern:"M-d-yyyy"});\r
-}\r
-\r
-function rdetailGetPageIds() {\r
-       attachEvt("result", "idsReceived", rdetailSetPaging );\r
-       resultFetchAllRecords = true;\r
-       rresultCollectIds(true);\r
-}\r
-\r
-function buildunAPISpan (span, type, id) {\r
-       var cgi = new CGI();\r
-       var d = new Date();\r
-\r
-       addCSSClass(span,'unapi-id');\r
-\r
-       span.setAttribute(\r
-               'title', 'tag:' + cgi.server_name + ',' +\r
-               d.getFullYear() + ':' + type + '/' + id\r
-       );\r
-}\r
-\r
-function rdetailViewMarc(r,id) {\r
-       hideMe($('rdetail_extras_loading'));\r
-       $('rdetail_view_marc_box').innerHTML = r.getResultObject();\r
-\r
-       var div = elem('div', { "class" : 'hide_me' });\r
-       var span = div.appendChild( elem('abbr') );\r
-\r
-       buildunAPISpan( span, 'biblio-record_entry', getRid() );\r
-\r
-       $('rdetail_view_marc_box').insertBefore(span, $('rdetail_view_marc_box').firstChild);\r
-}\r
-\r
-\r
-function rdetailShowLocalCopies() {\r
-       rdetailShowLocal = true;\r
-       rdetailBuildInfoRows();\r
-       hideMe(G.ui.rdetail.cp_info_local);\r
-       unHideMe(G.ui.rdetail.cp_info_all);\r
-       hideMe(G.ui.rdetail.cp_info_none); \r
-}\r
-\r
-function rdetailShowAllCopies() {\r
-\r
-       rdetailShowLocal = false;\r
-       rdetailBuildInfoRows();\r
-       hideMe(G.ui.rdetail.cp_info_all);\r
-       unHideMe(G.ui.rdetail.cp_info_local);\r
-       hideMe(G.ui.rdetail.cp_info_none); \r
-}\r
-\r
-function OpenMarcEditWindow(pcrud, rec) {\r
-       /*\r
-          To run in Firefox directly, must set signed.applets.codebase_principal_support\r
-          to true in about:config\r
-        */\r
-       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');\r
-       win = window.open('/xul/server/cat/marcedit.xul'); // XXX version?\r
-       dojo.require('openils.PermaCrud');\r
-\r
-       win.xulG = {\r
-               "record": {"marc": rec.marc()},\r
-               "save": {\r
-                       "label": opac_strings.SAVE_MFHD_LABEL,\r
-                       "func": function(xmlString) {\r
-                               rec.marc(xmlString);\r
-                               rec.ischanged(true);\r
-                               pcrud.update(rec);\r
-                       }\r
-               }\r
-       };\r
-}\r
-\r
-function loadMarcEditor(recId) {\r
-       var pcrud = new openils.PermaCrud({"authtoken": G.user.session});\r
-       var rec = pcrud.retrieve("sre", recId);\r
-       if (rec) {\r
-               OpenMarcEditWindow(pcrud, rec);\r
-       }\r
-}\r
-\r
-/*\r
- * This function could be written much more intelligently\r
- * Limited brain power means that I'm brute-forcing it for now\r
- */\r
-function _holdingsDraw(h) {\r
-       holdings = h.getResultObject();\r
-       if (!holdings) { return null; }\r
-\r
-       dojo.forEach(holdings, _holdingsDrawMFHD);\r
-\r
-}\r
-\r
-function _holdingsDrawMFHD(holdings, entryNum) {\r
-\r
-        var here = findOrgUnit(getLocation());\r
-        if (getDepth() > 0 || getDepth === 0 ) {\r
-                while (getDepth() < findOrgDepth(here))\r
-                here = findOrgUnit( here.parent_ou() );\r
-               if (!orgIsMine(findOrgUnit(here), findOrgUnit(holdings.owning_lib()))) {\r
-                       return null;\r
-               }\r
-        }\r
-\r
-       var hh = holdings.basic_holdings_add();\r
-       var hch = holdings.basic_holdings();\r
-       var hs = holdings.supplement_holdings_add();\r
-       var hcs = holdings.supplement_holdings();\r
-       var hi = holdings.index_holdings_add();\r
-       var hci = holdings.index_holdings();\r
-       var ho = holdings.online();\r
-       var hm = holdings.missing();\r
-       var hinc = holdings.incomplete();\r
-       var hloc = holdings.location() || 'MFHD';\r
-\r
-       if (    hh.length == 0 && hch.length == 0 && hs.length == 0 &&\r
-               hcs.length == 0 && hi.length == 0 && hci.length == 0 &&\r
-               ho.length == 0 && hm.length == 0 && hinc.length == 0\r
-       ) {\r
-\r
-               if (isXUL()) {\r
-                       /* \r
-                        * If we have a record, but nothing to show for it, then the\r
-                        * record is likely empty or corrupt. This gives cataloguers a\r
-                        * chance to add holdings or correct the record\r
-                        */\r
-                       hh = 'PLACEHOLDER';\r
-               } else {\r
-                       return null;\r
-               }\r
-       }\r
-\r
-       dojo.place("<table style='width: 100%;'><caption id='mfhdHoldingsCaption" + entryNum + "' class='rdetail_header color_1'>" +\r
-               dojo.string.substitute(opac_strings.HOLDINGS_TABLE_CAPTION, [hloc]) +\r
-               "</caption><tbody id='rdetail_holdings_tbody_" + entryNum +\r
-               "'></tbody></table>", "rdetail_details_table", "after"\r
-       );\r
-       if (hh.length > 0)  { _holdingsDrawMFHDEntry(entryNum, opac_strings.HOLDINGS, hh); }\r
-       if (hch.length > 0) { _holdingsDrawMFHDEntry(entryNum, opac_strings.CURRENT_HOLDINGS, hch); }\r
-       if (hs.length > 0)  { _holdingsDrawMFHDEntry(entryNum, opac_strings.SUPPLEMENTS, hs); }\r
-       if (hcs.length > 0) { _holdingsDrawMFHDEntry(entryNum, opac_strings.CURRENT_SUPPLEMENTS, hcs); }\r
-       if (hi.length > 0)  { _holdingsDrawMFHDEntry(entryNum, opac_strings.INDEXES, hi); }\r
-       if (hci.length > 0) { _holdingsDrawMFHDEntry(entryNum, opac_strings.CURRENT_INDEXES, hci); }\r
-       if (ho.length > 0)  { _holdingsDrawMFHDEntry(entryNum, opac_strings.ONLINE_VOLUMES, ho); }\r
-       if (hm.length > 0)  { _holdingsDrawMFHDEntry(entryNum, opac_strings.MISSING_VOLUMES, hm); }\r
-       if (hinc.length > 0) { _holdingsDrawMFHDEntry(entryNum, opac_strings.INCOMPLETE_VOLUMES, hinc); }\r
-\r
-       if (isXUL()) {\r
-               dojo.require('openils.Event');\r
-               dojo.require('openils.PermaCrud');\r
-               var mfhd_edit = new dijit.Menu({});\r
-               new dijit.MenuItem({onClick: function(){loadMarcEditor(holdings.id())}, label:opac_strings.EDIT_MFHD_RECORD}).placeAt(mfhd_edit, "first");\r
-               new dijit.MenuItem({onClick:function(){\r
-                       var pcrud = new openils.PermaCrud({"authtoken": G.user.session});\r
-                       var mfhd_rec = pcrud.retrieve("sre", holdings.id());\r
-                       if (mfhd_rec) {\r
-                               pcrud.eliminate(mfhd_rec);\r
-                               alert(dojo.string.substitute(opac_strings.DELETED_MFHD_RECORD, [holdings.id()]));\r
-                       }\r
-               }, label:opac_strings.DELETE_MFHD}).placeAt(mfhd_edit, "last");\r
-               // new dijit.MenuItem({onClick:function(){alert("Edit properties " + holdings.id());}, label:opac_strings.EDIT_PROPERTIES}).placeAt(mfhd_edit, "last");\r
-               var mfhd_mb = new dijit.form.DropDownButton({dropDown: mfhd_edit, label:opac_strings.EDIT_MFHD_MENU, style:"float:right"});\r
-               mfhd_mb.placeAt("mfhdHoldingsCaption" + entryNum, "last");\r
-               mfhd_edit.startup();\r
-       }\r
-}\r
-\r
-function _holdingsDrawMFHDEntry(entryNum, entryName, entry) {\r
-       var flatEntry = entry.toString().replace(/,/g, ', ');\r
-       dojo.place("<tr><td> </td><td nowrap='nowrap' class='rdetail_desc'>" + entryName + "</td><td class='rdetail_item'>" + flatEntry + "</td></tr>", "rdetail_holdings_tbody_" + entryNum, "last");\r
-}\r
-\r
-function drawCopyCounts(r) {\r
-  var res = r.recv().content();\r
-  if(!res.length) return;\r
-  var str = "";\r
-  \r
-  var holdCnt = fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.bre.holds.count'], {"async":false, "params":[getRid()]});\r
-  str += holdCnt+' hold'+(holdCnt==1?'':'s')+' on first copy returned of '+res[0].count+' cop'+(res[0].count==1?'y':'ies')+'<br />';\r
-  str += res[0].available+' cop'+(res[0].available==1?'y':'ies')+' available';\r
-  $('rdetail_copies_avail').innerHTML = str;\r
-}\r
-\r
-function drawMarcData() {\r
-  marc.render("245", {"container":"rdetail_title", "showAGR":true, "sGlue":{"startStr":"<div>", "joinStr":" ", "endStr":"</div>"}});\r
-  marc.render("520", {"container":"rdetail_summary_container", "label":"rdetail_summary_link", "sGlue":{"joinStr":" "}});\r
-  marc.render("505", {"container":"rdetail_content_div_inner", "label":"rdetail_content_link", "sGlue":{"joinStr":" "}});\r
-  marc.render(["100", "110", "111"], {"container":"rdetail_author", "label":"author_lbl", "searchType":STYPE_AUTHOR, "skipCodes":"d"});\r
-  \r
-  // authors box\r
-  marc.render(["100", "110", "111"], {"container":"rdetail_authors_inner", "searchType":STYPE_AUTHOR, "label":["rdetail_authors_link", "authors_lbl"], "sGlue":{"joinStr":" ", "endStr":"<br />"}, "showAGR":true, "unlink":"d"});\r
-  marc.render(["700", "710", "711"], {"container":"rdetail_moar_authors", "searchType":STYPE_AUTHOR, "label":["rdetail_authors_link", "add_authors_lbl"], "sGlue":{"joinStr":" ", "endStr":"<br />"}, "unlink":"d"});\r
-  marc.render("508", {"container":"rdetail_credits", "searchType":STYPE_AUTHOR, "label":["rdetail_authors_link", "credits_lbl"]});\r
-  marc.render("511", {"container":"rdetail_cast", "searchType":STYPE_AUTHOR, "label":["rdetail_authors_link", "cast_lbl"]});\r
-  \r
-  // subject box\r
-  marc.render(["600", "610", "611", "630", "650", "651"], {"sGlue":{"joinStr":" -- ", "endStr":"<br />"}, "container":"rdetail_subject_container", "label":["rdetail_subject_link", "subject_lbl"], "searchType":STYPE_SUBJECT});\r
-  marc.render(["655", "695"], {"sGlue":{"joinStr":" -- ", "endStr":"<br />"}, "container":"rdetail_genre_cont", "label":["rdetail_subject_link", "genre_lbl"], "searchType":STYPE_SUBJECT});\r
-  marc.render("690", {"sGlue":{"joinStr":" -- ", "endStr":"<br />"}, "container":"rdetail_topic_cont", "label":["rdetail_subject_link", "topic_lbl"], "searchType":STYPE_SUBJECT});\r
-  marc.render("691", {"sGlue":{"joinStr":" -- ", "endStr":"<br />"}, "container":"rdetail_geo_cont", "label":["rdetail_subject_link", "geo_set_lbl"], "searchType":STYPE_SUBJECT});\r
-  marc.render("692", {"sGlue":{"joinStr":" -- ", "endStr":"<br />"}, "container":"rdetail_bio_cont", "label":["rdetail_subject_link", "bio_sub_lbl"], "searchType":STYPE_SUBJECT});\r
-  marc.render("693", {"sGlue":{"joinStr":" -- ", "endStr":"<br />"}, "container":"rdetail_attrib_cont", "label":["rdetail_subject_link", "char_attrib_lbl"], "searchType":STYPE_SUBJECT});\r
-  marc.render("698", {"sGlue":{"joinStr":" -- ", "endStr":"<br />"}, "container":"rdetail_setting_cont", "label":["rdetail_subject_link", "setting_lbl"], "searchType":STYPE_SUBJECT});\r
-  marc.render("699", {"sGlue":{"joinStr":" -- ", "endStr":"<br />"}, "container":"rdetail_time_cont", "label":["rdetail_subject_link", "time_lbl"], "searchType":STYPE_SUBJECT});\r
-\r
-  // series box\r
-  marc.render(['440','490','800','810','811','830','694'], {"showAGR":true, "container":"rdetail_series_container", "label":"rdetail_series_link", "searchType":STYPE_SERIES, "sGlue":{"joinStr":" -- ", "endStr":"<br />"}});\r
-  \r
-  // awards box\r
-  marc.render(["586", "697"], {"container":"rdetail_awards_cont", "label":"rdetail_awards_link", "showOnly":"a"});\r
-  \r
-  // details box\r
-  marc.render(["130", "240", "246", "730", "740"], {"container":"added_title", "label":["rdetail_details_link", "add_title_lbl"], "searchType":STYPE_KEYWORD, "sGlue":{"joinStr":" -- ", "endStr":"<br />"}});\r
-  marc.render("250", {"container":"rdetail_edition", "label":["rdetail_details_link", "edition_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});\r
-  marc.render("500", {"container":"rdetail_note", "label":["rdetail_details_link", "note_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});\r
-  marc.render("546", {"container":"rdetail_lang", "label":["rdetail_details_link", "lang_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});\r
-  marc.render("516", {"container":"comp_file_note", "label":["rdetail_details_link", "comp_note_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});\r
-  marc.render("538", {"container":"sys_details", "label":["rdetail_details_link", "sys_detail_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});\r
-  marc.render("507", {"container":"map_scale_note", "label":["rdetail_details_link", "map_scale_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});\r
-  marc.render("518", {"container":"rdetail_event", "label":["rdetail_details_link", "event_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});\r
-  marc.render("521", {"container":"audience", "label":["rdetail_details_link", "audience_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});\r
-  marc.render("530", {"container":"phys_form", "label":["rdetail_details_link", "phys_form_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});\r
-  marc.render("504", {"container":"rdetail_biblio", "label":["rdetail_details_link", "biblio_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});\r
-  marc.render("590", {"container":"local_note", "label":["rdetail_details_link", "local_note_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});\r
-  marc.render("506", {"container":"restrictions", "label":["rdetail_details_link", "restrict_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});\r
-  marc.render("780", {"container":"continues", "label":["rdetail_details_link", "continues_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});\r
-  marc.render("785", {"container":"cont_by", "label":["rdetail_details_link", "cont_by_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});\r
-  \r
-  marc.render(["092", "099"], {"container":"rdetail_callnum", "label":"callnum_lbl", "sGlue":{"joinStr":" ", "endStr":" "}});\r
-  marc.render("260", {"container":"rdetail_pubdate", "label":"pubdate_lbl", "showOnly":"c"});\r
-  marc.render("300", {"container":"rdetail_physical_desc", "label":"phys_desc_lbl", "sGlue":{"joinStr":" "}});\r
-  marc.render("260", {"container":"rdetail_publisher", "label":"publisher_lbl", "showAGR":true, "showOnly":["a", "b"], "sGlue":{"joinStr":" ", "endStr":"<br />"}});\r
-  marc.render("856", {"container":"online_resources", "label":"online_res_lbl", "linkSrc":"u", "linkText":["z", "y", "3"], "fGlue":{"joinStr":"<br />"}});\r
-  \r
-  var code = marc.render("998", {"showOnly":"d"});\r
-  var imgEl = $("rdetail_tor_pic");\r
-  if(setFormatIcon(imgEl, code)) unHideMe(imgEl);\r
-  \r
-/*\r
-  \r
-  if(marcObj["856"]) {\r
-         var online = $('online_resources');\r
-         var m856 = marcObj["856"];\r
-         for(var i in m856) {\r
-                 var url = m856[i]["u"] || "";\r
-                 online.appendChild(elem('a', {"href":url}, (m856[i]["z"] | m856[i]["y"] | m856[i]["3"])));  // should only be one of z, y, 3\r
-                 online.appendChild(elem('br'));\r
-         }\r
-  }\r
-*/\r
-}\r
-\r
-function _rdetailDraw(r) {\r
-       record = r.getResultObject();\r
-       runEvt('rdetail', 'recordRetrieved', record.doc_id());\r
-       \r
-       if(isInAnonList(parseInt(record.doc_id()))) { \r
-               $('add_mylist').innerHTML = 'Remove from my list';\r
-               $('add_mylist').title = 'Remove from my list';\r
-       }\r
-\r
-       G.ui.rdetail.title.appendChild(text(record.title()));\r
-       buildSearchLink(STYPE_AUTHOR, record.author(), G.ui.rdetail.author);\r
-       if(record.isbn()) { unHideMe($('rdetail_isbn_lbl')); G.ui.rdetail.isbn.appendChild(text(cleanISBN(record.isbn()))); }\r
-       if(record.edition()) { unHideMe($('rdetail_ed_lbl')); G.ui.rdetail.edition.appendChild(text(record.edition())); }\r
-       if(record.pubdate()) { unHideMe($('rdetail_pubdate_lbl')); G.ui.rdetail.pubdate.appendChild(text(record.pubdate())); }\r
-       if(record.publisher()) { unHideMe($('rdetail_pub_lbl')); G.ui.rdetail.publisher.appendChild(text(record.publisher())); }\r
-       if(record.physical_description()) { unHideMe($('rdetail_phys_lbl')); $('rdetail_physical_desc').appendChild(text(record.physical_description())); }\r
-       $('content_cafe_summary').src="http://contentcafe2.btol.com/ContentCafeClient/ContentCafe.aspx?UserID=KC72927&Password=CC14647&ItemKey="+cleanISBN(record.isbn())+"&Options=Y";\r
-       \r
-       var code = getMarcData(record.doc_id(),"998","d");\r
-       var imgEl = $("rdetail_tor_pic");\r
-       \r
-       if(code) { unHideMe($('rdetail_form_lbl')); G.ui.rdetail.tor.innerHTML = get998dValue(code); }\r
-       //if(record.synopsis()) { unHideMe($('rdetail_sum_lbl')); G.ui.rdetail.abstr.appendChild(text(record.synopsis())); }\r
-       if(setFormatIcon(imgEl, code)) unHideMe(imgEl);\r
-       \r
-       try{\r
-               if(record.isbn()) {\r
-                       if(ENABLE_ADDED_CONTENT_ATTRIB_LINKS) {\r
-                               unHideMe($('rdetail.jacket_attrib_div'));\r
-                               var href = $('rdetail.jacket_attrib_link').getAttribute('href') +cleanISBN(record.isbn());\r
-                               $('rdetail.jacket_attrib_link').setAttribute('href', href);\r
-                       }\r
-                       rdetailCheckForGBPreview();\r
-\r
-               } else {\r
-                       //hideMe($("rdetail.jacket_attrib_div"));\r
-                       //hideMe($("rdetail_img_link"));\r
-               }\r
-       } catch(E) {}\r
-\r
-\r
-       // see if the record has any external links \r
-       var links = record.online_loc();\r
-       for( var i = 0; links && links.length > 0 && i < links.length; i = i + 3 ) {\r
-               var href = links[i];\r
-               // avoid matching "HTTP: The Complete Reference"\r
-               if( href.match(/https?:\/|ftps?:\/|mailto:/i) ) {\r
-                       unHideMe($('rdetail_online_row'));\r
-                       // MODS can contain a display label (used for the text of the link)\r
-                       // as well as a note about the URL; many legacy systems conflate the\r
-                       // two and generate MARC records that expect the note to be used as\r
-                       // the text of the link, with no display label; here's the canonical\r
-                       // format:\r
-                       //\r
-                       // 856 40 $uhttp://localhost$yDisplay label$zPublic note\r
-                       //\r
-                       // Note that the MARC21slim2MODS XSL concatenates $3 and $y together\r
-                       // (as $y was defined later in MARC21's life as the display label)\r
-                       var displayLabel = '' + links[i+1];\r
-                       var note = '' + links[i+2];\r
-                       if(!displayLabel || displayLabel.match(/https?:\/|ftps?:\/|mailto:/i)) {\r
-                               if(!note || note.match(/https?:\/|ftps?:\/|mailto:/i)) {\r
-                                       displayLabel = href;\r
-                               } else {\r
-                                       displayLabel = note;\r
-                               }\r
-                       }\r
-                       $('rdetail_online').appendChild(elem('a', {href:href,'class':'classic_link'}, displayLabel));\r
-                       if (note && note != displayLabel) {\r
-                               $('rdetail_online').appendChild(elem('span', {'class':'url_note'}, ' - ' + note));\r
-                       }\r
-                       $('rdetail_online').appendChild(elem('br'));\r
-               }\r
-       }\r
-\r
-       // Fill in our unAPI ID, if anyone cares\r
-       var abbrs = document.getElementsByTagName('abbr');\r
-       var span;\r
-       for (var i = 0; i < abbrs.length; i = i + 1) {\r
-               if (abbrs[i].getAttribute('name') == 'unapi') {\r
-                       span = abbrs[i];\r
-                       break;\r
-               }\r
-       }\r
-       buildunAPISpan( span, 'biblio-record_entry', record.doc_id() );\r
-\r
-       var RW = $('rdetail_exp_refworks');\r
-       if (RW && rdetailEnableRefWorks) {\r
-\r
-               var here = (findOrgUnit(getLocation())).name();\r
-               var org_name = here.replace(" ", "+");\r
-               var cgi = new CGI();\r
-\r
-               RW.setAttribute(\r
-                       'href',\r
-                       rdetailRefWorksHost + '/express/expressimport.asp?vendor='\r
-                       + org_name\r
-                       + '&filter=MARC+Format&database=All+MARC+Formats&encoding=65001&url=http%3A%2F%2F'\r
-                       + cgi.server_name + '/opac/extras/supercat/marctxt/record/'\r
-                       + record.doc_id()\r
-              );\r
-\r
-               RW.setAttribute('target', 'RefWorksMain');\r
-               unHideMe($('rdetail_exp_refworks_span'));\r
-       }\r
-\r
-       //$('rdetail_img_link').setAttribute('href', buildISBNSrc(cleanISBN(record.isbn()), 'large'));\r
-       //G.ui.rdetail.image.setAttribute("src", buildISBNSrc(cleanISBN(record.isbn())));\r
-       runEvt("rdetail", "recordDrawn");\r
-       recordsCache.push(record);\r
-\r
-       rdetailSetExtrasSelector();\r
-\r
-       var breq = new Request(FETCH_BRE, [getRid()]);\r
-       breq.callback( rdetailCheckDeleted );\r
-       breq.send();\r
-\r
-       //resultBuildCaches( [ record ] );\r
-       //resultDrawSubjects();\r
-       //resultDrawSeries();\r
-\r
-       // grab added content \r
-       acCollectData(cleanISBN(record.isbn()), rdetailhandleAC);\r
-       \r
-       var currentISBN = cleanISBN(record.isbn());\r
-       \r
-\r
-\r
-       var it = getCacheValue('showHoldEditor');\r
-       if(it) {\r
-               setCacheValue('showHoldEditor', null);\r
-               holdsDrawEditor({record:it.record, type:it.type});\r
-       }\r
-}\r
-\r
-\r
-\r
-function rdetailCheckDeleted(r) {\r
-       var br = r.getResultObject()[0];\r
-       if( isTrue(br.deleted()) ) {\r
-               hideMe($('rdetail_place_hold'));\r
-               $('rdetail_more_actions_selector').disabled = true;\r
-               unHideMe($('rdetail_deleted_exp'));\r
-       }\r
-}\r
-\r
-function rdetailSetExtrasSelector() {\r
-       if(!grabUser()) return;\r
-       unHideMe($('rdetail_more_actions'));\r
-\r
-       var req = new Request( \r
-                       FETCH_CONTAINERS, G.user.session, G.user.id(), 'biblio', 'bookbag' );\r
-       req.callback(rdetailAddBookbags);\r
-       req.send();\r
-}\r
-\r
-var myListsFetched = false;\r
-var selectedItem = null;\r
-function addMyList(id) {\r
-       if(!id) id = record.doc_id();\r
-       //if(!grabUser()) { alert("Please login first"); goTo(buildOPACLink({page:MYOPAC}, false, true)); return; }\r
-       \r
-       var holdsLink = $n($('result_table_template_'+id), 'result_my_list_link');\r
-       if(!holdsLink) holdsLink = $('add_mylist');\r
-       var lbl = $('myListLabel');\r
-       var title = "";\r
-       if(_resultFindRec) title = _resultFindRec(id);\r
-       if(title) title = title.title();\r
-       if(lbl) lbl.innerHTML = title; else lbl.innerHTML = "";\r
-       \r
-       //if(!grabUser()) {\r
-               isCacheListDrawn = false;\r
-               for(var i in anonListCache) {\r
-                       if(anonListCache[i] == id) {\r
-                               anonListCache.splice(i, 1);\r
-                               setCacheValue('anonListCache', anonListCache);\r
-                               if(!anonListCache.length) hideMe($('cacheListLink'));\r
-                               if(holdsLink) {\r
-                                       holdsLink.innerHTML = 'Add to my list';\r
-                                       //holdsLink.appendChild(elem('img', {src:'/opac/skin/kcls/graphics/add_mylist.gif'}, null));\r
-                                       holdsLink.title = "Add to my list";\r
-                               }\r
-                               return;\r
-                       }\r
-               }       \r
-\r
-               anonListCache.push(id);\r
-               setCacheValue('anonListCache', anonListCache);\r
-               unHideMe($('cacheListLink'));\r
-               if(holdsLink) {\r
-                       holdsLink.innerHTML = 'Remove from my list';\r
-                       //holdsLink.appendChild(elem('img', {src:'/opac/skin/kcls/graphics/add_mylist_sel.gif'}, null));\r
-                       holdsLink.title = "Remove from my list";\r
-               }\r
-               return;\r
-       //}\r
-       \r
-       selectedItem = id;\r
-       var selector = $('mylist_selector');\r
-       \r
-       if(findCurrentPage()==RDETAIL) {\r
-               unHideMe($('rdetail_more_actions_selector'));\r
-       } else if(findCurrentPage()==RRESULT) {\r
-               hideResultsPage(true);\r
-               unHideMe($('mylist_div'));\r
-       }\r
-       if(!myListsFetched) {\r
-               myListsFetched = true;\r
-               var req = new Request(FETCH_CONTAINERS, G.user.session, G.user.id(), 'biblio', 'bookbag' );\r
-               req.callback(showMyLists);\r
-               req.send();\r
-       }\r
-}\r
-\r
-function saveMyList() {\r
-       if(!selectedItem) return true;\r
-       var newList = $('mylist_new');\r
-       if(!newList) return true;\r
-       \r
-       var selector = $('mylist_selector');\r
-       if(!selector.options.length && !newList.value) { alert('Please choose a name for the new list'); newList.focus(); return false; }\r
-\r
-       if(newList.value) {\r
-               var id;\r
-               var name = newList.value\r
-               if(id = containerCreate(name)) {\r
-                       selector.options.length=0;\r
-                       if(!selector.options.length) {\r
-                               unHideMe($('myListSelect'));\r
-                               var req = new Request(FETCH_CONTAINERS, G.user.session, G.user.id(), 'biblio', 'bookbag' );\r
-                               req.callback(showMyLists);\r
-                               req.send();\r
-                       }\r
-                       if(containerCreateItem(id, selectedItem)) {\r
-                               alert('Item successfully added to list');\r
-                               newList.value = "";\r
-                       } else { return false; }\r
-               } else { return false; }\r
-       } else { //save to selected list\r
-               var selectedID = selector.options[selector.selectedIndex].value;\r
-               if(containerCreateItem(selectedID, selectedItem)) {\r
-                       alert('Item successfully added to list');\r
-                       newList.value = "";\r
-               } else { return false; }\r
-       }\r
-       \r
-       if(findCurrentPage()==RDETAIL) {\r
-               hideMe($('rdetail_more_actions_selector'));\r
-       } else if(findCurrentPage()==RRESULT) {\r
-               hideResultsPage(false);\r
-       }\r
-       return true;\r
-}\r
-\r
-function showMyLists(r) {\r
-       var containers = r.getResultObject();\r
-       var selector = $('mylist_selector');\r
-\r
-       for( var i = 0; i != containers.length; i++ ) {\r
-               var container = containers[i];\r
-               insertSelectorVal( selector, i, container.name(), container.id(), null, 0 );\r
-       }\r
-       if(!selector.options.length) hideMe($('myListSelect'));\r
-}\r
-\r
-\r
-function rdetailAddBookbags(r) {\r
-\r
-       var containers = r.getResultObject();\r
-       var selector = $('rdetail_more_actions_selector');\r
-       var found = false;\r
-       var index = 3;\r
-       doSelectorActions(selector);\r
-\r
-       for( var i = 0; i != containers.length; i++ ) {\r
-               found = true;\r
-               var container = containers[i];\r
-               insertSelectorVal( selector, index++, container.name(), \r
-                               "container_" + container.id(), rdetailAddToBookbag,  1 );\r
-       }\r
-\r
-       nextContainerIndex = index;\r
-}\r
-\r
-var _actions = {};\r
-function rdetailNewBookbag() {\r
-       var name = prompt($('rdetail_bb_new').innerHTML,"");\r
-       if(!name) return;\r
-\r
-       var id;\r
-       if( id = containerCreate( name ) ) {\r
-               alert($('rdetail_bb_success').innerHTML);\r
-               var selector = $('rdetail_more_actions_selector');\r
-               insertSelectorVal( selector, nextContainerIndex++, name, \r
-                               "container_" + id, rdetailAddToBookbag, 1 );\r
-               setSelector( selector, 'start' );\r
-       }\r
-}\r
-\r
-\r
-function rdetailAddToBookbag() {\r
-       var selector = $('rdetail_more_actions_selector');\r
-       var id = selector.options[selector.selectedIndex].value;\r
-       setSelector( selector, 'start' );\r
-\r
-       if( containerCreateItem( id.substring(10), record.doc_id() )) {\r
-               alert($('rdetail_bb_item_success').innerHTML);\r
-       }\r
-}\r
-\r
-function rdetailShowAllExtras(bool) {\r
-       var nodes = jQuery('.rdetail_extras').filter(function(){ return jQuery(this).css('display')=='block';});\r
-       nodes.each(function(){\r
-               rdetailShowExtra(this.getAttribute("rel2"));\r
-               var node = $(this.getAttribute("rel"));\r
-               if(bool) unHideMe(node); else hideMe(node);\r
-       });\r
-}\r
-\r
-\r
-var rdetailMarcFetched = false;\r
-function rdetailShowExtra(type, args) {\r
-       var obj = jQuery('[rel2='+type+']').get()[0];\r
-       var node = $(obj.getAttribute('rel'));\r
-       var arrow = $(obj.getAttribute('rel')+"_arrow");\r
-       if(jQuery(node).css('display')=='block') {\r
-               hideMe(node);\r
-               arrow.src="/opac/skin/kcls/graphics/rdetail_arrow.png";\r
-       } else {\r
-               unHideMe(node);\r
-               arrow.src="/opac/skin/kcls/graphics/rdetail_arrow_down.png";\r
-       }\r
-\r
-       removeCSSClass($('rdetail_copy_info_link'), 'rdetail_extras_selected');\r
-       removeCSSClass($('rdetail_viewcn_link'), 'rdetail_extras_selected');\r
-       removeCSSClass($('rdetail_reviews_link'), 'rdetail_extras_selected');\r
-       removeCSSClass($('rdetail_toc_link'), 'rdetail_extras_selected');\r
-       removeCSSClass($('rdetail_excerpt_link'), 'rdetail_extras_selected');\r
-       removeCSSClass($('rdetail_preview_link'), 'rdetail_extras_selected');\r
-       removeCSSClass($('rdetail_anotes_link'), 'rdetail_extras_selected');\r
-       removeCSSClass($('rdetail_annotation_link'), 'rdetail_extras_selected');\r
-       removeCSSClass($('rdetail_viewmarc_link'), 'rdetail_extras_selected');\r
-       removeCSSClass($('rdetail_novelist_link'), 'rdetail_extras_selected');\r
-\r
-       switch(type) {\r
-\r
-               case "copyinfo": \r
-                       addCSSClass($('rdetail_copy_info_link'), 'rdetail_extras_selected');\r
-                       break;\r
-\r
-               case "reviews": \r
-                       addCSSClass($('rdetail_reviews_link'), 'rdetail_extras_selected');\r
-                       break;\r
-\r
-               case "excerpt": \r
-                       addCSSClass($('rdetail_excerpt_link'), 'rdetail_extras_selected');\r
-                       break;\r
-\r
-               case "preview": \r
-                       addCSSClass($('rdetail_preview_link'), 'rdetail_extras_selected');\r
-                       rdetailDisplayGBPreview();\r
-                       break;\r
-\r
-               case "anotes": \r
-                       addCSSClass($('rdetail_anotes_link'), 'rdetail_extras_selected');\r
-                       break;\r
-\r
-               case "toc": \r
-                       addCSSClass($('rdetail_toc_link'), 'rdetail_extras_selected');\r
-                       break;\r
-\r
-               case "marc": \r
-                       addCSSClass($('rdetail_viewmarc_link'), 'rdetail_extras_selected'); \r
-                       if(rdetailMarcFetched) return;\r
-                       unHideMe($('rdetail_extras_loading'));\r
-                       rdetailMarcFetched = true;\r
-                       var req = new Request( FETCH_MARC_HTML, getRid());\r
-                       req.callback(rdetailViewMarc); \r
-                       req.send();\r
-                       break;\r
-\r
-               case "novelist": \r
-                       addCSSClass($('rdetail_novelist_link'), 'rdetail_extras_selected');\r
-                       break;\r
-\r
-               case 'cn':\r
-                       addCSSClass($('rdetail_viewcn_link'), 'rdetail_extras_selected');\r
-                       rdetailShowCNBrowse(defaultCN, getLocation(), null, true);\r
-                       break;\r
-\r
-       }\r
-}\r
-\r
-function rdetailVolumeDetails(args) {\r
-       var row = $(args.rowid);\r
-       var tbody = row.parentNode;\r
-       cpdBuild( tbody, row, record, args.cn, args.org, args.depth, args.copy_location );\r
-       return;\r
-}\r
-\r
-function rdetailBuildCNList() {\r
-\r
-       var select = $('cn_browse_selector');\r
-       var index = 0;\r
-       var arr = [];\r
-       for( var cn in callnumberCache ) arr.push( cn );\r
-       arr.sort();\r
-\r
-       if( arr.length == 0 ) {\r
-               hideMe($('rdetail_cn_browse_select_div'));\r
-               return;\r
-       }\r
-\r
-       for( var i in arr ) {\r
-               var cn = arr[i];\r
-               var opt = new Option(cn);\r
-               select.options[index++] = opt;\r
-       }\r
-       select.onchange = rdetailGatherCN;\r
-}\r
-\r
-function rdetailGatherCN() {\r
-       var cn = getSelectorVal($('cn_browse_selector'));\r
-       rdetailShowCNBrowse( cn, getLocation(), getDepth(), true );\r
-       setSelector( $('cn_browse_selector'), cn );\r
-}\r
-\r
-\r
-function rdetailShowCNBrowse( cn, loc, depth, fromOnclick ) {\r
-\r
-       if(!cn) {\r
-               unHideMe($('cn_browse_none'));\r
-               hideMe($('rdetail_cn_browse_select_div'));\r
-               return;\r
-       }\r
-\r
-       unHideMe($('rdetail_cn_browse_select_div'));\r
-       rdetailBuildCNList();\r
-       setSelector( $('cn_browse_selector'), cn );\r
-       //hideMe($('rdetail_copy_info_div'));\r
-       //hideMe($('rdetail_reviews_div'));\r
-       //hideMe($('rdetail_toc_div'));\r
-       //hideMe($('rdetail_marc_div'));\r
-       //unHideMe($('rdetail_cn_browse_div'));\r
-       unHideMe($('cn_browse'));\r
-       if( !rdetailLocalOnly && ! fromOnclick ) depth = findOrgDepth(globalOrgTree);\r
-       cnBrowseGo(cn, loc, depth);\r
-}\r
-\r
-function rdetailhandleAC(data) {\r
-\r
-       if( data.reviews.html ) {\r
-               $('rdetail_review_container').innerHTML = data.reviews.html;\r
-               unHideMe($('rdetail_awards_link'));\r
-       }\r
-\r
-       if( data.toc.html ) {\r
-               $('rdetail_toc_div').innerHTML = data.toc.html;\r
-               unHideMe($('rdetail_content_link'));\r
-       }\r
-\r
-       if( data.excerpt.html ) {\r
-               $('rdetail_excerpt_div').innerHTML = data.excerpt.html;\r
-               unHideMe($('rdetail_excerpt_link'));\r
-       }\r
-\r
-       if( data.anotes.html ) {\r
-               $('rdetail_anotes_div').innerHTML = data.anotes.html;\r
-               unHideMe($('rdetail_authors_link'));\r
-       }\r
-}\r
-\r
-function rdetailShowReviews(r) {\r
-       hideMe($('rdetail_extras_loading'));\r
-       var res = r.getResultObject();\r
-       var par = $('rdetail_reviews_div');\r
-       var template = par.removeChild($('rdetail_review_template'));\r
-       if( res && res.length > 0 ) {\r
-               unHideMe($('rdetail_reviews_link'));\r
-               for( var i = 0; i != res.length; i++ ) {\r
-                       var rev = res[i];\r
-                       if( rev.text && rev.info ) {\r
-                               var node = template.cloneNode(true);\r
-                               $n(node, 'review_header').appendChild(text(rev.info));\r
-                               $n(node, 'review_text').appendChild(text(rev.text));\r
-                               par.appendChild(node);\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-\r
-function rdetailShowTOC(r) {\r
-       hideMe($('rdetail_extras_loading'));\r
-       var resp = r.getResultObject();\r
-       if(resp) {\r
-               unHideMe($('rdetail_content_link'));\r
-               $('rdetail_toc_div').innerHTML = resp;\r
-       }\r
-}\r
-\r
-function rdetailBuildInfoRows() {\r
-       var req;\r
-       var method = FETCH_COPY_COUNTS_SUMMARY;\r
-       if (rdetailShowCopyLocation)\r
-               method = FETCH_COPY_LOCATION_COUNTS_SUMMARY;\r
-\r
-\r
-       if( rdetailShowLocal ) \r
-               req = new Request(method, getRid(), 1, 0)\r
-       else\r
-               req = new Request(method, getRid());\r
-       req.callback(_rdetailBuildInfoRows);\r
-       req.send();\r
-}\r
-\r
-function _rdetailRows(node) {\r
-\r
-       if( rdetailShowLocal && /*getLocation()*/1 != globalOrgTree.id() ) {\r
-               var loc = findOrgUnit(1/*getLocation()*/);\r
-               if( node ) {\r
-                       if( !orgIsMine(node, loc) && !orgIsMine(loc,node) ) return;\r
-               } else {\r
-                       for( var i = 0; i < globalOrgTree.children().length; i++ ) {\r
-                               var org = findOrgUnit(globalOrgTree.children()[i]);\r
-                               if( orgIsMine(org, loc) ) {\r
-                                       node = org;\r
-                                       break;\r
-                               }\r
-                       }\r
-               } \r
-       }\r
-\r
-       if(!node && findOrgType(globalOrgTree.ou_type()).can_have_vols())\r
-               node = globalOrgTree;\r
-\r
-\r
-       /* don't show hidden orgs */\r
-\r
-       if(node) {\r
-\r
-               //if(!isXUL() && !isTrue(node.opac_visible())) return;\r
-               if(!isXUL() && !isTrue(node.opac_visible())) {\r
-                       // locally suppressed orgs should appear in the copy summary\r
-                       if(!localSuppressedOrgs[node.id()]) {  // indexOf() on user arrays isn't supported on <= IE8\r
-                               return; \r
-                       }\r
-        }\r
-               \r
-               // , 1555:true, 1499:true, 1510:true, 1538:true\r
-\r
-               var row = copyRow.cloneNode(true);\r
-               row.id = "cp_info_" + node.id();\r
-\r
-               var libtd = findNodeByName( row, config.names.rdetail.lib_cell );\r
-               var cntd  = findNodeByName( row, config.names.rdetail.cn_cell );\r
-               var cpctd = findNodeByName( row, config.names.rdetail.cp_count_cell );\r
-               var actions = $n(row, 'rdetail_actions_cell');\r
-\r
-               var p = libtd.getElementsByTagName('a')[0];\r
-               libtd.insertBefore(text(node.name()), p);\r
-               libtd.setAttribute("style", "padding-left: " + ((findOrgDepth(node) - 1)  * 9) + "px;");\r
-\r
-               if(!findOrgType(node.ou_type()).can_have_vols()) {\r
-\r
-                       row.removeChild(cntd);\r
-                       row.removeChild(cpctd);\r
-                       row.removeChild(actions);\r
-                       row.setAttribute('novols', '1');\r
-\r
-                       libtd.setAttribute("colspan", numStatuses + 3 );\r
-                       libtd.colSpan = numStatuses + 3;\r
-                       addCSSClass(row, 'copy_info_region_row');\r
-               } \r
-\r
-               copyRowParent.appendChild(row);\r
-\r
-       } else { node = globalOrgTree; }\r
-\r
-       for( var c in node.children() ) \r
-               _rdetailRows(node.children()[c]);\r
-}\r
-\r
-function rdetailCNPrint(orgid, cn) {\r
-       var div = cpdBuildPrintWindow( record, orgid);\r
-       var template = div.removeChild($n(div, 'cnrow'));\r
-       var rowNode = $("cp_info_" + orgid);\r
-       cpdStylePopupWindow(div);\r
-       openWindow(div.innerHTML);\r
-}\r
-\r
-var localCNFound = false;\r
-var ctr = 0;\r
-function _rdetailBuildInfoRows(r) {\r
-\r
-       if (rdetailShowCopyLocation)\r
-               unHideMe( $n( $('rdetail_copy_info_table'), 'rdetail_copylocation_header' ));\r
-\r
-       removeChildren(copyRowParent);\r
-\r
-       _rdetailRows();\r
-\r
-       var summary = r.getResultObject();\r
-       if(!summary) return;\r
-\r
-       var found = false;\r
-       for( var i = 0; i < summary.length; i++ ) {\r
-\r
-               var arr = summary[i];\r
-               globalCNCache[arr[1]] = 1;\r
-               var thisOrg = findOrgUnit(arr[0]);\r
-               var rowNode = $("cp_info_" + thisOrg.id());\r
-               if(!rowNode) continue;\r
-\r
-               if(rowNode.getAttribute("used")) {\r
-\r
-                       if( rowNode.nextSibling ) {\r
-                               sib = rowNode.nextSibling;\r
-                               o ='cp_info_'+thisOrg.id()+'_';\r
-                               /* push the new row on as the last row for this org unit */\r
-                               while( sib && sib.id.match(o) ) {\r
-                                       sib = sib.nextSibling;\r
-                               }\r
-                               if(sib)\r
-                                       rowNode = copyRowParent.insertBefore(copyRow.cloneNode(true), sib);\r
-                               else\r
-                                       rowNode = copyRowParent.appendChild(copyRow.cloneNode(true));\r
-                       } else {\r
-                               rowNode = copyRowParent.appendChild(copyRow.cloneNode(true));\r
-                       }\r
-\r
-                       var n = findNodeByName( rowNode, config.names.rdetail.lib_cell );\r
-                       n.appendChild(text(thisOrg.name()));\r
-                       n.setAttribute("style", "padding-left: " + ((findOrgDepth(thisOrg) - 1)  * 9) + "px;");\r
-                       rowNode.id = "cp_info_" + thisOrg.id() + '_' + (++ctr); \r
-\r
-               } else {\r
-                       rowNode.setAttribute("used", "1");\r
-               }\r
-\r
-               var cpc_temp = rowNode.removeChild(\r
-                               findNodeByName(rowNode, config.names.rdetail.cp_count_cell));\r
-\r
-               var statuses = arr[2];\r
-               var cl = '';\r
-               if (rdetailShowCopyLocation) {\r
-                       cl = arr[2];\r
-                       statuses = arr[3];\r
-               }\r
-               \r
-               rdetailApplyStatuses(rowNode, cpc_temp, statuses);\r
-\r
-               var isLocal = false;\r
-               if( orgIsMine( findOrgUnit(getLocation()), thisOrg ) ) { \r
-                       found = true; \r
-                       isLocal = true; \r
-                       if(!localCNFound) {\r
-                               localCNFound = true;\r
-                               defaultCN = arr[1];\r
-                       }\r
-               }\r
-\r
-               //if(isLocal) unHideMe(rowNode);\r
-               unHideMe(rowNode);\r
-\r
-               rdetailSetPath( thisOrg, isLocal );\r
-               rdetailBuildBrowseInfo( rowNode, arr[1], isLocal, thisOrg, cl );\r
-\r
-               if( i == summary.length - 1 && !defaultCN) defaultCN = arr[1];\r
-       }\r
-\r
-       if(!found) unHideMe(G.ui.rdetail.cp_info_none);\r
-}\r
-\r
-function rdetailBuildBrowseInfo(row, cn, local, orgNode, cl) {\r
-       if(local) {\r
-               var cache = callnumberCache[cn];\r
-               if( cache ) cache.count++;\r
-               else callnumberCache[cn] = { count : 1 };\r
-       }\r
-\r
-       var depth = getDepth();\r
-       if( !local ) depth = findOrgDepth(globalOrgTree);\r
-\r
-       $n(row, 'rdetail_callnumber_cell').appendChild(text(cn));\r
-\r
-       if (rdetailShowCopyLocation) {\r
-               var cl_cell = $n(row, 'rdetail_copylocation_cell');\r
-               cl_cell.appendChild(text(cl));\r
-               unHideMe(cl_cell);\r
-       }\r
-\r
-       _debug('setting action clicks for cn ' + cn);\r
-\r
-       var dHref = 'javascript:rdetailVolumeDetails('+\r
-                       '{copy_location : "'+cl+'", rowid : "'+row.id+'", cn :"'+cn+'", depth:"'+depth+'", org:"'+orgNode.id()+'", local: '+local+'});';\r
-\r
-       var bHref = 'javascript:rdetailShowCNBrowse("' + cn + '", '+orgNode.id()+', "'+depth+'");'; \r
-\r
-       unHideMe( $n(row, 'details') )\r
-               $n(row, 'details').setAttribute('href', dHref);\r
-       unHideMe( $n(row, 'browse') )\r
-               $n(row, 'browse').setAttribute('href', bHref);\r
-\r
-       if(isXUL()) {\r
-               unHideMe($n(row, 'hold_div'));\r
-               $n(row, 'hold').onclick = function() {\r
-                       var req = new Request(FETCH_VOLUME_BY_INFO, cn, record.doc_id(), orgNode.id());\r
-                       req.callback(\r
-                                       function(r) {\r
-                                       var vol = r.getResultObject();\r
-                                       holdsDrawEditor({type: 'V', volumeObject : vol});\r
-                                       });\r
-                       req.send();\r
-               };\r
-       }\r
-}\r
-\r
-// sets the path to org as 'active' and displays the path if it's local \r
-function rdetailSetPath(org, local) {\r
-       if( findOrgDepth(org) == 0 ) return;\r
-       var row = $("cp_info_" + org.id());\r
-       row.setAttribute("hasinfo", "1");\r
-       unHideMe(row);\r
-       rdetailSetPath(findOrgUnit(org.parent_ou()), local);\r
-}\r
-\r
-//Append all the statuses for a given summary to the \r
-//copy summary table \r
-function rdetailApplyStatuses( row, template, statuses ) {\r
-       for( var j in _statusPositions ) {\r
-               var stat = _statusPositions[j];\r
-               var val = statuses[stat.id()];\r
-               var nn = template.cloneNode(true);\r
-               if(val) nn.appendChild(text(val));\r
-               else nn.appendChild(text(0));\r
-               row.appendChild(nn);\r
-       }\r
-}\r
-\r
-//Add one td (creating a new column) to the copy summary\r
-//table for each opac_visible copy status\r
-function rdetailBuildStatusColumns() {\r
-\r
-       rdetailGrabCopyStatuses();\r
-       var parent = statusRow;\r
-       var template = parent.removeChild(G.ui.rdetail.cp_status);\r
-\r
-       var i = 0;\r
-       for( i = 0; i < cp_statuses.length; i++ ) {\r
-\r
-               var c = cp_statuses[i];\r
-               if( c && isTrue(c.opac_visible()) ) {\r
-                       var name = c.name();\r
-                       _statusPositions[i] = c;\r
-                       var node = template.cloneNode(true);\r
-                       var data = findNodeByName( node, config.names.rdetail.cp_status);\r
-\r
-                       data.appendChild(text(name));\r
-                       parent.appendChild(node);\r
-               }\r
-       }\r
-\r
-       numStatuses = 0;\r
-       for(x in _statusPositions) numStatuses++; \r
-}\r
-\r
-function rdetailGrabCopyStatuses() {\r
-       if(cp_statuses) return cp_statuses;\r
-       var req = new Request(FETCH_COPY_STATUSES);\r
-       req.send(true);\r
-       cp_statuses = req.result();\r
-       cp_statuses = cp_statuses.sort(_rdetailSortStatuses);\r
-}\r
-\r
-function _rdetailSortStatuses(a, b) {\r
-       return parseInt(a.id()) - parseInt(b.id());\r
-}\r
-\r
-/**\r
- * Check for a Google Book preview \r
- */\r
-function rdetailCheckForGBPreview() {\r
-       if (!rdetailGoogleBookPreview) return;\r
-       searchForGBPreview( cleanISBN(record.isbn()) );\r
-}\r
-\r
-/**\r
- *\r
- * @param {DOM object} query The form element containing the\r
- *                     input parameters "isbns"\r
- */\r
-function searchForGBPreview( isbn ) {\r
-\r
-       // Delete any previous Google Booksearch JSON queries.\r
-       var GBPJsonScript = document.getElementById("GBPJsonScript");\r
-       if (GBPJsonScript) {\r
-               GBPJsonScript.parentNode.removeChild(GBPJsonScript);\r
-       }\r
-\r
-       // Add a script element with the src as the user's Google Booksearch query. \r
-       // JSON output is specified by including the alt=json-in-script argument\r
-       // and the callback function is also specified as a URI argument.\r
-       var GBPScriptElement = document.createElement("script");\r
-\r
-       GBPScriptElement.setAttribute("id", "GBPJsonScript");\r
-       GBPScriptElement.setAttribute("src",\r
-                       "http://books.google.com/books?bibkeys=" + \r
-                       isbn + "&jscmd=viewapi&callback=GBPreviewCallback");\r
-       GBPScriptElement.setAttribute("type", "text/javascript");\r
-\r
-       // make the request to Google booksearch\r
-       document.documentElement.firstChild.appendChild(GBPScriptElement);\r
-}\r
-\r
-/**\r
- * This function is the call-back function for the JSON scripts which \r
- * executes a Google book search response.\r
- *\r
- * XXX I18N of text needed\r
- *\r
- * @param {JSON} booksInfo is the JSON object pulled from the Google books service.\r
- */\r
-function GBPreviewCallback(GBPBookInfo) {\r
-       var GBPreviewDiv = document.getElementById("rdetail_preview_div");\r
-       var GBPBook;\r
-\r
-       for ( i in GBPBookInfo ) {\r
-               GBPBook = GBPBookInfo[i];\r
-       }\r
-\r
-       if ( !GBPBook ) {\r
-               return;\r
-       }\r
-\r
-       if ( GBPBook.preview != "noview" ) {\r
-               if ( GBPBook.preview == 'full' ) {\r
-                       setText( $('rdetail_preview_link'), $('rdetail_preview_full_text').innerHTML );\r
-                       $('rdetail_preview_link_a').title = $('rdetail_preview_title').innerHTML;      \r
-               }\r
-\r
-               // Add a button below the book cover image to load the preview.\r
-               GBPBadge = document.createElement( 'img' );\r
-               GBPBadge.src = 'http://books.google.com/intl/en/googlebooks/images/gbs_preview_button1.gif';\r
-               GBPBadge.title = $('rdetail_preview_badge').innerHTML;\r
-               GBPBadge.style.border = 0;\r
-               GBPBadgelink = document.createElement( 'a' );\r
-               GBPBadgelink.href = 'javascript:rdetailShowExtra("preview");';\r
-               GBPBadgelink.appendChild( GBPBadge );\r
-               $('rdetail_image_cell').appendChild( GBPBadgelink );\r
-               $('rdetail_preview_div').style.height = 600;\r
-\r
-               /* Display the "Preview" tab in the Extras section */\r
-               unHideMe( $('rdetail_preview_link' ) );\r
-       }\r
-}\r
-\r
-/**\r
- *  This is called when the user clicks on the 'Preview' link.  We assume\r
- *  a preview is available from Google if this link was made visible.\r
- *\r
- * XXX I18N of Google Book Preview language attribute needed\r
- */\r
-function rdetailDisplayGBPreview() {\r
-       unHideMe($('rdetail_extras_loading'));\r
-       GBPreviewPane = $('rdetail_preview_div');\r
-       if ( GBPreviewPane.getAttribute('loaded') == null ||\r
-               GBPreviewPane.getAttribute('loaded') == "false" ) {\r
-               google.load("books", "0", {"callback" : rdetailGBPViewerLoadCallback, "language": "en"} );\r
-               GBPreviewPane.setAttribute('loaded', 'true');\r
-       }\r
-}\r
-\r
-function rdetailGBPViewerLoadCallback() {\r
-       hideMe($('rdetail_extras_loading'));\r
-       var GBPViewer = new google.books.DefaultViewer(document.getElementById('rdetail_preview_div'));\r
-       GBPViewer.load('ISBN:' + cleanISBN(record.isbn()) );\r
-\r
-}\r
-\r
-function expandBoxes(type,bool) {\r
-       if(type=="locs") {\r
-         if(bool) {\r
-               unHideMe($('rdetail_locs_collapse'));\r
-           unHideMe($('rdetails_status2'));\r
-               hideMe($('rdetail_locs_expand'));\r
-               \r
-         } else {\r
-           hideMe($('rdetails_status2'));\r
-               hideMe($('rdetail_locs_collapse'));\r
-               unHideMe($('rdetail_locs_expand'));\r
-         }\r
-         return;\r
-       }\r
-       \r
-       if(type=="tabs") {\r
-         if(bool) {\r
-           rdetailShowAllExtras(true);\r
-           hideMe($('rdetail_extras_expand'));\r
-           unHideMe($('rdetail_extras_collapse'));\r
-         } else {\r
-           rdetailShowAllExtras();\r
-               hideMe($('rdetail_extras_collapse'));\r
-               unHideMe($('rdetail_extras_expand'));\r
-         }\r
-         return;\r
-       }\r
+/* */
+
+if(findCurrentPage()==RDETAIL){
+detachAllEvt('common', 'run');
+attachEvt("common", "run", rdetailDraw);
+attachEvt("rdetail", "recordDrawn", rdetailBuildStatusColumns);
+attachEvt("rdetail", "recordDrawn", rdetailBuildInfoRows);
+attachEvt("rdetail", "recordDrawn", rdetailGetPageIds);
+
+/* Per-skin configuration settings */
+var rdetailLocalOnly = true;
+var rdetailShowLocal = true;
+var rdetailShowCopyLocation = true;
+var rdetailGoogleBookPreview = false;
+var rdetailDisplaySerialHoldings = true;
+var rdetailEnableRefWorks = false;
+var rdetailRefWorksHost = 'http://www.refworks.com';
+
+/* vars vars vars */
+var record = null;
+var marc = null;
+var cp_statuses = null;
+var recordsCache = [];
+
+var copyRowParent = null;
+var copyRow = null;
+var statusRow = null;
+var numStatuses = null;
+var defaultCN;
+var callnumberCache = {};
+var globalCNCache = {};
+var localTOC;
+var cachedRecords;
+var _statusPositions = {};
+var opac_strings;
+var copyObjs = [];
+var copyObjsCN = [];
+var copyObjsCount = 0;
+
+var nextContainerIndex;
+
+var nextRecord;
+var prevRecord;
+
+var rdetailPrev = null;
+var rdetailNext = null;
+var rdetailStart = null;
+var rdetailEnd = null;
+
+if(location.href.match(/&place_hold=1/)) {
+    // prevent load flicker between canvases
+    hideMe(dojo.byId('canvas_main'));
+}
+
+/* serials are currently the only use of Dojo strings in the OPAC */
+       if (rdetailDisplaySerialHoldings) {
+               dojo.require("dijit.Menu");
+               dojo.require("dijit.form.Button");
+               dojo.requireLocalization("openils.opac", "opac");
+               opac_strings = dojo.i18n.getLocalization("openils.opac", "opac");
+       }
+}
+
+function rdetailReload() {
+       var args = {};
+       args[PARAM_LOCATION] = getNewSearchLocation();
+       args[PARAM_DEPTH] = depthSelGetDepth();
+       goTo(buildOPACLink(args));
+}
+
+/* looks to see if we have a next and/or previous record in the
+   record cache, if so, set up the nav links */
+function rdetailSetPaging(ids) {
+
+       cachedRecords = {};
+       cachedRecords.ids = ids;
+
+       for( var i = 0; i < cachedRecords.ids.length; i++ ) {
+               var rec = cachedRecords.ids[i];
+               if( rec == getRid() ) {
+                       if( i > 0 ) prevRecord = cachedRecords.ids[i-1];
+                       if( i < cachedRecords.ids.length - 1 )
+                               nextRecord = cachedRecords.ids[i+1];
+                       break;
+               }
+       }
+
+       $('np_offset').appendChild(text(i + 1));
+       $('np_count').appendChild(text(getHitCount()));
+
+       if(prevRecord) {
+               //unHideMe($('np_table'));
+               unHideMe($('rdetail_result_count'));
+               unHideMe($('np_prev'));
+               unHideMe($('np_start'));
+               rdetailPrev = function() { _rdetailNav(prevRecord); };
+               rdetailStart = function() { _rdetailNav(cachedRecords.ids[0]); };
+       }
+
+       if(nextRecord) {
+               //unHideMe($('np_table'));
+               unHideMe($('rdetail_result_count'));
+               unHideMe($('np_next'));
+               unHideMe($('np_end'));
+               rdetailNext = function() { _rdetailNav(nextRecord); };
+               rdetailEnd = function() { _rdetailNav(cachedRecords.ids[cachedRecords.ids.length-1]); };
+       }
+
+       runEvt('rdetail', 'nextPrevDrawn', i, cachedRecords.ids.length);
+}
+
+
+function _rdetailNav(id, offset) {
+       var args = {};
+       args[PARAM_RID] = id;
+       goTo(buildOPACLink(args));
+}
+
+function rdetailHandlePlaceHold() {
+    function reload() {
+        location.href = location.href.replace(/&place_hold=1/, '');
+    }
+    attachEvt("common", "holdUpdated", reload);
+    attachEvt("common", "holdUpdateCanceled", reload);
+    attachEvt("common", "loginCanceled", reload);
+    holdsDrawEditor({record:getRid(), type: 'T'});
+}
+
+function ridPreDraw() {
+       if(isInAnonList(parseInt(getRid()))) {
+               var mylist = $('add_mylist');
+               mylist.innerHTML = 'Remove from my list';
+               mylist.title = 'Remove from my list';
+       }
+       
+       record = new mvr();
+       record.doc_id(getRid());
+       
+       fieldmapper.standardRequest(["open-ils.search","open-ils.search.biblio.record.copy_count"], {'params':[getLocation(), getRid(), getForm()], 'oncomplete':drawCopyCounts});
+}
+
+function rdetailDraw() {
+    if(new CGI().param('place_hold')) {
+       rdetailHandlePlaceHold();
+        return;
+    }
+
+       detachAllEvt('common','depthChanged');
+       detachAllEvt('common','locationUpdated');
+       attachEvt('common','depthChanged', rdetailReload);
+       attachEvt('common','locationUpdated', rdetailReload);
+       attachEvt('common','holdUpdated', rdetailReload);
+       attachEvt('common','holdUpdateCanceled', rdetailReload);
+
+       copyRowParent = G.ui.rdetail.cp_info_row.parentNode;
+       copyRow = copyRowParent.removeChild(G.ui.rdetail.cp_info_row);
+       statusRow = G.ui.rdetail.cp_status.parentNode;
+       statusRow.id = '__rdsrow';
+
+       G.ui.rdetail.cp_info_local.onclick = rdetailShowLocalCopies;
+       G.ui.rdetail.cp_info_all.onclick = rdetailShowAllCopies;
+       
+    $('rdetail_place_hold').onclick = function() {
+        var src = location.href;
+        if(forceLoginSSL && src.match(/^http:/)) {
+            src = src.replace(/^http:/, 'https:');
+            if(!src.match(/&place_hold=1/)) {
+                src += '&place_hold=1';
+            }
+            location.href = src;
+        } else {
+           holdsDrawEditor({record:record.doc_id(), type:'T'});
+        }
+    }
+       
+       if(getLocation() == globalOrgTree.id())
+               hideMe(G.ui.rdetail.cp_info_all);
+
+    if(getRid()) {
+               ridPreDraw();
+               marc = new MarcRecord(getRid());
+               drawMarcData();
+                  //var req = new Request(FETCH_RMODS, getRid());
+                  //req.callback(_rdetailDraw);  
+                  //req.send();  
+    } else { // No record ID was specified
+         // If we have an ISBN in the URL, let's try to find that record
+         // This allows direct linking by ISBN.
+         // Note, this uses the first record it finds
+         if(getRtype() == RTYPE_ISBN) {
+                  var req = fieldmapper.standardRequest(['open-ils.search','open-ils.search.biblio.isbn'], {'params':[getAdvTerm()]});
+                  if(req && req.count > 0) RID = req.ids[0];
+                  ridPreDraw();
+                  marc = new MarcRecord(getRid());
+                  drawMarcData();
+                  //var req2 = new Request(FETCH_RMODS, getRid());
+                  //req2.callback(_rdetailDraw);
+                  //req2.send();
+          }
+   }
+    
+       var isbn = cleanISBN(marc.marcObj["020"] ? marc.marcObj["020"][0]["a"][0] : (marc.marcObj["024"]?marc.marcObj["024"][0]["a"][0]:"0"));
+       $('rdetail_image').src = buildISBNSrc(isbn);
+       $('rdetail_img_link').href = buildISBNSrc(isbn, "large");
+       unHideMe($('rdetail_img_link'));
+       
+       $('content_cafe_summary').src="http://contentcafe2.btol.com/ContentCafeClient/ContentCafe.aspx?UserID=KC72927&Password=CC14647&ItemKey="+isbn+"&Options=Y";
+           // ChiliFresh
+    if (chilifresh && chilifresh != '(none)' && isbn) {
+        $('chilifreshReviewLink').setAttribute('id','isbn_'+isbn);
+        $('chilifreshReviewResult').setAttribute('id','chili_review_'+isbn);
+        try {
+            chili_init();
+               unHideMe($('rdetail_awards_link'));
+               unHideMe($('rdetail_chilifresh_reviews'));
+                       unHideMe($('rdetail_chilifresh_lbl'));
+        } catch(E) {
+            alert(E + '\n');
+        }
+    }
+       
+    // Novelist
+    if (novelist && isbn) {
+        unHideMe($('rdetail_awards_link'));
+               unHideMe($('rdetail_novelist_lbl'));
+               unHideMe($('rdetail_novelist_div'));
+               var isbnEl = elem("div",null,"ISBN "+isbn);
+               isbnEl.className = "hide_me";
+               document.body.appendChild(isbnEl);
+    }
+       
+       fieldmapper.standardRequest(["open-ils.search","open-ils.search.biblio.copy_counts.summary.retrieve"], {"async":true, "params":[getRid()], "oncomplete":function(r){
+           var res = []; if(r) res = r.recv(); if(res) res = res.content();
+               for(var i in res) {
+                 copyObjsCN[res[i][0]] = res[i][1];
+                 fieldmapper.standardRequest(["open-ils.search", "open-ils.search.asset.copy.retrieve_by_cn_label"], {"async":true, "params":[getRid(), res[i][1], res[i][0]], "oncomplete":getCopyIDs});
+               }
+       }});
+       
+runEvt("rdetail", "recordDrawn");
+
+       if (rdetailDisplaySerialHoldings) {
+               var req = new Request(FETCH_MFHD_SUMMARY, getRid());
+               req.callback(_holdingsDraw);
+               req.send();
+               if (isXUL()) {
+                       var here = findOrgUnit(getLocation());
+                       dojo.place("<div id='mfhd_ad_menu' class='hide_me'></div>", "rdetail_details_table", "after");
+                       var mfhd_add = new dijit.Menu({style:"float: right;"});
+                       new dijit.MenuItem({onClick:function(){
+                               var req = new Request(CREATE_MFHD_RECORD, G.user.session, 1, here.id(), getRid());
+                               var res = req.send();
+                               alert(dojo.string.substitute(opac_strings.CREATED_MFHD_RECORD, [here.name()]));
+                       }, label:opac_strings.CREATE_MFHD}).placeAt(mfhd_add);
+                       mfhd_add.placeAt('mfhd_ad_menu');
+               }
+       }
+
+       detachAllEvt("result", "idsReceived");
+       G.evt.result.hitCountReceived = [];
+       G.evt.result.recordReceived = [];
+       G.evt.result.copyCountsReceived = [];
+       G.evt.result.allRecordsReceived = [];
+       //unHideMe($('rdetail_copy_info_link'));
+}
+
+function getCopyIDs(r) {
+  var res = []; if(r) res = r.recv(); if(res) res = res.content();
+  copyObjsCount += res.length;
+  if(res.length) fieldmapper.standardRequest(["open-ils.search", "open-ils.search.asset.copy.fleshed.batch.retrieve"], {"async":true, "params":[res], "oncomplete":getCopyObjs});
+}
+
+function getCopyObjs(r) {
+  var res = []; if(r) res = r.recv(); if(res) res = res.content();
+  if(res.length) copyObjs = copyObjs.concat(res);
+  if(copyObjs.length >= copyObjsCount) drawCopyStatusDetails();
+}
+
+function drawCopyStatusDetails() {
+  var tehTR = $('rdetails_status_head');
+  if(!tehTR) return;
+  var showLibCount = 5;
+  
+  if(getOrigLocation()) copyObjs.sort(function(a,b) {
+       if(a.circ_lib().id()==getOrigLocation()) return -1;
+       if(b.circ_lib().id()==getOrigLocation()) return 1;
+       return a.circ_lib().name().toLowerCase()>=b.circ_lib().name().toLowerCase()?1:-1;
+  }); else copyObjs.sort(function(a,b){
+       return a.circ_lib().name().toLowerCase()>=b.circ_lib().name().toLowerCase()?1:-1;
+  });
+  
+  if(copyObjs.length) unHideMe($('rdetails_status'));
+  for(var i in copyObjs) {
+       var obj = copyObjs[i];
+       if(!isTrue(obj.circ_lib().opac_visible())) { showLibCount++; continue; }
+       var par = i<showLibCount?tehTR.parentNode:$('rdetails_status2');
+       var newRow = elem('tr');
+       var lib_td = elem('td',{nowrap:"nowrap"});
+       var url = mapLibUrl(obj.circ_lib().id()+"");
+       var libLink = null;
+       if(!url) libLink = elem('span', null, obj.circ_lib().name());
+       else libLink = elem('a',{"href":url, "title":"View information about the "+obj.circ_lib().name()+" library"}, obj.circ_lib().name());
+       lib_td.appendChild(libLink);
+       var status = elem('td',{"nowrap":"nowrap", "id":"copy_status_"+obj.id()});
+       
+       newRow.appendChild(lib_td);
+       newRow.appendChild(elem('td',{nowrap:"nowrap"},copyObjsCN[obj.circ_lib().id()]));
+       newRow.appendChild(elem('td',{nowrap:"nowrap"},obj.location().name()));
+       newRow.appendChild(elem('td',{nowrap:"nowrap"},obj.status().name()));
+       newRow.appendChild(status);
+       par.appendChild(newRow);
+       
+       if(obj.status().id()==1)
+               fieldmapper.standardRequest(["open-ils.circ","open-ils.circ.copy.due_date.retrieve"], {"params":[obj.id()], "oncomplete":drawCopyStatus});
+  }
+  if(copyObjs.length>showLibCount) unHideMe($('rdetail_locs_expand'));
+}
+
+function drawCopyStatus(r) {
+  var res = null; if(r) res = r.recv(); if(res) res = res.content();
+  if(!res) return;
+  var cell = $("copy_status_"+r.params[0]);
+  if(cell) cell.innerHTML = dojo.date.locale.format(dojo.date.stamp.fromISOString(res), {selector:'date', fullYear: true, datePattern:"M-d-yyyy"});
+}
+
+function rdetailGetPageIds() {
+       attachEvt("result", "idsReceived", rdetailSetPaging );
+       resultFetchAllRecords = true;
+       rresultCollectIds(true);
+}
+
+function buildunAPISpan (span, type, id) {
+       var cgi = new CGI();
+       var d = new Date();
+
+       addCSSClass(span,'unapi-id');
+
+       span.setAttribute(
+               'title', 'tag:' + cgi.server_name + ',' +
+               d.getFullYear() + ':' + type + '/' + id
+       );
+}
+
+function rdetailViewMarc(r,id) {
+       hideMe($('rdetail_extras_loading'));
+       $('rdetail_view_marc_box').innerHTML = r.getResultObject();
+
+       var div = elem('div', { "class" : 'hide_me' });
+       var span = div.appendChild( elem('abbr') );
+
+       buildunAPISpan( span, 'biblio-record_entry', getRid() );
+
+       $('rdetail_view_marc_box').insertBefore(span, $('rdetail_view_marc_box').firstChild);
+}
+
+
+function rdetailShowLocalCopies() {
+       rdetailShowLocal = true;
+       rdetailBuildInfoRows();
+       hideMe(G.ui.rdetail.cp_info_local);
+       unHideMe(G.ui.rdetail.cp_info_all);
+       hideMe(G.ui.rdetail.cp_info_none); 
+}
+
+function rdetailShowAllCopies() {
+
+       rdetailShowLocal = false;
+       rdetailBuildInfoRows();
+       hideMe(G.ui.rdetail.cp_info_all);
+       unHideMe(G.ui.rdetail.cp_info_local);
+       hideMe(G.ui.rdetail.cp_info_none); 
+}
+
+function OpenMarcEditWindow(pcrud, rec) {
+       /*
+          To run in Firefox directly, must set signed.applets.codebase_principal_support
+          to true in about:config
+        */
+       netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
+       win = window.open('/xul/server/cat/marcedit.xul'); // XXX version?
+       dojo.require('openils.PermaCrud');
+
+       win.xulG = {
+               "record": {"marc": rec.marc()},
+               "save": {
+                       "label": opac_strings.SAVE_MFHD_LABEL,
+                       "func": function(xmlString) {
+                               rec.marc(xmlString);
+                               rec.ischanged(true);
+                               pcrud.update(rec);
+                       }
+               }
+       };
+}
+
+function loadMarcEditor(recId) {
+       var pcrud = new openils.PermaCrud({"authtoken": G.user.session});
+       var rec = pcrud.retrieve("sre", recId);
+       if (rec) {
+               OpenMarcEditWindow(pcrud, rec);
+       }
+}
+
+/*
+ * This function could be written much more intelligently
+ * Limited brain power means that I'm brute-forcing it for now
+ */
+function _holdingsDraw(h) {
+       holdings = h.getResultObject();
+       if (!holdings) { return null; }
+
+       dojo.forEach(holdings, _holdingsDrawMFHD);
+
+}
+
+function _holdingsDrawMFHD(holdings, entryNum) {
+
+        var here = findOrgUnit(getLocation());
+        if (getDepth() > 0 || getDepth === 0 ) {
+                while (getDepth() < findOrgDepth(here))
+                here = findOrgUnit( here.parent_ou() );
+               if (!orgIsMine(findOrgUnit(here), findOrgUnit(holdings.owning_lib()))) {
+                       return null;
+               }
+        }
+
+       var hh = holdings.basic_holdings_add();
+       var hch = holdings.basic_holdings();
+       var hs = holdings.supplement_holdings_add();
+       var hcs = holdings.supplement_holdings();
+       var hi = holdings.index_holdings_add();
+       var hci = holdings.index_holdings();
+       var ho = holdings.online();
+       var hm = holdings.missing();
+       var hinc = holdings.incomplete();
+       var hloc = holdings.location() || 'MFHD';
+
+       if (    hh.length == 0 && hch.length == 0 && hs.length == 0 &&
+               hcs.length == 0 && hi.length == 0 && hci.length == 0 &&
+               ho.length == 0 && hm.length == 0 && hinc.length == 0
+       ) {
+
+               if (isXUL()) {
+                       /* 
+                        * If we have a record, but nothing to show for it, then the
+                        * record is likely empty or corrupt. This gives cataloguers a
+                        * chance to add holdings or correct the record
+                        */
+                       hh = 'PLACEHOLDER';
+               } else {
+                       return null;
+               }
+       }
+
+       dojo.place("<table style='width: 100%;'><caption id='mfhdHoldingsCaption" + entryNum + "' class='rdetail_header color_1'>" +
+               dojo.string.substitute(opac_strings.HOLDINGS_TABLE_CAPTION, [hloc]) +
+               "</caption><tbody id='rdetail_holdings_tbody_" + entryNum +
+               "'></tbody></table>", "rdetail_details_table", "after"
+       );
+       if (hh.length > 0)  { _holdingsDrawMFHDEntry(entryNum, opac_strings.HOLDINGS, hh); }
+       if (hch.length > 0) { _holdingsDrawMFHDEntry(entryNum, opac_strings.CURRENT_HOLDINGS, hch); }
+       if (hs.length > 0)  { _holdingsDrawMFHDEntry(entryNum, opac_strings.SUPPLEMENTS, hs); }
+       if (hcs.length > 0) { _holdingsDrawMFHDEntry(entryNum, opac_strings.CURRENT_SUPPLEMENTS, hcs); }
+       if (hi.length > 0)  { _holdingsDrawMFHDEntry(entryNum, opac_strings.INDEXES, hi); }
+       if (hci.length > 0) { _holdingsDrawMFHDEntry(entryNum, opac_strings.CURRENT_INDEXES, hci); }
+       if (ho.length > 0)  { _holdingsDrawMFHDEntry(entryNum, opac_strings.ONLINE_VOLUMES, ho); }
+       if (hm.length > 0)  { _holdingsDrawMFHDEntry(entryNum, opac_strings.MISSING_VOLUMES, hm); }
+       if (hinc.length > 0) { _holdingsDrawMFHDEntry(entryNum, opac_strings.INCOMPLETE_VOLUMES, hinc); }
+
+       if (isXUL()) {
+               dojo.require('openils.Event');
+               dojo.require('openils.PermaCrud');
+               var mfhd_edit = new dijit.Menu({});
+               new dijit.MenuItem({onClick: function(){loadMarcEditor(holdings.id())}, label:opac_strings.EDIT_MFHD_RECORD}).placeAt(mfhd_edit, "first");
+               new dijit.MenuItem({onClick:function(){
+                       var pcrud = new openils.PermaCrud({"authtoken": G.user.session});
+                       var mfhd_rec = pcrud.retrieve("sre", holdings.id());
+                       if (mfhd_rec) {
+                               pcrud.eliminate(mfhd_rec);
+                               alert(dojo.string.substitute(opac_strings.DELETED_MFHD_RECORD, [holdings.id()]));
+                       }
+               }, label:opac_strings.DELETE_MFHD}).placeAt(mfhd_edit, "last");
+               // new dijit.MenuItem({onClick:function(){alert("Edit properties " + holdings.id());}, label:opac_strings.EDIT_PROPERTIES}).placeAt(mfhd_edit, "last");
+               var mfhd_mb = new dijit.form.DropDownButton({dropDown: mfhd_edit, label:opac_strings.EDIT_MFHD_MENU, style:"float:right"});
+               mfhd_mb.placeAt("mfhdHoldingsCaption" + entryNum, "last");
+               mfhd_edit.startup();
+       }
+}
+
+function _holdingsDrawMFHDEntry(entryNum, entryName, entry) {
+       var flatEntry = entry.toString().replace(/,/g, ', ');
+       dojo.place("<tr><td> </td><td nowrap='nowrap' class='rdetail_desc'>" + entryName + "</td><td class='rdetail_item'>" + flatEntry + "</td></tr>", "rdetail_holdings_tbody_" + entryNum, "last");
+}
+
+function drawCopyCounts(r) {
+  var res = r.recv().content();
+  if(!res.length) return;
+  var str = "";
+  
+  var holdCnt = fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.bre.holds.count'], {"async":false, "params":[getRid()]});
+  str += holdCnt+' hold'+(holdCnt==1?'':'s')+' on first copy returned of '+res[0].count+' cop'+(res[0].count==1?'y':'ies')+'<br />';
+  str += res[0].available+' cop'+(res[0].available==1?'y':'ies')+' available';
+  $('rdetail_copies_avail').innerHTML = str;
+}
+
+function drawMarcData() {
+  marc.render("245", {"container":"rdetail_title", "showAGR":true, "sGlue":{"startStr":"<div>", "joinStr":" ", "endStr":"</div>"}});
+  marc.render("520", {"container":"rdetail_summary_container", "label":"rdetail_summary_link", "sGlue":{"joinStr":" "}});
+  marc.render("505", {"container":"rdetail_content_div_inner", "label":"rdetail_content_link", "sGlue":{"joinStr":" "}});
+  marc.render(["100", "110", "111"], {"container":"rdetail_author", "label":"author_lbl", "searchType":STYPE_AUTHOR, "skipCodes":"d"});
+  
+  // authors box
+  marc.render(["100", "110", "111"], {"container":"rdetail_authors_inner", "searchType":STYPE_AUTHOR, "label":["rdetail_authors_link", "authors_lbl"], "sGlue":{"joinStr":" ", "endStr":"<br />"}, "showAGR":true, "unlink":"d"});
+  marc.render(["700", "710", "711"], {"container":"rdetail_moar_authors", "searchType":STYPE_AUTHOR, "label":["rdetail_authors_link", "add_authors_lbl"], "sGlue":{"joinStr":" ", "endStr":"<br />"}, "unlink":"d"});
+  marc.render("508", {"container":"rdetail_credits", "searchType":STYPE_AUTHOR, "label":["rdetail_authors_link", "credits_lbl"]});
+  marc.render("511", {"container":"rdetail_cast", "searchType":STYPE_AUTHOR, "label":["rdetail_authors_link", "cast_lbl"]});
+  
+  // subject box
+  marc.render(["600", "610", "611", "630", "650", "651"], {"sGlue":{"joinStr":" -- ", "endStr":"<br />"}, "container":"rdetail_subject_container", "label":["rdetail_subject_link", "subject_lbl"], "searchType":STYPE_SUBJECT});
+  marc.render(["655", "695"], {"sGlue":{"joinStr":" -- ", "endStr":"<br />"}, "container":"rdetail_genre_cont", "label":["rdetail_subject_link", "genre_lbl"], "searchType":STYPE_SUBJECT});
+  marc.render("690", {"sGlue":{"joinStr":" -- ", "endStr":"<br />"}, "container":"rdetail_topic_cont", "label":["rdetail_subject_link", "topic_lbl"], "searchType":STYPE_SUBJECT});
+  marc.render("691", {"sGlue":{"joinStr":" -- ", "endStr":"<br />"}, "container":"rdetail_geo_cont", "label":["rdetail_subject_link", "geo_set_lbl"], "searchType":STYPE_SUBJECT});
+  marc.render("692", {"sGlue":{"joinStr":" -- ", "endStr":"<br />"}, "container":"rdetail_bio_cont", "label":["rdetail_subject_link", "bio_sub_lbl"], "searchType":STYPE_SUBJECT});
+  marc.render("693", {"sGlue":{"joinStr":" -- ", "endStr":"<br />"}, "container":"rdetail_attrib_cont", "label":["rdetail_subject_link", "char_attrib_lbl"], "searchType":STYPE_SUBJECT});
+  marc.render("698", {"sGlue":{"joinStr":" -- ", "endStr":"<br />"}, "container":"rdetail_setting_cont", "label":["rdetail_subject_link", "setting_lbl"], "searchType":STYPE_SUBJECT});
+  marc.render("699", {"sGlue":{"joinStr":" -- ", "endStr":"<br />"}, "container":"rdetail_time_cont", "label":["rdetail_subject_link", "time_lbl"], "searchType":STYPE_SUBJECT});
+
+  // series box
+  marc.render(['440','490','800','810','811','830','694'], {"showAGR":true, "container":"rdetail_series_container", "label":"rdetail_series_link", "searchType":STYPE_SERIES, "sGlue":{"joinStr":" -- ", "endStr":"<br />"}});
+  
+  // awards box
+  marc.render(["586", "697"], {"container":"rdetail_awards_cont", "label":"rdetail_awards_link", "showOnly":"a"});
+  
+  // details box
+  marc.render(["130", "240", "246", "730", "740"], {"container":"added_title", "label":["rdetail_details_link", "add_title_lbl"], "searchType":STYPE_KEYWORD, "sGlue":{"joinStr":" -- ", "endStr":"<br />"}});
+  marc.render("250", {"container":"rdetail_edition", "label":["rdetail_details_link", "edition_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});
+  marc.render("500", {"container":"rdetail_note", "label":["rdetail_details_link", "note_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});
+  marc.render("546", {"container":"rdetail_lang", "label":["rdetail_details_link", "lang_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});
+  marc.render("516", {"container":"comp_file_note", "label":["rdetail_details_link", "comp_note_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});
+  marc.render("538", {"container":"sys_details", "label":["rdetail_details_link", "sys_detail_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});
+  marc.render("507", {"container":"map_scale_note", "label":["rdetail_details_link", "map_scale_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});
+  marc.render("518", {"container":"rdetail_event", "label":["rdetail_details_link", "event_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});
+  marc.render("521", {"container":"audience", "label":["rdetail_details_link", "audience_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});
+  marc.render("530", {"container":"phys_form", "label":["rdetail_details_link", "phys_form_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});
+  marc.render("504", {"container":"rdetail_biblio", "label":["rdetail_details_link", "biblio_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});
+  marc.render("590", {"container":"local_note", "label":["rdetail_details_link", "local_note_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});
+  marc.render("506", {"container":"restrictions", "label":["rdetail_details_link", "restrict_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});
+  marc.render("780", {"container":"continues", "label":["rdetail_details_link", "continues_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});
+  marc.render("785", {"container":"cont_by", "label":["rdetail_details_link", "cont_by_lbl"], "searchType":STYPE_KEYWORD, "fGlue":{"joinStr":" "}, "sGlue":{"joinStr":" "}});
+  
+  marc.render(["092", "099"], {"container":"rdetail_callnum", "label":"callnum_lbl", "sGlue":{"joinStr":" ", "endStr":" "}});
+  marc.render("260", {"container":"rdetail_pubdate", "label":"pubdate_lbl", "showOnly":"c"});
+  marc.render("300", {"container":"rdetail_physical_desc", "label":"phys_desc_lbl", "sGlue":{"joinStr":" "}});
+  marc.render("260", {"container":"rdetail_publisher", "label":"publisher_lbl", "showAGR":true, "showOnly":["a", "b"], "sGlue":{"joinStr":" ", "endStr":"<br />"}});
+  marc.render("856", {"container":"online_resources", "label":"online_res_lbl", "linkSrc":"u", "linkText":["z", "y", "3"], "fGlue":{"joinStr":"<br />"}});
+  
+  var code = marc.render("998", {"showOnly":"d"});
+  var imgEl = $("rdetail_tor_pic");
+  if(setFormatIcon(imgEl, code)) unHideMe(imgEl);
+  
+/*
+  
+  if(marcObj["856"]) {
+         var online = $('online_resources');
+         var m856 = marcObj["856"];
+         for(var i in m856) {
+                 var url = m856[i]["u"] || "";
+                 online.appendChild(elem('a', {"href":url}, (m856[i]["z"] | m856[i]["y"] | m856[i]["3"])));  // should only be one of z, y, 3
+                 online.appendChild(elem('br'));
+         }
+  }
+*/
+}
+
+function _rdetailDraw(r) {
+       record = r.getResultObject();
+       runEvt('rdetail', 'recordRetrieved', record.doc_id());
+       
+       if(isInAnonList(parseInt(record.doc_id()))) { 
+               $('add_mylist').innerHTML = 'Remove from my list';
+               $('add_mylist').title = 'Remove from my list';
+       }
+
+       G.ui.rdetail.title.appendChild(text(record.title()));
+       buildSearchLink(STYPE_AUTHOR, record.author(), G.ui.rdetail.author);
+       if(record.isbn()) { unHideMe($('rdetail_isbn_lbl')); G.ui.rdetail.isbn.appendChild(text(cleanISBN(record.isbn()))); }
+       if(record.edition()) { unHideMe($('rdetail_ed_lbl')); G.ui.rdetail.edition.appendChild(text(record.edition())); }
+       if(record.pubdate()) { unHideMe($('rdetail_pubdate_lbl')); G.ui.rdetail.pubdate.appendChild(text(record.pubdate())); }
+       if(record.publisher()) { unHideMe($('rdetail_pub_lbl')); G.ui.rdetail.publisher.appendChild(text(record.publisher())); }
+       if(record.physical_description()) { unHideMe($('rdetail_phys_lbl')); $('rdetail_physical_desc').appendChild(text(record.physical_description())); }
+       $('content_cafe_summary').src="http://contentcafe2.btol.com/ContentCafeClient/ContentCafe.aspx?UserID=KC72927&Password=CC14647&ItemKey="+cleanISBN(record.isbn())+"&Options=Y";
+       
+       var code = getMarcData(record.doc_id(),"998","d");
+       var imgEl = $("rdetail_tor_pic");
+       
+       if(code) { unHideMe($('rdetail_form_lbl')); G.ui.rdetail.tor.innerHTML = get998dValue(code); }
+       //if(record.synopsis()) { unHideMe($('rdetail_sum_lbl')); G.ui.rdetail.abstr.appendChild(text(record.synopsis())); }
+       if(setFormatIcon(imgEl, code)) unHideMe(imgEl);
+       
+       try{
+               if(record.isbn()) {
+                       if(ENABLE_ADDED_CONTENT_ATTRIB_LINKS) {
+                               unHideMe($('rdetail.jacket_attrib_div'));
+                               var href = $('rdetail.jacket_attrib_link').getAttribute('href') +cleanISBN(record.isbn());
+                               $('rdetail.jacket_attrib_link').setAttribute('href', href);
+                       }
+                       rdetailCheckForGBPreview();
+
+               } else {
+                       //hideMe($("rdetail.jacket_attrib_div"));
+                       //hideMe($("rdetail_img_link"));
+               }
+       } catch(E) {}
+
+
+       // see if the record has any external links 
+       var links = record.online_loc();
+       for( var i = 0; links && links.length > 0 && i < links.length; i = i + 3 ) {
+               var href = links[i];
+               // avoid matching "HTTP: The Complete Reference"
+               if( href.match(/https?:\/|ftps?:\/|mailto:/i) ) {
+                       unHideMe($('rdetail_online_row'));
+                       // MODS can contain a display label (used for the text of the link)
+                       // as well as a note about the URL; many legacy systems conflate the
+                       // two and generate MARC records that expect the note to be used as
+                       // the text of the link, with no display label; here's the canonical
+                       // format:
+                       //
+                       // 856 40 $uhttp://localhost$yDisplay label$zPublic note
+                       //
+                       // Note that the MARC21slim2MODS XSL concatenates $3 and $y together
+                       // (as $y was defined later in MARC21's life as the display label)
+                       var displayLabel = '' + links[i+1];
+                       var note = '' + links[i+2];
+                       if(!displayLabel || displayLabel.match(/https?:\/|ftps?:\/|mailto:/i)) {
+                               if(!note || note.match(/https?:\/|ftps?:\/|mailto:/i)) {
+                                       displayLabel = href;
+                               } else {
+                                       displayLabel = note;
+                               }
+                       }
+                       $('rdetail_online').appendChild(elem('a', {href:href,'class':'classic_link'}, displayLabel));
+                       if (note && note != displayLabel) {
+                               $('rdetail_online').appendChild(elem('span', {'class':'url_note'}, ' - ' + note));
+                       }
+                       $('rdetail_online').appendChild(elem('br'));
+               }
+       }
+
+       // Fill in our unAPI ID, if anyone cares
+       var abbrs = document.getElementsByTagName('abbr');
+       var span;
+       for (var i = 0; i < abbrs.length; i = i + 1) {
+               if (abbrs[i].getAttribute('name') == 'unapi') {
+                       span = abbrs[i];
+                       break;
+               }
+       }
+       buildunAPISpan( span, 'biblio-record_entry', record.doc_id() );
+
+       var RW = $('rdetail_exp_refworks');
+       if (RW && rdetailEnableRefWorks) {
+
+               var here = (findOrgUnit(getLocation())).name();
+               var org_name = here.replace(" ", "+");
+               var cgi = new CGI();
+
+               RW.setAttribute(
+                       'href',
+                       rdetailRefWorksHost + '/express/expressimport.asp?vendor='
+                       + org_name
+                       + '&filter=MARC+Format&database=All+MARC+Formats&encoding=65001&url=http%3A%2F%2F'
+                       + cgi.server_name + '/opac/extras/supercat/marctxt/record/'
+                       + record.doc_id()
+              );
+
+               RW.setAttribute('target', 'RefWorksMain');
+               unHideMe($('rdetail_exp_refworks_span'));
+       }
+
+       //$('rdetail_img_link').setAttribute('href', buildISBNSrc(cleanISBN(record.isbn()), 'large'));
+       //G.ui.rdetail.image.setAttribute("src", buildISBNSrc(cleanISBN(record.isbn())));
+       runEvt("rdetail", "recordDrawn");
+       recordsCache.push(record);
+
+       rdetailSetExtrasSelector();
+
+       var breq = new Request(FETCH_BRE, [getRid()]);
+       breq.callback( rdetailCheckDeleted );
+       breq.send();
+
+       //resultBuildCaches( [ record ] );
+       //resultDrawSubjects();
+       //resultDrawSeries();
+
+       // grab added content 
+       acCollectData(cleanISBN(record.isbn()), rdetailhandleAC);
+       
+       var currentISBN = cleanISBN(record.isbn());
+       
+
+
+       var it = getCacheValue('showHoldEditor');
+       if(it) {
+               setCacheValue('showHoldEditor', null);
+               holdsDrawEditor({record:it.record, type:it.type});
+       }
+}
+
+
+
+function rdetailCheckDeleted(r) {
+       var br = r.getResultObject()[0];
+       if( isTrue(br.deleted()) ) {
+               hideMe($('rdetail_place_hold'));
+               $('rdetail_more_actions_selector').disabled = true;
+               unHideMe($('rdetail_deleted_exp'));
+       }
+}
+
+function rdetailSetExtrasSelector() {
+       if(!grabUser()) return;
+       unHideMe($('rdetail_more_actions'));
+
+       var req = new Request( 
+                       FETCH_CONTAINERS, G.user.session, G.user.id(), 'biblio', 'bookbag' );
+       req.callback(rdetailAddBookbags);
+       req.send();
+}
+
+var myListsFetched = false;
+var selectedItem = null;
+function addMyList(id) {
+       if(!id) id = record.doc_id();
+       //if(!grabUser()) { alert("Please login first"); goTo(buildOPACLink({page:MYOPAC}, false, true)); return; }
+       
+       var holdsLink = $n($('result_table_template_'+id), 'result_my_list_link');
+       if(!holdsLink) holdsLink = $('add_mylist');
+       var lbl = $('myListLabel');
+       var title = "";
+       if(_resultFindRec) title = _resultFindRec(id);
+       if(title) title = title.title();
+       if(lbl) lbl.innerHTML = title; else lbl.innerHTML = "";
+       
+       //if(!grabUser()) {
+               isCacheListDrawn = false;
+               for(var i in anonListCache) {
+                       if(anonListCache[i] == id) {
+                               anonListCache.splice(i, 1);
+                               setCacheValue('anonListCache', anonListCache);
+                               if(!anonListCache.length) hideMe($('cacheListLink'));
+                               if(holdsLink) {
+                                       holdsLink.innerHTML = 'Add to my list';
+                                       //holdsLink.appendChild(elem('img', {src:'/opac/skin/kcls/graphics/add_mylist.gif'}, null));
+                                       holdsLink.title = "Add to my list";
+                               }
+                               return;
+                       }
+               }       
+
+               anonListCache.push(id);
+               setCacheValue('anonListCache', anonListCache);
+               unHideMe($('cacheListLink'));
+               if(holdsLink) {
+                       holdsLink.innerHTML = 'Remove from my list';
+                       //holdsLink.appendChild(elem('img', {src:'/opac/skin/kcls/graphics/add_mylist_sel.gif'}, null));
+                       holdsLink.title = "Remove from my list";
+               }
+               return;
+       //}
+       
+       selectedItem = id;
+       var selector = $('mylist_selector');
+       
+       if(findCurrentPage()==RDETAIL) {
+               unHideMe($('rdetail_more_actions_selector'));
+       } else if(findCurrentPage()==RRESULT) {
+               hideResultsPage(true);
+               unHideMe($('mylist_div'));
+       }
+       if(!myListsFetched) {
+               myListsFetched = true;
+               var req = new Request(FETCH_CONTAINERS, G.user.session, G.user.id(), 'biblio', 'bookbag' );
+               req.callback(showMyLists);
+               req.send();
+       }
+}
+
+function saveMyList() {
+       if(!selectedItem) return true;
+       var newList = $('mylist_new');
+       if(!newList) return true;
+       
+       var selector = $('mylist_selector');
+       if(!selector.options.length && !newList.value) { alert('Please choose a name for the new list'); newList.focus(); return false; }
+
+       if(newList.value) {
+               var id;
+               var name = newList.value
+               if(id = containerCreate(name)) {
+                       selector.options.length=0;
+                       if(!selector.options.length) {
+                               unHideMe($('myListSelect'));
+                               var req = new Request(FETCH_CONTAINERS, G.user.session, G.user.id(), 'biblio', 'bookbag' );
+                               req.callback(showMyLists);
+                               req.send();
+                       }
+                       if(containerCreateItem(id, selectedItem)) {
+                               alert('Item successfully added to list');
+                               newList.value = "";
+                       } else { return false; }
+               } else { return false; }
+       } else { //save to selected list
+               var selectedID = selector.options[selector.selectedIndex].value;
+               if(containerCreateItem(selectedID, selectedItem)) {
+                       alert('Item successfully added to list');
+                       newList.value = "";
+               } else { return false; }
+       }
+       
+       if(findCurrentPage()==RDETAIL) {
+               hideMe($('rdetail_more_actions_selector'));
+       } else if(findCurrentPage()==RRESULT) {
+               hideResultsPage(false);
+       }
+       return true;
+}
+
+function showMyLists(r) {
+       var containers = r.getResultObject();
+       var selector = $('mylist_selector');
+
+       for( var i = 0; i != containers.length; i++ ) {
+               var container = containers[i];
+               insertSelectorVal( selector, i, container.name(), container.id(), null, 0 );
+       }
+       if(!selector.options.length) hideMe($('myListSelect'));
+}
+
+
+function rdetailAddBookbags(r) {
+
+       var containers = r.getResultObject();
+       var selector = $('rdetail_more_actions_selector');
+       var found = false;
+       var index = 3;
+       doSelectorActions(selector);
+
+       for( var i = 0; i != containers.length; i++ ) {
+               found = true;
+               var container = containers[i];
+               insertSelectorVal( selector, index++, container.name(), 
+                               "container_" + container.id(), rdetailAddToBookbag,  1 );
+       }
+
+       nextContainerIndex = index;
+}
+
+var _actions = {};
+function rdetailNewBookbag() {
+       var name = prompt($('rdetail_bb_new').innerHTML,"");
+       if(!name) return;
+
+       var id;
+       if( id = containerCreate( name ) ) {
+               alert($('rdetail_bb_success').innerHTML);
+               var selector = $('rdetail_more_actions_selector');
+               insertSelectorVal( selector, nextContainerIndex++, name, 
+                               "container_" + id, rdetailAddToBookbag, 1 );
+               setSelector( selector, 'start' );
+       }
+}
+
+
+function rdetailAddToBookbag() {
+       var selector = $('rdetail_more_actions_selector');
+       var id = selector.options[selector.selectedIndex].value;
+       setSelector( selector, 'start' );
+
+       if( containerCreateItem( id.substring(10), record.doc_id() )) {
+               alert($('rdetail_bb_item_success').innerHTML);
+       }
+}
+
+function rdetailShowAllExtras(bool) {
+       var nodes = jQuery('.rdetail_extras').filter(function(){ return jQuery(this).css('display')=='block';});
+       nodes.each(function(){
+               rdetailShowExtra(this.getAttribute("rel2"));
+               var node = $(this.getAttribute("rel"));
+               if(bool) unHideMe(node); else hideMe(node);
+       });
+}
+
+
+var rdetailMarcFetched = false;
+function rdetailShowExtra(type, args) {
+       var obj = jQuery('[rel2='+type+']').get()[0];
+       var node = $(obj.getAttribute('rel'));
+       var arrow = $(obj.getAttribute('rel')+"_arrow");
+       if(jQuery(node).css('display')=='block') {
+               hideMe(node);
+               arrow.src="/opac/skin/kcls/graphics/rdetail_arrow.png";
+       } else {
+               unHideMe(node);
+               arrow.src="/opac/skin/kcls/graphics/rdetail_arrow_down.png";
+       }
+
+       removeCSSClass($('rdetail_copy_info_link'), 'rdetail_extras_selected');
+       removeCSSClass($('rdetail_viewcn_link'), 'rdetail_extras_selected');
+       removeCSSClass($('rdetail_reviews_link'), 'rdetail_extras_selected');
+       removeCSSClass($('rdetail_toc_link'), 'rdetail_extras_selected');
+       removeCSSClass($('rdetail_excerpt_link'), 'rdetail_extras_selected');
+       removeCSSClass($('rdetail_preview_link'), 'rdetail_extras_selected');
+       removeCSSClass($('rdetail_anotes_link'), 'rdetail_extras_selected');
+       removeCSSClass($('rdetail_annotation_link'), 'rdetail_extras_selected');
+       removeCSSClass($('rdetail_viewmarc_link'), 'rdetail_extras_selected');
+       removeCSSClass($('rdetail_novelist_link'), 'rdetail_extras_selected');
+
+       switch(type) {
+
+               case "copyinfo": 
+                       addCSSClass($('rdetail_copy_info_link'), 'rdetail_extras_selected');
+                       break;
+
+               case "reviews": 
+                       addCSSClass($('rdetail_reviews_link'), 'rdetail_extras_selected');
+                       break;
+
+               case "excerpt": 
+                       addCSSClass($('rdetail_excerpt_link'), 'rdetail_extras_selected');
+                       break;
+
+               case "preview": 
+                       addCSSClass($('rdetail_preview_link'), 'rdetail_extras_selected');
+                       rdetailDisplayGBPreview();
+                       break;
+
+               case "anotes": 
+                       addCSSClass($('rdetail_anotes_link'), 'rdetail_extras_selected');
+                       break;
+
+               case "toc": 
+                       addCSSClass($('rdetail_toc_link'), 'rdetail_extras_selected');
+                       break;
+
+               case "marc": 
+                       addCSSClass($('rdetail_viewmarc_link'), 'rdetail_extras_selected'); 
+                       if(rdetailMarcFetched) return;
+                       unHideMe($('rdetail_extras_loading'));
+                       rdetailMarcFetched = true;
+                       var req = new Request( FETCH_MARC_HTML, getRid());
+                       req.callback(rdetailViewMarc); 
+                       req.send();
+                       break;
+
+               case "novelist": 
+                       addCSSClass($('rdetail_novelist_link'), 'rdetail_extras_selected');
+                       break;
+
+               case 'cn':
+                       addCSSClass($('rdetail_viewcn_link'), 'rdetail_extras_selected');
+                       rdetailShowCNBrowse(defaultCN, getLocation(), null, true);
+                       break;
+
+       }
+}
+
+function rdetailVolumeDetails(args) {
+       var row = $(args.rowid);
+       var tbody = row.parentNode;
+       cpdBuild( tbody, row, record, args.cn, args.org, args.depth, args.copy_location );
+       return;
+}
+
+function rdetailBuildCNList() {
+
+       var select = $('cn_browse_selector');
+       var index = 0;
+       var arr = [];
+       for( var cn in callnumberCache ) arr.push( cn );
+       arr.sort();
+
+       if( arr.length == 0 ) {
+               hideMe($('rdetail_cn_browse_select_div'));
+               return;
+       }
+
+       for( var i in arr ) {
+               var cn = arr[i];
+               var opt = new Option(cn);
+               select.options[index++] = opt;
+       }
+       select.onchange = rdetailGatherCN;
+}
+
+function rdetailGatherCN() {
+       var cn = getSelectorVal($('cn_browse_selector'));
+       rdetailShowCNBrowse( cn, getLocation(), getDepth(), true );
+       setSelector( $('cn_browse_selector'), cn );
+}
+
+
+function rdetailShowCNBrowse( cn, loc, depth, fromOnclick ) {
+
+       if(!cn) {
+               unHideMe($('cn_browse_none'));
+               hideMe($('rdetail_cn_browse_select_div'));
+               return;
+       }
+
+       unHideMe($('rdetail_cn_browse_select_div'));
+       rdetailBuildCNList();
+       setSelector( $('cn_browse_selector'), cn );
+       //hideMe($('rdetail_copy_info_div'));
+       //hideMe($('rdetail_reviews_div'));
+       //hideMe($('rdetail_toc_div'));
+       //hideMe($('rdetail_marc_div'));
+       //unHideMe($('rdetail_cn_browse_div'));
+       unHideMe($('cn_browse'));
+       if( !rdetailLocalOnly && ! fromOnclick ) depth = findOrgDepth(globalOrgTree);
+       cnBrowseGo(cn, loc, depth);
+}
+
+function rdetailhandleAC(data) {
+
+       if( data.reviews.html ) {
+               $('rdetail_review_container').innerHTML = data.reviews.html;
+               unHideMe($('rdetail_awards_link'));
+       }
+
+       if( data.toc.html ) {
+               $('rdetail_toc_div').innerHTML = data.toc.html;
+               unHideMe($('rdetail_content_link'));
+       }
+
+       if( data.excerpt.html ) {
+               $('rdetail_excerpt_div').innerHTML = data.excerpt.html;
+               unHideMe($('rdetail_excerpt_link'));
+       }
+
+       if( data.anotes.html ) {
+               $('rdetail_anotes_div').innerHTML = data.anotes.html;
+               unHideMe($('rdetail_authors_link'));
+       }
+}
+
+function rdetailShowReviews(r) {
+       hideMe($('rdetail_extras_loading'));
+       var res = r.getResultObject();
+       var par = $('rdetail_reviews_div');
+       var template = par.removeChild($('rdetail_review_template'));
+       if( res && res.length > 0 ) {
+               unHideMe($('rdetail_reviews_link'));
+               for( var i = 0; i != res.length; i++ ) {
+                       var rev = res[i];
+                       if( rev.text && rev.info ) {
+                               var node = template.cloneNode(true);
+                               $n(node, 'review_header').appendChild(text(rev.info));
+                               $n(node, 'review_text').appendChild(text(rev.text));
+                               par.appendChild(node);
+                       }
+               }
+       }
+}
+
+
+function rdetailShowTOC(r) {
+       hideMe($('rdetail_extras_loading'));
+       var resp = r.getResultObject();
+       if(resp) {
+               unHideMe($('rdetail_content_link'));
+               $('rdetail_toc_div').innerHTML = resp;
+       }
+}
+
+function rdetailBuildInfoRows() {
+       var req;
+       var method = FETCH_COPY_COUNTS_SUMMARY;
+       if (rdetailShowCopyLocation)
+               method = FETCH_COPY_LOCATION_COUNTS_SUMMARY;
+
+
+       if( rdetailShowLocal ) 
+               req = new Request(method, getRid(), 1, 0)
+       else
+               req = new Request(method, getRid());
+       req.callback(_rdetailBuildInfoRows);
+       req.send();
+}
+
+function _rdetailRows(node) {
+
+       if( rdetailShowLocal && /*getLocation()*/1 != globalOrgTree.id() ) {
+               var loc = findOrgUnit(1/*getLocation()*/);
+               if( node ) {
+                       if( !orgIsMine(node, loc) && !orgIsMine(loc,node) ) return;
+               } else {
+                       for( var i = 0; i < globalOrgTree.children().length; i++ ) {
+                               var org = findOrgUnit(globalOrgTree.children()[i]);
+                               if( orgIsMine(org, loc) ) {
+                                       node = org;
+                                       break;
+                               }
+                       }
+               } 
+       }
+
+       if(!node && findOrgType(globalOrgTree.ou_type()).can_have_vols())
+               node = globalOrgTree;
+
+
+       /* don't show hidden orgs */
+
+       if(node) {
+
+               //if(!isXUL() && !isTrue(node.opac_visible())) return;
+               if(!isXUL() && !isTrue(node.opac_visible())) {
+                       // locally suppressed orgs should appear in the copy summary
+                       if(!localSuppressedOrgs[node.id()]) {  // indexOf() on user arrays isn't supported on <= IE8
+                               return; 
+                       }
+        }
+               
+               // , 1555:true, 1499:true, 1510:true, 1538:true
+
+               var row = copyRow.cloneNode(true);
+               row.id = "cp_info_" + node.id();
+
+               var libtd = findNodeByName( row, config.names.rdetail.lib_cell );
+               var cntd  = findNodeByName( row, config.names.rdetail.cn_cell );
+               var cpctd = findNodeByName( row, config.names.rdetail.cp_count_cell );
+               var actions = $n(row, 'rdetail_actions_cell');
+
+               var p = libtd.getElementsByTagName('a')[0];
+               libtd.insertBefore(text(node.name()), p);
+               libtd.setAttribute("style", "padding-left: " + ((findOrgDepth(node) - 1)  * 9) + "px;");
+
+               if(!findOrgType(node.ou_type()).can_have_vols()) {
+
+                       row.removeChild(cntd);
+                       row.removeChild(cpctd);
+                       row.removeChild(actions);
+                       row.setAttribute('novols', '1');
+
+                       libtd.setAttribute("colspan", numStatuses + 3 );
+                       libtd.colSpan = numStatuses + 3;
+                       addCSSClass(row, 'copy_info_region_row');
+               } 
+
+               copyRowParent.appendChild(row);
+
+       } else { node = globalOrgTree; }
+
+       for( var c in node.children() ) 
+               _rdetailRows(node.children()[c]);
+}
+
+function rdetailCNPrint(orgid, cn) {
+       var div = cpdBuildPrintWindow( record, orgid);
+       var template = div.removeChild($n(div, 'cnrow'));
+       var rowNode = $("cp_info_" + orgid);
+       cpdStylePopupWindow(div);
+       openWindow(div.innerHTML);
+}
+
+var localCNFound = false;
+var ctr = 0;
+function _rdetailBuildInfoRows(r) {
+
+       if (rdetailShowCopyLocation)
+               unHideMe( $n( $('rdetail_copy_info_table'), 'rdetail_copylocation_header' ));
+
+       removeChildren(copyRowParent);
+
+       _rdetailRows();
+
+       var summary = r.getResultObject();
+       if(!summary) return;
+
+       var found = false;
+       for( var i = 0; i < summary.length; i++ ) {
+
+               var arr = summary[i];
+               globalCNCache[arr[1]] = 1;
+               var thisOrg = findOrgUnit(arr[0]);
+               var rowNode = $("cp_info_" + thisOrg.id());
+               if(!rowNode) continue;
+
+               if(rowNode.getAttribute("used")) {
+
+                       if( rowNode.nextSibling ) {
+                               sib = rowNode.nextSibling;
+                               o ='cp_info_'+thisOrg.id()+'_';
+                               /* push the new row on as the last row for this org unit */
+                               while( sib && sib.id.match(o) ) {
+                                       sib = sib.nextSibling;
+                               }
+                               if(sib)
+                                       rowNode = copyRowParent.insertBefore(copyRow.cloneNode(true), sib);
+                               else
+                                       rowNode = copyRowParent.appendChild(copyRow.cloneNode(true));
+                       } else {
+                               rowNode = copyRowParent.appendChild(copyRow.cloneNode(true));
+                       }
+
+                       var n = findNodeByName( rowNode, config.names.rdetail.lib_cell );
+                       n.appendChild(text(thisOrg.name()));
+                       n.setAttribute("style", "padding-left: " + ((findOrgDepth(thisOrg) - 1)  * 9) + "px;");
+                       rowNode.id = "cp_info_" + thisOrg.id() + '_' + (++ctr); 
+
+               } else {
+                       rowNode.setAttribute("used", "1");
+               }
+
+               var cpc_temp = rowNode.removeChild(
+                               findNodeByName(rowNode, config.names.rdetail.cp_count_cell));
+
+               var statuses = arr[2];
+               var cl = '';
+               if (rdetailShowCopyLocation) {
+                       cl = arr[2];
+                       statuses = arr[3];
+               }
+               
+               rdetailApplyStatuses(rowNode, cpc_temp, statuses);
+
+               var isLocal = false;
+               if( orgIsMine( findOrgUnit(getLocation()), thisOrg ) ) { 
+                       found = true; 
+                       isLocal = true; 
+                       if(!localCNFound) {
+                               localCNFound = true;
+                               defaultCN = arr[1];
+                       }
+               }
+
+               //if(isLocal) unHideMe(rowNode);
+               unHideMe(rowNode);
+
+               rdetailSetPath( thisOrg, isLocal );
+               rdetailBuildBrowseInfo( rowNode, arr[1], isLocal, thisOrg, cl );
+
+               if( i == summary.length - 1 && !defaultCN) defaultCN = arr[1];
+       }
+
+       if(!found) unHideMe(G.ui.rdetail.cp_info_none);
+}
+
+function rdetailBuildBrowseInfo(row, cn, local, orgNode, cl) {
+       if(local) {
+               var cache = callnumberCache[cn];
+               if( cache ) cache.count++;
+               else callnumberCache[cn] = { count : 1 };
+       }
+
+       var depth = getDepth();
+       if( !local ) depth = findOrgDepth(globalOrgTree);
+
+       $n(row, 'rdetail_callnumber_cell').appendChild(text(cn));
+
+       if (rdetailShowCopyLocation) {
+               var cl_cell = $n(row, 'rdetail_copylocation_cell');
+               cl_cell.appendChild(text(cl));
+               unHideMe(cl_cell);
+       }
+
+       _debug('setting action clicks for cn ' + cn);
+
+       var dHref = 'javascript:rdetailVolumeDetails('+
+                       '{copy_location : "'+cl+'", rowid : "'+row.id+'", cn :"'+cn+'", depth:"'+depth+'", org:"'+orgNode.id()+'", local: '+local+'});';
+
+       var bHref = 'javascript:rdetailShowCNBrowse("' + cn + '", '+orgNode.id()+', "'+depth+'");'; 
+
+       unHideMe( $n(row, 'details') )
+               $n(row, 'details').setAttribute('href', dHref);
+       unHideMe( $n(row, 'browse') )
+               $n(row, 'browse').setAttribute('href', bHref);
+
+       if(isXUL()) {
+               unHideMe($n(row, 'hold_div'));
+               $n(row, 'hold').onclick = function() {
+                       var req = new Request(FETCH_VOLUME_BY_INFO, cn, record.doc_id(), orgNode.id());
+                       req.callback(
+                                       function(r) {
+                                       var vol = r.getResultObject();
+                                       holdsDrawEditor({type: 'V', volumeObject : vol});
+                                       });
+                       req.send();
+               };
+       }
+}
+
+// sets the path to org as 'active' and displays the path if it's local 
+function rdetailSetPath(org, local) {
+       if( findOrgDepth(org) == 0 ) return;
+       var row = $("cp_info_" + org.id());
+       row.setAttribute("hasinfo", "1");
+       unHideMe(row);
+       rdetailSetPath(findOrgUnit(org.parent_ou()), local);
+}
+
+//Append all the statuses for a given summary to the 
+//copy summary table 
+function rdetailApplyStatuses( row, template, statuses ) {
+       for( var j in _statusPositions ) {
+               var stat = _statusPositions[j];
+               var val = statuses[stat.id()];
+               var nn = template.cloneNode(true);
+               if(val) nn.appendChild(text(val));
+               else nn.appendChild(text(0));
+               row.appendChild(nn);
+       }
+}
+
+//Add one td (creating a new column) to the copy summary
+//table for each opac_visible copy status
+function rdetailBuildStatusColumns() {
+
+       rdetailGrabCopyStatuses();
+       var parent = statusRow;
+       var template = parent.removeChild(G.ui.rdetail.cp_status);
+
+       var i = 0;
+       for( i = 0; i < cp_statuses.length; i++ ) {
+
+               var c = cp_statuses[i];
+               if( c && isTrue(c.opac_visible()) ) {
+                       var name = c.name();
+                       _statusPositions[i] = c;
+                       var node = template.cloneNode(true);
+                       var data = findNodeByName( node, config.names.rdetail.cp_status);
+
+                       data.appendChild(text(name));
+                       parent.appendChild(node);
+               }
+       }
+
+       numStatuses = 0;
+       for(x in _statusPositions) numStatuses++; 
+}
+
+function rdetailGrabCopyStatuses() {
+       if(cp_statuses) return cp_statuses;
+       var req = new Request(FETCH_COPY_STATUSES);
+       req.send(true);
+       cp_statuses = req.result();
+       cp_statuses = cp_statuses.sort(_rdetailSortStatuses);
+}
+
+function _rdetailSortStatuses(a, b) {
+       return parseInt(a.id()) - parseInt(b.id());
+}
+
+/**
+ * Check for a Google Book preview 
+ */
+function rdetailCheckForGBPreview() {
+       if (!rdetailGoogleBookPreview) return;
+       searchForGBPreview( cleanISBN(record.isbn()) );
+}
+
+/**
+ *
+ * @param {DOM object} query The form element containing the
+ *                     input parameters "isbns"
+ */
+function searchForGBPreview( isbn ) {
+
+       // Delete any previous Google Booksearch JSON queries.
+       var GBPJsonScript = document.getElementById("GBPJsonScript");
+       if (GBPJsonScript) {
+               GBPJsonScript.parentNode.removeChild(GBPJsonScript);
+       }
+
+       // Add a script element with the src as the user's Google Booksearch query. 
+       // JSON output is specified by including the alt=json-in-script argument
+       // and the callback function is also specified as a URI argument.
+       var GBPScriptElement = document.createElement("script");
+
+       GBPScriptElement.setAttribute("id", "GBPJsonScript");
+       GBPScriptElement.setAttribute("src",
+                       "http://books.google.com/books?bibkeys=" + 
+                       isbn + "&jscmd=viewapi&callback=GBPreviewCallback");
+       GBPScriptElement.setAttribute("type", "text/javascript");
+
+       // make the request to Google booksearch
+       document.documentElement.firstChild.appendChild(GBPScriptElement);
+}
+
+/**
+ * This function is the call-back function for the JSON scripts which 
+ * executes a Google book search response.
+ *
+ * XXX I18N of text needed
+ *
+ * @param {JSON} booksInfo is the JSON object pulled from the Google books service.
+ */
+function GBPreviewCallback(GBPBookInfo) {
+       var GBPreviewDiv = document.getElementById("rdetail_preview_div");
+       var GBPBook;
+
+       for ( i in GBPBookInfo ) {
+               GBPBook = GBPBookInfo[i];
+       }
+
+       if ( !GBPBook ) {
+               return;
+       }
+
+       if ( GBPBook.preview != "noview" ) {
+               if ( GBPBook.preview == 'full' ) {
+                       setText( $('rdetail_preview_link'), $('rdetail_preview_full_text').innerHTML );
+                       $('rdetail_preview_link_a').title = $('rdetail_preview_title').innerHTML;      
+               }
+
+               // Add a button below the book cover image to load the preview.
+               GBPBadge = document.createElement( 'img' );
+               GBPBadge.src = 'http://books.google.com/intl/en/googlebooks/images/gbs_preview_button1.gif';
+               GBPBadge.title = $('rdetail_preview_badge').innerHTML;
+               GBPBadge.style.border = 0;
+               GBPBadgelink = document.createElement( 'a' );
+               GBPBadgelink.href = 'javascript:rdetailShowExtra("preview");';
+               GBPBadgelink.appendChild( GBPBadge );
+               $('rdetail_image_cell').appendChild( GBPBadgelink );
+               $('rdetail_preview_div').style.height = 600;
+
+               /* Display the "Preview" tab in the Extras section */
+               unHideMe( $('rdetail_preview_link' ) );
+       }
+}
+
+/**
+ *  This is called when the user clicks on the 'Preview' link.  We assume
+ *  a preview is available from Google if this link was made visible.
+ *
+ * XXX I18N of Google Book Preview language attribute needed
+ */
+function rdetailDisplayGBPreview() {
+       unHideMe($('rdetail_extras_loading'));
+       GBPreviewPane = $('rdetail_preview_div');
+       if ( GBPreviewPane.getAttribute('loaded') == null ||
+               GBPreviewPane.getAttribute('loaded') == "false" ) {
+               google.load("books", "0", {"callback" : rdetailGBPViewerLoadCallback, "language": "en"} );
+               GBPreviewPane.setAttribute('loaded', 'true');
+       }
+}
+
+function rdetailGBPViewerLoadCallback() {
+       hideMe($('rdetail_extras_loading'));
+       var GBPViewer = new google.books.DefaultViewer(document.getElementById('rdetail_preview_div'));
+       GBPViewer.load('ISBN:' + cleanISBN(record.isbn()) );
+
+}
+
+function expandBoxes(type,bool) {
+       if(type=="locs") {
+         if(bool) {
+               unHideMe($('rdetail_locs_collapse'));
+           unHideMe($('rdetails_status2'));
+               hideMe($('rdetail_locs_expand'));
+               
+         } else {
+           hideMe($('rdetails_status2'));
+               hideMe($('rdetail_locs_collapse'));
+               unHideMe($('rdetail_locs_expand'));
+         }
+         return;
+       }
+       
+       if(type=="tabs") {
+         if(bool) {
+           rdetailShowAllExtras(true);
+           hideMe($('rdetail_extras_expand'));
+           unHideMe($('rdetail_extras_collapse'));
+         } else {
+           rdetailShowAllExtras();
+               hideMe($('rdetail_extras_collapse'));
+               unHideMe($('rdetail_extras_expand'));
+         }
+         return;
+       }
 }
\ No newline at end of file
index 82a9531..7e26da8 100644 (file)
-config.ids.result = {};\r
-config.css.result = {};\r
-config.names.result = {};\r
-config.ids.result.offset_start = "offset_start";\r
-config.ids.result.offset_end       = "offset_end";\r
-config.ids.result.result_count = "result_count";\r
-config.ids.result.next_link        = 'next_link';\r
-config.ids.result.prev_link        = 'prev_link';\r
-config.ids.result.home_link        = 'search_home_link';\r
-config.ids.result.end_link         = 'end_link';\r
-config.ids.result.main_table       = 'result_table';\r
-config.ids.result.row_template = 'result_table_template';\r
-config.ids.result.num_pages        = 'num_pages';\r
-config.ids.result.current_page = 'current_page';\r
-config.css.result.nav_active       = "nav_link_active";\r
-config.ids.result.top_div          = "result_table_div";\r
-config.ids.result.nav_links        = "search_nav_links";\r
-config.ids.result.info             = "result_info_div";\r
-config.css.result.cc_cell_even = "copy_count_cell_even";\r
-config.names.result.item_jacket    = "item_jacket";\r
-config.names.result.item_title = "item_title";\r
-config.names.result.item_author    = "item_author";\r
-config.names.result.counts_row = "counts_row";\r
-config.names.result.count_cell = "copy_count_cell";\r
-config.names.result.format_cell = 'result_table_format_cell';\r
-config.names.result.format_link = 'resource_link'\r
-config.names.result.format_pic = 'format_pic'\r
-config.ids.result = {};\r
-config.css.result = {};\r
-config.names.result = {};\r
-config.ids.result.offset_start = "offset_start";\r
-config.ids.result.offset_end       = "offset_end";\r
-config.ids.result.result_count = "result_count";\r
-config.ids.result.next_link        = 'next_link';\r
-config.ids.result.prev_link        = 'prev_link';\r
-config.ids.result.home_link        = 'search_home_link';\r
-config.ids.result.end_link         = 'end_link';\r
-config.ids.result.main_table       = 'result_table';\r
-config.ids.result.row_template = 'result_table_template';\r
-config.ids.result.num_pages        = 'num_pages';\r
-config.ids.result.current_page = 'current_page';\r
-config.css.result.nav_active       = "nav_link_active";\r
-config.ids.result.top_div          = "result_table_div";\r
-config.ids.result.nav_links        = "search_nav_links";\r
-config.ids.result.info             = "result_info_div";\r
-config.css.result.cc_cell_even = "copy_count_cell_even";\r
-config.names.result.item_jacket    = "item_jacket";\r
-config.names.result.item_title = "item_title";\r
-config.names.result.item_author    = "item_author";\r
-config.names.result.counts_row = "counts_row";\r
-config.names.result.count_cell = "copy_count_cell";\r
-config.names.result.format_cell = 'result_table_format_cell';\r
-config.names.result.format_link = 'resource_link'\r
-config.names.result.format_pic = 'format_pic'\r
-\r
-var recordsHandled = 0;\r
-var recordsCache = [];\r
-var lowHitCount = 4;\r
-var isbnList = '';\r
-var googleBooksLink = true;\r
-buildOrgSel($('holdsCacheSel'), globalOrgTree, 0);\r
-\r
-var resultFetchAllRecords = false;\r
-var resultCompiledSearch = null;\r
-\r
-/* set up the event handlers */\r
-if( findCurrentPage() == MRESULT || findCurrentPage() == RRESULT ) {\r
-       G.evt.result.hitCountReceived.push(resultSetHitInfo);\r
-       G.evt.result.recordReceived.push(resultDisplayRecord, resultAddCopyCounts);\r
-       G.evt.result.copyCountsReceived.push(resultDisplayCopyCounts);\r
-       G.evt.result.allRecordsReceived.push(function(){unHideMe($('tehSideBar'));},function(){unHideMe($('results_view_span'));},resultBuildCaches,\r
-               function(){unHideMe($('result_info_2'))}, fetchGoogleBooksLink, fetchChiliFreshReviews, postResultsCollect);\r
-\r
-       attachEvt('result','lowHits',resultLowHits);\r
-       attachEvt('result','zeroHits',resultZeroHits);\r
-       attachEvt( "common", "locationUpdated", resultSBSubmit );\r
-       /* do this after we have ID's so the rank for mr pages will be correct */\r
-       attachEvt("result", "preCollectRecords", resultPaginate);\r
-}\r
-\r
-function resultSBSubmit(){searchBarSubmit();}\r
-\r
-/* returns the last 'index' postion ocurring in this page */\r
-function resultFinalPageIndex() {\r
-       if(getHitCount() < (getOffset() + getDisplayCount())) \r
-               return getHitCount() - 1;\r
-       return getOffset() + getDisplayCount() - 1;\r
-}\r
-\r
-function plausible_ident(s) {\r
-       s = s.replace(/^\s*(.+)\s*$/, '$1');\r
-       s = s.replace(/^(\S+)\s.*$/, '$1');\r
-       return s;\r
-}\r
-\r
-\r
-/* generic search method */\r
-function resultCollectSearchIds( type, method, handler ) {\r
-\r
-       var sort                = (getSort() == SORT_TYPE_REL) ? null : getSort(); \r
-       var sortdir = (sort) ? ((getSortDir()) ? getSortDir() : SORT_DIR_ASC) : null;\r
-\r
-       var item_type;\r
-       var item_form;\r
-       var args = {};\r
-\r
-       if( type ) {\r
-               var form = parseForm(getForm());\r
-               item_type = form.item_type;\r
-               item_form = form.item_form;\r
-\r
-       } else {\r
-               item_type = (getItemType()) ? getItemType().split(/,/) : null;\r
-               item_form = (getItemForm()) ? getItemForm().split(/,/) : null;\r
-       }\r
-       \r
-       item_type=null;\r
-\r
-       var limit = (resultFetchAllRecords) ? 1000 : getDisplayCount();\r
-\r
-       if( getOffset() > 0 ) {\r
-               if( getHitCount() > 0 && (getOffset() + getDisplayCount()) > getHitCount() ) \r
-                       limit = getHitCount() - getOffset();\r
-       }\r
-\r
-       var lasso = getLasso();\r
-\r
-       if (lasso) args.org_unit = -lasso;\r
-       else args.org_unit = getLocation();\r
-\r
-       args.depth    = getDepth();\r
-       args.limit    = limit;\r
-       args.offset   = getOffset();\r
-       args.visibility_limit = 3000;\r
-    args.default_class = getStype();\r
-\r
-       if(sort) args.sort = sort;\r
-       if(sortdir) args.sort_dir = sortdir;\r
-       if(item_type) args.item_type    = item_type;\r
-       if(item_form) args.item_form    = item_form;\r
-    if(getAvail()) args.available = 1;\r
-       //args.format="marcxml";\r
-\r
-       if(getFacet()) args.facets = getFacet();\r
-\r
-       if(getAudience()) args.audience  = getAudience().split(/,/);\r
-       if(getLitForm()) args.lit_form  = getLitForm().split(/,/);\r
-       if(getLanguage()) args.language = getLanguage().split(/,/);\r
-       if(getBibLevel()) args.bib_level        = getBibLevel().split(/,/);\r
-       if(getCopyLocs()) args.locations        = getCopyLocs().split(/,/);\r
-    if(getPubdBefore()) args.before = getPubdBefore();\r
-    else if(getPubdAfter()) args.after = getPubdAfter();\r
-    else if(getPubdBetween()) args.between = getPubdBetween().split(/,/);\r
-\r
-       _debug('Search args: ' + js2JSON(args));\r
-       _debug('Raw query: ' + getTerm());\r
-\r
-       var req = new Request(method, args, getTerm(), 1);\r
-       req.callback(handler);\r
-       req.send();\r
-}\r
-\r
-\r
-\r
-\r
-\r
-/* set the search result info, number of hits, which results we're \r
-       displaying, links to the next/prev pages, etc. */\r
-function resultSetHitInfo() { \r
-\r
-       var lasso = getLasso();\r
-       if (!lasso) {\r
-               /* tell the user where the results are coming from */\r
-               var baseorg = findOrgUnit(getLocation());\r
-               var depth = getDepth();\r
-               var mydepth = findOrgDepth(baseorg);\r
-               if( findOrgDepth(baseorg) != depth ) {\r
-                       var tmporg = baseorg;\r
-                       while( mydepth > depth ) {\r
-                               mydepth--;\r
-                               tmporg = findOrgUnit(tmporg.parent_ou());\r
-                       }\r
-                       unHideMe($('including_results_for'));\r
-                       try{$('including_results_location').appendChild(text(tmporg.name()));} catch(e){}\r
-               }\r
-       }\r
-\r
-\r
-       try{searchTimer.stop()}catch(e){}\r
-\r
-       //if( findCurrentPage() == MRESULT ) {\r
-       if( findCurrentPage() == MRESULT || \r
-\r
-               (findCurrentPage() == RRESULT &&\r
-                       (\r
-                               getRtype() == RTYPE_TITLE ||\r
-                               getRtype() == RTYPE_AUTHOR ||\r
-                               getRtype() == RTYPE_SUBJECT ||\r
-                               getRtype() == RTYPE_SERIES ||\r
-                               getRtype() == RTYPE_KEYWORD \r
-                       )\r
-\r
-               ) ) {\r
-\r
-               if(getHitCount() <= lowHitCount && getTerm())\r
-                       runEvt('result', 'lowHits');\r
-       }\r
-\r
-       if(getHitCount() == 0) {\r
-               runEvt('result', 'zeroHits');\r
-               return;\r
-       }\r
-\r
-\r
-       var pages = getHitCount() / getDisplayCount();\r
-       if(pages % 1) pages = parseInt(pages) + 1;\r
-\r
-       \r
-\r
-       var cpage = (getOffset()/getDisplayCount()) + 1;\r
-\r
-       G.ui.result.current_page.appendChild(text(cpage));\r
-       G.ui.result.num_pages.appendChild(text(pages)); /* the ) is dumb */\r
-\r
-       $('current_page2').appendChild(text(cpage));\r
-       $('num_pages2').appendChild(text(pages + ")")); /* the ) is dumb */\r
-\r
-       /* set the offsets */\r
-       var offsetEnd = getDisplayCount() + getOffset();  \r
-       if( getDisplayCount() > (getHitCount() - getOffset()))  \r
-               offsetEnd = getHitCount();\r
-\r
-       G.ui.result.offset_end.appendChild(text(offsetEnd));\r
-       G.ui.result.offset_start.appendChild(text(getOffset() + 1));\r
-\r
-       $('offset_end2').appendChild(text(offsetEnd));\r
-       $('offset_start2').appendChild(text(getOffset() + 1));\r
-\r
-       G.ui.result.result_count.appendChild(text(getHitCount()));\r
-       unHideMe(G.ui.result.info);\r
-       unHideMe($('result_numbers1'));\r
-\r
-       $('result_count2').appendChild(text(getHitCount()));\r
-       unHideMe($('result_info_div2'));\r
-}\r
-\r
-function resultLowHits() {\r
-       showCanvas();\r
-       unHideMe($('result_low_hits'));\r
-       if(getHitCount() > 0)\r
-               unHideMe($('result_low_hits_msg'));\r
-\r
-    var words = [];\r
-    for(var key in resultCompiledSearch.searches) \r
-        words.push(resultCompiledSearch.searches[key].term);\r
-\r
-       var sreq = new Request(CHECK_SPELL, words.join(' '));\r
-       sreq.callback(resultSuggestSpelling);\r
-       sreq.send();\r
-\r
-    for(var key in resultCompiledSearch.searches) {\r
-               var areq = new Request(FETCH_CROSSREF, key, resultCompiledSearch.searches[key].term);\r
-               areq.callback(resultLowHitXRef);\r
-               areq.send();\r
-       }\r
-\r
-       if( !(getForm() == null || getForm() == 'all' || getForm() == "") ) {\r
-               var a = {};\r
-               a[PARAM_FORM] = "all";\r
-               $('low_hits_remove_format_link').setAttribute('href',buildOPACLink(a));\r
-               unHideMe($('low_hits_remove_format'));\r
-       }\r
-\r
-       resultSuggestSearchClass();\r
-\r
-       if(getTerm()) resultExpandSearch(); /* advanced search */\r
-}\r
-\r
-var lowHitsXRefSet = {};\r
-var lowHitsXRefLink;\r
-var lowHitsXRefLinkParent;\r
-function resultLowHitXRef(r) {\r
-       if(!lowHitsXRefLink){\r
-               lowHitsXRefLinkParent = $('low_hits_xref_link').parentNode;\r
-               lowHitsXRefLink = lowHitsXRefLinkParent.removeChild($('low_hits_xref_link'));\r
-       }\r
-       var res = r.getResultObject();\r
-       var arr = res.from;\r
-       arr.concat(res.also);\r
-       if(arr && arr.length > 0) {\r
-               unHideMe($('low_hits_cross_ref'));\r
-               var word;\r
-               var c = 0;\r
-               while( word = arr.shift() ) {\r
-\r
-            if (lowHitsXRefSet[word] == 1) continue;\r
-            lowHitsXRefSet[word] = 1;\r
-\r
-                       if(c++ > 20) break;\r
-                       var a = {};\r
-                       a[PARAM_TERM] = word;\r
-                       var template = lowHitsXRefLink.cloneNode(true);\r
-                       template.setAttribute('href',buildOPACLink(a));\r
-                       template.appendChild(text(word));\r
-                       lowHitsXRefLinkParent.appendChild(template);\r
-                       lowHitsXRefLinkParent.appendChild(text(' '));\r
-               }\r
-       }\r
-}\r
-\r
-function resultZeroHits() {\r
-       hideMe($('result_header'));\r
-       hideMe($('result_table_div'));\r
-       hideMe($('statusbar'));\r
-       $('rresults_page').style.width="690px";\r
-       unHideMe($('zero_search_hits'));\r
-       $('zero_hits_term').innerHTML = getTerm();\r
-       //showCanvas();\r
-       unHideMe($('result_low_hits'));\r
-       unHideMe($('result_zero_hits_msg'));\r
-       if(getTerm()) resultExpandSearch(); /* advanced search */\r
-}\r
-\r
-function resultExpandSearch() {\r
-       var top = findOrgDepth(globalOrgTree);\r
-       if(getDepth() == top) return;\r
-       unHideMe($('low_hits_expand_range'));\r
-       var par = $('low_hits_expand_link').parentNode;\r
-       var template = par.removeChild($('low_hits_expand_link'));\r
-\r
-       var bottom = getDepth();\r
-       while( top < bottom ) {\r
-               var a = {};\r
-               a[PARAM_DEPTH] = top;\r
-               var temp = template.cloneNode(true);\r
-               temp.appendChild(text(findOrgTypeFromDepth(top).opac_label()))\r
-               temp.setAttribute('href',buildOPACLink(a));\r
-               par.appendChild(temp);\r
-               top++;\r
-       }\r
-}\r
-\r
-function resultSuggestSearchClass() {\r
-       var stype = getStype();\r
-       if(stype == STYPE_KEYWORD) return;\r
-       var a = {}; var ref;\r
-       unHideMe($('low_hits_search_type'));\r
-       if(stype != STYPE_TITLE) {\r
-               ref = $('low_hits_title_search');\r
-               unHideMe(ref);\r
-               a[PARAM_STYPE] = STYPE_TITLE;\r
-               ref.setAttribute('href',buildOPACLink(a));\r
-       }\r
-       if(stype != STYPE_AUTHOR) {\r
-               ref = $('low_hits_author_search');\r
-               unHideMe(ref);\r
-               a[PARAM_STYPE] = STYPE_AUTHOR;\r
-               ref.setAttribute('href',buildOPACLink(a));\r
-       }\r
-       if(stype != STYPE_SUBJECT) {\r
-               ref = $('low_hits_subject_search');\r
-               unHideMe(ref);\r
-               a[PARAM_STYPE] = STYPE_SUBJECT;\r
-               ref.setAttribute('href',buildOPACLink(a));\r
-       }\r
-       if(stype != STYPE_KEYWORD) {\r
-               ref = $('low_hits_keyword_search');\r
-               unHideMe(ref);\r
-               a[PARAM_STYPE] = STYPE_KEYWORD;\r
-               ref.setAttribute('href',buildOPACLink(a));\r
-       }\r
-       if(stype != STYPE_SERIES) {\r
-               ref = $('low_hits_series_search');\r
-               unHideMe(ref);\r
-               a[PARAM_STYPE] = STYPE_SERIES;\r
-               ref.setAttribute('href',buildOPACLink(a));\r
-       }\r
-}\r
-\r
-function resultSuggestSpelling(r) {\r
-       var res = r.getResultObject();\r
-       var phrase = getTerm();\r
-       var words = phrase.split(/ /);\r
-\r
-       var newterm = "";\r
-\r
-       for( var w = 0; w < words.length; w++ ) {\r
-               var word = words[w];\r
-               var blob = grep(res, function(i){return (i.word == word);});\r
-               if( blob ) blob = blob[0];\r
-               else continue;\r
-               if( blob.word == word ) {\r
-                       if( blob.suggestions && blob.suggestions[0] ) {\r
-                               newterm += " " + blob.suggestions[0];\r
-                               unHideMe($('did_you_mean'));\r
-                       } else {\r
-                               newterm += " " + word;\r
-                       }\r
-               }\r
-       }\r
-       var cell = $('zero_hits_suggestions');\r
-       var s = res[0].suggestions;\r
-       for(var i in s) {\r
-               if(i==0) continue;\r
-               if(i==10) break; //limit suggestions\r
-               cell.appendChild(elem('a',{href:buildOPACLink({t:s[i]})},s[i]));\r
-               cell.appendChild(elem('br'));\r
-       }\r
-       if(newterm.toLowerCase().trim()!=getTerm().toLowerCase().trim()) unHideMe($('zero_hits_label1'));\r
-       if(res[0].suggestions && res[0].suggestions.length>0) unHideMe($('zero_hits_label2'));\r
-\r
-       var arg = {};\r
-       arg[PARAM_TERM] = newterm;\r
-       $('spell_check_link').setAttribute('href', buildOPACLink(arg));\r
-       $('spell_check_link').appendChild(text(newterm));\r
-}\r
-\r
-\r
-function resultPaginate() {\r
-       var o = getOffset();\r
-       var args = {};\r
-\r
-       if( !(  ((o) + getDisplayCount()) >= getHitCount()) ) {\r
-\r
-               args[PARAM_OFFSET]      = o + getDisplayCount();\r
-               args[PARAM_SORT]                = SORT;\r
-               args[PARAM_SORT_DIR] = SORT_DIR;\r
-               args[PARAM_RLIST]               = new CGI().param(PARAM_RLIST);\r
-\r
-               G.ui.result.next_link.setAttribute("href", buildOPACLink(args)); \r
-               addCSSClass(G.ui.result.next_link, config.css.result.nav_active);\r
-\r
-               $('next_link2').setAttribute("href", buildOPACLink(args)); \r
-               addCSSClass($('next_link2'), config.css.result.nav_active);\r
-\r
-               args[PARAM_OFFSET] = getHitCount() - (getHitCount() % getDisplayCount());\r
-\r
-               /* when hit count is divisible by display count, we have to adjust */\r
-               if( getHitCount() % getDisplayCount() == 0 ) \r
-                       args[PARAM_OFFSET] -= getDisplayCount();\r
-       }\r
-\r
-       if( o > 0 ) {\r
-\r
-               var args = {};\r
-               args[PARAM_SORT]                = SORT;\r
-               args[PARAM_SORT_DIR] = SORT_DIR;\r
-               args[PARAM_RLIST]               = new CGI().param(PARAM_RLIST);\r
-\r
-               args[PARAM_OFFSET] = o - getDisplayCount();\r
-               G.ui.result.prev_link.setAttribute( "href", buildOPACLink(args)); \r
-               addCSSClass(G.ui.result.prev_link, config.css.result.nav_active);\r
-\r
-               $('prev_link2').setAttribute( "href", buildOPACLink(args)); \r
-               addCSSClass($('prev_link2'), config.css.result.nav_active);\r
-\r
-               args[PARAM_OFFSET] = 0;\r
-               G.ui.result.home_link.setAttribute( "href", buildOPACLink(args)); \r
-               addCSSClass(G.ui.result.home_link, config.css.result.nav_active);\r
-       }\r
-       \r
-       // pagination - google style\r
-       var pages = getHitCount() / getDisplayCount();\r
-       var cpage = (getOffset()/getDisplayCount()) + 1;\r
-       var start = 0;\r
-       pages = Math.floor(pages);\r
-       cpage = Math.floor(cpage);\r
-       var end = pages>9?8:pages;\r
-       \r
-       // narrow our window of visible page numbers to 9 - sets start and end pages for the loop\r
-       if(cpage>4) {\r
-               start = cpage-5;\r
-               end = cpage+3>pages?pages:cpage+3;\r
-               if(cpage+3>pages) { start = (cpage-5)-(cpage-pages+3); }\r
-               if(start<0) start=0;\r
-       } // ugh... I hate math.\r
-       \r
-       if(pages>0) {\r
-               var span = $('nav_pages');\r
-               var span2 = $('nav_pages2');\r
-               for(var i=start; i<=end; i++) {\r
-                       if(i==end && (getHitCount()%getDisplayCount())==0) break;\r
-                       var temp = elem('span',{style:'padding:0px 3px;'});\r
-                       temp.style.padding='0px 3px';\r
-                       args[PARAM_OFFSET] = getDisplayCount()*i;\r
-                       if(i==cpage-1) { var link = text(i+1); temp.style.color="red" }\r
-                               else var link = elem('a',{href:buildOPACLink(args)},i+1);\r
-                       temp.appendChild(link);\r
-                       span.appendChild(temp);\r
-                       span2.appendChild(temp.cloneNode(true));\r
-               }\r
-       }\r
-       //////\r
-\r
-       if(getDisplayCount() < getHitCount()) {\r
-               unHideMe($('start_end_links_span'));\r
-               unHideMe($('start_end_links_span2'));\r
-   }\r
-\r
-       showCanvas();\r
-       try{searchTimer.stop()}catch(e){}\r
-}\r
-\r
-function buildunAPISpan (span, type, id) {\r
-       if(!span || !type || !id) return;\r
-       var cgi = new CGI();\r
-       var d = new Date();\r
-\r
-       addCSSClass(span,'unapi-id');\r
-\r
-       span.setAttribute(\r
-               'title',\r
-               'tag:' + cgi.server_name + ',' +\r
-                       d.getFullYear() +\r
-                       ':' + type + '/' + id\r
-       );\r
-}\r
-\r
-function unhideGoogleBooksLink (data) {\r
-    for ( var i in data ) {\r
-        //if (data[i].preview == 'noview') continue;\r
-\r
-        var gbspan = $n(document.documentElement, 'googleBooksLink-' + i);\r
-        var gba = $n(gbspan, "googleBooks-link");\r
-\r
-        gba.setAttribute(\r
-            'href',\r
-            data[i].info_url\r
-        );\r
-        removeCSSClass( gbspan, 'hide_me' );\r
-    }\r
-}\r
-\r
-/* display the record info in the record display table 'pos' is the \r
-               zero based position the record should have in the display table */\r
-function resultDisplayRecord(rec, pos, is_mr) {\r
-       //fieldmapper.IDL.load(['mvr']);\r
-       if(rec == null || rec.__c) rec = new mvr(); /* so the page won't die if there was an error */\r
-       recordsHandled++;\r
-       recordsCache.push(rec);\r
-\r
-       var r = table.rows[pos + 1];\r
-       r.id += "_" + rec.doc_id();\r
-    var currentISBN = cleanISBN(rec.isbn());\r
-\r
-    if (googleBooksLink) {\r
-           var gbspan = $n(r, "googleBooksLink");\r
-        if (currentISBN && gbspan) {\r
-            gbspan.setAttribute('name', gbspan.getAttribute('name') + '-' + currentISBN );\r
-            if (isbnList) isbnList += ', ';\r
-            isbnList += currentISBN;\r
-        }\r
-    }\r
-\r
-    if (currentISBN && chilifresh && chilifresh != '(none)') {\r
-        var cfrow = $n(r, "chilifreshReview");\r
-        if (cfrow) {\r
-            removeCSSClass( cfrow, 'hide_me' );\r
-        }\r
-        var cflink = $n(r, "chilifreshReviewLink");\r
-        if (cflink) {\r
-            cflink.setAttribute(\r
-                'id',\r
-                'isbn_' + currentISBN\r
-            );\r
-        }\r
-        var cfdiv = $n(r, "chilifreshReviewResult");\r
-        if (cfdiv) {\r
-            cfdiv.setAttribute(\r
-                'id',\r
-                'chili_review_' + currentISBN\r
-            )\r
-        }\r
-    }\r
-\r
-       var pic = $n(r, config.names.result.item_jacket);\r
-       if (!pic) pic = elem("img");\r
-       //pic.setAttribute("src", buildISBNSrc(currentISBN));\r
-       pic.setAttribute("width",55);\r
-\r
-       var title_link = $n(r, config.names.result.item_title);\r
-       var author_link = $n(r, config.names.result.item_author);\r
-       var row_count = $n(r,"results_row_count");\r
-       var myListLink = $n(r,"result_my_list_link");\r
-       var reviewsLink = $n(r, 'reviews_and_more');\r
-       if(currentISBN) {\r
-               reviewsLink.href="http://contentcafe2.btol.com/ContentCafeClient/ContentCafe.aspx?UserID=KC72927&Password=CC14647&ItemKey="+currentISBN+"&Options=Y";\r
-       }\r
-\r
-       if( is_mr )  {\r
-               var onlyrec = onlyrecord[ getOffset() + pos ];\r
-               if(onlyrec) {\r
-                       buildunAPISpan($n(r,'unapi'), 'biblio-record_entry', onlyrec);\r
-\r
-                       var args = {};\r
-                       args.page = RDETAIL;\r
-                       args[PARAM_OFFSET] = 0;\r
-                       args[PARAM_RID] = onlyrec;\r
-                       args[PARAM_MRID] = rec.doc_id();\r
-                       pic.parentNode.setAttribute("href", buildOPACLink(args));\r
-                       title_link.setAttribute("href", buildOPACLink(args));\r
-                       title_link.appendChild(text(normalize(truncate(rec.title(), 65))));\r
-                       \r
-               } else {\r
-                       buildunAPISpan($n(r,'unapi'), 'metabib-metarecord', rec.doc_id());\r
-\r
-                       buildTitleLink(rec, title_link); \r
-                       var args = {};\r
-                       args.page = RRESULT;\r
-                       args[PARAM_OFFSET] = 0;\r
-                       args[PARAM_MRID] = rec.doc_id();\r
-                       pic.parentNode.setAttribute("href", buildOPACLink(args));\r
-               }\r
-\r
-       } else {\r
-               buildunAPISpan($n(r,'unapi'), 'biblio-record_entry', rec.doc_id());\r
-\r
-               //if(title_link) buildTitleDetailLink(rec, title_link); \r
-               if(title_link) {\r
-                       title_link.appendChild(text(normalize(truncate(rec.title(), 1000))));\r
-                       var argss = {};\r
-                       argss.page = RDETAIL;\r
-                       argss[PARAM_RID] = rec.doc_id();\r
-                       var linkText = title_link.innerHTML; // IE\r
-                       title_link.setAttribute("href", buildOPACLink(argss));\r
-                       title_link.innerHTML = linkText; // IE\r
-               }\r
-               var args = {};\r
-               args.page = RDETAIL;\r
-               args[PARAM_OFFSET] = 0;\r
-               args[PARAM_RID] = rec.doc_id();\r
-               pic.parentNode.setAttribute("href", buildOPACLink(args));\r
-\r
-               unHideMe($n(r,'place_hold_span'));\r
-               //$n(r,'place_hold_link').setAttribute('href','javascript:holdsDrawEditor({record:"'+rec.doc_id()+'",type:"T"});');\r
-               $n(r,'place_hold_link').onclick = function() { resultDrawHoldsWindow(rec.doc_id(), 'T'); }\r
-\r
-               /** BILL */\r
-               //dojo.require('openils.BibTemplate');  // -- this causes redundant requests per record - put in js_common.xml instead\r
-               setTimeout(\r
-                   function () { \r
-                       //new openils.BibTemplate({root : $n(r, 'bib_cn_list'), record : rec.doc_id()}).render();\r
-                       new openils.BibTemplate({root : r, record : rec.doc_id()}).render();\r
-                    }, 0\r
-               );\r
-               /** BILL */\r
-       }\r
-       \r
-       if(row_count) row_count.innerHTML = (pos+1)+getOffset()+".";\r
-       if(myListLink) myListLink.setAttribute("href","javascript:addMyList("+rec.doc_id()+");")\r
-       title_link.setAttribute("title",rec.title());\r
-       buildSearchLink(STYPE_AUTHOR, rec.author(), author_link);\r
-\r
-       if(! is_mr ) {\r
-               $n(r, "results_pub_date").innerHTML = (!rec.pubdate())?"":rec.pubdate();\r
-               $n(r, "results_pub").innerHTML = (!rec.publisher())?"":rec.publisher();\r
-               $n(r, "results_isbn").innerHTML = (!currentISBN)?"":currentISBN;\r
-               $n(r, "results_edition").innerHTML = (!rec.edition())?"":rec.edition();\r
-               $n(r, "results_phys_desc").innerHTML = (!rec.physical_description())?"":rec.physical_description();\r
-               if(isInAnonList(parseInt(rec.doc_id()))) { \r
-                       $n(r, 'result_my_list_link').innerHTML = 'Remove from my list';\r
-                       $n(r, 'result_my_list_link').title = 'Remove from my list';\r
-                       //$n(r, 'result_my_list_link').appendChild(elem('img', {src:'/opac/skin/kcls/graphics/add_mylist_sel.gif'}, null));\r
-               }\r
-               \r
-               if(!isNull(rec.edition()))      {\r
-                       unHideMe( $n(r, "result_table_extra_span"));\r
-                       $n(r, "result_table_edition_span").appendChild( text( rec.edition()) );\r
-               }\r
-               if(!isNull(rec.pubdate())) {\r
-                       unHideMe( $n(r, "result_table_extra_span"));\r
-                       unHideMe($n(r, "result_table_pub_span"));\r
-                       $n(r, "result_table_pub_span").appendChild( text( rec.pubdate() ));\r
-               }\r
-               if(!isNull(rec.publisher()) ) {\r
-                       unHideMe( $n(r, "result_table_extra_span"));\r
-                       unHideMe($n(r, "result_table_pub_span"));\r
-                       $n(r, "result_table_pub_span").appendChild( text( " " + rec.publisher() ));\r
-               }\r
-\r
-               if(!isNull(rec.physical_description()) ) {\r
-                       unHideMe( $n(r, "result_table_extra_span"));\r
-                       var t = " " + rec.physical_description();\r
-                       //$n(r, "result_table_phys_span").appendChild( text(t.replace(/:.*/g,'')));\r
-                       $n(r, "result_table_phys_span").appendChild( text(t));\r
-               }\r
-       }\r
-\r
-       resultBuildFormatIcons( r, rec, is_mr );\r
-       unHideMe(r);\r
-       runEvt("result", "recordDrawn", rec.doc_id(), title_link);\r
-\r
-       \r
-       if(resultPageIsDone())  {\r
-               runEvt('result', 'allRecordsReceived', recordsCache);\r
-       }\r
-}\r
-\r
-function resultDrawHoldsWindow(hold_target, hold_type) {\r
-    var src = location.href;\r
-    if(forceLoginSSL && src.match(/^http:/)) {\r
-        src = src.replace(/^http:/, 'https:');\r
-        if(src.match(/&hold_target=/)) {\r
-            src.replace(/&hold_target=(\d+)/, hold_target);\r
-        } else {\r
-            src += '&hold_target=' + hold_target;\r
-        }\r
-        location.href = src;\r
-    } else {\r
-        holdsDrawEditor({record:hold_target, type:hold_type});\r
-    }\r
-}\r
-\r
-\r
-function _resultFindRec(id) {\r
-       for( var i = 0; i != recordsCache.length; i++ ) {\r
-               var rec = recordsCache[i];\r
-               if( rec && rec.doc_id() == id )\r
-                       return rec;\r
-       }\r
-       return null;\r
-}\r
-\r
-\r
-function resultBuildFormatIcons( row, rec, is_mr ) {\r
-       var ress = "";\r
-       var imgEl = $n(row, "result_mat_type");\r
-       if(!imgEl) return;\r
-       \r
-       ress = getMarcData(rec.doc_id(),"998","d");\r
-       if(setFormatIcon(imgEl, ress)) unHideMe(imgEl);\r
-\r
-}\r
-\r
-function fetchGoogleBooksLink () {\r
-       return;\r
-    if (isbnList && googleBooksLink) {\r
-        var scriptElement = document.createElement("script");\r
-        scriptElement.setAttribute("id", "jsonScript");\r
-        scriptElement.setAttribute("src",\r
-            "https://books.google.com/books?bibkeys=" + \r
-            escape(isbnList) + "&jscmd=viewapi&callback=unhideGoogleBooksLink");\r
-        scriptElement.setAttribute("type", "text/javascript");\r
-        // make the request to Google Book Search\r
-        document.documentElement.firstChild.appendChild(scriptElement);\r
-    }\r
-}\r
-\r
-function resultPageIsDone(pos) {\r
-\r
-       return (recordsHandled == getDisplayCount() \r
-               || recordsHandled + getOffset() == getHitCount());\r
-}\r
-\r
-var resultCCHeaderApplied = false;\r
-\r
-/* -------------------------------------------------------------------- */\r
-/* dynamically add the copy count rows based on the org type 'countsrow' \r
-       is the row into which we will add TD's to hold the copy counts \r
-       This code generates copy count cells with an id of\r
-       'copy_count_cell_<depth>_<pagePosition>'  */\r
-function resultAddCopyCounts(rec, pagePosition) {\r
-\r
-       var r = table.rows[pagePosition + 1];\r
-       var countsrow = $n(r, config.names.result.counts_row );\r
-       var ccell = $n(countsrow, config.names.result.count_cell);\r
-\r
-       var nodes = orgNodeTrail(findOrgUnit(getLocation()));\r
-       var node = nodes[0];\r
-       var type = findOrgType(node.ou_type());\r
-       ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;\r
-       ccell.title = type.opac_label();\r
-       //addCSSClass(ccell, config.css.result.cc_cell_even);\r
-\r
-       var lastcell = ccell;\r
-       var lastheadcell = null;\r
-\r
-       var cchead = null;\r
-       var ccheadcell = null;\r
-       if(!resultCCHeaderApplied && !getLasso()) {\r
-               ccrow = $('result_thead_row');\r
-               ccheadcell =  ccrow.removeChild($n(ccrow, "result_thead_ccell"));\r
-               var t = ccheadcell.cloneNode(true);\r
-               lastheadcell = t;\r
-               t.appendChild(text(type.opac_label()));\r
-               ccrow.appendChild(t);\r
-               resultCCHeaderApplied = true;\r
-       }\r
-}\r
-\r
-/* collect copy counts for a record using method 'methodName' */\r
-function resultCollectCopyCounts(rec, pagePosition, methodName) {\r
-       if(rec == null || rec.doc_id() == null) return;\r
-\r
-       var loc = getLasso();\r
-       if (loc) loc = -loc;\r
-       else loc= getLocation();\r
-\r
-       var req = new Request(methodName, loc, rec.doc_id(), getForm() );\r
-       req.request.userdata = [ rec, pagePosition ];\r
-       req.callback(resultHandleCopyCounts);\r
-       req.send();\r
-}\r
-\r
-function resultHandleCopyCounts(r) {\r
-       runEvt('result', 'copyCountsReceived', r.userdata[0], r.userdata[1], r.getResultObject()); \r
-}\r
-\r
-\r
-/* XXX Needs to understand Lasso copy counts... */\r
-/* display the collected copy counts */\r
-function resultDisplayCopyCounts(rec, pagePosition, copy_counts) {\r
-       if(copy_counts == null || rec == null) return;\r
-       var r = table.rows[pagePosition + 1];\r
-       var cnt_avail = $n(r, "copy_count_avail");\r
-       if(cnt_avail && copy_counts[0]) {\r
-               /*if(copy_counts[0].available)*/ cnt_avail.innerHTML = copy_counts[0].available+' cop'+(copy_counts[0].available==1?'y':'ies')+' available';\r
-               //else {\r
-                       fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.bre.holds.count'], {async:true, params:[rec.doc_id(), r.id], oncomplete: drawHoldsCount});\r
-                       $n(r, 'copy_holds2').innerHTML = ' on first copy returned of '+copy_counts[0].count+' cop'+(copy_counts[0].count==1?'y':'ies');\r
-               //}\r
-       }\r
-}\r
-\r
-function drawHoldsCount(r) {\r
-       if(!r.params[1]) return;\r
-       var row = $(r.params[1]);\r
-       if(!row) return;\r
-       var span = $n(row, 'copy_holds');\r
-       var resp = r.recv().content();\r
-       span.innerHTML = resp+' hold'+(resp==1?'':'s')+' ';\r
-}\r
-\r
-function showDetailedInfo(bool) {\r
-       \r
-       var tbls = dojo.query('.results_info_table',$('result_table'));\r
-       if(bool) {\r
-         tbls.forEach(function(node, index, arr){\r
-               unHideMe($n(node,'results_pub_tr'));\r
-               unHideMe($n(node,'results_isbn_tr'));\r
-               unHideMe($n(node,'results_edition_tr'));\r
-               unHideMe($n(node,'results_phys_desc_tr'));\r
-         });\r
-       } else {\r
-         tbls.forEach(function(node, index, arr){\r
-               hideMe($n(node,'results_pub_tr'));\r
-               hideMe($n(node,'results_isbn_tr'));\r
-               hideMe($n(node,'results_edition_tr'));\r
-               hideMe($n(node,'results_phys_desc_tr'));\r
-         });\r
-       }\r
-}\r
-\r
-function fetchChiliFreshReviews() {\r
-    if (chilifresh && chilifresh != '(none)') {\r
-        try { chili_init(); } catch(E) { dump(E + '\n'); }\r
-    }\r
-}\r
-\r
-function postResultsCollect() {\r
-       var it = getCacheValue('showHoldEditor');\r
-       if(it) {\r
-               setCacheValue('showHoldEditor', null);\r
-               holdsDrawEditor({record:it.record, type:it.type});\r
-       }\r
-}\r
+config.ids.result = {};
+config.css.result = {};
+config.names.result = {};
+config.ids.result.offset_start = "offset_start";
+config.ids.result.offset_end       = "offset_end";
+config.ids.result.result_count = "result_count";
+config.ids.result.next_link        = 'next_link';
+config.ids.result.prev_link        = 'prev_link';
+config.ids.result.home_link        = 'search_home_link';
+config.ids.result.end_link         = 'end_link';
+config.ids.result.main_table       = 'result_table';
+config.ids.result.row_template = 'result_table_template';
+config.ids.result.num_pages        = 'num_pages';
+config.ids.result.current_page = 'current_page';
+config.css.result.nav_active       = "nav_link_active";
+config.ids.result.top_div          = "result_table_div";
+config.ids.result.nav_links        = "search_nav_links";
+config.ids.result.info             = "result_info_div";
+config.css.result.cc_cell_even = "copy_count_cell_even";
+config.names.result.item_jacket    = "item_jacket";
+config.names.result.item_title = "item_title";
+config.names.result.item_author    = "item_author";
+config.names.result.counts_row = "counts_row";
+config.names.result.count_cell = "copy_count_cell";
+config.names.result.format_cell = 'result_table_format_cell';
+config.names.result.format_link = 'resource_link'
+config.names.result.format_pic = 'format_pic'
+config.ids.result = {};
+config.css.result = {};
+config.names.result = {};
+config.ids.result.offset_start = "offset_start";
+config.ids.result.offset_end       = "offset_end";
+config.ids.result.result_count = "result_count";
+config.ids.result.next_link        = 'next_link';
+config.ids.result.prev_link        = 'prev_link';
+config.ids.result.home_link        = 'search_home_link';
+config.ids.result.end_link         = 'end_link';
+config.ids.result.main_table       = 'result_table';
+config.ids.result.row_template = 'result_table_template';
+config.ids.result.num_pages        = 'num_pages';
+config.ids.result.current_page = 'current_page';
+config.css.result.nav_active       = "nav_link_active";
+config.ids.result.top_div          = "result_table_div";
+config.ids.result.nav_links        = "search_nav_links";
+config.ids.result.info             = "result_info_div";
+config.css.result.cc_cell_even = "copy_count_cell_even";
+config.names.result.item_jacket    = "item_jacket";
+config.names.result.item_title = "item_title";
+config.names.result.item_author    = "item_author";
+config.names.result.counts_row = "counts_row";
+config.names.result.count_cell = "copy_count_cell";
+config.names.result.format_cell = 'result_table_format_cell';
+config.names.result.format_link = 'resource_link'
+config.names.result.format_pic = 'format_pic'
+
+var recordsHandled = 0;
+var recordsCache = [];
+var lowHitCount = 4;
+var isbnList = '';
+var googleBooksLink = true;
+buildOrgSel($('holdsCacheSel'), globalOrgTree, 0);
+
+var resultFetchAllRecords = false;
+var resultCompiledSearch = null;
+
+/* set up the event handlers */
+if( findCurrentPage() == MRESULT || findCurrentPage() == RRESULT ) {
+       G.evt.result.hitCountReceived.push(resultSetHitInfo);
+       G.evt.result.recordReceived.push(resultDisplayRecord, resultAddCopyCounts);
+       G.evt.result.copyCountsReceived.push(resultDisplayCopyCounts);
+       G.evt.result.allRecordsReceived.push(function(){unHideMe($('tehSideBar'));},function(){unHideMe($('results_view_span'));},resultBuildCaches,
+               function(){unHideMe($('result_info_2'))}, fetchGoogleBooksLink, fetchChiliFreshReviews, postResultsCollect);
+
+       attachEvt('result','lowHits',resultLowHits);
+       attachEvt('result','zeroHits',resultZeroHits);
+       attachEvt( "common", "locationUpdated", resultSBSubmit );
+       /* do this after we have ID's so the rank for mr pages will be correct */
+       attachEvt("result", "preCollectRecords", resultPaginate);
+}
+
+function resultSBSubmit(){searchBarSubmit();}
+
+/* returns the last 'index' postion ocurring in this page */
+function resultFinalPageIndex() {
+       if(getHitCount() < (getOffset() + getDisplayCount())) 
+               return getHitCount() - 1;
+       return getOffset() + getDisplayCount() - 1;
+}
+
+function plausible_ident(s) {
+       s = s.replace(/^\s*(.+)\s*$/, '$1');
+       s = s.replace(/^(\S+)\s.*$/, '$1');
+       return s;
+}
+
+
+/* generic search method */
+function resultCollectSearchIds( type, method, handler ) {
+
+       var sort                = (getSort() == SORT_TYPE_REL) ? null : getSort(); 
+       var sortdir = (sort) ? ((getSortDir()) ? getSortDir() : SORT_DIR_ASC) : null;
+
+       var item_type;
+       var item_form;
+       var args = {};
+
+       if( type ) {
+               var form = parseForm(getForm());
+               item_type = form.item_type;
+               item_form = form.item_form;
+
+       } else {
+               item_type = (getItemType()) ? getItemType().split(/,/) : null;
+               item_form = (getItemForm()) ? getItemForm().split(/,/) : null;
+       }
+       
+       item_type=null;
+
+       var limit = (resultFetchAllRecords) ? 1000 : getDisplayCount();
+
+       if( getOffset() > 0 ) {
+               if( getHitCount() > 0 && (getOffset() + getDisplayCount()) > getHitCount() ) 
+                       limit = getHitCount() - getOffset();
+       }
+
+       var lasso = getLasso();
+
+       if (lasso) args.org_unit = -lasso;
+       else args.org_unit = getLocation();
+
+       args.depth    = getDepth();
+       args.limit    = limit;
+       args.offset   = getOffset();
+       args.visibility_limit = 3000;
+    args.default_class = getStype();
+
+       if(sort) args.sort = sort;
+       if(sortdir) args.sort_dir = sortdir;
+       if(item_type) args.item_type    = item_type;
+       if(item_form) args.item_form    = item_form;
+    if(getAvail()) args.available = 1;
+       //args.format="marcxml";
+
+       if(getFacet()) args.facets = getFacet();
+
+       if(getAudience()) args.audience  = getAudience().split(/,/);
+       if(getLitForm()) args.lit_form  = getLitForm().split(/,/);
+       if(getLanguage()) args.language = getLanguage().split(/,/);
+       if(getBibLevel()) args.bib_level        = getBibLevel().split(/,/);
+       if(getCopyLocs()) args.locations        = getCopyLocs().split(/,/);
+    if(getPubdBefore()) args.before = getPubdBefore();
+    else if(getPubdAfter()) args.after = getPubdAfter();
+    else if(getPubdBetween()) args.between = getPubdBetween().split(/,/);
+
+       _debug('Search args: ' + js2JSON(args));
+       _debug('Raw query: ' + getTerm());
+
+       var req = new Request(method, args, getTerm(), 1);
+       req.callback(handler);
+       req.send();
+}
+
+
+
+
+
+/* set the search result info, number of hits, which results we're 
+       displaying, links to the next/prev pages, etc. */
+function resultSetHitInfo() { 
+
+       var lasso = getLasso();
+       if (!lasso) {
+               /* tell the user where the results are coming from */
+               var baseorg = findOrgUnit(getLocation());
+               var depth = getDepth();
+               var mydepth = findOrgDepth(baseorg);
+               if( findOrgDepth(baseorg) != depth ) {
+                       var tmporg = baseorg;
+                       while( mydepth > depth ) {
+                               mydepth--;
+                               tmporg = findOrgUnit(tmporg.parent_ou());
+                       }
+                       unHideMe($('including_results_for'));
+                       try{$('including_results_location').appendChild(text(tmporg.name()));} catch(e){}
+               }
+       }
+
+
+       try{searchTimer.stop()}catch(e){}
+
+       //if( findCurrentPage() == MRESULT ) {
+       if( findCurrentPage() == MRESULT || 
+
+               (findCurrentPage() == RRESULT &&
+                       (
+                               getRtype() == RTYPE_TITLE ||
+                               getRtype() == RTYPE_AUTHOR ||
+                               getRtype() == RTYPE_SUBJECT ||
+                               getRtype() == RTYPE_SERIES ||
+                               getRtype() == RTYPE_KEYWORD 
+                       )
+
+               ) ) {
+
+               if(getHitCount() <= lowHitCount && getTerm())
+                       runEvt('result', 'lowHits');
+       }
+
+       if(getHitCount() == 0) {
+               runEvt('result', 'zeroHits');
+               return;
+       }
+
+
+       var pages = getHitCount() / getDisplayCount();
+       if(pages % 1) pages = parseInt(pages) + 1;
+
+       
+
+       var cpage = (getOffset()/getDisplayCount()) + 1;
+
+       G.ui.result.current_page.appendChild(text(cpage));
+       G.ui.result.num_pages.appendChild(text(pages)); /* the ) is dumb */
+
+       $('current_page2').appendChild(text(cpage));
+       $('num_pages2').appendChild(text(pages + ")")); /* the ) is dumb */
+
+       /* set the offsets */
+       var offsetEnd = getDisplayCount() + getOffset();  
+       if( getDisplayCount() > (getHitCount() - getOffset()))  
+               offsetEnd = getHitCount();
+
+       G.ui.result.offset_end.appendChild(text(offsetEnd));
+       G.ui.result.offset_start.appendChild(text(getOffset() + 1));
+
+       $('offset_end2').appendChild(text(offsetEnd));
+       $('offset_start2').appendChild(text(getOffset() + 1));
+
+       G.ui.result.result_count.appendChild(text(getHitCount()));
+       unHideMe(G.ui.result.info);
+       unHideMe($('result_numbers1'));
+
+       $('result_count2').appendChild(text(getHitCount()));
+       unHideMe($('result_info_div2'));
+}
+
+function resultLowHits() {
+       showCanvas();
+       unHideMe($('result_low_hits'));
+       if(getHitCount() > 0)
+               unHideMe($('result_low_hits_msg'));
+
+    var words = [];
+    for(var key in resultCompiledSearch.searches) 
+        words.push(resultCompiledSearch.searches[key].term);
+
+       var sreq = new Request(CHECK_SPELL, words.join(' '));
+       sreq.callback(resultSuggestSpelling);
+       sreq.send();
+
+    for(var key in resultCompiledSearch.searches) {
+               var areq = new Request(FETCH_CROSSREF, key, resultCompiledSearch.searches[key].term);
+               areq.callback(resultLowHitXRef);
+               areq.send();
+       }
+
+       if( !(getForm() == null || getForm() == 'all' || getForm() == "") ) {
+               var a = {};
+               a[PARAM_FORM] = "all";
+               $('low_hits_remove_format_link').setAttribute('href',buildOPACLink(a));
+               unHideMe($('low_hits_remove_format'));
+       }
+
+       resultSuggestSearchClass();
+
+       if(getTerm()) resultExpandSearch(); /* advanced search */
+}
+
+var lowHitsXRefSet = {};
+var lowHitsXRefLink;
+var lowHitsXRefLinkParent;
+function resultLowHitXRef(r) {
+       if(!lowHitsXRefLink){
+               lowHitsXRefLinkParent = $('low_hits_xref_link').parentNode;
+               lowHitsXRefLink = lowHitsXRefLinkParent.removeChild($('low_hits_xref_link'));
+       }
+       var res = r.getResultObject();
+       var arr = res.from;
+       arr.concat(res.also);
+       if(arr && arr.length > 0) {
+               unHideMe($('low_hits_cross_ref'));
+               var word;
+               var c = 0;
+               while( word = arr.shift() ) {
+
+            if (lowHitsXRefSet[word] == 1) continue;
+            lowHitsXRefSet[word] = 1;
+
+                       if(c++ > 20) break;
+                       var a = {};
+                       a[PARAM_TERM] = word;
+                       var template = lowHitsXRefLink.cloneNode(true);
+                       template.setAttribute('href',buildOPACLink(a));
+                       template.appendChild(text(word));
+                       lowHitsXRefLinkParent.appendChild(template);
+                       lowHitsXRefLinkParent.appendChild(text(' '));
+               }
+       }
+}
+
+function resultZeroHits() {
+       hideMe($('result_header'));
+       hideMe($('result_table_div'));
+       hideMe($('statusbar'));
+       $('rresults_page').style.width="690px";
+       unHideMe($('zero_search_hits'));
+       $('zero_hits_term').innerHTML = getTerm();
+       //showCanvas();
+       unHideMe($('result_low_hits'));
+       unHideMe($('result_zero_hits_msg'));
+       if(getTerm()) resultExpandSearch(); /* advanced search */
+}
+
+function resultExpandSearch() {
+       var top = findOrgDepth(globalOrgTree);
+       if(getDepth() == top) return;
+       unHideMe($('low_hits_expand_range'));
+       var par = $('low_hits_expand_link').parentNode;
+       var template = par.removeChild($('low_hits_expand_link'));
+
+       var bottom = getDepth();
+       while( top < bottom ) {
+               var a = {};
+               a[PARAM_DEPTH] = top;
+               var temp = template.cloneNode(true);
+               temp.appendChild(text(findOrgTypeFromDepth(top).opac_label()))
+               temp.setAttribute('href',buildOPACLink(a));
+               par.appendChild(temp);
+               top++;
+       }
+}
+
+function resultSuggestSearchClass() {
+       var stype = getStype();
+       if(stype == STYPE_KEYWORD) return;
+       var a = {}; var ref;
+       unHideMe($('low_hits_search_type'));
+       if(stype != STYPE_TITLE) {
+               ref = $('low_hits_title_search');
+               unHideMe(ref);
+               a[PARAM_STYPE] = STYPE_TITLE;
+               ref.setAttribute('href',buildOPACLink(a));
+       }
+       if(stype != STYPE_AUTHOR) {
+               ref = $('low_hits_author_search');
+               unHideMe(ref);
+               a[PARAM_STYPE] = STYPE_AUTHOR;
+               ref.setAttribute('href',buildOPACLink(a));
+       }
+       if(stype != STYPE_SUBJECT) {
+               ref = $('low_hits_subject_search');
+               unHideMe(ref);
+               a[PARAM_STYPE] = STYPE_SUBJECT;
+               ref.setAttribute('href',buildOPACLink(a));
+       }
+       if(stype != STYPE_KEYWORD) {
+               ref = $('low_hits_keyword_search');
+               unHideMe(ref);
+               a[PARAM_STYPE] = STYPE_KEYWORD;
+               ref.setAttribute('href',buildOPACLink(a));
+       }
+       if(stype != STYPE_SERIES) {
+               ref = $('low_hits_series_search');
+               unHideMe(ref);
+               a[PARAM_STYPE] = STYPE_SERIES;
+               ref.setAttribute('href',buildOPACLink(a));
+       }
+}
+
+function resultSuggestSpelling(r) {
+       var res = r.getResultObject();
+       var phrase = getTerm();
+       var words = phrase.split(/ /);
+
+       var newterm = "";
+
+       for( var w = 0; w < words.length; w++ ) {
+               var word = words[w];
+               var blob = grep(res, function(i){return (i.word == word);});
+               if( blob ) blob = blob[0];
+               else continue;
+               if( blob.word == word ) {
+                       if( blob.suggestions && blob.suggestions[0] ) {
+                               newterm += " " + blob.suggestions[0];
+                               unHideMe($('did_you_mean'));
+                       } else {
+                               newterm += " " + word;
+                       }
+               }
+       }
+       var cell = $('zero_hits_suggestions');
+       var s = res[0].suggestions;
+       for(var i in s) {
+               if(i==0) continue;
+               if(i==10) break; //limit suggestions
+               cell.appendChild(elem('a',{href:buildOPACLink({t:s[i]})},s[i]));
+               cell.appendChild(elem('br'));
+       }
+       if(newterm.toLowerCase().trim()!=getTerm().toLowerCase().trim()) unHideMe($('zero_hits_label1'));
+       if(res[0].suggestions && res[0].suggestions.length>0) unHideMe($('zero_hits_label2'));
+
+       var arg = {};
+       arg[PARAM_TERM] = newterm;
+       $('spell_check_link').setAttribute('href', buildOPACLink(arg));
+       $('spell_check_link').appendChild(text(newterm));
+}
+
+
+function resultPaginate() {
+       var o = getOffset();
+       var args = {};
+
+       if( !(  ((o) + getDisplayCount()) >= getHitCount()) ) {
+
+               args[PARAM_OFFSET]      = o + getDisplayCount();
+               args[PARAM_SORT]                = SORT;
+               args[PARAM_SORT_DIR] = SORT_DIR;
+               args[PARAM_RLIST]               = new CGI().param(PARAM_RLIST);
+
+               G.ui.result.next_link.setAttribute("href", buildOPACLink(args)); 
+               addCSSClass(G.ui.result.next_link, config.css.result.nav_active);
+
+               $('next_link2').setAttribute("href", buildOPACLink(args)); 
+               addCSSClass($('next_link2'), config.css.result.nav_active);
+
+               args[PARAM_OFFSET] = getHitCount() - (getHitCount() % getDisplayCount());
+
+               /* when hit count is divisible by display count, we have to adjust */
+               if( getHitCount() % getDisplayCount() == 0 ) 
+                       args[PARAM_OFFSET] -= getDisplayCount();
+       }
+
+       if( o > 0 ) {
+
+               var args = {};
+               args[PARAM_SORT]                = SORT;
+               args[PARAM_SORT_DIR] = SORT_DIR;
+               args[PARAM_RLIST]               = new CGI().param(PARAM_RLIST);
+
+               args[PARAM_OFFSET] = o - getDisplayCount();
+               G.ui.result.prev_link.setAttribute( "href", buildOPACLink(args)); 
+               addCSSClass(G.ui.result.prev_link, config.css.result.nav_active);
+
+               $('prev_link2').setAttribute( "href", buildOPACLink(args)); 
+               addCSSClass($('prev_link2'), config.css.result.nav_active);
+
+               args[PARAM_OFFSET] = 0;
+               G.ui.result.home_link.setAttribute( "href", buildOPACLink(args)); 
+               addCSSClass(G.ui.result.home_link, config.css.result.nav_active);
+       }
+       
+       // pagination - google style
+       var pages = getHitCount() / getDisplayCount();
+       var cpage = (getOffset()/getDisplayCount()) + 1;
+       var start = 0;
+       pages = Math.floor(pages);
+       cpage = Math.floor(cpage);
+       var end = pages>9?8:pages;
+       
+       // narrow our window of visible page numbers to 9 - sets start and end pages for the loop
+       if(cpage>4) {
+               start = cpage-5;
+               end = cpage+3>pages?pages:cpage+3;
+               if(cpage+3>pages) { start = (cpage-5)-(cpage-pages+3); }
+               if(start<0) start=0;
+       } // ugh... I hate math.
+       
+       if(pages>0) {
+               var span = $('nav_pages');
+               var span2 = $('nav_pages2');
+               for(var i=start; i<=end; i++) {
+                       if(i==end && (getHitCount()%getDisplayCount())==0) break;
+                       var temp = elem('span',{style:'padding:0px 3px;'});
+                       temp.style.padding='0px 3px';
+                       args[PARAM_OFFSET] = getDisplayCount()*i;
+                       if(i==cpage-1) { var link = text(i+1); temp.style.color="red" }
+                               else var link = elem('a',{href:buildOPACLink(args)},i+1);
+                       temp.appendChild(link);
+                       span.appendChild(temp);
+                       span2.appendChild(temp.cloneNode(true));
+               }
+       }
+       //////
+
+       if(getDisplayCount() < getHitCount()) {
+               unHideMe($('start_end_links_span'));
+               unHideMe($('start_end_links_span2'));
+   }
+
+       showCanvas();
+       try{searchTimer.stop()}catch(e){}
+}
+
+function buildunAPISpan (span, type, id) {
+       if(!span || !type || !id) return;
+       var cgi = new CGI();
+       var d = new Date();
+
+       addCSSClass(span,'unapi-id');
+
+       span.setAttribute(
+               'title',
+               'tag:' + cgi.server_name + ',' +
+                       d.getFullYear() +
+                       ':' + type + '/' + id
+       );
+}
+
+function unhideGoogleBooksLink (data) {
+    for ( var i in data ) {
+        //if (data[i].preview == 'noview') continue;
+
+        var gbspan = $n(document.documentElement, 'googleBooksLink-' + i);
+        var gba = $n(gbspan, "googleBooks-link");
+
+        gba.setAttribute(
+            'href',
+            data[i].info_url
+        );
+        removeCSSClass( gbspan, 'hide_me' );
+    }
+}
+
+/* display the record info in the record display table 'pos' is the 
+               zero based position the record should have in the display table */
+function resultDisplayRecord(rec, pos, is_mr) {
+       //fieldmapper.IDL.load(['mvr']);
+       if(rec == null || rec.__c) rec = new mvr(); /* so the page won't die if there was an error */
+       recordsHandled++;
+       recordsCache.push(rec);
+
+       var r = table.rows[pos + 1];
+       r.id += "_" + rec.doc_id();
+    var currentISBN = cleanISBN(rec.isbn());
+
+    if (googleBooksLink) {
+           var gbspan = $n(r, "googleBooksLink");
+        if (currentISBN && gbspan) {
+            gbspan.setAttribute('name', gbspan.getAttribute('name') + '-' + currentISBN );
+            if (isbnList) isbnList += ', ';
+            isbnList += currentISBN;
+        }
+    }
+
+    if (currentISBN && chilifresh && chilifresh != '(none)') {
+        var cfrow = $n(r, "chilifreshReview");
+        if (cfrow) {
+            removeCSSClass( cfrow, 'hide_me' );
+        }
+        var cflink = $n(r, "chilifreshReviewLink");
+        if (cflink) {
+            cflink.setAttribute(
+                'id',
+                'isbn_' + currentISBN
+            );
+        }
+        var cfdiv = $n(r, "chilifreshReviewResult");
+        if (cfdiv) {
+            cfdiv.setAttribute(
+                'id',
+                'chili_review_' + currentISBN
+            )
+        }
+    }
+
+       var pic = $n(r, config.names.result.item_jacket);
+       if (!pic) pic = elem("img");
+       //pic.setAttribute("src", buildISBNSrc(currentISBN));
+       pic.setAttribute("width",55);
+
+       var title_link = $n(r, config.names.result.item_title);
+       var author_link = $n(r, config.names.result.item_author);
+       var row_count = $n(r,"results_row_count");
+       var myListLink = $n(r,"result_my_list_link");
+       var reviewsLink = $n(r, 'reviews_and_more');
+       if(currentISBN) {
+               reviewsLink.href="http://contentcafe2.btol.com/ContentCafeClient/ContentCafe.aspx?UserID=KC72927&Password=CC14647&ItemKey="+currentISBN+"&Options=Y";
+       }
+
+       if( is_mr )  {
+               var onlyrec = onlyrecord[ getOffset() + pos ];
+               if(onlyrec) {
+                       buildunAPISpan($n(r,'unapi'), 'biblio-record_entry', onlyrec);
+
+                       var args = {};
+                       args.page = RDETAIL;
+                       args[PARAM_OFFSET] = 0;
+                       args[PARAM_RID] = onlyrec;
+                       args[PARAM_MRID] = rec.doc_id();
+                       pic.parentNode.setAttribute("href", buildOPACLink(args));
+                       title_link.setAttribute("href", buildOPACLink(args));
+                       title_link.appendChild(text(normalize(truncate(rec.title(), 65))));
+                       
+               } else {
+                       buildunAPISpan($n(r,'unapi'), 'metabib-metarecord', rec.doc_id());
+
+                       buildTitleLink(rec, title_link); 
+                       var args = {};
+                       args.page = RRESULT;
+                       args[PARAM_OFFSET] = 0;
+                       args[PARAM_MRID] = rec.doc_id();
+                       pic.parentNode.setAttribute("href", buildOPACLink(args));
+               }
+
+       } else {
+               buildunAPISpan($n(r,'unapi'), 'biblio-record_entry', rec.doc_id());
+
+               //if(title_link) buildTitleDetailLink(rec, title_link); 
+               if(title_link) {
+                       title_link.appendChild(text(normalize(truncate(rec.title(), 1000))));
+                       var argss = {};
+                       argss.page = RDETAIL;
+                       argss[PARAM_RID] = rec.doc_id();
+                       var linkText = title_link.innerHTML; // IE
+                       title_link.setAttribute("href", buildOPACLink(argss));
+                       title_link.innerHTML = linkText; // IE
+               }
+               var args = {};
+               args.page = RDETAIL;
+               args[PARAM_OFFSET] = 0;
+               args[PARAM_RID] = rec.doc_id();
+               pic.parentNode.setAttribute("href", buildOPACLink(args));
+
+               unHideMe($n(r,'place_hold_span'));
+               //$n(r,'place_hold_link').setAttribute('href','javascript:holdsDrawEditor({record:"'+rec.doc_id()+'",type:"T"});');
+               $n(r,'place_hold_link').onclick = function() { resultDrawHoldsWindow(rec.doc_id(), 'T'); }
+
+               /** BILL */
+               //dojo.require('openils.BibTemplate');  // -- this causes redundant requests per record - put in js_common.xml instead
+               setTimeout(
+                   function () { 
+                       //new openils.BibTemplate({root : $n(r, 'bib_cn_list'), record : rec.doc_id()}).render();
+                       new openils.BibTemplate({root : r, record : rec.doc_id()}).render();
+                    }, 0
+               );
+               /** BILL */
+       }
+       
+       if(row_count) row_count.innerHTML = (pos+1)+getOffset()+".";
+       if(myListLink) myListLink.setAttribute("href","javascript:addMyList("+rec.doc_id()+");")
+       title_link.setAttribute("title",rec.title());
+       buildSearchLink(STYPE_AUTHOR, rec.author(), author_link);
+
+       if(! is_mr ) {
+               $n(r, "results_pub_date").innerHTML = (!rec.pubdate())?"":rec.pubdate();
+               $n(r, "results_pub").innerHTML = (!rec.publisher())?"":rec.publisher();
+               $n(r, "results_isbn").innerHTML = (!currentISBN)?"":currentISBN;
+               $n(r, "results_edition").innerHTML = (!rec.edition())?"":rec.edition();
+               $n(r, "results_phys_desc").innerHTML = (!rec.physical_description())?"":rec.physical_description();
+               if(isInAnonList(parseInt(rec.doc_id()))) { 
+                       $n(r, 'result_my_list_link').innerHTML = 'Remove from my list';
+                       $n(r, 'result_my_list_link').title = 'Remove from my list';
+                       //$n(r, 'result_my_list_link').appendChild(elem('img', {src:'/opac/skin/kcls/graphics/add_mylist_sel.gif'}, null));
+               }
+               
+               if(!isNull(rec.edition()))      {
+                       unHideMe( $n(r, "result_table_extra_span"));
+                       $n(r, "result_table_edition_span").appendChild( text( rec.edition()) );
+               }
+               if(!isNull(rec.pubdate())) {
+                       unHideMe( $n(r, "result_table_extra_span"));
+                       unHideMe($n(r, "result_table_pub_span"));
+                       $n(r, "result_table_pub_span").appendChild( text( rec.pubdate() ));
+               }
+               if(!isNull(rec.publisher()) ) {
+                       unHideMe( $n(r, "result_table_extra_span"));
+                       unHideMe($n(r, "result_table_pub_span"));
+                       $n(r, "result_table_pub_span").appendChild( text( " " + rec.publisher() ));
+               }
+
+               if(!isNull(rec.physical_description()) ) {
+                       unHideMe( $n(r, "result_table_extra_span"));
+                       var t = " " + rec.physical_description();
+                       //$n(r, "result_table_phys_span").appendChild( text(t.replace(/:.*/g,'')));
+                       $n(r, "result_table_phys_span").appendChild( text(t));
+               }
+       }
+
+       resultBuildFormatIcons( r, rec, is_mr );
+       unHideMe(r);
+       runEvt("result", "recordDrawn", rec.doc_id(), title_link);
+
+       
+       if(resultPageIsDone())  {
+               runEvt('result', 'allRecordsReceived', recordsCache);
+       }
+}
+
+function resultDrawHoldsWindow(hold_target, hold_type) {
+    var src = location.href;
+    if(forceLoginSSL && src.match(/^http:/)) {
+        src = src.replace(/^http:/, 'https:');
+        if(src.match(/&hold_target=/)) {
+            src.replace(/&hold_target=(\d+)/, hold_target);
+        } else {
+            src += '&hold_target=' + hold_target;
+        }
+        location.href = src;
+    } else {
+        holdsDrawEditor({record:hold_target, type:hold_type});
+    }
+}
+
+
+function _resultFindRec(id) {
+       for( var i = 0; i != recordsCache.length; i++ ) {
+               var rec = recordsCache[i];
+               if( rec && rec.doc_id() == id )
+                       return rec;
+       }
+       return null;
+}
+
+
+function resultBuildFormatIcons( row, rec, is_mr ) {
+       var ress = "";
+       var imgEl = $n(row, "result_mat_type");
+       if(!imgEl) return;
+       
+       ress = getMarcData(rec.doc_id(),"998","d");
+       if(setFormatIcon(imgEl, ress)) unHideMe(imgEl);
+
+}
+
+function fetchGoogleBooksLink () {
+       return;
+    if (isbnList && googleBooksLink) {
+        var scriptElement = document.createElement("script");
+        scriptElement.setAttribute("id", "jsonScript");
+        scriptElement.setAttribute("src",
+            "https://books.google.com/books?bibkeys=" + 
+            escape(isbnList) + "&jscmd=viewapi&callback=unhideGoogleBooksLink");
+        scriptElement.setAttribute("type", "text/javascript");
+        // make the request to Google Book Search
+        document.documentElement.firstChild.appendChild(scriptElement);
+    }
+}
+
+function resultPageIsDone(pos) {
+
+       return (recordsHandled == getDisplayCount() 
+               || recordsHandled + getOffset() == getHitCount());
+}
+
+var resultCCHeaderApplied = false;
+
+/* -------------------------------------------------------------------- */
+/* dynamically add the copy count rows based on the org type 'countsrow' 
+       is the row into which we will add TD's to hold the copy counts 
+       This code generates copy count cells with an id of
+       'copy_count_cell_<depth>_<pagePosition>'  */
+function resultAddCopyCounts(rec, pagePosition) {
+
+       var r = table.rows[pagePosition + 1];
+       var countsrow = $n(r, config.names.result.counts_row );
+       var ccell = $n(countsrow, config.names.result.count_cell);
+
+       var nodes = orgNodeTrail(findOrgUnit(getLocation()));
+       var node = nodes[0];
+       var type = findOrgType(node.ou_type());
+       ccell.id = "copy_count_cell_" + type.depth() + "_" + pagePosition;
+       ccell.title = type.opac_label();
+       //addCSSClass(ccell, config.css.result.cc_cell_even);
+
+       var lastcell = ccell;
+       var lastheadcell = null;
+
+       var cchead = null;
+       var ccheadcell = null;
+       if(!resultCCHeaderApplied && !getLasso()) {
+               ccrow = $('result_thead_row');
+               ccheadcell =  ccrow.removeChild($n(ccrow, "result_thead_ccell"));
+               var t = ccheadcell.cloneNode(true);
+               lastheadcell = t;
+               t.appendChild(text(type.opac_label()));
+               ccrow.appendChild(t);
+               resultCCHeaderApplied = true;
+       }
+}
+
+/* collect copy counts for a record using method 'methodName' */
+function resultCollectCopyCounts(rec, pagePosition, methodName) {
+       if(rec == null || rec.doc_id() == null) return;
+
+       var loc = getLasso();
+       if (loc) loc = -loc;
+       else loc= getLocation();
+
+       var req = new Request(methodName, loc, rec.doc_id(), getForm() );
+       req.request.userdata = [ rec, pagePosition ];
+       req.callback(resultHandleCopyCounts);
+       req.send();
+}
+
+function resultHandleCopyCounts(r) {
+       runEvt('result', 'copyCountsReceived', r.userdata[0], r.userdata[1], r.getResultObject()); 
+}
+
+
+/* XXX Needs to understand Lasso copy counts... */
+/* display the collected copy counts */
+function resultDisplayCopyCounts(rec, pagePosition, copy_counts) {
+       if(copy_counts == null || rec == null) return;
+       var r = table.rows[pagePosition + 1];
+       var cnt_avail = $n(r, "copy_count_avail");
+       if(cnt_avail && copy_counts[0]) {
+               /*if(copy_counts[0].available)*/ cnt_avail.innerHTML = copy_counts[0].available+' cop'+(copy_counts[0].available==1?'y':'ies')+' available';
+               //else {
+                       fieldmapper.standardRequest(['open-ils.circ','open-ils.circ.bre.holds.count'], {async:true, params:[rec.doc_id(), r.id], oncomplete: drawHoldsCount});
+                       $n(r, 'copy_holds2').innerHTML = ' on first copy returned of '+copy_counts[0].count+' cop'+(copy_counts[0].count==1?'y':'ies');
+               //}
+       }
+}
+
+function drawHoldsCount(r) {
+       if(!r.params[1]) return;
+       var row = $(r.params[1]);
+       if(!row) return;
+       var span = $n(row, 'copy_holds');
+       var resp = r.recv().content();
+       span.innerHTML = resp+' hold'+(resp==1?'':'s')+' ';
+}
+
+function showDetailedInfo(bool) {
+       
+       var tbls = dojo.query('.results_info_table',$('result_table'));
+       if(bool) {
+         tbls.forEach(function(node, index, arr){
+               unHideMe($n(node,'results_pub_tr'));
+               unHideMe($n(node,'results_isbn_tr'));
+               unHideMe($n(node,'results_edition_tr'));
+               unHideMe($n(node,'results_phys_desc_tr'));
+         });
+       } else {
+         tbls.forEach(function(node, index, arr){
+               hideMe($n(node,'results_pub_tr'));
+               hideMe($n(node,'results_isbn_tr'));
+               hideMe($n(node,'results_edition_tr'));
+               hideMe($n(node,'results_phys_desc_tr'));
+         });
+       }
+}
+
+function fetchChiliFreshReviews() {
+    if (chilifresh && chilifresh != '(none)') {
+        try { chili_init(); } catch(E) { dump(E + '\n'); }
+    }
+}
+
+function postResultsCollect() {
+       var it = getCacheValue('showHoldEditor');
+       if(it) {
+               setCacheValue('showHoldEditor', null);
+               holdsDrawEditor({record:it.record, type:it.type});
+       }
+}
index 545106c..a769033 100644 (file)
-var records = new Array();\r
-var table;\r
-var rowtemplate;\r
-var rresultLimit = 200;\r
-var resultFacetKey;\r
-\r
-var rresultIsPaged = false;\r
-\r
-function rresultUnload() { removeChildren(table); table = null;}\r
-\r
-attachEvt("common", "unload", rresultUnload);\r
-attachEvt("common", "run", rresultDoSearch);\r
-attachEvt("result", "idsReceived", rresultCollectRecords); \r
-attachEvt("result", "recordDrawn", rresultLaunchDrawn); \r
-\r
-hideMe($('copyright_block')); \r
-\r
-function rresultDoSearch() {\r
-\r
-       swapCanvas($('loading_alt'));\r
-\r
-       table = G.ui.result.main_table;\r
-       hideMe(G.ui.result.row_template);\r
-       if( table && table.parentNode ) {\r
-               while( table.parentNode.rows.length <= (getDisplayCount() +1) ) \r
-                       hideMe(table.appendChild(G.ui.result.row_template.cloneNode(true)));\r
-       }\r
-       unHideMe($('results_header_bar'));\r
-       rresultCollectIds();\r
-}\r
-\r
-function rresultCollectIds() {\r
-       var ids;\r
-\r
-    var rtype = getRtype();\r
-    if (rtype && rtype.indexOf('|') > -1)\r
-        rtype = rtype.substring(0,rtype.indexOf('|'));\r
-\r
-       switch(rtype) {\r
-\r
-               case RTYPE_COOKIE:\r
-                       ids = JSON2js(cookieManager.read(COOKIE_RIDS));\r
-                       _rresultHandleIds( ids, ids.length );\r
-                       break;\r
-\r
-               case RTYPE_TITLE:\r
-               case RTYPE_AUTHOR:\r
-               case RTYPE_SUBJECT:\r
-               case RTYPE_SERIES:\r
-               case RTYPE_KEYWORD:\r
-                       rresultDoRecordSearch();\r
-                       break;\r
-\r
-               case RTYPE_MULTI:\r
-                       rresultDoRecordMultiSearch();\r
-                       break;\r
-                       \r
-               case RTYPE_LIST :\r
-                       rresultHandleList();\r
-                       break;\r
-\r
-               case RTYPE_MARC :\r
-                       rresultCollectMARCIds();\r
-                       break;\r
-\r
-               case RTYPE_ISBN :\r
-                       rresultCollectISBNIds();\r
-                       break;\r
-\r
-               case RTYPE_TCN :\r
-                       rresultCollectTCNIds();\r
-                       break;\r
-\r
-               case RTYPE_ISSN :\r
-                       rresultCollectISSNIds();\r
-                       break;\r
-\r
-\r
-               case RTYPE_MRID :\r
-               case null :\r
-               case "" :\r
-               default:\r
-                       var form = rresultGetForm();\r
-                       var args = { format : form, org : getLocation(), depth : rresultGetDepth() };\r
-\r
-                       var lasso = getLasso();\r
-                       if (lasso) args.org = -lasso;\r
-\r
-                       var req = new Request(FETCH_RIDS, getMrid(), args);\r
-                       req.callback( rresultHandleRIds );\r
-                       req.send();\r
-\r
-                       if( rresultGetDepth() != findOrgDepth(globalOrgTree) ) {\r
-                               var link = $('rresult_show_all_link');\r
-                               if(link) {\r
-                                       unHideMe($('rresult_show_all'));\r
-                                       link.appendChild( text(\r
-                                               findOrgType(globalOrgTree.ou_type()).opac_label()));\r
-                               }\r
-\r
-                       } else {\r
-                               if( rresultGetDepth() != getDepth() ) { /* inside a limited display */\r
-                                       var link = $('rresult_show_here_link');\r
-                                       if(link) {\r
-                                               link.appendChild( text(\r
-                                                       findOrgType(findOrgUnit(getLocation()).ou_type()).opac_label()));\r
-                                               unHideMe($('rresult_show_here'));\r
-                                       }\r
-                               }\r
-                       }\r
-       }\r
-}\r
-\r
-function rresultExpandSearch() {\r
-       var args = {};\r
-       args[PARAM_RDEPTH] = findOrgDepth(globalOrgTree);\r
-       goTo(buildOPACLink(args));\r
-}\r
-\r
-function rresultContractSearch() {\r
-       var args = {};\r
-       RDEPTH = null;\r
-       args[PARAM_OFFSET] = 0;\r
-       goTo(buildOPACLink(args));\r
-}\r
-\r
-\r
-function rresultGetDepth() {\r
-       if( getRdepth() != null) return getRdepth();\r
-       return getDepth();\r
-}\r
-\r
-\r
-function rresultGetForm() {\r
-       var form;\r
-\r
-       if(getTform())  /* did the user select a format from the icon list (temporary) */\r
-               form = (getTform() == 'all') ? null : getTform();\r
-       else  /* did the use select a format from simple search dropdown */\r
-               form = (getForm() == 'all') ? null : getForm();\r
-\r
-       if(!form) { /* did the user select a format from the advanced search */\r
-               form = getItemType();\r
-               var f = getItemForm();\r
-\r
-               if(form) {\r
-                       form = form.replace(/,/,'');\r
-                       if(f) form += '-' + f;\r
-               } else {\r
-                       if(f) form = '-' + f;\r
-               }\r
-       }\r
-\r
-       return form;\r
-}\r
-\r
-\r
-function rresultCollectMARCIds() {\r
-\r
-       var args                        = {};\r
-       args.searches   = JSON2js(getSearches());\r
-       args.limit              = 200;\r
-       args.org_unit   = globalOrgTree.id();\r
-       args.depth              = 0;\r
-\r
-       rresultIsPaged = true;\r
-       var req = new Request(FETCH_ADV_MARC_MRIDS, args, getDisplayCount(), getOffset());\r
-       req.callback(rresultHandleRIds);\r
-       req.request.noretry = true;\r
-       req.send();\r
-}\r
-\r
-\r
-function rresultCollectISBNIds() {\r
-       var req = new Request(FETCH_ADV_ISBN_RIDS, getAdvTerm() );\r
-       req.callback(\r
-               function(r) {\r
-                       var blob = r.getResultObject();\r
-                       _rresultHandleIds(blob.ids, blob.count);\r
-               }\r
-       );\r
-       req.send();\r
-}\r
-\r
-function rresultCollectTCNIds() {\r
-       var req = new Request(FETCH_ADV_TCN_RIDS, getAdvTerm() );\r
-       req.callback(\r
-               function(r) {\r
-                       var blob = r.getResultObject();\r
-                       _rresultHandleIds(blob.ids, blob.count);\r
-               }\r
-       );\r
-       req.send();\r
-}\r
-\r
-function rresultCollectISSNIds() {\r
-       var req = new Request(FETCH_ADV_ISSN_RIDS, getAdvTerm() );\r
-       req.callback(\r
-               function(r) {\r
-                       var blob = r.getResultObject();\r
-                       _rresultHandleIds(blob.ids, blob.count);\r
-               }\r
-       );\r
-       req.send();\r
-}\r
-\r
-function rresultHandleList() {\r
-       var ids = new CGI().param(PARAM_RLIST);\r
-    var count;\r
-    if(!dojo.isArray(ids)) {\r
-        count = 1;\r
-        ids = [ids];\r
-    } else {\r
-        count = ids.length;\r
-    }\r
-       if(ids) _rresultHandleIds(ids, count);\r
-}\r
-\r
-var rresultTries = 0;\r
-function rresultHandleRIds(r) {\r
-       var res = r.getResultObject();\r
-\r
-       if(!res) res = {count:0,ids:[]};\r
-\r
-       if( res.count == 0 && rresultTries == 0 && ! r.noretry) {\r
-\r
-               rresultTries++;\r
-               var form = rresultGetForm();\r
-               var args = { format : form, org : getLocation(), depth : findOrgDepth(globalOrgTree) };\r
-\r
-               var lasso = getLasso();\r
-               if (lasso) args.org = -lasso;\r
-\r
-               var req = new Request(FETCH_RIDS, getMrid(), args );\r
-               req.callback( rresultHandleRIds );\r
-               req.send();\r
-               unHideMe($('no_formats'));\r
-               hideMe($('rresult_show_all'));\r
-\r
-       } else {\r
-\r
-               _rresultHandleIds(res.ids, res.count);\r
-       }\r
-}\r
-\r
-function _rresultHandleIds(ids, count) {\r
-       //var json = js2JSON({ids:ids,count:count});\r
-       /*\r
-       cookieManager.write(COOKIE_SRIDS, json, '+1d');\r
-       */\r
-\r
-       HITCOUNT = parseInt(count);\r
-       runEvt('result', 'hitCountReceived');\r
-       runEvt('result', 'idsReceived', ids, getOffset());\r
-}\r
-\r
-/*\r
-function rresultCollectRecords(ids) {\r
-       runEvt("result", "preCollectRecords");\r
-       var x = 0;\r
-       for( var i = getOffset(); i!= getDisplayCount() + getOffset(); i++ ) {\r
-               if(ids[i] == null) break;\r
-               var req = new Request(FETCH_RMODS, parseInt(ids[i]));\r
-               req.callback(rresultHandleMods);\r
-               req.request.userdata = x++;\r
-               req.send();\r
-       }\r
-}\r
-*/\r
-\r
-\r
-function rresultCollectRecords(ids, base) {\r
-       runEvt("result", "preCollectRecords");\r
-       var x = 0;\r
-\r
-       if (!base) base = 0;\r
-       if( rresultIsPaged )  base = 0;\r
-\r
-       for( var i = base; i!= getDisplayCount() + base; i++ ) {\r
-               if(ids[i] == null) break;\r
-               var req = new Request(FETCH_RMODS, parseInt(ids[i]));\r
-               req.callback(rresultHandleMods);\r
-               req.request.userdata = x++;\r
-               req.send();\r
-       }\r
-}\r
-\r
-var recsReceivedCalled = false;\r
-function rresultHandleMods(r) {\r
-       var rec = r.getResultObject();\r
-       runEvt('result', 'recordReceived', rec, r.userdata, false);\r
-       resultCollectCopyCounts(rec, r.userdata, FETCH_R_COPY_COUNTS);\r
-    if(resultPageIsDone() && !recsReceivedCalled) {\r
-        recsReceivedCalled = true;\r
-               runEvt('result', 'allRecordsReceived', recordsCache);\r
-               unHideMe($('copyright_block')); \r
-       }\r
-}\r
-\r
-function rresultLaunchDrawn(id, node) {\r
-       runEvt("rresult", "recordDrawn", id, node);\r
-}\r
-\r
-\r
-function rresultDoRecordSearch() { \r
-       rresultIsPaged = true;\r
-       resultCollectSearchIds(true, SEARCH_RS_QUERY, rresultFilterSearchResults ); \r
-}\r
-\r
-function rresultDoRecordMultiSearch() { \r
-       rresultIsPaged = true;\r
-       resultCollectSearchIds(false, SEARCH_RS_QUERY, rresultFilterSearchResults ); \r
-}\r
-\r
-\r
-function rresultFilterSearchResults(r) {\r
-       var result = r.getResultObject();\r
-       var ids = [];\r
-       if( result.count > 0 ) {\r
-               for( var i = 0; i != result.ids.length; i++ ) \r
-                       ids.push(result.ids[i][0]);\r
-       }\r
-\r
-    resultFacetKey = result.facet_key;\r
-    resultCompiledSearch = result.compiled_search;\r
-    cookieManager.write(COOKIE_SEARCH, js2JSON(result.compiled_search), -1);\r
-       _rresultHandleIds( ids, result.count );\r
-}\r
-\r
-function rresultHandlePlaceHold(target) {\r
-    function reload() {\r
-        location.href = location.href.replace(/&hold_target=\d+/, '');\r
-    }\r
-    attachEvt("common", "holdUpdated", reload);\r
-    attachEvt("common", "holdUpdateCanceled", reload);\r
-    attachEvt("common", "loginCanceled", reload);\r
-    holdsDrawEditor({record:target, type: 'T'});\r
-}\r
-\r
+var records = new Array();
+var table;
+var rowtemplate;
+var rresultLimit = 200;
+var resultFacetKey;
+
+var rresultIsPaged = false;
+
+function rresultUnload() { removeChildren(table); table = null;}
+
+attachEvt("common", "unload", rresultUnload);
+attachEvt("common", "run", rresultDoSearch);
+attachEvt("result", "idsReceived", rresultCollectRecords); 
+attachEvt("result", "recordDrawn", rresultLaunchDrawn); 
+
+hideMe($('copyright_block')); 
+
+function rresultDoSearch() {
+
+       swapCanvas($('loading_alt'));
+
+       table = G.ui.result.main_table;
+       hideMe(G.ui.result.row_template);
+       if( table && table.parentNode ) {
+               while( table.parentNode.rows.length <= (getDisplayCount() +1) ) 
+                       hideMe(table.appendChild(G.ui.result.row_template.cloneNode(true)));
+       }
+       unHideMe($('results_header_bar'));
+       rresultCollectIds();
+}
+
+function rresultCollectIds() {
+       var ids;
+
+    var rtype = getRtype();
+    if (rtype && rtype.indexOf('|') > -1)
+        rtype = rtype.substring(0,rtype.indexOf('|'));
+
+       switch(rtype) {
+
+               case RTYPE_COOKIE:
+                       ids = JSON2js(cookieManager.read(COOKIE_RIDS));
+                       _rresultHandleIds( ids, ids.length );
+                       break;
+
+               case RTYPE_TITLE:
+               case RTYPE_AUTHOR:
+               case RTYPE_SUBJECT:
+               case RTYPE_SERIES:
+               case RTYPE_KEYWORD:
+                       rresultDoRecordSearch();
+                       break;
+
+               case RTYPE_MULTI:
+                       rresultDoRecordMultiSearch();
+                       break;
+                       
+               case RTYPE_LIST :
+                       rresultHandleList();
+                       break;
+
+               case RTYPE_MARC :
+                       rresultCollectMARCIds();
+                       break;
+
+               case RTYPE_ISBN :
+                       rresultCollectISBNIds();
+                       break;
+
+               case RTYPE_TCN :
+                       rresultCollectTCNIds();
+                       break;
+
+               case RTYPE_ISSN :
+                       rresultCollectISSNIds();
+                       break;
+
+
+               case RTYPE_MRID :
+               case null :
+               case "" :
+               default:
+                       var form = rresultGetForm();
+                       var args = { format : form, org : getLocation(), depth : rresultGetDepth() };
+
+                       var lasso = getLasso();
+                       if (lasso) args.org = -lasso;
+
+                       var req = new Request(FETCH_RIDS, getMrid(), args);
+                       req.callback( rresultHandleRIds );
+                       req.send();
+
+                       if( rresultGetDepth() != findOrgDepth(globalOrgTree) ) {
+                               var link = $('rresult_show_all_link');
+                               if(link) {
+                                       unHideMe($('rresult_show_all'));
+                                       link.appendChild( text(
+                                               findOrgType(globalOrgTree.ou_type()).opac_label()));
+                               }
+
+                       } else {
+                               if( rresultGetDepth() != getDepth() ) { /* inside a limited display */
+                                       var link = $('rresult_show_here_link');
+                                       if(link) {
+                                               link.appendChild( text(
+                                                       findOrgType(findOrgUnit(getLocation()).ou_type()).opac_label()));
+                                               unHideMe($('rresult_show_here'));
+                                       }
+                               }
+                       }
+       }
+}
+
+function rresultExpandSearch() {
+       var args = {};
+       args[PARAM_RDEPTH] = findOrgDepth(globalOrgTree);
+       goTo(buildOPACLink(args));
+}
+
+function rresultContractSearch() {
+       var args = {};
+       RDEPTH = null;
+       args[PARAM_OFFSET] = 0;
+       goTo(buildOPACLink(args));
+}
+
+
+function rresultGetDepth() {
+       if( getRdepth() != null) return getRdepth();
+       return getDepth();
+}
+
+
+function rresultGetForm() {
+       var form;
+
+       if(getTform())  /* did the user select a format from the icon list (temporary) */
+               form = (getTform() == 'all') ? null : getTform();
+       else  /* did the use select a format from simple search dropdown */
+               form = (getForm() == 'all') ? null : getForm();
+
+       if(!form) { /* did the user select a format from the advanced search */
+               form = getItemType();
+               var f = getItemForm();
+
+               if(form) {
+                       form = form.replace(/,/,'');
+                       if(f) form += '-' + f;
+               } else {
+                       if(f) form = '-' + f;
+               }
+       }
+
+       return form;
+}
+
+
+function rresultCollectMARCIds() {
+
+       var args                        = {};
+       args.searches   = JSON2js(getSearches());
+       args.limit              = 200;
+       args.org_unit   = globalOrgTree.id();
+       args.depth              = 0;
+
+       rresultIsPaged = true;
+       var req = new Request(FETCH_ADV_MARC_MRIDS, args, getDisplayCount(), getOffset());
+       req.callback(rresultHandleRIds);
+       req.request.noretry = true;
+       req.send();
+}
+
+
+function rresultCollectISBNIds() {
+       var req = new Request(FETCH_ADV_ISBN_RIDS, getAdvTerm() );
+       req.callback(
+               function(r) {
+                       var blob = r.getResultObject();
+                       _rresultHandleIds(blob.ids, blob.count);
+               }
+       );
+       req.send();
+}
+
+function rresultCollectTCNIds() {
+       var req = new Request(FETCH_ADV_TCN_RIDS, getAdvTerm() );
+       req.callback(
+               function(r) {
+                       var blob = r.getResultObject();
+                       _rresultHandleIds(blob.ids, blob.count);
+               }
+       );
+       req.send();
+}
+
+function rresultCollectISSNIds() {
+       var req = new Request(FETCH_ADV_ISSN_RIDS, getAdvTerm() );
+       req.callback(
+               function(r) {
+                       var blob = r.getResultObject();
+                       _rresultHandleIds(blob.ids, blob.count);
+               }
+       );
+       req.send();
+}
+
+function rresultHandleList() {
+       var ids = new CGI().param(PARAM_RLIST);
+    var count;
+    if(!dojo.isArray(ids)) {
+        count = 1;
+        ids = [ids];
+    } else {
+        count = ids.length;
+    }
+       if(ids) _rresultHandleIds(ids, count);
+}
+
+var rresultTries = 0;
+function rresultHandleRIds(r) {
+       var res = r.getResultObject();
+
+       if(!res) res = {count:0,ids:[]};
+
+       if( res.count == 0 && rresultTries == 0 && ! r.noretry) {
+
+               rresultTries++;
+               var form = rresultGetForm();
+               var args = { format : form, org : getLocation(), depth : findOrgDepth(globalOrgTree) };
+
+               var lasso = getLasso();
+               if (lasso) args.org = -lasso;
+
+               var req = new Request(FETCH_RIDS, getMrid(), args );
+               req.callback( rresultHandleRIds );
+               req.send();
+               unHideMe($('no_formats'));
+               hideMe($('rresult_show_all'));
+
+       } else {
+
+               _rresultHandleIds(res.ids, res.count);
+       }
+}
+
+function _rresultHandleIds(ids, count) {
+       //var json = js2JSON({ids:ids,count:count});
+       /*
+       cookieManager.write(COOKIE_SRIDS, json, '+1d');
+       */
+
+       HITCOUNT = parseInt(count);
+       runEvt('result', 'hitCountReceived');
+       runEvt('result', 'idsReceived', ids, getOffset());
+}
+
+/*
+function rresultCollectRecords(ids) {
+       runEvt("result", "preCollectRecords");
+       var x = 0;
+       for( var i = getOffset(); i!= getDisplayCount() + getOffset(); i++ ) {
+               if(ids[i] == null) break;
+               var req = new Request(FETCH_RMODS, parseInt(ids[i]));
+               req.callback(rresultHandleMods);
+               req.request.userdata = x++;
+               req.send();
+       }
+}
+*/
+
+
+function rresultCollectRecords(ids, base) {
+       runEvt("result", "preCollectRecords");
+       var x = 0;
+
+       if (!base) base = 0;
+       if( rresultIsPaged )  base = 0;
+
+       for( var i = base; i!= getDisplayCount() + base; i++ ) {
+               if(ids[i] == null) break;
+               var req = new Request(FETCH_RMODS, parseInt(ids[i]));
+               req.callback(rresultHandleMods);
+               req.request.userdata = x++;
+               req.send();
+       }
+}
+
+var recsReceivedCalled = false;
+function rresultHandleMods(r) {
+       var rec = r.getResultObject();
+       runEvt('result', 'recordReceived', rec, r.userdata, false);
+       resultCollectCopyCounts(rec, r.userdata, FETCH_R_COPY_COUNTS);
+    if(resultPageIsDone() && !recsReceivedCalled) {
+        recsReceivedCalled = true;
+               runEvt('result', 'allRecordsReceived', recordsCache);
+               unHideMe($('copyright_block')); 
+       }
+}
+
+function rresultLaunchDrawn(id, node) {
+       runEvt("rresult", "recordDrawn", id, node);
+}
+
+
+function rresultDoRecordSearch() { 
+       rresultIsPaged = true;
+       resultCollectSearchIds(true, SEARCH_RS_QUERY, rresultFilterSearchResults ); 
+}
+
+function rresultDoRecordMultiSearch() { 
+       rresultIsPaged = true;
+       resultCollectSearchIds(false, SEARCH_RS_QUERY, rresultFilterSearchResults ); 
+}
+
+
+function rresultFilterSearchResults(r) {
+       var result = r.getResultObject();
+       var ids = [];
+       if( result.count > 0 ) {
+               for( var i = 0; i != result.ids.length; i++ ) 
+                       ids.push(result.ids[i][0]);
+       }
+
+    resultFacetKey = result.facet_key;
+    resultCompiledSearch = result.compiled_search;
+    cookieManager.write(COOKIE_SEARCH, js2JSON(result.compiled_search), -1);
+       _rresultHandleIds( ids, result.count );
+}
+
+function rresultHandlePlaceHold(target) {
+    function reload() {
+        location.href = location.href.replace(/&hold_target=\d+/, '');
+    }
+    attachEvt("common", "holdUpdated", reload);
+    attachEvt("common", "holdUpdateCanceled", reload);
+    attachEvt("common", "loginCanceled", reload);
+    holdsDrawEditor({record:target, type: 'T'});
+}
+
index cc25dee..61f136e 100644 (file)
-var searchBarExpanded = false;\r
-/* our search selector boxes */\r
-var _ts, _fs;\r
-var isFrontPage = false;\r
-G.evt.common.init.push(searchBarInit);\r
-\r
-/* if set by the org selector, this will be the location used the\r
-       next time the search is submitted */\r
-var newSearchLocation; \r
-var newSearchDepth = null;\r
-\r
-\r
-function searchBarInit() {\r
-       _ts = G.ui.searchbar.type_selector;\r
-       _fs = G.ui.searchbar.form_selector;\r
-\r
-       try{G.ui.searchbar.text.focus();}catch(e){}\r
-       G.ui.searchbar.text.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };\r
-       _ts.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };\r
-       _fs.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };\r
-\r
-       G.ui.searchbar.submit.onclick = searchBarSubmit;\r
-       _fs.onchange = function(e) { \r
-               var fs = G.ui.searchbar.form_selector;\r
-               var val = fs.options[fs.selectedIndex].value;\r
-               \r
-               G.ui.searchbar.facets.value = val==''?'':"identifier|mattype["+val+"]";\r
-       };\r
-\r
-       /* set up the selector objects, etc */\r
-       var txtVal = (getTerm() != null) ? getTerm() : "";\r
-       if(getStype()=="cn") txtVal = txtVal.replace(/identifier\|bibcn:/, "");\r
-       \r
-       G.ui.searchbar.text.value = txtVal;\r
-       G.ui.searchbar.facets.value = (getFacet() != null) ? getFacet() : "";\r
-       setSelector(_ts,        getStype());\r
-       setSelector(_fs,        getForm());\r
-\r
-       depthSelInit();\r
-       \r
-       if(getSearches()) {\r
-               var searches = JSON2js(getSearches());\r
-               if(searches[1]) setSelector(_fs, searches[1].term);\r
-               if(!G.ui.searchbar.text.value) G.ui.searchbar.text.value = searches[0].term;\r
-       }\r
-\r
-       if(!isFrontPage && (findCurrentPage() != MYOPAC)) {\r
-               attachEvt('common','depthChanged', searchBarSubmit);\r
-       }\r
-\r
-    if( (limit = $('opac.result.limit2avail')) ) {\r
-        if(getAvail()) limit.checked = true;\r
-        if(getSort() && getSortDir()) \r
-            setSelector($('opac.result.sort'), getSort()+'.'+getSortDir());\r
-    }\r
-       \r
-       if( (limit2 = $('opac.result.limit2avail2')) ) if(getAvail()) limit2.checked = true;\r
-}\r
-\r
-function searchBarSubmit(isFilterSort) {\r
-       var text = G.ui.searchbar.text.value;\r
-       var facet_text = isFrontPage ? '' : G.ui.searchbar.facets.value;\r
-       clearSearchParams();\r
-       if(!text || text == "" || text == "Search Keyword") return;\r
-       //var d = (newSearchDepth != null) ?  newSearchDepth : depthSelGetDepth();\r
-       var d = getDepth();\r
-       if(isNaN(d)) d = 0;\r
-       var args = {};\r
-       \r
-       var tsVal = _ts.options[_ts.selectedIndex].value;\r
-       if(SHOW_MR_DEFAULT || (isFilterSort && findCurrentPage() == MRESULT)) {\r
-               args.page                               = MRESULT;\r
-       } else {\r
-               args.page                               = RRESULT;\r
-               args[PARAM_RTYPE]               = tsVal=="cn"?"keyword":tsVal;\r
-       }\r
-       \r
-       if(G.user && G.user.prefs['opac.hits_per_page']) args[PARAM_COUNT] = G.user.prefs['opac.hits_per_page'];\r
-    args[PARAM_STYPE]       = tsVal;\r
-    args[PARAM_TERM]        = tsVal=="cn"?"identifier|bibcn:"+text:text;\r
-    args[PARAM_FACET]       = facet_text;\r
-    args[PARAM_LOCATION] = depthSelGetNewLoc();\r
-    args[PARAM_DEPTH]       = d;\r
-    args[PARAM_FORM]        = _fs.options[_fs.selectedIndex].value;\r
-       //args[PARAM_SORT] = isFilterSort?'':'pubdate';\r
-       //args[PARAM_SORT_DIR] = isFilterSort?'':'desc';\r
-\r
-    if($('opac.result.limit2avail') && !arguments[1]) {\r
-        args[PARAM_AVAIL] = ($('opac.result.limit2avail').checked) ? 1 : '';\r
-        if( (val = getSelectorVal($('opac.result.sort'))) ) {\r
-            args[PARAM_SORT] = val.split('.')[0];\r
-            args[PARAM_SORT_DIR] = val.split('.')[1];\r
-        }\r
-    } else if(arguments[1]) {\r
-        args[PARAM_AVAIL] = (arguments[1].checked) ? 1 : '';\r
-        if( (val = getSelectorVal($('opac.result.sort'))) ) {\r
-            args[PARAM_SORT] = val.split('.')[0];\r
-            args[PARAM_SORT_DIR] = val.split('.')[1];\r
-        }\r
-       }\r
-\r
-       goTo(buildOPACLink(args));\r
-}\r
-\r
-\r
+var searchBarExpanded = false;
+/* our search selector boxes */
+var _ts, _fs;
+var isFrontPage = false;
+G.evt.common.init.push(searchBarInit);
+
+/* if set by the org selector, this will be the location used the
+       next time the search is submitted */
+var newSearchLocation; 
+var newSearchDepth = null;
+
+
+function searchBarInit() {
+       _ts = G.ui.searchbar.type_selector;
+       _fs = G.ui.searchbar.form_selector;
+
+       try{G.ui.searchbar.text.focus();}catch(e){}
+       G.ui.searchbar.text.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };
+       _ts.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };
+       _fs.onkeydown = function(evt) {if(userPressedEnter(evt)) { searchBarSubmit(); } };
+
+       G.ui.searchbar.submit.onclick = searchBarSubmit;
+       _fs.onchange = function(e) { 
+               var fs = G.ui.searchbar.form_selector;
+               var val = fs.options[fs.selectedIndex].value;
+               
+               G.ui.searchbar.facets.value = val==''?'':"identifier|mattype["+val+"]";
+       };
+
+       /* set up the selector objects, etc */
+       var txtVal = (getTerm() != null) ? getTerm() : "";
+       if(getStype()=="cn") txtVal = txtVal.replace(/identifier\|bibcn:/, "");
+       
+       G.ui.searchbar.text.value = txtVal;
+       G.ui.searchbar.facets.value = (getFacet() != null) ? getFacet() : "";
+       setSelector(_ts,        getStype());
+       setSelector(_fs,        getForm());
+
+       depthSelInit();
+       
+       if(getSearches()) {
+               var searches = JSON2js(getSearches());
+               if(searches[1]) setSelector(_fs, searches[1].term);
+               if(!G.ui.searchbar.text.value) G.ui.searchbar.text.value = searches[0].term;
+       }
+
+       if(!isFrontPage && (findCurrentPage() != MYOPAC)) {
+               attachEvt('common','depthChanged', searchBarSubmit);
+       }
+
+    if( (limit = $('opac.result.limit2avail')) ) {
+        if(getAvail()) limit.checked = true;
+        if(getSort() && getSortDir()) 
+            setSelector($('opac.result.sort'), getSort()+'.'+getSortDir());
+    }
+       
+       if( (limit2 = $('opac.result.limit2avail2')) ) if(getAvail()) limit2.checked = true;
+}
+
+function searchBarSubmit(isFilterSort) {
+       var text = G.ui.searchbar.text.value;
+       var facet_text = isFrontPage ? '' : G.ui.searchbar.facets.value;
+       clearSearchParams();
+       if(!text || text == "" || text == "Search Keyword") return;
+       //var d = (newSearchDepth != null) ?  newSearchDepth : depthSelGetDepth();
+       var d = getDepth();
+       if(isNaN(d)) d = 0;
+       var args = {};
+       
+       var tsVal = _ts.options[_ts.selectedIndex].value;
+       if(SHOW_MR_DEFAULT || (isFilterSort && findCurrentPage() == MRESULT)) {
+               args.page                               = MRESULT;
+       } else {
+               args.page                               = RRESULT;
+               args[PARAM_RTYPE]               = tsVal=="cn"?"keyword":tsVal;
+       }
+       
+       if(G.user && G.user.prefs['opac.hits_per_page']) args[PARAM_COUNT] = G.user.prefs['opac.hits_per_page'];
+    args[PARAM_STYPE]       = tsVal;
+    args[PARAM_TERM]        = tsVal=="cn"?"identifier|bibcn:"+text:text;
+    args[PARAM_FACET]       = facet_text;
+    args[PARAM_LOCATION] = depthSelGetNewLoc();
+    args[PARAM_DEPTH]       = d;
+    args[PARAM_FORM]        = _fs.options[_fs.selectedIndex].value;
+       //args[PARAM_SORT] = isFilterSort?'':'pubdate';
+       //args[PARAM_SORT_DIR] = isFilterSort?'':'desc';
+
+    if($('opac.result.limit2avail') && !arguments[1]) {
+        args[PARAM_AVAIL] = ($('opac.result.limit2avail').checked) ? 1 : '';
+        if( (val = getSelectorVal($('opac.result.sort'))) ) {
+            args[PARAM_SORT] = val.split('.')[0];
+            args[PARAM_SORT_DIR] = val.split('.')[1];
+        }
+    } else if(arguments[1]) {
+        args[PARAM_AVAIL] = (arguments[1].checked) ? 1 : '';
+        if( (val = getSelectorVal($('opac.result.sort'))) ) {
+            args[PARAM_SORT] = val.split('.')[0];
+            args[PARAM_SORT_DIR] = val.split('.')[1];
+        }
+       }
+
+       goTo(buildOPACLink(args));
+}
+
+
index 1c93a8a..3f55bde 100644 (file)
-/* set up the colors in the sidebar \r
-       Disables/Enables certain components based on various state data */\r
-\r
-attachEvt("common", "init", initSideBar);\r
-//attachEvt("common", "init", setSidebarLinks);\r
-//attachEvt("common", "unload", sidebarTreesFree );\r
-\r
-function prevRResults() {\r
-       return buildOPACLink({ page : RRESULT });\r
-}\r
-\r
-function prevMResults() {\r
-       return buildOPACLink({ page : MRESULT });\r
-}\r
-\r
-function initSideBar() {\r
-       var page = findCurrentPage();\r
-\r
-       if( page == MRESULT ) \r
-               unHideMe($("sidebar_results_wrapper"));\r
-\r
-       if( page == RRESULT ) {\r
-               unHideMe($("sidebar_results_wrapper"));\r
-               unHideMe(G.ui.sidebar[MRESULT]);\r
-               if( getRtype() == RTYPE_MRID )\r
-                       $("sidebar_title_group_results").setAttribute("href", prevMResults());\r
-               else hideMe($("sidebar_title_group_results").parentNode);\r
-       }\r
-\r
-       /* if( page == RDETAIL ) {\r
-               unHideMe($("sidebar_results_wrapper"));\r
-               unHideMe(G.ui.sidebar[MRESULT]);\r
-               if(getRtype())\r
-                       $("sidebar_title_results").setAttribute("href", prevRResults());\r
-               unHideMe(G.ui.sidebar[RRESULT]);\r
-\r
-               if( getRtype() == RTYPE_MRID )\r
-                       $("sidebar_title_group_results").setAttribute("href", prevMResults());\r
-               else hideMe($("sidebar_title_group_results").parentNode);\r
-       } */\r
-\r
-       unHideMe(G.ui.sidebar[page]);\r
-       addCSSClass(G.ui.sidebar[page], "sidebar_item_active");\r
-\r
-       /* if we're logged in, show it and replace the Login link with the Logout link */\r
-       if(grabUser()) {\r
-               //G.ui.sidebar.username_dest.appendChild(text(G.user.usrname()));\r
-               //unHideMe(G.ui.sidebar.logoutbox);\r
-               unHideMe(G.ui.sidebar.logged_in_as);\r
-               hideMe(G.ui.sidebar.loginbox);\r
-       }\r
-\r
-       if(G.ui.sidebar.login) G.ui.sidebar.login.onclick = initLogin;\r
-       //if(G.ui.sidebar.logout) G.ui.sidebar.logout.onclick = doLogout; \r
-\r
-       if(isXUL()) hideMe( G.ui.sidebar.logoutbox );\r
-}\r
-\r
-/* sets up the login ui components */\r
-var loginBoxVisible = false;\r
-function loginDance() {\r
-       var rem = $('remember_me');\r
-       if(rem) rem = rem.checked; else rem = false;\r
-       rem = rem?"persist":"opac";\r
-       \r
-       if(doLogin(true, rem)) {\r
-\r
-               if(!strongPassword( G.ui.login.password.value ) ) {\r
-\r
-                       cookieManager.write(COOKIE_SES, "");\r
-                       hideMe($('login_box'));\r
-                       unHideMe($('change_pw_table'));\r
-                       $('change_pw_current').focus();\r
-                       $('change_pw_button').onclick = changePassword;\r
-                       setEnterFunc($('change_pw_2'), changePassword);\r
-\r
-               } else {\r
-                       loggedInOK();\r
-               }\r
-       }\r
-}\r
-\r
-function loggedInOK() {\r
-       showCanvas();\r
-       //G.ui.sidebar.username_dest.appendChild(text(G.user.usrname()));\r
-       //unHideMe(G.ui.sidebar.logoutbox);\r
-       unHideMe(G.ui.sidebar.logged_in_as);\r
-       hideMe(G.ui.sidebar.loginbox);\r
-       runEvt( 'common', 'loggedIn');\r
-       \r
-       var org = G.user.prefs[PREF_DEF_LOCATION];\r
-    // KCLS wants the defautl search location to be the consortium\r
-    //if(!org) org = G.user.home_ou();\r
-    if(!org) org =  globalOrgTree.id();\r
-\r
-       var depth = G.user.prefs[PREF_DEF_DEPTH];\r
-       if(! ( depth && depth <= findOrgDepth(org)) ) \r
-               depth = findOrgDepth(org);\r
-\r
-       runEvt( "common", "locationChanged", org, depth);\r
-}\r
-\r
-\r
-function changePassword() {\r
-\r
-       var pc = $('change_pw_current').value;\r
-       var p1 = $('change_pw_1').value;\r
-       var p2 = $('change_pw_2').value;\r
-\r
-       if( p1 != p2 ) {\r
-               alert($('pw_no_match').innerHTML);\r
-               return;\r
-       }\r
-\r
-       if(!strongPassword(p2, true) ) return;\r
-\r
-       var req = new Request(UPDATE_PASSWORD, G.user.session, p2, pc );\r
-       req.send(true);\r
-       if(req.result()) {\r
-               alert($('pw_update_successful').innerHTML);\r
-               loggedInOK();\r
-       }\r
-}\r
-\r
-var pwRegexSetting;\r
-function strongPassword(pass, alrt) {\r
-\r
-    /* first, let's see if there is a configured regex */\r
-    if(!pwRegexSetting) {\r
-        var regex = fetchOrgSettingDefault(G.user.home_ou(), 'global.password_regex');\r
-        if(regex) {\r
-            if(pass.match(new RegExp(regex))) {\r
-                return true;\r
-            } else {\r
-                if(alrt)\r
-                      alert($('pw_not_strong').innerHTML);\r
-                return false;\r
-            }\r
-        }\r
-    }\r
-\r
-    /* no regex configured, use the default */\r
-\r
-       var good = false;\r
-\r
-       do {\r
-\r
-               if(pass.length < 7) break;\r
-               if(!pass.match(/.*\d+.*/)) break;\r
-               if(!pass.match(/.*[A-Za-z]+.*/)) break;\r
-               good = true;\r
-\r
-       } while(0);\r
-\r
-       if(!good && alrt) alert($('pw_not_strong').innerHTML);\r
-       return good;\r
-}\r
-\r
-function initLogin() {\r
-    if(G.ui.login.button) G.ui.login.button.onclick = function(){$('login_form_submit').click();};\r
-    if(dojo.isIE) {\r
-        if(G.ui.login.username) G.ui.login.username.onkeydown = function(evt) {if(userPressedEnter(evt)) $('login_form_submit').click();};\r
-        if(G.ui.login.password) G.ui.login.password.onkeydown = function(evt) {if(userPressedEnter(evt)) $('login_form_submit').click();};\r
-    }\r
-\r
-   //if(findCurrentPage()==MYOPAC) {\r
-        swapCanvas(G.ui.login.box);\r
-        try{G.ui.login.username.focus();}catch(e){}\r
-    //}\r
-\r
-    G.ui.login.cancel.onclick = function(evt) { \r
-        showCanvas();\r
-        runEvt("common", "loginCanceled");\r
-    };\r
-\r
-       if(findCurrentPage() == MYOPAC) \r
-               G.ui.login.cancel.onclick = goHome;\r
-}\r
-\r
-function setSidebarLinks() {\r
-       G.ui.sidebar.home_link.setAttribute("href", buildOPACLink({page:HOME}));\r
-       G.ui.sidebar.advanced_link.setAttribute("href", buildOPACLink({page:ADVANCED}));\r
-       G.ui.sidebar.myopac_link.setAttribute("href", buildOPACLink({page:MYOPAC}, false, true));\r
-}\r
-\r
-function sidebarTreesFree() {\r
-       return;\r
-       removeChildren($(subjectSidebarTree.rootid));\r
-       removeChildren($(authorSidebarTree.rootid));\r
-       removeChildren($(seriesSidebarTree.rootid));\r
-       subjectSidebarTree = null;\r
-       authorSidebarTree = null;\r
-       seriesSidebarTree = null;\r
-}\r
-\r
-\r
-\r
-\r
-/* --------------------------------------------------------------------------------- */\r
-/* Code to support GALILEO links for PINES.  Fails gracefully\r
-/* --------------------------------------------------------------------------------- */\r
-attachEvt('common', 'init', buildEGGalLink);\r
-function buildEGGalLink() {\r
-\r
-       /* we're in a lib, nothing to do here */\r
-       if( getOrigLocation() ) return;\r
-       if(!$('eg_gal_link')) return;\r
-\r
-       //var link = 'http://demo.galib.uga.edu/express?pinesid=';\r
-       var link = 'http://www.galileo.usg.edu/express?pinesid=';\r
-       if(grabUser()) {\r
-               $('eg_gal_link').setAttribute('href', link + G.user.session);\r
-               return;\r
-       }\r
-\r
-       $('eg_gal_link').setAttribute('href', 'javascript:void(0);');\r
-       $('eg_gal_link').setAttribute('target', '');\r
-       $('eg_gal_link').onclick = function() {\r
-               /* we're not logged in.  go ahead and login */\r
-               detachAllEvt('common','locationChanged');\r
-               detachAllEvt('common','loggedIn');\r
-               attachEvt('common','loggedIn', function() { goTo(link + G.user.session); })\r
-               initLogin();\r
-       };\r
-}\r
-/* --------------------------------------------------------------------------------- */\r
-\r
-\r
+/* set up the colors in the sidebar 
+       Disables/Enables certain components based on various state data */
+
+attachEvt("common", "init", initSideBar);
+//attachEvt("common", "init", setSidebarLinks);
+//attachEvt("common", "unload", sidebarTreesFree );
+
+function prevRResults() {
+       return buildOPACLink({ page : RRESULT });
+}
+
+function prevMResults() {
+       return buildOPACLink({ page : MRESULT });
+}
+
+function initSideBar() {
+       var page = findCurrentPage();
+
+       if( page == MRESULT ) 
+               unHideMe($("sidebar_results_wrapper"));
+
+       if( page == RRESULT ) {
+               unHideMe($("sidebar_results_wrapper"));
+               unHideMe(G.ui.sidebar[MRESULT]);
+               if( getRtype() == RTYPE_MRID )
+                       $("sidebar_title_group_results").setAttribute("href", prevMResults());
+               else hideMe($("sidebar_title_group_results").parentNode);
+       }
+
+       /* if( page == RDETAIL ) {
+               unHideMe($("sidebar_results_wrapper"));
+               unHideMe(G.ui.sidebar[MRESULT]);
+               if(getRtype())
+                       $("sidebar_title_results").setAttribute("href", prevRResults());
+               unHideMe(G.ui.sidebar[RRESULT]);
+
+               if( getRtype() == RTYPE_MRID )
+                       $("sidebar_title_group_results").setAttribute("href", prevMResults());
+               else hideMe($("sidebar_title_group_results").parentNode);
+       } */
+
+       unHideMe(G.ui.sidebar[page]);
+       addCSSClass(G.ui.sidebar[page], "sidebar_item_active");
+
+       /* if we're logged in, show it and replace the Login link with the Logout link */
+       if(grabUser()) {
+               //G.ui.sidebar.username_dest.appendChild(text(G.user.usrname()));
+               //unHideMe(G.ui.sidebar.logoutbox);
+               unHideMe(G.ui.sidebar.logged_in_as);
+               hideMe(G.ui.sidebar.loginbox);
+       }
+
+       if(G.ui.sidebar.login) G.ui.sidebar.login.onclick = initLogin;
+       //if(G.ui.sidebar.logout) G.ui.sidebar.logout.onclick = doLogout; 
+
+       if(isXUL()) hideMe( G.ui.sidebar.logoutbox );
+}
+
+/* sets up the login ui components */
+var loginBoxVisible = false;
+function loginDance() {
+       var rem = $('remember_me');
+       if(rem) rem = rem.checked; else rem = false;
+       rem = rem?"persist":"opac";
+       
+       if(doLogin(true, rem)) {
+
+               if(!strongPassword( G.ui.login.password.value ) ) {
+
+                       cookieManager.write(COOKIE_SES, "");
+                       hideMe($('login_box'));
+                       unHideMe($('change_pw_table'));
+                       $('change_pw_current').focus();
+                       $('change_pw_button').onclick = changePassword;
+                       setEnterFunc($('change_pw_2'), changePassword);
+
+               } else {
+                       loggedInOK();
+               }
+       }
+}
+
+function loggedInOK() {
+       showCanvas();
+       //G.ui.sidebar.username_dest.appendChild(text(G.user.usrname()));
+       //unHideMe(G.ui.sidebar.logoutbox);
+       unHideMe(G.ui.sidebar.logged_in_as);
+       hideMe(G.ui.sidebar.loginbox);
+       runEvt( 'common', 'loggedIn');
+       
+       var org = G.user.prefs[PREF_DEF_LOCATION];
+    // KCLS wants the defautl search location to be the consortium
+    //if(!org) org = G.user.home_ou();
+    if(!org) org =  globalOrgTree.id();
+
+       var depth = G.user.prefs[PREF_DEF_DEPTH];
+       if(! ( depth && depth <= findOrgDepth(org)) ) 
+               depth = findOrgDepth(org);
+
+       runEvt( "common", "locationChanged", org, depth);
+}
+
+
+function changePassword() {
+
+       var pc = $('change_pw_current').value;
+       var p1 = $('change_pw_1').value;
+       var p2 = $('change_pw_2').value;
+
+       if( p1 != p2 ) {
+               alert($('pw_no_match').innerHTML);
+               return;
+       }
+
+       if(!strongPassword(p2, true) ) return;
+
+       var req = new Request(UPDATE_PASSWORD, G.user.session, p2, pc );
+       req.send(true);
+       if(req.result()) {
+               alert($('pw_update_successful').innerHTML);
+               loggedInOK();
+       }
+}
+
+var pwRegexSetting;
+function strongPassword(pass, alrt) {
+
+    /* first, let's see if there is a configured regex */
+    if(!pwRegexSetting) {
+        var regex = fetchOrgSettingDefault(G.user.home_ou(), 'global.password_regex');
+        if(regex) {
+            if(pass.match(new RegExp(regex))) {
+                return true;
+            } else {
+                if(alrt)
+                      alert($('pw_not_strong').innerHTML);
+                return false;
+            }
+        }
+    }
+
+    /* no regex configured, use the default */
+
+       var good = false;
+
+       do {
+
+               if(pass.length < 7) break;
+               if(!pass.match(/.*\d+.*/)) break;
+               if(!pass.match(/.*[A-Za-z]+.*/)) break;
+               good = true;
+
+       } while(0);
+
+       if(!good && alrt) alert($('pw_not_strong').innerHTML);
+       return good;
+}
+
+function initLogin() {
+    if(G.ui.login.button) G.ui.login.button.onclick = function(){$('login_form_submit').click();};
+    if(dojo.isIE) {
+        if(G.ui.login.username) G.ui.login.username.onkeydown = function(evt) {if(userPressedEnter(evt)) $('login_form_submit').click();};
+        if(G.ui.login.password) G.ui.login.password.onkeydown = function(evt) {if(userPressedEnter(evt)) $('login_form_submit').click();};
+    }
+
+   //if(findCurrentPage()==MYOPAC) {
+        swapCanvas(G.ui.login.box);
+        try{G.ui.login.username.focus();}catch(e){}
+    //}
+
+    G.ui.login.cancel.onclick = function(evt) { 
+        showCanvas();
+        runEvt("common", "loginCanceled");
+    };
+
+       if(findCurrentPage() == MYOPAC) 
+               G.ui.login.cancel.onclick = goHome;
+}
+
+function setSidebarLinks() {
+       G.ui.sidebar.home_link.setAttribute("href", buildOPACLink({page:HOME}));
+       G.ui.sidebar.advanced_link.setAttribute("href", buildOPACLink({page:ADVANCED}));
+       G.ui.sidebar.myopac_link.setAttribute("href", buildOPACLink({page:MYOPAC}, false, true));
+}
+
+function sidebarTreesFree() {
+       return;
+       removeChildren($(subjectSidebarTree.rootid));
+       removeChildren($(authorSidebarTree.rootid));
+       removeChildren($(seriesSidebarTree.rootid));
+       subjectSidebarTree = null;
+       authorSidebarTree = null;
+       seriesSidebarTree = null;
+}
+
+
+
+
+/* --------------------------------------------------------------------------------- */
+/* Code to support GALILEO links for PINES.  Fails gracefully
+/* --------------------------------------------------------------------------------- */
+attachEvt('common', 'init', buildEGGalLink);
+function buildEGGalLink() {
+
+       /* we're in a lib, nothing to do here */
+       if( getOrigLocation() ) return;
+       if(!$('eg_gal_link')) return;
+
+       //var link = 'http://demo.galib.uga.edu/express?pinesid=';
+       var link = 'http://www.galileo.usg.edu/express?pinesid=';
+       if(grabUser()) {
+               $('eg_gal_link').setAttribute('href', link + G.user.session);
+               return;
+       }
+
+       $('eg_gal_link').setAttribute('href', 'javascript:void(0);');
+       $('eg_gal_link').setAttribute('target', '');
+       $('eg_gal_link').onclick = function() {
+               /* we're not logged in.  go ahead and login */
+               detachAllEvt('common','locationChanged');
+               detachAllEvt('common','loggedIn');
+               attachEvt('common','loggedIn', function() { goTo(link + G.user.session); })
+               initLogin();
+       };
+}
+/* --------------------------------------------------------------------------------- */
+
+
index 9cd2672..a5fd379 100644 (file)
-\r
-/* captures extraneous info from each record */\r
-\r
-var subjectCache = {};\r
-var authorCache = {};\r
-var seriesCache = {};\r
-\r
-function resultBuildCaches(records) {\r
-       for( var r in records ) {\r
-               var rec = records[r];\r
-               for( var s in rec.subject() ) \r
-                       subjectCache[s] == null ? subjectCache[s] = 1 : subjectCache[s]++;\r
-               authorCache[rec.author()] = 1;\r
-               for( var s in rec.series() ) seriesCache[rec.series()[s]] = 1;\r
-       }\r
-}\r
-\r
-function resultSortSubjects(a, b) { return -(a.count - b.count); } /* sort in reverse */\r
-function resultDrawSubjects() {\r
-\r
-       var subjs = [];\r
-       for( var s in subjectCache )\r
-               subjs.push( { sub : s, count : subjectCache[s] } );\r
-       subjs.sort(resultSortSubjects);\r
-\r
-       var ss = [];\r
-       for( var s in subjs ) ss.push(subjs[s].sub);\r
-\r
-       resultDrawSidebarTrees( \r
-               STYPE_SUBJECT, \r
-               "subjectSidebarTree", ss, \r
-               $("subject_tree_sidebar"), \r
-               $("subject_sidebar_tree_div") );\r
-}\r
-\r
-function resultDrawAuthors() {\r
-       var auths = new Array();\r
-       for( var s in authorCache ) auths.push(s);\r
-\r
-       resultDrawSidebarTrees( \r
-               STYPE_AUTHOR, \r
-               "authorSidebarTree", auths.sort(), \r
-               $("author_tree_sidebar"), \r
-               $("author_sidebar_tree_div") );\r
-}\r
-\r
-function resultDrawSeries() {\r
-       var sers = new Array();\r
-       for( var s in seriesCache ) sers.push(s);\r
-       resultDrawSidebarTrees( \r
-               STYPE_SERIES, \r
-               "seriesSidebarTree", sers.sort(), \r
-               $("series_tree_sidebar"), \r
-               $("series_sidebar_tree_div") );\r
-}\r
-\r
-var IESux = true;\r
-\r
-function resultDrawSidebarTrees( stype, treeName, items, wrapperNode, destNode ) {\r
-       if(findCurrentPage()=="rdetail") return;\r
-       eval("tree = " + treeName);\r
-\r
-       var xrefCache = [];\r
-       var found = false;\r
-       var x = 0;\r
-       for( var i in items ) {\r
-\r
-               if(isNull(items[i])) continue;\r
-\r
-               /* again, IE is a turd */\r
-               if(IE) { if(x++ > 5) break; }\r
-               else { if(x++ > 7) break; }\r
-\r
-               found = true;\r
-\r
-               var item = normalize(truncate(items[i], 65));\r
-               var args = {};\r
-               var href = resultQuickLink( items[i], stype );\r
-               tree.addNode( stype + "_" + items[i], treeName + 'Root', item, href );\r
-\r
-//             if( !IE ) resultFireXRefReq(treeName, stype, items[i]);\r
-\r
-               var a = {};\r
-               a.type = stype;\r
-               a.term = item;\r
-               xrefCache.push(a);\r
-       }\r
-\r
-       if(found) {\r
-               unHideMe(wrapperNode);\r
-//             if(IE) resultFireXRefSingle(treeName, xrefCache, stype);\r
-               /* XXX */ // disabled auth lookups for now\r
-\r
-               if( DO_AUTHORITY_LOOKUPS ) {\r
-                       resultFireXRefBatch(treeName, xrefCache, stype);\r
-               }\r
-       }\r
-}\r
-\r
-/* XXX */\r
-function resultFireXRefBatch(treeName, xrefCache, stype) {\r
-       var query = [];\r
-       for( var i = 0; i != xrefCache.length; i++ ) {\r
-               var topic = xrefCache[i];\r
-               query.push( [ topic.type, topic.term ] );\r
-       }\r
-       var req = new Request(FETCH_CROSSREF_BATCH, query);\r
-       var tree;\r
-       eval('tree=' + treeName);\r
-       req.request._tree = tree;\r
-       req.request._stype = stype;\r
-       req.callback(resultRenderXRefTree);\r
-       req.send();\r
-}\r
-\r
-var xrefCacheIndex = {};\r
-xrefCacheIndex['subject'] = 0;\r
-xrefCacheIndex['author'] = 0;\r
-xrefCacheIndex['series'] = 0;\r
-\r
-function resultHandleXRefResponse(r) {\r
-       resultFireXRefSingle( r._treename, r._cache, r._stype );\r
-       resultAppendCrossRef(r);\r
-}\r
-\r
-\r
-function resultFireXRefSingle( treeName, xrefCache, stype ) {\r
-       var i = xrefCacheIndex[stype]++;\r
-       if(xrefCache[i] == null) return;\r
-       var item = xrefCache[i].term;\r
-       var tree;\r
-       eval('tree=' + treeName);\r
-       var req = new Request(FETCH_CROSSREF, stype, item);\r
-       req.request._tree = tree;\r
-       req.request._item = item;\r
-       req.request._stype = stype;\r
-       req.request._cache = xrefCache;\r
-       req.request._treename = treeName;\r
-       req.callback(resultHandleXRefResponse);\r
-       req.send();\r
-}\r
-\r
-function resultFireXRefReq( treeName, stype, item ) {\r
-       var tree;\r
-       eval('tree=' + treeName);\r
-       var req = new Request(FETCH_CROSSREF, stype, item);\r
-       req.request._tree = tree;\r
-       req.request._item = item;\r
-       req.request._stype = stype;\r
-       req.callback(resultAppendCrossRef);\r
-       req.send();\r
-}\r
-\r
-\r
-function resultQuickLink( term, type ) {\r
-       var args = {};\r
-       if(SHOW_MR_DEFAULT) {\r
-               args.page = MRESULT;\r
-       } else {\r
-               args.page = RRESULT;\r
-               args[PARAM_RTYPE] = type;\r
-       }\r
-       args[PARAM_OFFSET] = 0;\r
-       args[PARAM_TERM] = term;\r
-       args[PARAM_STYPE] = type;\r
-       return buildOPACLink(args);\r
-}\r
-\r
-/* XXX */\r
-function resultRenderXRefTree(r) {\r
-       var tree = r._tree;\r
-       var res = r.getResultObject();\r
-       var stype = r._stype;\r
-\r
-       for( var c in res ) {\r
-               var cls = res[c];\r
-               for( var t in cls ) {\r
-                       var term = res[c][t];\r
-                       var froms = term['from'];\r
-                       var alsos = term['also'];\r
-                       var total = 0;\r
-\r
-                       for( var i = 0; (total++ < 5 && i < froms.length); i++ ) {\r
-                               var string = normalize(truncate(froms[i], 45));\r
-                               if($(stype + '_' + froms[i])) continue;\r
-                               tree.addNode(stype + '_' + froms[i], \r
-                                       stype + '_' + t, string, resultQuickLink(froms[i],stype));\r
-                       }\r
-                       for( var i = 0; (total++ < 10 && i < alsos.length); i++ ) {\r
-                               var string = normalize(truncate(alsos[i], 45));\r
-                               if($(stype + '_' + alsos[i])) continue;\r
-                               tree.addNode(stype + '_' + alsos[i], \r
-                                       stype + '_' + t, string, resultQuickLink(alsos[i],stype));\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-\r
-/* Addes the see-from/see-also entries for this subject item */\r
-function resultAppendCrossRef(r) {\r
-       var tree                = r._tree\r
-       var item                = r._item\r
-       var stype       = r._stype;\r
-       var result      = r.getResultObject();\r
-       if(!result) return;\r
-       var froms       = result['from'];\r
-       var alsos       = result['also'];\r
-\r
-       var total = 0;\r
-\r
-       for( var i = 0; (total++ < 5 && i < froms.length); i++ ) \r
-               resultAddXRefItem( tree, item, stype, froms, i );\r
-\r
-       for( var i = 0; (total++ < 10 && i < alsos.length); i++ ) \r
-               resultAddXRefItem( tree, item, stype, alsos, i );\r
-}\r
-\r
-/**\r
- * Adds a single entry into the see-from/also sidebar tree \r
- */\r
-var collectedStrings = [];\r
-function resultAddXRefItem(tree, rootItem, stype, arr, idx) {\r
-\r
-       var string = normalize(truncate(arr[idx], 45));\r
-\r
-       if( string == rootItem ) return;\r
-\r
-       if( grep( collectedStrings, \r
-               function(a) { return (a == string); }) ) return;\r
-\r
-       if($(stype + '_' + arr[idx])) return;\r
-\r
-       tree.addNode(stype + '_' + arr[idx], \r
-               stype + '_' + rootItem, string, resultQuickLink(arr[idx],stype));\r
-\r
-       collectedStrings.push(string);\r
-}\r
-\r
-\r
-\r
-\r
-\r
-\r
+
+/* captures extraneous info from each record */
+
+var subjectCache = {};
+var authorCache = {};
+var seriesCache = {};
+
+function resultBuildCaches(records) {
+       for( var r in records ) {
+               var rec = records[r];
+               for( var s in rec.subject() ) 
+                       subjectCache[s] == null ? subjectCache[s] = 1 : subjectCache[s]++;
+               authorCache[rec.author()] = 1;
+               for( var s in rec.series() ) seriesCache[rec.series()[s]] = 1;
+       }
+}
+
+function resultSortSubjects(a, b) { return -(a.count - b.count); } /* sort in reverse */
+function resultDrawSubjects() {
+
+       var subjs = [];
+       for( var s in subjectCache )
+               subjs.push( { sub : s, count : subjectCache[s] } );
+       subjs.sort(resultSortSubjects);
+
+       var ss = [];
+       for( var s in subjs ) ss.push(subjs[s].sub);
+
+       resultDrawSidebarTrees( 
+               STYPE_SUBJECT, 
+               "subjectSidebarTree", ss, 
+               $("subject_tree_sidebar"), 
+               $("subject_sidebar_tree_div") );
+}
+
+function resultDrawAuthors() {
+       var auths = new Array();
+       for( var s in authorCache ) auths.push(s);
+
+       resultDrawSidebarTrees( 
+               STYPE_AUTHOR, 
+               "authorSidebarTree", auths.sort(), 
+               $("author_tree_sidebar"), 
+               $("author_sidebar_tree_div") );
+}
+
+function resultDrawSeries() {
+       var sers = new Array();
+       for( var s in seriesCache ) sers.push(s);
+       resultDrawSidebarTrees( 
+               STYPE_SERIES, 
+               "seriesSidebarTree", sers.sort(), 
+               $("series_tree_sidebar"), 
+               $("series_sidebar_tree_div") );
+}
+
+var IESux = true;
+
+function resultDrawSidebarTrees( stype, treeName, items, wrapperNode, destNode ) {
+       if(findCurrentPage()=="rdetail") return;
+       eval("tree = " + treeName);
+
+       var xrefCache = [];
+       var found = false;
+       var x = 0;
+       for( var i in items ) {
+
+               if(isNull(items[i])) continue;
+
+               /* again, IE is a turd */
+               if(IE) { if(x++ > 5) break; }
+               else { if(x++ > 7) break; }
+
+               found = true;
+
+               var item = normalize(truncate(items[i], 65));
+               var args = {};
+               var href = resultQuickLink( items[i], stype );
+               tree.addNode( stype + "_" + items[i], treeName + 'Root', item, href );
+
+//             if( !IE ) resultFireXRefReq(treeName, stype, items[i]);
+
+               var a = {};
+               a.type = stype;
+               a.term = item;
+               xrefCache.push(a);
+       }
+
+       if(found) {
+               unHideMe(wrapperNode);
+//             if(IE) resultFireXRefSingle(treeName, xrefCache, stype);
+               /* XXX */ // disabled auth lookups for now
+
+               if( DO_AUTHORITY_LOOKUPS ) {
+                       resultFireXRefBatch(treeName, xrefCache, stype);
+               }
+       }
+}
+
+/* XXX */
+function resultFireXRefBatch(treeName, xrefCache, stype) {
+       var query = [];
+       for( var i = 0; i != xrefCache.length; i++ ) {
+               var topic = xrefCache[i];
+               query.push( [ topic.type, topic.term ] );
+       }
+       var req = new Request(FETCH_CROSSREF_BATCH, query);
+       var tree;
+       eval('tree=' + treeName);
+       req.request._tree = tree;
+       req.request._stype = stype;
+       req.callback(resultRenderXRefTree);
+       req.send();
+}
+
+var xrefCacheIndex = {};
+xrefCacheIndex['subject'] = 0;
+xrefCacheIndex['author'] = 0;
+xrefCacheIndex['series'] = 0;
+
+function resultHandleXRefResponse(r) {
+       resultFireXRefSingle( r._treename, r._cache, r._stype );
+       resultAppendCrossRef(r);
+}
+
+
+function resultFireXRefSingle( treeName, xrefCache, stype ) {
+       var i = xrefCacheIndex[stype]++;
+       if(xrefCache[i] == null) return;
+       var item = xrefCache[i].term;
+       var tree;
+       eval('tree=' + treeName);
+       var req = new Request(FETCH_CROSSREF, stype, item);
+       req.request._tree = tree;
+       req.request._item = item;
+       req.request._stype = stype;
+       req.request._cache = xrefCache;
+       req.request._treename = treeName;
+       req.callback(resultHandleXRefResponse);
+       req.send();
+}
+
+function resultFireXRefReq( treeName, stype, item ) {
+       var tree;
+       eval('tree=' + treeName);
+       var req = new Request(FETCH_CROSSREF, stype, item);
+       req.request._tree = tree;
+       req.request._item = item;
+       req.request._stype = stype;
+       req.callback(resultAppendCrossRef);
+       req.send();
+}
+
+
+function resultQuickLink( term, type ) {
+       var args = {};
+       if(SHOW_MR_DEFAULT) {
+               args.page = MRESULT;
+       } else {
+               args.page = RRESULT;
+               args[PARAM_RTYPE] = type;
+       }
+       args[PARAM_OFFSET] = 0;
+       args[PARAM_TERM] = term;
+       args[PARAM_STYPE] = type;
+       return buildOPACLink(args);
+}
+
+/* XXX */
+function resultRenderXRefTree(r) {
+       var tree = r._tree;
+       var res = r.getResultObject();
+       var stype = r._stype;
+
+       for( var c in res ) {
+               var cls = res[c];
+               for( var t in cls ) {
+                       var term = res[c][t];
+                       var froms = term['from'];
+                       var alsos = term['also'];
+                       var total = 0;
+
+                       for( var i = 0; (total++ < 5 && i < froms.length); i++ ) {
+                               var string = normalize(truncate(froms[i], 45));
+                               if($(stype + '_' + froms[i])) continue;
+                               tree.addNode(stype + '_' + froms[i], 
+                                       stype + '_' + t, string, resultQuickLink(froms[i],stype));
+                       }
+                       for( var i = 0; (total++ < 10 && i < alsos.length); i++ ) {
+                               var string = normalize(truncate(alsos[i], 45));
+                               if($(stype + '_' + alsos[i])) continue;
+                               tree.addNode(stype + '_' + alsos[i], 
+                                       stype + '_' + t, string, resultQuickLink(alsos[i],stype));
+                       }
+               }
+       }
+}
+
+
+/* Addes the see-from/see-also entries for this subject item */
+function resultAppendCrossRef(r) {
+       var tree                = r._tree
+       var item                = r._item
+       var stype       = r._stype;
+       var result      = r.getResultObject();
+       if(!result) return;
+       var froms       = result['from'];
+       var alsos       = result['also'];
+
+       var total = 0;
+
+       for( var i = 0; (total++ < 5 && i < froms.length); i++ ) 
+               resultAddXRefItem( tree, item, stype, froms, i );
+
+       for( var i = 0; (total++ < 10 && i < alsos.length); i++ ) 
+               resultAddXRefItem( tree, item, stype, alsos, i );
+}
+
+/**
+ * Adds a single entry into the see-from/also sidebar tree 
+ */
+var collectedStrings = [];
+function resultAddXRefItem(tree, rootItem, stype, arr, idx) {
+
+       var string = normalize(truncate(arr[idx], 45));
+
+       if( string == rootItem ) return;
+
+       if( grep( collectedStrings, 
+               function(a) { return (a == string); }) ) return;
+
+       if($(stype + '_' + arr[idx])) return;
+
+       tree.addNode(stype + '_' + arr[idx], 
+               stype + '_' + rootItem, string, resultQuickLink(arr[idx],stype));
+
+       collectedStrings.push(string);
+}
+
+
+
+
+
+
index 2387dd3..deca7ea 100644 (file)
@@ -1,19 +1,19 @@
-attachEvt('result', 'allRecordsReceived', insertTip);\r
-\r
-/*\r
-var user_tips = [\r
-       'Click on a folder icon in the sidebar to access related quick searches',\r
-       "If you don't find what you want try expanding your search using the range selector at the right of the search bar"\r
-];\r
-*/\r
-\r
-function insertTip () {\r
-       var tip_div = document.getElementById('tips');\r
-       if (tip_div) {\r
-               var tips = tip_div.getElementsByTagName('div')[0].getElementsByTagName('span');\r
-               var index = Math.floor(Math.random() * tips.length);\r
-               if(tips[index]) tip_div.appendChild( tips[index] );\r
-               removeCSSClass(tip_div, 'hide_me');\r
-       }\r
-}\r
-\r
+attachEvt('result', 'allRecordsReceived', insertTip);
+
+/*
+var user_tips = [
+       'Click on a folder icon in the sidebar to access related quick searches',
+       "If you don't find what you want try expanding your search using the range selector at the right of the search bar"
+];
+*/
+
+function insertTip () {
+       var tip_div = document.getElementById('tips');
+       if (tip_div) {
+               var tips = tip_div.getElementsByTagName('div')[0].getElementsByTagName('span');
+               var index = Math.floor(Math.random() * tips.length);
+               if(tips[index]) tip_div.appendChild( tips[index] );
+               removeCSSClass(tip_div, 'hide_me');
+       }
+}
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/advanced/adv_global_row - Copy.xml b/Open-ILS/web/opac/skin/kcls/xml/advanced/adv_global_row - Copy.xml
deleted file mode 100644 (file)
index 6f41466..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<!--\r
-<tr id='adv_global_trow' type='input'>\r
--->\r
-<![CDATA[<!-- ****************** adv_global_row.xml ***************************** -->]]>\r
-<tr id='<!--#echo var="adv_global_row_id"-->' type='input'>\r
-       <td align='left' width='100%' nowrap='nowrap'>\r
-\r
-               <!-- select the search class -->\r
-               <select name='type' style='margin-right: 7px;'>\r
-                       <option value='keyword' selected='selected'>&common.keyword;</option>\r
-                       <option value='title'>&common.title;</option>\r
-                       <option value='author'>&common.author;</option>\r
-                       <option value='subject'>&common.subject;</option>\r
-                       <option value='series'>&common.series;</option>\r
-                       <option value='bibcn'>&common.bibcn;</option>\r
-                       \r
-                       </select>\r
-       \r
-               <!-- select how to treat the text -->\r
-               <select name='contains' style='margin-right: 7px;'>\r
-                       <option value='contains'>&opac.advanced.refined.contains;</option>\r
-                       <option value='nocontains'>&opac.advanced.refined.nocontains;</option>\r
-                       <option value='exact'>&opac.advanced.refined.exact;</option>\r
-               </select>\r
-                       \r
-               <!-- search term -->\r
-               <input type='text' size='18' name='term' style='margin-right: 3px;' />\r
-       \r
-               <!-- Remove this row -->\r
-        <button \r
-                       onclick='\r
-                               var row = this.parentNode.parentNode;\r
-                               var tbody = row.parentNode;\r
-                               if( tbody.getElementsByTagName("tr").length > 2 )\r
-                                       row.parentNode.removeChild(row);'>X</button>\r
-\r
-       </td>\r
-</tr>\r
-<![CDATA[<!-- ****************** end: adv_global_row.xml ***************************** -->]]>\r
index 9e1aa2c..86fcfb8 100644 (file)
@@ -1,33 +1,33 @@
-<!--\r
-<tr id='adv_global_trow' type='input'>\r
--->\r
-<![CDATA[<!-- ****************** adv_global_row.xml ***************************** -->]]>\r
-<tr id='<!--#echo var="adv_global_row_id"-->' type='input'>\r
-       <td align='left' width='100%' nowrap='nowrap'>\r
-\r
-               <!-- select the search class -->\r
-               <select name='type' style='margin-right: 7px;'>\r
-                       <option value='keyword' selected='selected'>&common.keyword;</option>\r
-                       <option value='title'>&common.title;</option>\r
-                       <option value='author'>&common.author;</option>\r
-                       <option value='subject'>&common.subject;</option>\r
-                       <option value='series'>&common.series;</option>\r
-                       <option value='bibcn'>&common.bibcn;</option>\r
-                       \r
-                       </select>\r
-       \r
-               <!-- select how to treat the text -->\r
-               <select name='contains' style='margin-right: 7px;'>\r
-                       <option value='contains'>&opac.advanced.refined.contains;</option>\r
-                       <option value='nocontains'>&opac.advanced.refined.nocontains;</option>\r
-                       <option value='exact'>&opac.advanced.refined.exact;</option>\r
-               </select>\r
-                       \r
-               <!-- search term -->\r
-               <input type='text' size='18' name='term' /><a href="javascript:;" style="position:relative;top:1px;" title="Remove row" alt="Remove row" onclick='\r
-               var row = this.parentNode.parentNode;var tbody = row.parentNode;\r
-               if( tbody.getElementsByTagName("tr").length > 2 ) row.parentNode.removeChild(row);'><img src="/opac/skin/kcls/graphics/adv_row_close_btn.png" /></a>\r
-       \r
-       </td>\r
-</tr>\r
-<![CDATA[<!-- ****************** end: adv_global_row.xml ***************************** -->]]>\r
+<!--
+<tr id='adv_global_trow' type='input'>
+-->
+<![CDATA[<!-- ****************** adv_global_row.xml ***************************** -->]]>
+<tr id='<!--#echo var="adv_global_row_id"-->' type='input'>
+       <td align='left' width='100%' nowrap='nowrap'>
+
+               <!-- select the search class -->
+               <select name='type' style='margin-right: 7px;'>
+                       <option value='keyword' selected='selected'>&common.keyword;</option>
+                       <option value='title'>&common.title;</option>
+                       <option value='author'>&common.author;</option>
+                       <option value='subject'>&common.subject;</option>
+                       <option value='series'>&common.series;</option>
+                       <option value='bibcn'>&common.bibcn;</option>
+                       
+                       </select>
+       
+               <!-- select how to treat the text -->
+               <select name='contains' style='margin-right: 7px;'>
+                       <option value='contains'>&opac.advanced.refined.contains;</option>
+                       <option value='nocontains'>&opac.advanced.refined.nocontains;</option>
+                       <option value='exact'>&opac.advanced.refined.exact;</option>
+               </select>
+                       
+               <!-- search term -->
+               <input type='text' size='18' name='term' /><a href="javascript:;" style="position:relative;top:1px;" title="Remove row" alt="Remove row" onclick='
+               var row = this.parentNode.parentNode;var tbody = row.parentNode;
+               if( tbody.getElementsByTagName("tr").length > 2 ) row.parentNode.removeChild(row);'><img src="/opac/skin/kcls/graphics/adv_row_close_btn.png" /></a>
+       
+       </td>
+</tr>
+<![CDATA[<!-- ****************** end: adv_global_row.xml ***************************** -->]]>
index d442dc6..5d604b0 100644 (file)
-\r
-<![CDATA[<!-- ****************** advanced_global.xml ***************************** -->]]>\r
-<table id='adv_global_search' class='data_grid data_grid_center' width='100%'>\r
-\r
-       <style>\r
-               #adv_global_search select { width: 13em; }\r
-               #adv_global_input_table select { width: 7em; }\r
-               .adv_adv_link { font-size: 8pt; color: red; }\r
-       </style>\r
-\r
-       <tr style='border-bottom: none;'>\r
-\r
-               <!-- Contains the user-addable(?) rows to define search class, containment and text -->\r
-               <td valign='top' style='border-bottom: none;'>\r
-                       <table width='100%' id='adv_global_input_table'>\r
-       \r
-                               <thead>\r
-                                       <tr><td><div style="width:100%;" class="header_middle">&advanced.search.title;</div></td></tr>\r
-                               </thead>\r
-                               <tbody id='adv_global_tbody'>\r
-\r
-\r
-                                       <!--#set var="adv_global_row_id" value="adv_global_trow"-->\r
-                                       <!--#include virtual="adv_global_row.xml"-->\r
-\r
-                                       <!--#set var="adv_global_row_id" value=""-->\r
-\r
-                                       <!-- add a new row -->\r
-                                       <tr id='adv_global_addrow'>\r
-                                               <td align='left' style="padding-top:7px;">\r
-                                                       <a href="javascript:;" id="myopac_new_global_row" onclick='advAddGblRow();'>Add Search Row</a>\r
-                            <button onclick='advSubmitGlobal();' class="hide_me">&advanced.search.submit;</button>\r
-                                               </td>\r
-                                       </tr>\r
-\r
-                               </tbody>\r
-                       </table>\r
-               </td>\r
-       </tr>\r
-       <tr>\r
-               <td align='top'>\r
-                 <div style="width:100%;" class="header_middle">Search Filters</div>\r
-                 <table cellpadding='10' cellspacing='0' border='0'><tr>\r
-                       <td valign='top'>\r
-                               <strong>&advanced.item.type;</strong><br />\r
-                                                                                       <!--<a id='adv_global_item_type_link_adv' class='classic_link adv_adv_link'\r
-                                                               href='javascript:void(0);' onclick='\r
-                                                               hideMe($("adv_global_item_type_basic"));\r
-                                                               unHideMe($("adv_global_item_type"));\r
-                                                               hideMe(this);\r
-                                                               unHideMe($("adv_global_item_type_link_basic"));\r
-                                                               '>Add More Filters</a>\r
-\r
-                                                       <a id='adv_global_item_type_link_basic' class='hide_me classic_link adv_adv_link'\r
-                                                               href='javascript:void(0);' onclick='\r
-                                                               unHideMe($("adv_global_item_type_basic"));\r
-                                                               hideMe($("adv_global_item_type"));\r
-                                                               unHideMe($("adv_global_item_type_link_adv"));\r
-                                                               hideMe(this);\r
-                                                               '>&advanced.basic.link;</a>-->\r
-                               <select multiple='multiple' size='4' id='adv_global_item_type' class='hide_me'></select>        \r
-                               <select multiple='multiple' size='4' id='adv_global_item_type_basic'>\r
-                                       <option value=''>&opac.search.allFormats;</option>\r
-                                       <option value='a'>Book</option>\r
-                                       <option value='i'>Book on cassette</option>\r
-                                       <option value='n'>Book on CD</option>\r
-                                       <option value='x'>Download music</option>\r
-                                       <option value='y'>Download video</option>\r
-                                       <option value='h'>DVD</option>\r
-                                       <option value='w'>eBook - Audio</option>\r
-                                       <option value='v'>eBook - Text</option>\r
-                                       <option value='e'>Equipment</option>\r
-                                       <option value='f'>Films</option>\r
-                                       <option value='o'>Kit</option>\r
-                                       <option value='q'>Large print</option>\r
-                                       <option value='b'>Magazine</option>\r
-                                       <option value='d'>Microform</option>\r
-                                       <option value='k'>Music cassette</option>\r
-                                       <option value='j'>Music CD</option>\r
-                                       <option value='l'>Music LP</option>\r
-                                       <option value='p'>Newspaper</option>\r
-                                       <option value='t'>Online</option>\r
-                                       <option value='u'>Player</option>\r
-                                       <option value='c'>Printed music</option>\r
-                                       <option value='2'>Read along with cassette</option>\r
-                                       <option value='5'>Read along with CD</option>   \r
-                                       <option value='c'>Scores</option>       \r
-                                       <option value='m'>Software</option>\r
-                                       <option value='g'>Video</option>\r
-                                       <option value='r'>3-D Object</option>\r
-                                       <option value='z'>Map</option>\r
-                                       <option value='s'>Slide set</option>\r
-                               </select>\r
-                       </td>\r
-                       <td valign='top'>\r
-                               <strong>&advanced.language;</strong><br />\r
-                               <select multiple='multiple' size='4' id='adv_global_lang'>\r
-                                       <!--#include virtual="../../../../../common/xml/item_lang_options.xml"-->\r
-                               </select>\r
-                       </td>\r
-                       <td valign='top'>\r
-                               <strong>&advanced.audience;</strong><br />\r
-                               <select multiple='multiple' size='3' id='adv_global_audience' class='hide_me'></select>\r
-                               <select multiple='multiple' size='3' id='adv_global_audience_basic'>\r
-                                       <option value='abcj'>&advanced.juvenile;</option>\r
-                                       <option value='d'>&advanced.general;</option>\r
-                                       <option value='e'>&advanced.adult;</option>\r
-                               </select>\r
-                                       <!--<a id='adv_global_audience_link_adv' class='classic_link adv_adv_link'\r
-                                               href='javascript:void(0);' onclick='\r
-                                               hideMe($("adv_global_audience_basic"));\r
-                                               unHideMe($("adv_global_audience"));\r
-                                               hideMe(this);\r
-                                               unHideMe($("adv_global_audience_link_basic"));\r
-                                               '>&advanced.link;</a>\r
-\r
-                                       <a id='adv_global_audience_link_basic' class='hide_me classic_link adv_adv_link'\r
-                                               href='javascript:void(0);' onclick='\r
-                                               unHideMe($("adv_global_audience_basic"));\r
-                                               hideMe($("adv_global_audience"));\r
-                                               unHideMe($("adv_global_audience_link_adv"));\r
-                                               hideMe(this);'>&advanced.basic.link;</a>-->\r
-                       </td>\r
-                       <td valign='top'>\r
-                       <strong>&advanced.sort.criteria;</strong>\r
-                         <table style='border: none; width: 100%;'>\r
-                               <tr>\r
-                                       <td align='center' width='100%'>\r
-                                               <table class='' width='100%'>\r
-                                                       <tbody>\r
-                                                               <tr>\r
-                                                                       <td align=''>\r
-                                                                               <select id='adv_global_sort_by' onchange='__setsortsel();'>\r
-                                                                                       <option value='rel'>&advanced.relevance;</option>\r
-                                                                                       <option value='title'>&common.title;</option>\r
-                                                                                       <option value='author'>&common.author;</option>\r
-                                                                                       <option value='pubdate'>&advanced.pubdate;</option>\r
-                                                                               </select>\r
-                                                                       </td>\r
-                                                               </tr>\r
-                       \r
-                                                               <tr>\r
-\r
-                                                                       <td>\r
-                                                                               <select id='adv_global_sort_dir' disabled='disabled'>\r
-                                                                                       <option value='asc'>&advanced.sort.asc;</option>\r
-                                                                                       <option value='desc'>&advanced.sort.desc;</option>\r
-                                                                               </select>\r
-                                                                       </td>\r
-\r
-                           <!-- force the enable/disable sort dir code to run -->\r
-                                                               </tr>\r
-                                                               <tr>\r
-                                                                       <td align='center' class="hide_me">\r
-                                                                               <span>&advanced.frbrize;</span>\r
-                                                                               <input id='adv_group_titles' type='checkbox' />\r
-                                                                       </td>\r
-                                    <td align='center'>\r
-\r
-                                    </td>\r
-                                                               </tr>\r
-                                                       </tbody>\r
-                                               </table>\r
-                                       </td>\r
-                               </tr>\r
-                         </table>\r
-                       </td>\r
-                 </tr></table>\r
-               </td>\r
-       </tr>\r
-       \r
-       <tr>\r
-               <td colspan="2">\r
-                       <table cellpadding='10' cellspacing='0' border='0'>\r
-                               <tbody>\r
-                                       <tr>\r
-                                               <td align='right' class="hide_me">\r
-                                                       <span>&advanced.item.form;</span>\r
-                                               </td>\r
-                                               <td align='left' class="hide_me">\r
-                                                       <select multiple='multiple' size='3' id='adv_global_item_form'>\r
-                                                       </select>       \r
-                                               </td>\r
-\r
-                                               <td align='right' class="hide_me">\r
-                                                       <span>&advanced.literary.form;</span>\r
-                                                       <a id='adv_global_lit_form_link_adv' class='classic_link adv_adv_link'\r
-                                                               href='javascript:void(0);' onclick='\r
-                                                               hideMe($("adv_global_lit_form_basic"));\r
-                                                               unHideMe($("adv_global_lit_form"));\r
-                                                               hideMe(this);\r
-                                                               unHideMe($("adv_global_lit_form_link_basic"));\r
-                                                               '>&advanced.link;</a>\r
-\r
-                                                       <a id='adv_global_lit_form_link_basic' class='hide_me classic_link adv_adv_link'\r
-                                                               href='javascript:void(0);' onclick='\r
-                                                               unHideMe($("adv_global_lit_form_basic"));\r
-                                                               hideMe($("adv_global_lit_form"));\r
-                                                               unHideMe($("adv_global_lit_form_link_adv"));\r
-                                                               hideMe(this);\r
-                                                               '>&advanced.basic.link;</a>\r
-                                               </td>\r
-                                               <td align='left' class="hide_me">\r
-                                                       <select multiple='multiple' size='3' id='adv_global_lit_form' class='hide_me'>\r
-                                                       </select>       \r
-                                                       <select multiple='multiple' size='3' id='adv_global_lit_form_basic'>\r
-                                                               <option value='0 '>&advanced.non.fiction;</option>\r
-                                                               <option value='1'>&advanced.fiction;</option>\r
-                                                       </select>       \r
-                                               </td>\r
-                                               <td align='right' class="hide_me">\r
-                                                       <span>&advanced.biblevel;</span>\r
-                                               </td>\r
-                                               <td align='left' class="hide_me">\r
-                                                       <select multiple='multiple' size='3' id='adv_global_bib_level'>\r
-                                                       </select>       \r
-                                               </td>\r
-                                       </tr>\r
-                                       \r
-                                       <tr>\r
-                                               <td valign='top'>\r
-                         <strong>&advanced.search.library;</strong><br />\r
-                         <!--#include virtual='../common/libselect.xml'--><br />\r
-                         <div style="position:relative;top:7px;"><input type='checkbox' id='opac.result.limit2avail'/> <label style="position:relative;top:-2px;" for='opac.result.limit2avail'>&result.limit2avail;</label></div>\r
-                         \r
-                                               </td>\r
-                                               <td valign='top'>\r
-                                                       <strong>&advanced.filter.pubyear;</strong><br />\r
-                                                       <select id='adv_global_pub_date_type' onchange='\r
-                                if($("adv_global_pub_date_type").selectedIndex == 3)\r
-                                    unHideMe($("adv_global_pub_date_2_span"));\r
-                                else\r
-                                    hideMe($("adv_global_pub_date_2_span"));'>\r
-                                <option value='equals' selected='selected'>&advanced.filter.pubyear.equals;</option>\r
-                                <option value='before'>&advanced.filter.pubyear.before;</option>\r
-                                <option value='after'>&advanced.filter.pubyear.after;</option>\r
-                                <option value='between'>&advanced.filter.pubyear.between;</option>\r
-                                                       </select>       \r
-                            <div style='margin-top:5px;'>\r
-                                <input id='adv_global_pub_date_1' type='text' size='4' maxlength='4'/>\r
-                                <span id='adv_global_pub_date_2_span' class='hide_me'>\r
-                                   &common.and; <input id='adv_global_pub_date_2' type='text' size='4' maxlength='4'/>\r
-                                </span>\r
-                            </div>\r
-                                               </td>\r
-                                       </tr>\r
-\r
-\r
-                    <!-- copy location selector -->\r
-                    <tr id='adv_copy_location_filter_row' class='hide_me'>\r
-                        <td align='right'>&opac.advanced.copy_loc_filter;</td>\r
-                        <td align='left' id='adv_copy_location_filter_td'>\r
-                            <select size='3' id='adv_copy_location_filter_select' multiple='multiple'>\r
-                            </select>\r
-                        </td>\r
-                    </tr>\r
-                               </tbody>\r
-                       </table>\r
-               </td>\r
-       </tr>\r
-\r
-       <tr style='border-top: none;'>\r
-               <td align='center' valign='top' style='border-top: none;' colspan='2'>\r
-\r
-                       \r
-               </td>\r
-\r
-       </tr>\r
-\r
-       <tr class='border_4_2'>\r
-               <td align="left" colspan='2'>\r
-               <div style="width:100%;height:0px;margin-bottom:15px;" class="header_middle"></div>\r
-               <img src="/opac/skin/kcls/graphics/search_btn.gif" alt="Search" onclick='advSubmitGlobal();' style="cursor:pointer;" />\r
-               <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]>\r
-               <a href="javascript:;" onclick='clearSearchBoxes();' style="position: relative; top: -9px;">Reset Form</a>\r
-               </td>\r
-       </tr>\r
-\r
-</table>\r
-\r
-\r
-<div id='adv_quick_search_sidebar' class='sidebar_chunk hide_me' style='text-align:center; margin-top: 20px; width:400px;'> \r
-       <div id='adv_quick_search'>\r
-               <div class='adv_quick_search color_4'><b>&sidebar.quick.search;</b></div>\r
-               <div style='margin-top: 8px;'>\r
-                       <table><tbody><tr>\r
-                               <td>\r
-                                       <select id='adv_quick_type'>\r
-                                               <option value='isbn'>&opac.advanced.quick.isbn;</option>\r
-                                               <option value='issn'>&opac.advanced.quick.issn;</option>\r
-                                               <option value='cn'>&opac.advanced.quick.cn;</option>\r
-                                               <option value='lccn'>&opac.advanced.quick.lccn;</option>\r
-                                               <option value='tcn'>&opac.advanced.quick.tcn;</option>\r
-                                               <option value='barcode'>&opac.advanced.quick.barcode;</option>\r
-                                       </select>\r
-                               </td><td>\r
-                                       <input type='text' id='adv_quick_text' size='16' />\r
-                               </td>\r
-                       </tr></tbody></table>\r
-               </div>\r
-\r
-               <span class='hide_me' id='myopac.copy.not.found'>&sidebar.copy.not.found;</span>\r
-               <div style='margin-top: 8px;' class='adv_quick_search_submit'>\r
-               <img src="/opac/skin/kcls/graphics/search_btn.gif" alt="Search" id="adv_quick_submit" onclick='advGenericSearch();' style="cursor:pointer;" />\r
-                       <!-- <a id='adv_quick_submit' href='javascript:advGenericSearch();' class='classic_link'>&common.submit;</a> -->\r
-               </div>\r
-       </div>\r
-</div>\r
-\r
-\r
-<div id='adv_marc_search_sidebar' class='sidebar_chunk hide_me' style='width:400px; margin-top: 20px;'> \r
-       <div class='adv_quick_search color_4'><b>&search.marc;</b></div>\r
-       <table style='margin: 3px; width: 100%;' id='adv_sdbar_table' class='border_4_3'>\r
-               <tbody>\r
-                       <tr>\r
-                               <td align="right">&search.marc.tag;</td>\r
-                               <td align="left"><input name='advanced.marc.tag' maxlength='3' size='3' /></td>\r
-                               <td align="right">&search.marc.subfield;</td>\r
-                               <td align="left"><input name='advanced.marc.subfield' maxlength='1' size='1' /></td>\r
-                       </tr>\r
-                       <tr>\r
-                               <td align="right">&search.marc.value;</td>\r
-                               <td colspan='3' align="left"><input name='advanced.marc.value' size='18' /></td>\r
-                       </tr>\r
-                       <tr name='crow' class='hide_me'>\r
-                               <td colspan='4' align='center'>\r
-                               <a href='javascript:void(0);' class='classic_link'\r
-                                       onclick='\r
-                                               var div = $("adv_marc_search_sidebar");\r
-                                               if( div.getElementsByTagName("table").length > 1 )\r
-                                                       div.removeChild(this.parentNode.parentNode.parentNode.parentNode);'>&common.close;</a>\r
-                               </td>\r
-                       </tr>\r
-                                                       \r
-               </tbody>\r
-       </table>\r
-       <div id='adv_marc_submit' class='adv_quick_search_submit'>\r
-               <a style='margin-right: 4px; position:relative;top:-10px;' class='classic_link' href='javascript:advAddMARC();'>&search.marc.add.row;</a>\r
-               <!-- <a style='margin-left: 4px;' class='classic_link' href='javascript:advMARCRun();'>&common.submit;</a> -->\r
-               <img alt="Search" src="/opac/skin/kcls/graphics/search_btn.gif" onclick='advMARCRun();' style="cursor:pointer;" />\r
-       </div>\r
-</div>\r
-\r
-       \r
-<![CDATA[<!-- ****************** end: advanced_global.xml ***************************** -->]]>\r
-\r
+
+<![CDATA[<!-- ****************** advanced_global.xml ***************************** -->]]>
+<table id='adv_global_search' class='data_grid data_grid_center' width='100%'>
+
+       <style>
+               #adv_global_search select { width: 13em; }
+               #adv_global_input_table select { width: 7em; }
+               .adv_adv_link { font-size: 8pt; color: red; }
+       </style>
+
+       <tr style='border-bottom: none;'>
+
+               <!-- Contains the user-addable(?) rows to define search class, containment and text -->
+               <td valign='top' style='border-bottom: none;'>
+                       <table width='100%' id='adv_global_input_table'>
+       
+                               <thead>
+                                       <tr><td><div style="width:100%;" class="header_middle">&advanced.search.title;</div></td></tr>
+                               </thead>
+                               <tbody id='adv_global_tbody'>
+
+
+                                       <!--#set var="adv_global_row_id" value="adv_global_trow"-->
+                                       <!--#include virtual="adv_global_row.xml"-->
+
+                                       <!--#set var="adv_global_row_id" value=""-->
+
+                                       <!-- add a new row -->
+                                       <tr id='adv_global_addrow'>
+                                               <td align='left' style="padding-top:7px;">
+                                                       <a href="javascript:;" id="myopac_new_global_row" onclick='advAddGblRow();'>Add Search Row</a>
+                            <button onclick='advSubmitGlobal();' class="hide_me">&advanced.search.submit;</button>
+                                               </td>
+                                       </tr>
+
+                               </tbody>
+                       </table>
+               </td>
+       </tr>
+       <tr>
+               <td align='top'>
+                 <div style="width:100%;" class="header_middle">Search Filters</div>
+                 <table cellpadding='10' cellspacing='0' border='0'><tr>
+                       <td valign='top'>
+                               <strong>&advanced.item.type;</strong><br />
+                                                                                       <!--<a id='adv_global_item_type_link_adv' class='classic_link adv_adv_link'
+                                                               href='javascript:void(0);' onclick='
+                                                               hideMe($("adv_global_item_type_basic"));
+                                                               unHideMe($("adv_global_item_type"));
+                                                               hideMe(this);
+                                                               unHideMe($("adv_global_item_type_link_basic"));
+                                                               '>Add More Filters</a>
+
+                                                       <a id='adv_global_item_type_link_basic' class='hide_me classic_link adv_adv_link'
+                                                               href='javascript:void(0);' onclick='
+                                                               unHideMe($("adv_global_item_type_basic"));
+                                                               hideMe($("adv_global_item_type"));
+                                                               unHideMe($("adv_global_item_type_link_adv"));
+                                                               hideMe(this);
+                                                               '>&advanced.basic.link;</a>-->
+                               <select multiple='multiple' size='4' id='adv_global_item_type' class='hide_me'></select>        
+                               <select multiple='multiple' size='4' id='adv_global_item_type_basic'>
+                                       <option value=''>&opac.search.allFormats;</option>
+                                       <option value='a'>Book</option>
+                                       <option value='i'>Book on cassette</option>
+                                       <option value='n'>Book on CD</option>
+                                       <option value='x'>Download music</option>
+                                       <option value='y'>Download video</option>
+                                       <option value='h'>DVD</option>
+                                       <option value='w'>eBook - Audio</option>
+                                       <option value='v'>eBook - Text</option>
+                                       <option value='e'>Equipment</option>
+                                       <option value='f'>Films</option>
+                                       <option value='o'>Kit</option>
+                                       <option value='q'>Large print</option>
+                                       <option value='b'>Magazine</option>
+                                       <option value='d'>Microform</option>
+                                       <option value='k'>Music cassette</option>
+                                       <option value='j'>Music CD</option>
+                                       <option value='l'>Music LP</option>
+                                       <option value='p'>Newspaper</option>
+                                       <option value='t'>Online</option>
+                                       <option value='u'>Player</option>
+                                       <option value='c'>Printed music</option>
+                                       <option value='2'>Read along with cassette</option>
+                                       <option value='5'>Read along with CD</option>   
+                                       <option value='c'>Scores</option>       
+                                       <option value='m'>Software</option>
+                                       <option value='g'>Video</option>
+                                       <option value='r'>3-D Object</option>
+                                       <option value='z'>Map</option>
+                                       <option value='s'>Slide set</option>
+                               </select>
+                       </td>
+                       <td valign='top'>
+                               <strong>&advanced.language;</strong><br />
+                               <select multiple='multiple' size='4' id='adv_global_lang'>
+                                       <!--#include virtual="../../../../../common/xml/item_lang_options.xml"-->
+                               </select>
+                       </td>
+                       <td valign='top'>
+                               <strong>&advanced.audience;</strong><br />
+                               <select multiple='multiple' size='3' id='adv_global_audience' class='hide_me'></select>
+                               <select multiple='multiple' size='3' id='adv_global_audience_basic'>
+                                       <option value='abcj'>&advanced.juvenile;</option>
+                                       <option value='d'>&advanced.general;</option>
+                                       <option value='e'>&advanced.adult;</option>
+                               </select>
+                                       <!--<a id='adv_global_audience_link_adv' class='classic_link adv_adv_link'
+                                               href='javascript:void(0);' onclick='
+                                               hideMe($("adv_global_audience_basic"));
+                                               unHideMe($("adv_global_audience"));
+                                               hideMe(this);
+                                               unHideMe($("adv_global_audience_link_basic"));
+                                               '>&advanced.link;</a>
+
+                                       <a id='adv_global_audience_link_basic' class='hide_me classic_link adv_adv_link'
+                                               href='javascript:void(0);' onclick='
+                                               unHideMe($("adv_global_audience_basic"));
+                                               hideMe($("adv_global_audience"));
+                                               unHideMe($("adv_global_audience_link_adv"));
+                                               hideMe(this);'>&advanced.basic.link;</a>-->
+                       </td>
+                       <td valign='top'>
+                       <strong>&advanced.sort.criteria;</strong>
+                         <table style='border: none; width: 100%;'>
+                               <tr>
+                                       <td align='center' width='100%'>
+                                               <table class='' width='100%'>
+                                                       <tbody>
+                                                               <tr>
+                                                                       <td align=''>
+                                                                               <select id='adv_global_sort_by' onchange='__setsortsel();'>
+                                                                                       <option value='rel'>&advanced.relevance;</option>
+                                                                                       <option value='title'>&common.title;</option>
+                                                                                       <option value='author'>&common.author;</option>
+                                                                                       <option value='pubdate'>&advanced.pubdate;</option>
+                                                                               </select>
+                                                                       </td>
+                                                               </tr>
+                       
+                                                               <tr>
+
+                                                                       <td>
+                                                                               <select id='adv_global_sort_dir' disabled='disabled'>
+                                                                                       <option value='asc'>&advanced.sort.asc;</option>
+                                                                                       <option value='desc'>&advanced.sort.desc;</option>
+                                                                               </select>
+                                                                       </td>
+
+                           <!-- force the enable/disable sort dir code to run -->
+                                                               </tr>
+                                                               <tr>
+                                                                       <td align='center' class="hide_me">
+                                                                               <span>&advanced.frbrize;</span>
+                                                                               <input id='adv_group_titles' type='checkbox' />
+                                                                       </td>
+                                    <td align='center'>
+
+                                    </td>
+                                                               </tr>
+                                                       </tbody>
+                                               </table>
+                                       </td>
+                               </tr>
+                         </table>
+                       </td>
+                 </tr></table>
+               </td>
+       </tr>
+       
+       <tr>
+               <td colspan="2">
+                       <table cellpadding='10' cellspacing='0' border='0'>
+                               <tbody>
+                                       <tr>
+                                               <td align='right' class="hide_me">
+                                                       <span>&advanced.item.form;</span>
+                                               </td>
+                                               <td align='left' class="hide_me">
+                                                       <select multiple='multiple' size='3' id='adv_global_item_form'>
+                                                       </select>       
+                                               </td>
+
+                                               <td align='right' class="hide_me">
+                                                       <span>&advanced.literary.form;</span>
+                                                       <a id='adv_global_lit_form_link_adv' class='classic_link adv_adv_link'
+                                                               href='javascript:void(0);' onclick='
+                                                               hideMe($("adv_global_lit_form_basic"));
+                                                               unHideMe($("adv_global_lit_form"));
+                                                               hideMe(this);
+                                                               unHideMe($("adv_global_lit_form_link_basic"));
+                                                               '>&advanced.link;</a>
+
+                                                       <a id='adv_global_lit_form_link_basic' class='hide_me classic_link adv_adv_link'
+                                                               href='javascript:void(0);' onclick='
+                                                               unHideMe($("adv_global_lit_form_basic"));
+                                                               hideMe($("adv_global_lit_form"));
+                                                               unHideMe($("adv_global_lit_form_link_adv"));
+                                                               hideMe(this);
+                                                               '>&advanced.basic.link;</a>
+                                               </td>
+                                               <td align='left' class="hide_me">
+                                                       <select multiple='multiple' size='3' id='adv_global_lit_form' class='hide_me'>
+                                                       </select>       
+                                                       <select multiple='multiple' size='3' id='adv_global_lit_form_basic'>
+                                                               <option value='0 '>&advanced.non.fiction;</option>
+                                                               <option value='1'>&advanced.fiction;</option>
+                                                       </select>       
+                                               </td>
+                                               <td align='right' class="hide_me">
+                                                       <span>&advanced.biblevel;</span>
+                                               </td>
+                                               <td align='left' class="hide_me">
+                                                       <select multiple='multiple' size='3' id='adv_global_bib_level'>
+                                                       </select>       
+                                               </td>
+                                       </tr>
+                                       
+                                       <tr>
+                                               <td valign='top'>
+                         <strong>&advanced.search.library;</strong><br />
+                         <!--#include virtual='../common/libselect.xml'--><br />
+                         <div style="position:relative;top:7px;"><input type='checkbox' id='opac.result.limit2avail'/> <label style="position:relative;top:-2px;" for='opac.result.limit2avail'>&result.limit2avail;</label></div>
+                         
+                                               </td>
+                                               <td valign='top'>
+                                                       <strong>&advanced.filter.pubyear;</strong><br />
+                                                       <select id='adv_global_pub_date_type' onchange='
+                                if($("adv_global_pub_date_type").selectedIndex == 3)
+                                    unHideMe($("adv_global_pub_date_2_span"));
+                                else
+                                    hideMe($("adv_global_pub_date_2_span"));'>
+                                <option value='equals' selected='selected'>&advanced.filter.pubyear.equals;</option>
+                                <option value='before'>&advanced.filter.pubyear.before;</option>
+                                <option value='after'>&advanced.filter.pubyear.after;</option>
+                                <option value='between'>&advanced.filter.pubyear.between;</option>
+                                                       </select>       
+                            <div style='margin-top:5px;'>
+                                <input id='adv_global_pub_date_1' type='text' size='4' maxlength='4'/>
+                                <span id='adv_global_pub_date_2_span' class='hide_me'>
+                                   &common.and; <input id='adv_global_pub_date_2' type='text' size='4' maxlength='4'/>
+                                </span>
+                            </div>
+                                               </td>
+                                       </tr>
+
+
+                    <!-- copy location selector -->
+                    <tr id='adv_copy_location_filter_row' class='hide_me'>
+                        <td align='right'>&opac.advanced.copy_loc_filter;</td>
+                        <td align='left' id='adv_copy_location_filter_td'>
+                            <select size='3' id='adv_copy_location_filter_select' multiple='multiple'>
+                            </select>
+                        </td>
+                    </tr>
+                               </tbody>
+                       </table>
+               </td>
+       </tr>
+
+       <tr style='border-top: none;'>
+               <td align='center' valign='top' style='border-top: none;' colspan='2'>
+
+                       
+               </td>
+
+       </tr>
+
+       <tr class='border_4_2'>
+               <td align="left" colspan='2'>
+               <div style="width:100%;height:0px;margin-bottom:15px;" class="header_middle"></div>
+               <img src="/opac/skin/kcls/graphics/search_btn.gif" alt="Search" onclick='advSubmitGlobal();' style="cursor:pointer;" />
+               <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]>
+               <a href="javascript:;" onclick='clearSearchBoxes();' style="position: relative; top: -9px;">Reset Form</a>
+               </td>
+       </tr>
+
+</table>
+
+
+<div id='adv_quick_search_sidebar' class='sidebar_chunk hide_me' style='text-align:center; margin-top: 20px; width:400px;'> 
+       <div id='adv_quick_search'>
+               <div class='adv_quick_search color_4'><b>&sidebar.quick.search;</b></div>
+               <div style='margin-top: 8px;'>
+                       <table><tbody><tr>
+                               <td>
+                                       <select id='adv_quick_type'>
+                                               <option value='isbn'>&opac.advanced.quick.isbn;</option>
+                                               <option value='issn'>&opac.advanced.quick.issn;</option>
+                                               <option value='cn'>&opac.advanced.quick.cn;</option>
+                                               <option value='lccn'>&opac.advanced.quick.lccn;</option>
+                                               <option value='tcn'>&opac.advanced.quick.tcn;</option>
+                                               <option value='barcode'>&opac.advanced.quick.barcode;</option>
+                                       </select>
+                               </td><td>
+                                       <input type='text' id='adv_quick_text' size='16' />
+                               </td>
+                       </tr></tbody></table>
+               </div>
+
+               <span class='hide_me' id='myopac.copy.not.found'>&sidebar.copy.not.found;</span>
+               <div style='margin-top: 8px;' class='adv_quick_search_submit'>
+               <img src="/opac/skin/kcls/graphics/search_btn.gif" alt="Search" id="adv_quick_submit" onclick='advGenericSearch();' style="cursor:pointer;" />
+                       <!-- <a id='adv_quick_submit' href='javascript:advGenericSearch();' class='classic_link'>&common.submit;</a> -->
+               </div>
+       </div>
+</div>
+
+
+<div id='adv_marc_search_sidebar' class='sidebar_chunk hide_me' style='width:400px; margin-top: 20px;'> 
+       <div class='adv_quick_search color_4'><b>&search.marc;</b></div>
+       <table style='margin: 3px; width: 100%;' id='adv_sdbar_table' class='border_4_3'>
+               <tbody>
+                       <tr>
+                               <td align="right">&search.marc.tag;</td>
+                               <td align="left"><input name='advanced.marc.tag' maxlength='3' size='3' /></td>
+                               <td align="right">&search.marc.subfield;</td>
+                               <td align="left"><input name='advanced.marc.subfield' maxlength='1' size='1' /></td>
+                       </tr>
+                       <tr>
+                               <td align="right">&search.marc.value;</td>
+                               <td colspan='3' align="left"><input name='advanced.marc.value' size='18' /></td>
+                       </tr>
+                       <tr name='crow' class='hide_me'>
+                               <td colspan='4' align='center'>
+                               <a href='javascript:void(0);' class='classic_link'
+                                       onclick='
+                                               var div = $("adv_marc_search_sidebar");
+                                               if( div.getElementsByTagName("table").length > 1 )
+                                                       div.removeChild(this.parentNode.parentNode.parentNode.parentNode);'>&common.close;</a>
+                               </td>
+                       </tr>
+                                                       
+               </tbody>
+       </table>
+       <div id='adv_marc_submit' class='adv_quick_search_submit'>
+               <a style='margin-right: 4px; position:relative;top:-10px;' class='classic_link' href='javascript:advAddMARC();'>&search.marc.add.row;</a>
+               <!-- <a style='margin-left: 4px;' class='classic_link' href='javascript:advMARCRun();'>&common.submit;</a> -->
+               <img alt="Search" src="/opac/skin/kcls/graphics/search_btn.gif" onclick='advMARCRun();' style="cursor:pointer;" />
+       </div>
+</div>
+
+       
+<![CDATA[<!-- ****************** end: advanced_global.xml ***************************** -->]]>
+
index 305b66f..f2d45ec 100644 (file)
@@ -1,98 +1,98 @@
-<body class="tundra">\r
-<noscript>\r
-       <style type="text/css">#toptable { display: none; }</style>\r
-       <p style="font-size: 1.3em; padding: 3em; text-align: center;">\r
-       &home.js.disabled;\r
-       </p>\r
-</noscript>\r
-\r
-<!--#include virtual="top_nav.xml"-->\r
-\r
-<div id="search-wrapper">\r
-  <div style="margin:auto;width:974px;height:0px;">\r
-       <div id="user-ql">\r
-       </div>\r
-      <!--#include virtual="utils.xml"-->\r
-  </div>\r
-\r
-  <!--#if expr="$OILS_PAGE!='advanced.xml'"--><!--#include virtual="common/searchbar.xml"--><!--#endif-->\r
-</div>\r
-\r
-<div id="content-wrapper">\r
-<div id="myopac_tabs" class="hide_me">\r
- <div id="acct_tabs">\r
-  <a href="javascript:;" id="acct_summary" onclick="swapTabs(this);myOPACChangePage('summary');" rel="myopac_summary_div"></a>\r
-  <a href="javascript:;" id="acct_checked_out" onclick="swapTabs(this);myOPACChangePage('checked');" rel="myopac_checked_div"></a>\r
-  <a href="javascript:;" id="acct_holds" onclick="swapTabs(this);myOPACChangePage('holds');" rel="myopac_holds_div"></a>\r
-  <a href="javascript:;" id="acct_prefs" onclick="swapTabs(this);myOPACChangePage('prefs');" rel="myopac_prefs_div"></a>\r
-  <a href="javascript:;" id="acct_lists" onclick="swapTabs(this);myOPACChangePage('bookbag');" rel="myopac_bookbag_div"></a>\r
-  <a href="javascript:;" class="hide_me" id="acct_favs" style="margin-right:0px;" onclick="swapTabs(this);myOPACChangePage('fines');" rel="myopac_fines_div"></a>\r
- </div>\r
-</div>\r
-\r
-<div id="adv_search_parent" class="hide_me">\r
- <div id="adv_search_tabs">\r
-  <a href="javascript:;" alt="Advanced Search" id="adv_search" onclick="swapTabs(this);" rel="adv_global_search"></a>\r
-  <a href="javascript:;" alt="Numeric Search" id="num_search" onclick="swapTabs(this);" rel="adv_quick_search_sidebar"></a>\r
-  <a href="javascript:;" alt="Expert Search" id="expert_search" onclick="swapTabs(this);" rel="adv_marc_search_sidebar"></a>\r
- </div>\r
-</div>\r
-\r
-<div id="results_header_bar" class="hide_me">\r
- <div id="results_header_inner">\r
-   <div class="results_header_btns"><a href="index.xml"><img alt="Another Search" src="/opac/skin/kcls/graphics/another_search.png" onmouseover="this.src='/opac/skin/kcls/graphics/another_search_hover.png';" onmouseout="this.src='/opac/skin/kcls/graphics/another_search.png';" /></a></div>\r
-   <div class="results_header_btns"><a href="javascript:;" onclick="goTo(buildOPACLink({page:ADVANCED}));"><img alt="Advanced Search" src="/opac/skin/kcls/graphics/adv_search.png" onmouseover="this.src='/opac/skin/kcls/graphics/adv_search_hover.png';" onmouseout="this.src='/opac/skin/kcls/graphics/adv_search.png';" /></a></div>\r
-   <div class="results_header_btns" style="width:111px;height:25px;"><a href="javascript:;" class="hide_me" id="cacheListLink" onclick="showCachedList();"><img alt="View My List" src="/opac/skin/kcls/graphics/view_my_list.png" onmouseover="this.src='/opac/skin/kcls/graphics/view_my_list_hover.png';" onmouseout="this.src='/opac/skin/kcls/graphics/view_my_list.png';" /></a></div>\r
\r
-       <div class="results_header_div"></div>\r
-       <div class="results_header_lbl">Sort by</div>\r
-<!--#if expr="$OILS_PAGE='rresult.xml' || $OILS_PAGE='mresult.xml'"-->\r
-<!--#include virtual="result/filtersort.xml" -->\r
-<!--#endif -->\r
-       <div class="results_header_div"></div>\r
-       <div class="results_header_lbl">View</div>\r
-       <select class="results_header_sel" style="width:88px;" onchange="this.selectedIndex?showDetailedInfo(true):showDetailedInfo(false);"><option>Simple</option><option>Detailed</option></select>\r
-       <div class="results_header_div"></div>\r
-       <input type="checkbox" id="opac.result.limit2avail2" onclick='searchBarSubmit(true, this);' style="float:left;position:relative;top:2px;left:-2px;margin-right:4px;" /><label for="opac.result.limit2avail2" class="results_header_lbl">Limit to available items</label>\r
-       <div style="clear:both;"></div>\r
- </div>\r
-</div>\r
-\r
-  <div id="main-content">\r
-  <!--#if expr="$OILS_PAGE!='rresult.xml' && $OILS_PAGE!='myopac.xml' && $OILS_PAGE!='advanced.xml'"--><div style="height:15px;clear:both;"></div><!--#endif-->\r
-<!--#if expr="$OILS_PAGE='index.xml'"-->\r
-       <!--#include virtual="common/altcanvas.xml"-->\r
-       <!--#include virtual="home/homesearch.xml"-->\r
-<!--#else-->\r
-       <!--#if expr="$OILS_PAGE='rresult.xml'"-->\r
-       <div id="tehResultsPage">\r
-       <!--#include virtual="result/result_header.xml"-->\r
-       <div id="rresults_page">\r
-       <!--#endif-->\r
-       <!--#include virtual="common/altcanvas.xml"--> \r
-       <!--#include virtual="common/ilsevents.xml"--> \r
-       <!--#include virtual="page_${OILS_PAGE}"-->\r
-       \r
-       <!--#if expr="$OILS_PAGE!='advanced.xml'"-->\r
-       <!--#include virtual="common/statusbar.xml"-->\r
-       <!--#endif-->\r
-       <!--#if expr="$OILS_PAGE='advanced.xml'"-->\r
-       <style type="text/css">#search-wrapper{padding:0; border:none;}</style>\r
-       <!--#endif-->\r
-       <!--#include virtual="common/tips.xml"-->\r
-       <!--#if expr="$OILS_PAGE='rresult.xml'"--></div></div><!--#endif-->\r
-<!--#endif-->\r
-       <div style="clear:both;height:15px;"></div>     \r
-  </div>\r
-</div>\r
-<!--#include virtual='footer.xml'-->\r
-<div>\r
-</div>\r
-<!-- hide unused pieces of the opac here - prevents JS from complaining -->\r
-<div class="hide_me">\r
-  <div id="now_searching_location"></div>\r
-  <div id="login_cancel_button"></div>\r
-  <div id="x"></div>\r
-</div>\r
-<div dojoType='openils.widget.ProgressDialog' jsId='progressDialog' style="width:300px;"></div>\r
-</body>\r
+<body class="tundra">
+<noscript>
+       <style type="text/css">#toptable { display: none; }</style>
+       <p style="font-size: 1.3em; padding: 3em; text-align: center;">
+       &home.js.disabled;
+       </p>
+</noscript>
+
+<!--#include virtual="top_nav.xml"-->
+
+<div id="search-wrapper">
+  <div style="margin:auto;width:974px;height:0px;">
+       <div id="user-ql">
+       </div>
+      <!--#include virtual="utils.xml"-->
+  </div>
+
+  <!--#if expr="$OILS_PAGE!='advanced.xml'"--><!--#include virtual="common/searchbar.xml"--><!--#endif-->
+</div>
+
+<div id="content-wrapper">
+<div id="myopac_tabs" class="hide_me">
+ <div id="acct_tabs">
+  <a href="javascript:;" id="acct_summary" onclick="swapTabs(this);myOPACChangePage('summary');" rel="myopac_summary_div"></a>
+  <a href="javascript:;" id="acct_checked_out" onclick="swapTabs(this);myOPACChangePage('checked');" rel="myopac_checked_div"></a>
+  <a href="javascript:;" id="acct_holds" onclick="swapTabs(this);myOPACChangePage('holds');" rel="myopac_holds_div"></a>
+  <a href="javascript:;" id="acct_prefs" onclick="swapTabs(this);myOPACChangePage('prefs');" rel="myopac_prefs_div"></a>
+  <a href="javascript:;" id="acct_lists" onclick="swapTabs(this);myOPACChangePage('bookbag');" rel="myopac_bookbag_div"></a>
+  <a href="javascript:;" class="hide_me" id="acct_favs" style="margin-right:0px;" onclick="swapTabs(this);myOPACChangePage('fines');" rel="myopac_fines_div"></a>
+ </div>
+</div>
+
+<div id="adv_search_parent" class="hide_me">
+ <div id="adv_search_tabs">
+  <a href="javascript:;" alt="Advanced Search" id="adv_search" onclick="swapTabs(this);" rel="adv_global_search"></a>
+  <a href="javascript:;" alt="Numeric Search" id="num_search" onclick="swapTabs(this);" rel="adv_quick_search_sidebar"></a>
+  <a href="javascript:;" alt="Expert Search" id="expert_search" onclick="swapTabs(this);" rel="adv_marc_search_sidebar"></a>
+ </div>
+</div>
+
+<div id="results_header_bar" class="hide_me">
+ <div id="results_header_inner">
+   <div class="results_header_btns"><a href="index.xml"><img alt="Another Search" src="/opac/skin/kcls/graphics/another_search.png" onmouseover="this.src='/opac/skin/kcls/graphics/another_search_hover.png';" onmouseout="this.src='/opac/skin/kcls/graphics/another_search.png';" /></a></div>
+   <div class="results_header_btns"><a href="javascript:;" onclick="goTo(buildOPACLink({page:ADVANCED}));"><img alt="Advanced Search" src="/opac/skin/kcls/graphics/adv_search.png" onmouseover="this.src='/opac/skin/kcls/graphics/adv_search_hover.png';" onmouseout="this.src='/opac/skin/kcls/graphics/adv_search.png';" /></a></div>
+   <div class="results_header_btns" style="width:111px;height:25px;"><a href="javascript:;" class="hide_me" id="cacheListLink" onclick="showCachedList();"><img alt="View My List" src="/opac/skin/kcls/graphics/view_my_list.png" onmouseover="this.src='/opac/skin/kcls/graphics/view_my_list_hover.png';" onmouseout="this.src='/opac/skin/kcls/graphics/view_my_list.png';" /></a></div>
+       <div class="results_header_div"></div>
+       <div class="results_header_lbl">Sort by</div>
+<!--#if expr="$OILS_PAGE='rresult.xml' || $OILS_PAGE='mresult.xml'"-->
+<!--#include virtual="result/filtersort.xml" -->
+<!--#endif -->
+       <div class="results_header_div"></div>
+       <div class="results_header_lbl">View</div>
+       <select class="results_header_sel" style="width:88px;" onchange="this.selectedIndex?showDetailedInfo(true):showDetailedInfo(false);"><option>Simple</option><option>Detailed</option></select>
+       <div class="results_header_div"></div>
+       <input type="checkbox" id="opac.result.limit2avail2" onclick='searchBarSubmit(true, this);' style="float:left;position:relative;top:2px;left:-2px;margin-right:4px;" /><label for="opac.result.limit2avail2" class="results_header_lbl">Limit to available items</label>
+       <div style="clear:both;"></div>
+ </div>
+</div>
+
+  <div id="main-content">
+  <!--#if expr="$OILS_PAGE!='rresult.xml' && $OILS_PAGE!='myopac.xml' && $OILS_PAGE!='advanced.xml'"--><div style="height:15px;clear:both;"></div><!--#endif-->
+<!--#if expr="$OILS_PAGE='index.xml'"-->
+       <!--#include virtual="common/altcanvas.xml"-->
+       <!--#include virtual="home/homesearch.xml"-->
+<!--#else-->
+       <!--#if expr="$OILS_PAGE='rresult.xml'"-->
+       <div id="tehResultsPage">
+       <!--#include virtual="result/result_header.xml"-->
+       <div id="rresults_page">
+       <!--#endif-->
+       <!--#include virtual="common/altcanvas.xml"--> 
+       <!--#include virtual="common/ilsevents.xml"--> 
+       <!--#include virtual="page_${OILS_PAGE}"-->
+       
+       <!--#if expr="$OILS_PAGE!='advanced.xml'"-->
+       <!--#include virtual="common/statusbar.xml"-->
+       <!--#endif-->
+       <!--#if expr="$OILS_PAGE='advanced.xml'"-->
+       <style type="text/css">#search-wrapper{padding:0; border:none;}</style>
+       <!--#endif-->
+       <!--#include virtual="common/tips.xml"-->
+       <!--#if expr="$OILS_PAGE='rresult.xml'"--></div></div><!--#endif-->
+<!--#endif-->
+       <div style="clear:both;height:15px;"></div>     
+  </div>
+</div>
+<!--#include virtual='footer.xml'-->
+<div>
+</div>
+<!-- hide unused pieces of the opac here - prevents JS from complaining -->
+<div class="hide_me">
+  <div id="now_searching_location"></div>
+  <div id="login_cancel_button"></div>
+  <div id="x"></div>
+</div>
+<div dojoType='openils.widget.ProgressDialog' jsId='progressDialog' style="width:300px;"></div>
+</body>
index 1f1f086..ed12d4d 100644 (file)
@@ -1,22 +1,22 @@
-<script type="text/javascript">\r
-       var locale = location.href.replace( /.+opac\/([^\/]+)\/skin.+/, '$1' );\r
-       if (!locale) locale = '<!--#echo var="locale"-->';\r
-       var djConfig = {  \r
-               locale: locale.toLowerCase(),  \r
-               parseOnLoad: true,  \r
-               isDebug: false,\r
-               modulePaths: {\r
-                       "fieldmapper": '/js/dojo/fieldmapper'\r
-               }\r
-    };\r
-    var lang, bidi;\r
-</script>\r
-<script src='/js/dojo/dojo/dojo.js' type="text/javascript"></script>\r
-<!--#if expr="$OILS_PAGE='myopac.xml'"-->\r
-<!-- my acccount uses a lot more classes -->\r
-<script type="text/javascript"\r
-    src='/IDL2js?mvr,bre,aou,aout,pgt,lasso,cmf,cmc,cmsa,cam,cifm,clfm,citm,cblvl,ccs,accs,au,ahr,ahrn,acn,actscecm,cbreb,cbreb,cbrebi,acp,cust,ac,aua,mous,circ,mbts,mb,ausp,csp'></script>\r
-<!--#else-->\r
-<script type="text/javascript"\r
-    src='/IDL2js?mvr,bre,aou,aout,pgt,lasso,cmf,cmc,cmsa,cam,cifm,clfm,citm,cblvl,ccs'></script>\r
-<!--#endif-->\r
+<script type="text/javascript">
+       var locale = location.href.replace( /.+opac\/([^\/]+)\/skin.+/, '$1' );
+       if (!locale) locale = '<!--#echo var="locale"-->';
+       var djConfig = {  
+               locale: locale.toLowerCase(),  
+               parseOnLoad: true,  
+               isDebug: false,
+               modulePaths: {
+                       "fieldmapper": '/js/dojo/fieldmapper'
+               }
+    };
+    var lang, bidi;
+</script>
+<script src='/js/dojo/dojo/dojo.js' type="text/javascript"></script>
+<!--#if expr="$OILS_PAGE='myopac.xml'"-->
+<!-- my acccount uses a lot more classes -->
+<script type="text/javascript"
+    src='/IDL2js?mvr,bre,aou,aout,pgt,lasso,cmf,cmc,cmsa,cam,cifm,clfm,citm,cblvl,ccs,accs,au,ahr,ahrn,acn,actscecm,cbreb,cbreb,cbrebi,acp,cust,ac,aua,mous,circ,mbts,mb,ausp,csp'></script>
+<!--#else-->
+<script type="text/javascript"
+    src='/IDL2js?mvr,bre,aou,aout,pgt,lasso,cmf,cmc,cmsa,cam,cifm,clfm,citm,cblvl,ccs'></script>
+<!--#endif-->
index 94501ae..8cd3d2f 100644 (file)
@@ -1,76 +1,76 @@
-\r
-<![CDATA[<!-- ****************** homesearch.xml ***************************** -->]]>\r
-<div id="hp-banner">\r
-  <div id="hp-welcome">\r
-  \r
-  \r
-<!-- *********************** Text inside blue box  ************************************************************* -->\r
-       <h1>Welcome to the<br />New Library Catalog!</h1>\r
-       Featuring enhanced holds, management<br />tools, improved self checkout, and more.<br /><br />\r
-       <![CDATA[<a href="http://www.kcls.org/newcatalog" style="position:relative;top:5px;">Learn more &raquo;</a>]]><br /><br />\r
-<!-- *********************** End: Text inside blue box  ******************************************************** -->\r
-       \r
-       \r
-    <div id="paginate-homebanner">\r
-      <!-- <a href="#" class="next">next</a>\r
-      <a href="#" class="prev">prev</a> -->\r
-         \r
-<!-- ************************************ home page rotator navigator start ************************************* -->\r
-         <a class="toc" href="#1" rel="1" style="background:gray;"></a>\r
-         <a class="toc" href="#2" rel="2" style="background:#ffc331;"></a>\r
-         <a class="toc" href="#3" rel="3" style="background:pink;"></a>\r
-         <a class="toc" href="#4" rel="4" style="background:#2bb0fd;"></a>\r
-         <a class="toc" href="#5" rel="5" style="background:#54987f;"></a>\r
-         <a class="toc" href="#6" rel="6" style="background:white;"></a>\r
-<!-- **************************************** home page navigator end ******************************************* -->\r
-\r
-<!-- DON'T TOUCH THESE NEXT 4 LINES! -->\r
-    </div>\r
-  </div>\r
-  <div style="float:right;width:675px;height:213px;color:green;overflow:hidden;">\r
-  <div id="homebanner" class="sliderwrapper">\r
-  \r
\r
-  \r
-<!-- ************************************ home page banner start ********************************************** -->\r
-    <div class="contentdiv">\r
-         <img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/seewhatsnew.jpg" />\r
-    </div>\r
-       <div class="contentdiv">\r
-         <img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/newbooks.jpg" />\r
-    </div>\r
-       <div class="contentdiv">\r
-         <img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/connect.jpg" />\r
-    </div>\r
-       <div class="contentdiv">\r
-         <img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/digitaldownloads.jpg" />\r
-    </div>\r
-       <div class="contentdiv">\r
-         <img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/fiestas.jpg" />\r
-    </div>\r
-       <div class="contentdiv">\r
-         <img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/libraryelf.jpg" />\r
-    </div>\r
-<!-- ************************************* home page banner end *********************************************** -->\r
-\r
-\r
-  </div>\r
-  </div>\r
-</div>\r
-\r
-<div id="hp-buttons">\r
-  <div style="float:left;"><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/hp-links-left.jpg" /></div>\r
-  <div style="float:left;">\r
-       <div id="home-buttons-inner">\r
-         <table cellpadding="0" cellspacing="5" border="0" id="hp-ql-table">\r
-               <tr><td colspan="4"><span style="color: #333;font-weight: bold;font-size: 13px;">Browse for:</span></td></tr>\r
-               <tr><td><a href="http://www.kcls.org/booksandreading/">books</a></td><td><a href="http://www.kcls.org/movies/movies_browse.cfm">movies</a></td><td><a href="http://www.kcls.org/ecollection/">downloads</a></td><td><a href="http://www.kcls.org/websites/">websites</a></td></tr>\r
-               <tr><td><a href="http://www.kcls.org/music/">music</a></td><td><a href="http://www.kcls.org/databases/subject_categories.cfm#17">magazines</a></td><td><a href="http://www.kcls.org/databases/">databases</a></td><td><a href="http://www.kcls.org/answers/">answers</a></td></tr>\r
-         </table>\r
-       </div>\r
-  </div>\r
-  <div style="float:left;"><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/hp-links-right.jpg" /></div>\r
-  <div style="float:right;"><a href="http://www.kcls.org/locations"><img alt="Locations" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/locations.jpg" /></a></div>\r
-  <div style="clear:both;"></div>\r
-</div>\r
-<![CDATA[<!-- ****************** end: homesearch.xml ***************************** -->]]>\r
+
+<![CDATA[<!-- ****************** homesearch.xml ***************************** -->]]>
+<div id="hp-banner">
+  <div id="hp-welcome">
+  
+  
+<!-- *********************** Text inside blue box  ************************************************************* -->
+       <h1>Welcome to the<br />New Library Catalog!</h1>
+       Featuring enhanced holds, management<br />tools, improved self checkout, and more.<br /><br />
+       <![CDATA[<a href="http://www.kcls.org/newcatalog" style="position:relative;top:5px;">Learn more &raquo;</a>]]><br /><br />
+<!-- *********************** End: Text inside blue box  ******************************************************** -->
+       
+       
+    <div id="paginate-homebanner">
+      <!-- <a href="#" class="next">next</a>
+      <a href="#" class="prev">prev</a> -->
+         
+<!-- ************************************ home page rotator navigator start ************************************* -->
+         <a class="toc" href="#1" rel="1" style="background:gray;"></a>
+         <a class="toc" href="#2" rel="2" style="background:#ffc331;"></a>
+         <a class="toc" href="#3" rel="3" style="background:pink;"></a>
+         <a class="toc" href="#4" rel="4" style="background:#2bb0fd;"></a>
+         <a class="toc" href="#5" rel="5" style="background:#54987f;"></a>
+         <a class="toc" href="#6" rel="6" style="background:white;"></a>
+<!-- **************************************** home page navigator end ******************************************* -->
+
+<!-- DON'T TOUCH THESE NEXT 4 LINES! -->
+    </div>
+  </div>
+  <div style="float:right;width:675px;height:213px;color:green;overflow:hidden;">
+  <div id="homebanner" class="sliderwrapper">
+  
+  
+<!-- ************************************ home page banner start ********************************************** -->
+    <div class="contentdiv">
+         <img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/seewhatsnew.jpg" />
+    </div>
+       <div class="contentdiv">
+         <img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/newbooks.jpg" />
+    </div>
+       <div class="contentdiv">
+         <img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/connect.jpg" />
+    </div>
+       <div class="contentdiv">
+         <img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/digitaldownloads.jpg" />
+    </div>
+       <div class="contentdiv">
+         <img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/fiestas.jpg" />
+    </div>
+       <div class="contentdiv">
+         <img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/libraryelf.jpg" />
+    </div>
+<!-- ************************************* home page banner end *********************************************** -->
+
+
+  </div>
+  </div>
+</div>
+
+<div id="hp-buttons">
+  <div style="float:left;"><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/hp-links-left.jpg" /></div>
+  <div style="float:left;">
+       <div id="home-buttons-inner">
+         <table cellpadding="0" cellspacing="5" border="0" id="hp-ql-table">
+               <tr><td colspan="4"><span style="color: #333;font-weight: bold;font-size: 13px;">Browse for:</span></td></tr>
+               <tr><td><a href="http://www.kcls.org/booksandreading/">books</a></td><td><a href="http://www.kcls.org/movies/movies_browse.cfm">movies</a></td><td><a href="http://www.kcls.org/ecollection/">downloads</a></td><td><a href="http://www.kcls.org/websites/">websites</a></td></tr>
+               <tr><td><a href="http://www.kcls.org/music/">music</a></td><td><a href="http://www.kcls.org/databases/subject_categories.cfm#17">magazines</a></td><td><a href="http://www.kcls.org/databases/">databases</a></td><td><a href="http://www.kcls.org/answers/">answers</a></td></tr>
+         </table>
+       </div>
+  </div>
+  <div style="float:left;"><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/hp-links-right.jpg" /></div>
+  <div style="float:right;"><a href="http://www.kcls.org/locations"><img alt="Locations" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/locations.jpg" /></a></div>
+  <div style="clear:both;"></div>
+</div>
+<![CDATA[<!-- ****************** end: homesearch.xml ***************************** -->]]>
index 4ac3e8d..9a7e7a1 100644 (file)
-\r
-<![CDATA[<!-- ****************** myopac_bookbags.xml ***************************** -->]]>\r
-\r
-<div style="margin-top: 6px;margin-left:20px;width:250px;padding:5px;" id="mylist_div" class="hide_me">\r
-  <div style="padding-bottom: 7px;">\r
-       <h2 style="font-weight:normal;">Create new list</h2>\r
-       Enter the name of the new list:<br />\r
-       <input type="text" id="mylist_new" />\r
-  </div>\r
-  <table cellpadding="0" cellspacing="10" border="0">\r
-       <tr><td>Share this list? <a href="javascript:;" onclick="alert($('bb_publish_text').innerHTML);"><img alt="Sharing Help" src="/opac/skin/kcls/graphics/question-mark.png" /></a></td>\r
-       <td><input type="radio" value="0" name="shareList" id="shareListNo" checked="checked" /> <label for="shareListNo">No</label><br /><input type="radio" value="1" name="shareList" id="shareListYes" /> <label for="shareListYes">Yes</label></td></tr>\r
-  </table>\r
-  <a href="javascript:;" onclick="if(addMyList()) {hideMe($('mylist_div'));unHideMe($('myopac_bookbag_div'));}"><img alt="Submit" src="/opac/skin/kcls/graphics/btnSubmit.png" /></a> <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]>\r
-  <a href="javascript:;" onclick="hideMe($('mylist_div'));unHideMe($('myopac_bookbag_div'));"><img alt="Cancel" src="/opac/skin/kcls/graphics/btnCancel.png" /></a>\r
-</div>\r
-\r
-<div id='myopac_bookbag_div' class='hide_me' xmlns:xi="http://www.w3.org/2001/XInclude" style="padding:5px;">\r
-       \r
-  <div class="header_middle"><span id="acct_holds_header" style="float:left;">My Lists</span> <span style="float:right;"><a class="hide_me" href="javascript:;">Export List</a></span></div>\r
-\r
-  <div style="float:right;width:85px;">\r
-       <div style="position:absolute"><div style="position:relative;top:13px;">\r
-         <a href="javascript:;" style="position:relative;top:-3px;left:-5px;" onclick="alert('To take action on individual items, select item, choose action and Save.');"><img alt="Saving Help" src="/opac/skin/kcls/graphics/question-mark.png" /></a>\r
-         <a id='acct_lists_save' href="javascript:;" onclick="listSaveAction()"><img alt="Save" src="/opac/skin/kcls/graphics/save-btn.png" /></a>\r
-       </div></div>\r
-  </div>\r
-  \r
-  \r
-  <div style="clear:both;padding-top:10px;"><a href="javascript:;" onclick="hideMe($('myopac_bookbag_div'));unHideMe($('mylist_div'));">+ Add new list</a></div>\r
-\r
-<div id="temp_wrapper">\r
-  <div id='acct_list_template2' class="hide_me">\r
-       <div style="width:100%">\r
-         <table cellpadding="0" cellspacing="0" border="0"><tr><td style="font-weight:bold;padding-right:10px;" id='anon_list_name'>Temporary List</td><td>\r
-         <a href="javascript:;" onclick="alert('Items you selected from the search results screen.')"><img alt="Anonymous List Help" src="/opac/skin/kcls/graphics/question-mark.png" /></a></td></tr></table>\r
-         <div style="float:right;"></div>\r
-         <div style="clear:both;padding-bottom:5px;"></div>\r
-       </div>\r
-       \r
-       <table id="acct_list_header_anon" cellpadding='0' cellspacing='0' border='0'><tr>\r
-         <td width="1%" style="padding-left:10px;"><input type="checkbox" id="check_all_list_anon" onclick="checkAll(this.parentNode.parentNode.parentNode.parentNode.parentNode, this, 'list_action_chbx');" /></td>\r
-         <td width="98%" style="padding-left:5px;">Title</td>\r
-         <td width="1%"><select style='width:175px;margin-right:11px;' name="list_actions" id="sel_all_list_anon"><option value="0">-- Actions for this list --</option><option value="hold">Place Hold</option><option value="remove">Remove Items</option></select></td>\r
-       </tr></table>\r
-       \r
-       <table cellpadding='0' cellspacing='5' border='0' width='91%' style='margin-left:5px;margin-top:5px;'>\r
-         <tbody id='anon_list_tbody'></tbody>\r
-       </table>\r
-       \r
-       <br /><br />\r
-  </div>\r
-\r
- <div id='acct_lists_prime'>\r
-  <div id='acct_list_template'>\r
-       <div style="width:100%">\r
-         <div style="float:left;font-weight:bold;padding-top:5px;" name='list_name'></div>\r
-         <div style="float:left;padding:5px 0px 0px 10px;"><a target='_blank' name='share_list_rss' class='hide_me'><img alt="RSS Feed" border="0" src="/opac/images/small-rss.png" title="You are sharing this list"/></a></div>\r
-         <div style="float:left;padding:5px 0px 0px 10px;"><a href="javascript:;" name="share_list_link">Share</a></div>\r
-         <div style="float:left;padding:5px 0px 0px 10px;"><a href="javascript:;" name="remove_list">Remove</a></div>\r
-         <div style="clear:both;padding-bottom:5px;"></div>\r
-       </div>\r
-       \r
-       <table id="acct_list_header" cellpadding='0' cellspacing='0' border='0'><tr>\r
-         <td width="1%" style="padding-left:10px;"><input type="checkbox" id="check_all_list" onclick="checkAll(this.parentNode.parentNode.parentNode.parentNode.parentNode, this, 'list_action_chbx');" /></td>\r
-         <td width="98%" style="padding-left:5px;">Title</td>\r
-         <td width="1%"><select style='width:175px;margin-right:11px;' name="list_actions"><option value="0">-- Actions for this list --</option><option value="hold">Place Hold</option><option value="remove">Remove Items</option></select></td>\r
-       </tr></table>\r
-       \r
-       <table cellpadding='0' cellspacing='5' border='0' width='91%' style='margin-left:5px;margin-top:5px;'>\r
-         <tbody name='list_tbody'>\r
-\r
-         </tbody>\r
-       </table>\r
-       \r
-       <br /><br />\r
-  </div>\r
- </div>\r
-</div>\r
-\r
-\r
-       <div id='myopac_delete_bookbag_warn' class='hide_me'>\r
-               &myopac.delete.bookbag;\r
-       </div>\r
-\r
-       <div style='text-align: center; font-weight: bold;' \r
-               class='hide_me' id='myopac_bookbags_none'>&myopac.no.bookbags;</div>\r
-\r
-       <table width='100%' class='data_grid data_grid_center hide_me' id='myopac_bookbag_table'>\r
-               <thead>\r
-                       <tr><td>&common.name;</td><td>&myopac.bookbag.items;</td><td>&myopac.bookbag.shared;</td><td>&myopac.bookbag.toggle;</td><td>&myopac.bookbag.delete;</td></tr>\r
-               </thead>\r
-               <tbody id='myopac_bookbag_tbody'>\r
-                       <tr id='myopac_bookbag_tr'>\r
-                               <td>\r
-                                       <a href='javascript:void(0);' class='classic_link' name='myopac_expand_bookbag'> </a>\r
-                               </td>\r
-                               <td><span name='myopac_bookbag_item_count'> </span> <span> &myopac.items;</span></td>\r
-                               <td>\r
-                                       <span name='myopac_bb_published_no' class='hide_me'>&common.no;</span>\r
-                                       <span name='myopac_bb_published_yes' class='hide_me'>&common.yes;</span>\r
-                                       <a name='myopac_bb_published_view' class='classic_link hide_me'>&myopac.view;</a>\r
-                                       <a name='myopac_bb_published_atom' class='unadorned_link hide_me'>\r
-                                               <img alt="RSS Feed" border="0" src="/opac/images/small-rss.png" title="&myopac.atom.feed;" />\r
-                                       </a>\r
-                               </td>\r
-\r
-                               <td>\r
-                                       <a name='myopac_bb_make_unpublished' class='classic_link hide_me'>&myopac.bookbag.hide;</a>\r
-                                       <a name='myopac_bb_make_published' class='classic_link hide_me'>&myopac.bookbag.share;</a>\r
-                               </td>\r
-\r
-                               <td>\r
-                                       <a class='classic_link' href='javascript:void(0);' name='myopac_container_delete'>&myopac.delete;</a>\r
-                               </td>\r
-                       </tr>\r
-               </tbody>\r
-       </table>\r
-\r
-       <table width='100%' class='data_grid data_grid_center hide_me' style='margin-top: 10px;'>\r
-               <thead>\r
-                       <tr><td>&myopac.bookbag.create;</td></tr>\r
-               </thead>\r
-               <tbody>\r
-                       <tr>\r
-                               <td> \r
-                                       <span style='padding-right: 5px;'>&myopac.bookbag.naming;</span>\r
-                                       <input id='myopac_bookbag_new_name' type='text' /> \r
-                               </td>\r
-                       </tr>\r
-                       <tr>\r
-                               <td>\r
-                                       <span style='padding: 5px;'>&myopac.bookbag.share;</span>\r
-                                       <a class='classic_link' href='javascript:alert($("bb_publish_text").innerHTML);'><b>&common.help;</b></a>\r
-                                       <span>&common.yes;</span> <input type='radio' name='bb_public' id='bb_public_yes'/>\r
-                                       <span>&common.no;</span> <input type='radio' name='bb_public' id='bb_public_no' checked='checked'/>\r
-                                       <input style='padding-left: 10px;' onclick='myOPACCreateBookbag();' \r
-                                               type='submit' value='&common.submit;' />\r
-                               </td>\r
-                       </tr>\r
-               </tbody>\r
-       </table>\r
-\r
-       <!--\r
-       <div style='overflow: auto; max-height: 200px;' class='hide_me'>\r
-       -->\r
-       <div style='width: 99%; text-align: center'> <b id='myopac_bookbag_items_name'> </b></div>\r
-\r
-       <div class='hide_me' style='width: 100%; text-align: center; font-weight: 700; margin-top: 10px;'\r
-               id='myopac_bookbag_no_items'>&myopac.bookbag.no.items;</div>\r
-\r
-       <table width='100%' class='hide_me data_grid data_grid_center' id='myopac_bookbag_items_table'>\r
-               <thead> \r
-                       <tr> <td>&common.title;</td> <td>&common.authors;</td> <td>&myopac.bookbag.remove;</td> </tr> \r
-               </thead>\r
-               <tbody id='myopac_bookbag_items_tbody'>\r
-                       <tr id='myopac_bookbag_items_row'>\r
-                               <td> <a name='myopac_bookbag_items_title' class='classic_link'> </a> </td>\r
-                               <!--\r
-                               <td> <a name='myopac_bookbag_items_author' class='classic_link'> </a> </td>\r
-                               -->\r
-                               <td name='myopac_bookbag_items_author'> </td>\r
-                               <td><a name='myopac_bookbag_items_remove' class='classic_link'>&myopac.remove.link;</a></td>    \r
-                       </tr>\r
-               </tbody>\r
-       </table>\r
-       <!--</div>-->\r
-\r
-       <span id='bb_publish_text' class='hide_me'>&myopac.publish.text;</span>\r
-       <span id='myopac_remove_bb_item_confirm' class='hide_me'>&myopac.item.confirm;</span>\r
-       <span id='myopac_make_published_confirm' class='hide_me'>&myopac.publish.confirm;</span>\r
-       <span id='myopac_make_unpublished_confirm' class='hide_me'>&myopac.unpublish.confirm;</span>\r
-       <span id='myopac_bb_update_success' class='hide_me'>&myopac.update.success;</span>\r
-       <span id='bb_create_warning' class='hide_me'>&myopac.create.warning;</span>\r
-       <span id='myopac_bb_what_are' class='hide_me'>&myopac.describe.bookbags;</span>\r
-       <span class='hide_me' id='bb_update_success'>&myopac.updated.success;</span>\r
-\r
-</div>\r
-<![CDATA[<!-- ****************** end: myopac_bookbags.xml ***************************** -->]]>\r
-\r
+
+<![CDATA[<!-- ****************** myopac_bookbags.xml ***************************** -->]]>
+
+<div style="margin-top: 6px;margin-left:20px;width:250px;padding:5px;" id="mylist_div" class="hide_me">
+  <div style="padding-bottom: 7px;">
+       <h2 style="font-weight:normal;">Create new list</h2>
+       Enter the name of the new list:<br />
+       <input type="text" id="mylist_new" />
+  </div>
+  <table cellpadding="0" cellspacing="10" border="0">
+       <tr><td>Share this list? <a href="javascript:;" onclick="alert($('bb_publish_text').innerHTML);"><img alt="Sharing Help" src="/opac/skin/kcls/graphics/question-mark.png" /></a></td>
+       <td><input type="radio" value="0" name="shareList" id="shareListNo" checked="checked" /> <label for="shareListNo">No</label><br /><input type="radio" value="1" name="shareList" id="shareListYes" /> <label for="shareListYes">Yes</label></td></tr>
+  </table>
+  <a href="javascript:;" onclick="if(addMyList()) {hideMe($('mylist_div'));unHideMe($('myopac_bookbag_div'));}"><img alt="Submit" src="/opac/skin/kcls/graphics/btnSubmit.png" /></a> <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]>
+  <a href="javascript:;" onclick="hideMe($('mylist_div'));unHideMe($('myopac_bookbag_div'));"><img alt="Cancel" src="/opac/skin/kcls/graphics/btnCancel.png" /></a>
+</div>
+
+<div id='myopac_bookbag_div' class='hide_me' xmlns:xi="http://www.w3.org/2001/XInclude" style="padding:5px;">
+       
+  <div class="header_middle"><span id="acct_holds_header" style="float:left;">My Lists</span> <span style="float:right;"><a class="hide_me" href="javascript:;">Export List</a></span></div>
+
+  <div style="float:right;width:85px;">
+       <div style="position:absolute"><div style="position:relative;top:13px;">
+         <a href="javascript:;" style="position:relative;top:-3px;left:-5px;" onclick="alert('To take action on individual items, select item, choose action and Save.');"><img alt="Saving Help" src="/opac/skin/kcls/graphics/question-mark.png" /></a>
+         <a id='acct_lists_save' href="javascript:;" onclick="listSaveAction()"><img alt="Save" src="/opac/skin/kcls/graphics/save-btn.png" /></a>
+       </div></div>
+  </div>
+  
+  
+  <div style="clear:both;padding-top:10px;"><a href="javascript:;" onclick="hideMe($('myopac_bookbag_div'));unHideMe($('mylist_div'));">+ Add new list</a></div>
+
+<div id="temp_wrapper">
+  <div id='acct_list_template2' class="hide_me">
+       <div style="width:100%">
+         <table cellpadding="0" cellspacing="0" border="0"><tr><td style="font-weight:bold;padding-right:10px;" id='anon_list_name'>Temporary List</td><td>
+         <a href="javascript:;" onclick="alert('Items you selected from the search results screen.')"><img alt="Anonymous List Help" src="/opac/skin/kcls/graphics/question-mark.png" /></a></td></tr></table>
+         <div style="float:right;"></div>
+         <div style="clear:both;padding-bottom:5px;"></div>
+       </div>
+       
+       <table id="acct_list_header_anon" cellpadding='0' cellspacing='0' border='0'><tr>
+         <td width="1%" style="padding-left:10px;"><input type="checkbox" id="check_all_list_anon" onclick="checkAll(this.parentNode.parentNode.parentNode.parentNode.parentNode, this, 'list_action_chbx');" /></td>
+         <td width="98%" style="padding-left:5px;">Title</td>
+         <td width="1%"><select style='width:175px;margin-right:11px;' name="list_actions" id="sel_all_list_anon"><option value="0">-- Actions for this list --</option><option value="hold">Place Hold</option><option value="remove">Remove Items</option></select></td>
+       </tr></table>
+       
+       <table cellpadding='0' cellspacing='5' border='0' width='91%' style='margin-left:5px;margin-top:5px;'>
+         <tbody id='anon_list_tbody'></tbody>
+       </table>
+       
+       <br /><br />
+  </div>
+
+ <div id='acct_lists_prime'>
+  <div id='acct_list_template'>
+       <div style="width:100%">
+         <div style="float:left;font-weight:bold;padding-top:5px;" name='list_name'></div>
+         <div style="float:left;padding:5px 0px 0px 10px;"><a target='_blank' name='share_list_rss' class='hide_me'><img alt="RSS Feed" border="0" src="/opac/images/small-rss.png" title="You are sharing this list"/></a></div>
+         <div style="float:left;padding:5px 0px 0px 10px;"><a href="javascript:;" name="share_list_link">Share</a></div>
+         <div style="float:left;padding:5px 0px 0px 10px;"><a href="javascript:;" name="remove_list">Remove</a></div>
+         <div style="clear:both;padding-bottom:5px;"></div>
+       </div>
+       
+       <table id="acct_list_header" cellpadding='0' cellspacing='0' border='0'><tr>
+         <td width="1%" style="padding-left:10px;"><input type="checkbox" id="check_all_list" onclick="checkAll(this.parentNode.parentNode.parentNode.parentNode.parentNode, this, 'list_action_chbx');" /></td>
+         <td width="98%" style="padding-left:5px;">Title</td>
+         <td width="1%"><select style='width:175px;margin-right:11px;' name="list_actions"><option value="0">-- Actions for this list --</option><option value="hold">Place Hold</option><option value="remove">Remove Items</option></select></td>
+       </tr></table>
+       
+       <table cellpadding='0' cellspacing='5' border='0' width='91%' style='margin-left:5px;margin-top:5px;'>
+         <tbody name='list_tbody'>
+
+         </tbody>
+       </table>
+       
+       <br /><br />
+  </div>
+ </div>
+</div>
+
+
+       <div id='myopac_delete_bookbag_warn' class='hide_me'>
+               &myopac.delete.bookbag;
+       </div>
+
+       <div style='text-align: center; font-weight: bold;' 
+               class='hide_me' id='myopac_bookbags_none'>&myopac.no.bookbags;</div>
+
+       <table width='100%' class='data_grid data_grid_center hide_me' id='myopac_bookbag_table'>
+               <thead>
+                       <tr><td>&common.name;</td><td>&myopac.bookbag.items;</td><td>&myopac.bookbag.shared;</td><td>&myopac.bookbag.toggle;</td><td>&myopac.bookbag.delete;</td></tr>
+               </thead>
+               <tbody id='myopac_bookbag_tbody'>
+                       <tr id='myopac_bookbag_tr'>
+                               <td>
+                                       <a href='javascript:void(0);' class='classic_link' name='myopac_expand_bookbag'> </a>
+                               </td>
+                               <td><span name='myopac_bookbag_item_count'> </span> <span> &myopac.items;</span></td>
+                               <td>
+                                       <span name='myopac_bb_published_no' class='hide_me'>&common.no;</span>
+                                       <span name='myopac_bb_published_yes' class='hide_me'>&common.yes;</span>
+                                       <a name='myopac_bb_published_view' class='classic_link hide_me'>&myopac.view;</a>
+                                       <a name='myopac_bb_published_atom' class='unadorned_link hide_me'>
+                                               <img alt="RSS Feed" border="0" src="/opac/images/small-rss.png" title="&myopac.atom.feed;" />
+                                       </a>
+                               </td>
+
+                               <td>
+                                       <a name='myopac_bb_make_unpublished' class='classic_link hide_me'>&myopac.bookbag.hide;</a>
+                                       <a name='myopac_bb_make_published' class='classic_link hide_me'>&myopac.bookbag.share;</a>
+                               </td>
+
+                               <td>
+                                       <a class='classic_link' href='javascript:void(0);' name='myopac_container_delete'>&myopac.delete;</a>
+                               </td>
+                       </tr>
+               </tbody>
+       </table>
+
+       <table width='100%' class='data_grid data_grid_center hide_me' style='margin-top: 10px;'>
+               <thead>
+                       <tr><td>&myopac.bookbag.create;</td></tr>
+               </thead>
+               <tbody>
+                       <tr>
+                               <td> 
+                                       <span style='padding-right: 5px;'>&myopac.bookbag.naming;</span>
+                                       <input id='myopac_bookbag_new_name' type='text' /> 
+                               </td>
+                       </tr>
+                       <tr>
+                               <td>
+                                       <span style='padding: 5px;'>&myopac.bookbag.share;</span>
+                                       <a class='classic_link' href='javascript:alert($("bb_publish_text").innerHTML);'><b>&common.help;</b></a>
+                                       <span>&common.yes;</span> <input type='radio' name='bb_public' id='bb_public_yes'/>
+                                       <span>&common.no;</span> <input type='radio' name='bb_public' id='bb_public_no' checked='checked'/>
+                                       <input style='padding-left: 10px;' onclick='myOPACCreateBookbag();' 
+                                               type='submit' value='&common.submit;' />
+                               </td>
+                       </tr>
+               </tbody>
+       </table>
+
+       <!--
+       <div style='overflow: auto; max-height: 200px;' class='hide_me'>
+       -->
+       <div style='width: 99%; text-align: center'> <b id='myopac_bookbag_items_name'> </b></div>
+
+       <div class='hide_me' style='width: 100%; text-align: center; font-weight: 700; margin-top: 10px;'
+               id='myopac_bookbag_no_items'>&myopac.bookbag.no.items;</div>
+
+       <table width='100%' class='hide_me data_grid data_grid_center' id='myopac_bookbag_items_table'>
+               <thead> 
+                       <tr> <td>&common.title;</td> <td>&common.authors;</td> <td>&myopac.bookbag.remove;</td> </tr> 
+               </thead>
+               <tbody id='myopac_bookbag_items_tbody'>
+                       <tr id='myopac_bookbag_items_row'>
+                               <td> <a name='myopac_bookbag_items_title' class='classic_link'> </a> </td>
+                               <!--
+                               <td> <a name='myopac_bookbag_items_author' class='classic_link'> </a> </td>
+                               -->
+                               <td name='myopac_bookbag_items_author'> </td>
+                               <td><a name='myopac_bookbag_items_remove' class='classic_link'>&myopac.remove.link;</a></td>    
+                       </tr>
+               </tbody>
+       </table>
+       <!--</div>-->
+
+       <span id='bb_publish_text' class='hide_me'>&myopac.publish.text;</span>
+       <span id='myopac_remove_bb_item_confirm' class='hide_me'>&myopac.item.confirm;</span>
+       <span id='myopac_make_published_confirm' class='hide_me'>&myopac.publish.confirm;</span>
+       <span id='myopac_make_unpublished_confirm' class='hide_me'>&myopac.unpublish.confirm;</span>
+       <span id='myopac_bb_update_success' class='hide_me'>&myopac.update.success;</span>
+       <span id='bb_create_warning' class='hide_me'>&myopac.create.warning;</span>
+       <span id='myopac_bb_what_are' class='hide_me'>&myopac.describe.bookbags;</span>
+       <span class='hide_me' id='bb_update_success'>&myopac.updated.success;</span>
+
+</div>
+<![CDATA[<!-- ****************** end: myopac_bookbags.xml ***************************** -->]]>
+
index ad56b71..82747bc 100644 (file)
@@ -1,5 +1,5 @@
-\r
-<![CDATA[<!-- ****************** myopac_fines.xml ***************************** -->]]>\r
-\r
-<![CDATA[<!-- ****************** end: myopac_fines.xml ***************************** -->]]>\r
-\r
+
+<![CDATA[<!-- ****************** myopac_fines.xml ***************************** -->]]>
+
+<![CDATA[<!-- ****************** end: myopac_fines.xml ***************************** -->]]>
+
index eb1a8b1..9625013 100644 (file)
-\r
-<![CDATA[<!-- ****************** myopac_holds.xml ***************************** -->]]>\r
-\r
-<div id='myopac_holds_div' xmlns:xi="http://www.w3.org/2001/XInclude">\r
-  <div class="hide_me" id="acct_holds_tabs" style="padding-bottom: 12px;color:#666;">\r
-       <div class="align selected" id="holds_label"><img src="/opac/skin/kcls/graphics/sub_holds_on.jpg" /></div>\r
-       <div class="align hide_me" id="holds_hist_link"><a href="javascript:;" onclick="switchSubPage('holds','hist');"><img src="/opac/skin/kcls/graphics/sub_holds_hist_off.jpg" /></a></div>\r
-       <div class="align hide_me" id="holds_link"><a href="javascript:;" onclick="switchSubPage('holds','main');"><img src="/opac/skin/kcls/graphics/sub_holds_off.jpg" /></a></div>\r
-       <div class="align selected hide_me" id="holds_hist_label"><img src="/opac/skin/kcls/graphics/sub_holds_hist_on.jpg" /></div>    \r
-       <div style="clear:both;"></div>\r
-  </div>\r
-       \r
-  <div class="header_middle"><span id="acct_holds_header" style="float:left;">Current Items on Hold</span> <span style="float:right;"><a class="hide_me" href="javascript:;">Export List</a></span></div>\r
-  <div style="clear:both;"></div>\r
-  \r
-  <div id='holds_main'>\r
-   <table cellpadding='0' cellspacing='0' border='0' style="padding:8px 0px 6px 0px;"><tr>\r
-       <td width="1"><select id="acct_holds_actions">\r
-               <option id='myopac_holds_actions_none' value=''>-- &myopac.holds.actions; --</option>\r
-               <option value='freeze'>&myopac.holds.freeze_selected;</option>\r
-               <option value='thaw'>&myopac.holds.thaw_selected;</option>\r
-               <option value='thaw_date'>&myopac.holds.thaw_date_selected;</option>\r
-               <option value='cancel'>&myopac.holds.cancel_selected;</option>\r
-       </select></td>\r
-       <td width="1" style="padding-left:9px;"><a href="javascript:;" onclick="myopacDoHoldAction();"><img alt="Save" src="/opac/skin/kcls/graphics/save-btn.png" /></a></td>\r
-       <td width="1" style="padding-left:5px;"><a href="javascript:;" onclick="alert('Suspend your hold for pick up at a later date. Edit individual items with the Edit link or check the Title box to select all, select action and Save.');"><img alt="Holds Help" src="/opac/skin/kcls/graphics/question-mark.png" /></a></td>\r
-    <td align="right"><select class="hide_me" id="holds_sort" onchange="sortHolds(this.options[this.selectedIndex].value);">\r
-         <option value="">-- Sort By --</option>\r
-         <option value="title">Title</option>\r
-         <option value="pickup">PickUp Location</option>\r
-         <option value="status">Status</option>\r
-       </select></td>\r
-   </tr></table>\r
-   <table id="acct_holds_main_header" cellpadding='0' cellspacing='0' border='0' width="100%"><tr>\r
-     <td width="36" align="center"><input type="checkbox" id="check_all_holds" onclick="checkAll($('holds_temp_parent'), this.id);" /></td>\r
-     <td width="138"><span title="Click to sort" onclick="sortHolds('title');" style="cursor:pointer;">Title</span></td>\r
-     <td width="123"><span title="Click to sort" onclick="sortHolds('author');" style="cursor:pointer;">Author</span></td>\r
-     <td width="64"><span title="Click to sort" onclick="sortHolds('format');" style="cursor:pointer;">Format</span></td>\r
-     <td width="136"><span title="Click to sort" onclick="sortHolds('pickup');" style="cursor:pointer;">Pickup Location</span></td>\r
-        <td width="105">Activate</td>\r
-        <td width="105">Cancel if not<br />filled by</td>\r
-        <td width="95">Active</td>\r
-     <td width="172"><span title="Click to sort" onclick="sortHolds('status');" style="cursor:pointer;">Status</span></td>\r
-   </tr></table>\r
-\r
-<div class="hide_me"><select id="hold_pickup_lib_temp" name="hold_pickup_lib_sel" class="hide_me" style="width:125px;height:21px;"></select></div>\r
-\r
-<table cellpadding='0' cellspacing='0' border='0' width="100%">\r
-  <tbody id="holds_temp_parent">\r
-       <tr id="acct_holds_temp" name="acct_holds_temp" class="acct_holds_temp">\r
-         <td width="36" align="center" style="text-align:center;"><input type="checkbox" name="check_all_holds" /></td>\r
-         <td width="138"><div style="margin-top:10px;margin-bottom:10px;"><a href="javascript:;" name="myopac_holds_title_link"></a></div></td>\r
-         <td width="123"><div style="margin-top:10px;margin-bottom:10px;" name="myopac_holds_author"></div></td>\r
-         <td width="64" align="center"><div style="margin-top:6px;margin-bottom:6px;text-align:center;" name="myopac_holds_formats"></div></td>\r
-         <td width="136"><span name="hold_pickup_lib_span"></span><span name="hold_pickup_lib"></span></td>\r
-         <td width="105"><input title="Enter a date (e.g. 10/21/2010)" class="hide_me" style="width:91px;" name="activate_box" type="text" /><span name="activate_date"></span></td>\r
-         <td width="105"><input title="Enter a date (e.g. 10/21/2010)" class="hide_me" style="width:91px;" name="hold_expires_box" type="text" /><span name="hold_expires"></span></td>\r
-         <td width="95"><select name="hold_active_sel" style="width:90px;" class="hide_me"><option value="f">Active</option><option value="t">Suspended</option></select><span name="hold_active"></span></td>\r
-         <td width="110"><div name="acct_holds_status" style="margin-top:10px;margin-bottom:10px;"><span class="hide_me" name="hold_ready_expire"></span></div></td>\r
-         <td width="62" align="right" style="text-align:right;padding-right:7px;"><a name="hold_edit_link" href="javascript:;">Edit</a> <a href="javascript:;" name="hold_save_link" class="hide_me">Save</a> <a href="javascript:;" name="hold_cancel_link" class="hide_me">Back</a></td>\r
-       </tr>\r
-  </tbody>\r
-</table>\r
-\r
-\r
-<!--\r
-  <div id="holds_temp_parent">\r
-   <div id="acct_holds_temp" name="acct_holds_temp">\r
-       <table cellpadding='0' cellspacing='0' border='0' style="padding-top:5px;"><tr>\r
-         <td width="1%" style="padding-left:10px;" valign="top"><input type="checkbox" name="check_all_holds" /></td>\r
-         <td width="38%" style="padding-left:5px;padding-right:5px;" valign="top"><a href="javascript:;" name="myopac_holds_title_link"></a> / <span name="myopac_holds_author"></span></td>\r
-         <td width="9%" name="myopac_holds_formats" valign="top"></td>\r
-         <td width="23%" valign="top"><span name="hold_pickup_lib"></span><span name="hold_pickup_lib_span"></span></td>\r
-         <td width="29%" style="white-space:nowrap;" name="acct_holds_status" nowrap="nowrap" valign="top"></td>\r
-       </tr></table>\r
-       <table cellpadding='0' cellspacing='0' border='0' style="margin-top:7px;margin-bottom:6px;" id="acct_holds_activates_table" width="100%"><tr name="holds_editor_row">\r
-         <td width="1%" style="padding-left:29px;"></td>\r
-         <td width="25%" style="padding-left:5px;"><label>Status</label> <span name="hold_active"></span><select name="hold_active_sel" class="hide_me"><option value="f">Active</option><option value="t">Suspended</option></select></td>\r
-         <td width="24%"><label name="activate_label" class="hide_me">Activate</label> <span name="activate_date"></span><input title="Enter a date (e.g. 10/21/2010)" class="hide_me" name="activate_box" type="text" style="width:70px;background:#E2FFDD;" /></td>\r
-         <td width="35%"><label name="hold_expires_label" class="hide_me">Cancel if not filled by</label> <span name="hold_expires"></span><input title="Enter a date (e.g. 10/21/2010)" class="hide_me" name="hold_expires_box" type="text" style="width:70px;background:#E2FFDD;" /></td>\r
-         <td width="14%" align="right" style="padding-right:10px;"><a name="hold_edit_link" href="javascript:;">Edit</a> <a href="javascript:;" name="hold_save_link" class="hide_me">Save</a> <![CDATA[&nbsp;&nbsp;]]><a href="javascript:;" name="hold_cancel_link" class="hide_me">Back</a></td>\r
-       </tr><tr name="holds_ready_row" class="hide_me">\r
-         <td colspan="5" style="padding-left:477px;"><label>Expires</label> <span name="hold_ready_expire"></span></td>\r
-       </tr></table>\r
-       <hr style="border-bottom:none;margin:0px;*height:0px;" color="#dcdbdb" />\r
-   </div>\r
- </div>\r
--->\r
-\r
-\r
-  </div>\r
-       <div id='holds_hist_table' class="hide_me">\r
-               testing...\r
-       </div>\r
-\r
-    <span id='myopac.holds.cancel.confirm' class='hide_me'>&myopac.holds.cancel.confirm;</span>\r
-    <span id='myopac.holds.freeze.confirm' class='hide_me'>&myopac.holds.freeze.confirm;</span>\r
-    <span id='myopac.holds.thaw.confirm' class='hide_me'>&myopac.holds.thaw.confirm;</span>\r
-    <span id='myopac.holds.thaw_date.confirm' class='hide_me'>&myopac.holds.thaw_date.confirm;</span>\r
-    <span id='myopac.holds.freeze.select_thaw' class='hide_me'>&myopac.holds.freeze.select_thaw;</span>\r
-\r
-    <table width='100%' id='myopac_holds_processing' class='hide_me'>\r
-        <tr><td>&myopac.holds.processing;</td></tr>\r
-    </table>\r
-   \r
-       <span class='hide_me' id='myopac_holds_cancel_verify'>\r
-               &myopac.holds.verify;\r
-       </span>\r
-</div>\r
-<div id='myopac_holds_thaw_date_form' class='hide_me'>\r
-       <div id='myopac_holds_freeze_select_thaw'>&myopac.holds.freeze.select_thaw;</div>\r
-       <p><input dojoType="dijit.form.DateTextBox" size='10' maxlength='10' type='text' id='myopac_holds_thaw_date_input' /> </p>\r
-       <p><button onclick='myopacApplyThawDate();'>&common.submit;</button></p>\r
-</div>\r
-<![CDATA[<!-- ****************** end: myopac_holds.xml ***************************** -->]]>\r
-\r
+
+<![CDATA[<!-- ****************** myopac_holds.xml ***************************** -->]]>
+
+<div id='myopac_holds_div' xmlns:xi="http://www.w3.org/2001/XInclude">
+  <div class="hide_me" id="acct_holds_tabs" style="padding-bottom: 12px;color:#666;">
+       <div class="align selected" id="holds_label"><img src="/opac/skin/kcls/graphics/sub_holds_on.jpg" /></div>
+       <div class="align hide_me" id="holds_hist_link"><a href="javascript:;" onclick="switchSubPage('holds','hist');"><img src="/opac/skin/kcls/graphics/sub_holds_hist_off.jpg" /></a></div>
+       <div class="align hide_me" id="holds_link"><a href="javascript:;" onclick="switchSubPage('holds','main');"><img src="/opac/skin/kcls/graphics/sub_holds_off.jpg" /></a></div>
+       <div class="align selected hide_me" id="holds_hist_label"><img src="/opac/skin/kcls/graphics/sub_holds_hist_on.jpg" /></div>    
+       <div style="clear:both;"></div>
+  </div>
+       
+  <div class="header_middle"><span id="acct_holds_header" style="float:left;">Current Items on Hold</span> <span style="float:right;"><a class="hide_me" href="javascript:;">Export List</a></span></div>
+  <div style="clear:both;"></div>
+  
+  <div id='holds_main'>
+   <table cellpadding='0' cellspacing='0' border='0' style="padding:8px 0px 6px 0px;"><tr>
+       <td width="1"><select id="acct_holds_actions">
+               <option id='myopac_holds_actions_none' value=''>-- &myopac.holds.actions; --</option>
+               <option value='freeze'>&myopac.holds.freeze_selected;</option>
+               <option value='thaw'>&myopac.holds.thaw_selected;</option>
+               <option value='thaw_date'>&myopac.holds.thaw_date_selected;</option>
+               <option value='cancel'>&myopac.holds.cancel_selected;</option>
+       </select></td>
+       <td width="1" style="padding-left:9px;"><a href="javascript:;" onclick="myopacDoHoldAction();"><img alt="Save" src="/opac/skin/kcls/graphics/save-btn.png" /></a></td>
+       <td width="1" style="padding-left:5px;"><a href="javascript:;" onclick="alert('Suspend your hold for pick up at a later date. Edit individual items with the Edit link or check the Title box to select all, select action and Save.');"><img alt="Holds Help" src="/opac/skin/kcls/graphics/question-mark.png" /></a></td>
+    <td align="right"><select class="hide_me" id="holds_sort" onchange="sortHolds(this.options[this.selectedIndex].value);">
+         <option value="">-- Sort By --</option>
+         <option value="title">Title</option>
+         <option value="pickup">PickUp Location</option>
+         <option value="status">Status</option>
+       </select></td>
+   </tr></table>
+   <table id="acct_holds_main_header" cellpadding='0' cellspacing='0' border='0' width="100%"><tr>
+     <td width="36" align="center"><input type="checkbox" id="check_all_holds" onclick="checkAll($('holds_temp_parent'), this.id);" /></td>
+     <td width="138"><span title="Click to sort" onclick="sortHolds('title');" style="cursor:pointer;">Title</span></td>
+     <td width="123"><span title="Click to sort" onclick="sortHolds('author');" style="cursor:pointer;">Author</span></td>
+     <td width="64"><span title="Click to sort" onclick="sortHolds('format');" style="cursor:pointer;">Format</span></td>
+     <td width="136"><span title="Click to sort" onclick="sortHolds('pickup');" style="cursor:pointer;">Pickup Location</span></td>
+        <td width="105">Activate</td>
+        <td width="105">Cancel if not<br />filled by</td>
+        <td width="95">Active</td>
+     <td width="172"><span title="Click to sort" onclick="sortHolds('status');" style="cursor:pointer;">Status</span></td>
+   </tr></table>
+
+<div class="hide_me"><select id="hold_pickup_lib_temp" name="hold_pickup_lib_sel" class="hide_me" style="width:125px;height:21px;"></select></div>
+
+<table cellpadding='0' cellspacing='0' border='0' width="100%">
+  <tbody id="holds_temp_parent">
+       <tr id="acct_holds_temp" name="acct_holds_temp" class="acct_holds_temp">
+         <td width="36" align="center" style="text-align:center;"><input type="checkbox" name="check_all_holds" /></td>
+         <td width="138"><div style="margin-top:10px;margin-bottom:10px;"><a href="javascript:;" name="myopac_holds_title_link"></a></div></td>
+         <td width="123"><div style="margin-top:10px;margin-bottom:10px;" name="myopac_holds_author"></div></td>
+         <td width="64" align="center"><div style="margin-top:6px;margin-bottom:6px;text-align:center;" name="myopac_holds_formats"></div></td>
+         <td width="136"><span name="hold_pickup_lib_span"></span><span name="hold_pickup_lib"></span></td>
+         <td width="105"><input title="Enter a date (e.g. 10/21/2010)" class="hide_me" style="width:91px;" name="activate_box" type="text" /><span name="activate_date"></span></td>
+         <td width="105"><input title="Enter a date (e.g. 10/21/2010)" class="hide_me" style="width:91px;" name="hold_expires_box" type="text" /><span name="hold_expires"></span></td>
+         <td width="95"><select name="hold_active_sel" style="width:90px;" class="hide_me"><option value="f">Active</option><option value="t">Suspended</option></select><span name="hold_active"></span></td>
+         <td width="110"><div name="acct_holds_status" style="margin-top:10px;margin-bottom:10px;"><span class="hide_me" name="hold_ready_expire"></span></div></td>
+         <td width="62" align="right" style="text-align:right;padding-right:7px;"><a name="hold_edit_link" href="javascript:;">Edit</a> <a href="javascript:;" name="hold_save_link" class="hide_me">Save</a> <a href="javascript:;" name="hold_cancel_link" class="hide_me">Back</a></td>
+       </tr>
+  </tbody>
+</table>
+
+
+<!--
+  <div id="holds_temp_parent">
+   <div id="acct_holds_temp" name="acct_holds_temp">
+       <table cellpadding='0' cellspacing='0' border='0' style="padding-top:5px;"><tr>
+         <td width="1%" style="padding-left:10px;" valign="top"><input type="checkbox" name="check_all_holds" /></td>
+         <td width="38%" style="padding-left:5px;padding-right:5px;" valign="top"><a href="javascript:;" name="myopac_holds_title_link"></a> / <span name="myopac_holds_author"></span></td>
+         <td width="9%" name="myopac_holds_formats" valign="top"></td>
+         <td width="23%" valign="top"><span name="hold_pickup_lib"></span><span name="hold_pickup_lib_span"></span></td>
+         <td width="29%" style="white-space:nowrap;" name="acct_holds_status" nowrap="nowrap" valign="top"></td>
+       </tr></table>
+       <table cellpadding='0' cellspacing='0' border='0' style="margin-top:7px;margin-bottom:6px;" id="acct_holds_activates_table" width="100%"><tr name="holds_editor_row">
+         <td width="1%" style="padding-left:29px;"></td>
+         <td width="25%" style="padding-left:5px;"><label>Status</label> <span name="hold_active"></span><select name="hold_active_sel" class="hide_me"><option value="f">Active</option><option value="t">Suspended</option></select></td>
+         <td width="24%"><label name="activate_label" class="hide_me">Activate</label> <span name="activate_date"></span><input title="Enter a date (e.g. 10/21/2010)" class="hide_me" name="activate_box" type="text" style="width:70px;background:#E2FFDD;" /></td>
+         <td width="35%"><label name="hold_expires_label" class="hide_me">Cancel if not filled by</label> <span name="hold_expires"></span><input title="Enter a date (e.g. 10/21/2010)" class="hide_me" name="hold_expires_box" type="text" style="width:70px;background:#E2FFDD;" /></td>
+         <td width="14%" align="right" style="padding-right:10px;"><a name="hold_edit_link" href="javascript:;">Edit</a> <a href="javascript:;" name="hold_save_link" class="hide_me">Save</a> <![CDATA[&nbsp;&nbsp;]]><a href="javascript:;" name="hold_cancel_link" class="hide_me">Back</a></td>
+       </tr><tr name="holds_ready_row" class="hide_me">
+         <td colspan="5" style="padding-left:477px;"><label>Expires</label> <span name="hold_ready_expire"></span></td>
+       </tr></table>
+       <hr style="border-bottom:none;margin:0px;*height:0px;" color="#dcdbdb" />
+   </div>
+ </div>
+-->
+
+
+  </div>
+       <div id='holds_hist_table' class="hide_me">
+               testing...
+       </div>
+
+    <span id='myopac.holds.cancel.confirm' class='hide_me'>&myopac.holds.cancel.confirm;</span>
+    <span id='myopac.holds.freeze.confirm' class='hide_me'>&myopac.holds.freeze.confirm;</span>
+    <span id='myopac.holds.thaw.confirm' class='hide_me'>&myopac.holds.thaw.confirm;</span>
+    <span id='myopac.holds.thaw_date.confirm' class='hide_me'>&myopac.holds.thaw_date.confirm;</span>
+    <span id='myopac.holds.freeze.select_thaw' class='hide_me'>&myopac.holds.freeze.select_thaw;</span>
+
+    <table width='100%' id='myopac_holds_processing' class='hide_me'>
+        <tr><td>&myopac.holds.processing;</td></tr>
+    </table>
+   
+       <span class='hide_me' id='myopac_holds_cancel_verify'>
+               &myopac.holds.verify;
+       </span>
+</div>
+<div id='myopac_holds_thaw_date_form' class='hide_me'>
+       <div id='myopac_holds_freeze_select_thaw'>&myopac.holds.freeze.select_thaw;</div>
+       <p><input dojoType="dijit.form.DateTextBox" size='10' maxlength='10' type='text' id='myopac_holds_thaw_date_input' /> </p>
+       <p><button onclick='myopacApplyThawDate();'>&common.submit;</button></p>
+</div>
+<![CDATA[<!-- ****************** end: myopac_holds.xml ***************************** -->]]>
+
index 1c924d5..9d0733b 100644 (file)
-\r
-\r
-<![CDATA[<!-- ****************** myopac_summary.xml ***************************** -->]]>\r
-<div id='myopac_summary_div' xmlns:xi="http://www.w3.org/2001/XInclude" style="padding:0px;">\r
- <div id="acct_sum">\r
-  <div style="width:742px;float:left;">\r
-       <div class="header_middle">Account Summary</div>\r
-  </div>\r
-       <div id="myopac_sum_fines">\r
-       <div style="position:absolute;"><div style="position:relative;top:-15px;left:-23px;"><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/acct_sum_fines_tl.png" /></div></div>\r
-       <div style="position:absolute;"><div style="position:relative;top:-15px;left:172px;"><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/acct_sum_fines_tr.png" /></div></div>\r
-       <div style="position:absolute;"><div style="position:relative;top:161px;left:-23px;"><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/acct_sum_fines_bl.png" /></div></div>\r
-       <div style="position:absolute;"><div style="position:relative;top:161px;left:172px;"><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/acct_sum_fines_br.png" /></div></div>\r
-         Fines: <span id="myopac_sum_fines_bal">$0.00</span><br />\r
-         <a class="hide_me" href="javascript:;" id="pay_fines_btn1" onclick="showPaymentForm();"><img alt="Pay Fines" onmouseover="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/pay-fines-btn-hover.png';" onmouseout="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/pay-fines-btn.png';" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/pay-fines-btn.png" style="position:relative;top:5px;" /></a>\r
-       </div>\r
-  \r
-  <div style="width:662px;">\r
-       <div style="float:left;">\r
-         <div style="padding:10px 0px;" id="myopac_sum_name"></div>\r
-         <div class="acct_sum_row"><table width="100%" cellspacing="0" cellpadding="0"><tr><td>Items Currently Checked out <span id="myopac_sum_checked" class="view_link">(0)</span></td><td align="right" class="view_link"><a href="javascript:;" onclick="swapTabs($('acct_checked_out'));myOPACChangePage('checked');" rel="myopac_checked_div">View All</a></td></tr></table></div>\r
-         <div class="acct_sum_row"><table width="100%" cellspacing="0" cellpadding="0"><tr><td>Items Currently on Hold <span id="myopac_sum_holds" class="view_link">(0)</span></td><td align="right" class="view_link"><a href="javascript:;" onclick="swapTabs($('acct_holds'));myOPACChangePage('holds');" rel="myopac_holds_div">View All</a></td></tr></table></div>\r
-         <div class="acct_sum_row"><table width="100%" cellspacing="0" cellpadding="0"><tr><td>Items ready for pickup <span id="myopac_sum_pickup" class="view_link">(0)</span></td><td align="right" class="view_link"><a href="javascript:;" onclick="swapTabs($('acct_holds'));myOPACChangePage('holds');" rel="myopac_holds_div">View All</a></td></tr></table></div>\r
-         <div class="acct_sum_row" id="myopac_sum_fines_slim"><table width="100%" cellspacing="0" cellpadding="0"><tr><td>Fees &amp; Fines</td><td align="right" class="view_link"><a class="hide_me" id="show_fines_link" href="javascript:;" onclick="showFinesDiv(this);">Show Overdue Materials</a></td></tr></table></div>\r
-       </div>\r
-  </div>\r
- <div style="clear:both;"></div>\r
- <div id='myopac_fines_div' xmlns:xi="http://www.w3.org/2001/XInclude" >\r
-       <table width='100%' class='data_grid data_grid_center'>\r
-               <thead class='color_3'>\r
-                       <tr><td colspan='3' style='padding: 6px'><b>&myopac.fines.title;</b></td></tr>\r
-                       <tr>\r
-                               <td width='33%'>&myopac.fines.owed;</td>\r
-                               <td width='33%'>&myopac.fines.paid;</td>\r
-                               <td width='33%'>&myopac.fines.balance;</td>\r
-                       </tr>\r
-               </thead>\r
-\r
-               <tbody id='myopac_fines_summary_tbody'>\r
-                       <tr id='myopac_fines_summary_loading'><td>&myopac.fines.status;</td></tr>\r
-                       <tr id='myopac_fines_summary_row' class='hide_me'>\r
-                               <td id='myopac_fines_summary_total' >&common.currency;</td>\r
-                               <td id='myopac_fines_summary_paid' >&common.currency;</td>\r
-                               <td id='myopac_fines_summary_balance' style='color:red;font-weight: bold;'>&common.currency;</td>\r
-                       </tr>\r
-               </tbody>\r
-       </table>\r
-\r
-    <!-- tab-like options for selection Fines or Payments view -->\r
-    <div id='fines_payments_wrapper' style='padding-left: 5px; padding-right: 5px;'>\r
-        <div id='acct_fines_tabs'>\r
-            <a id='acct_fines_tab' href='javascript:;' onclick='showFinesTab();'></a>\r
-            <a id='acct_payments_tab' href='javascript:;' onclick='myopacDrawPayments();'></a>\r
-        </div>\r
-    </div>\r
-\r
-    <!-- Payments History -->\r
-    <style>#myopac_payments_table th { text-align: left; }</style>\r
-    <div id='myopac_payments_div' class='hide_me'>\r
-        <div><b>Payments</b></div>\r
-               <table width='100%' class='data_grid' id='myopac_payments_table'>\r
-            <thead><tr>\r
-                <th>Payment Date</th>\r
-                <th>Payment For</th>\r
-                <th>Amount</th>\r
-                <th>Receipt</th>\r
-            </tr></thead>\r
-            <tbody id='myopac_payments_tbody'>\r
-                <tr id='myopac_payments_tmpl'>\r
-                    <td name='date'/>\r
-                    <td name='for'/> <!-- title links? -->\r
-                    <td name='amount'>$</td>\r
-                    <td>\r
-                        <a href='javascript:;' name='print_recpt'>Print</a> / <a href='javascript:;' name='email_recpt'>Email</a>\r
-                    </td>\r
-                </tr>\r
-            </tbody>\r
-        </table>\r
-    </div>\r
-    <!-- /Payments History -->\r
-\r
-       <!--\r
-       <div id='accrue_explanation' class='hide_me'>\r
-               <span>Transactions whose balances are marked with a</span>\r
-               <span style='color:red; font-weight: bold'>*</span>\r
-               <span>will continue to accrue fines until the checked out item is returned.</span>\r
-       </div>\r
-       -->\r
-\r
-       <!-- Table for circulation transactions only -->\r
-       <div id='myopac_circ_trans_div' class='hide_me'>\r
-               <br/><hr/><br/>\r
-        <style>#myopac_circ_trans_table th { text-align: left; }</style>\r
-               <table width='100%' class='data_grid' id='myopac_circ_trans_table'>\r
-                       <thead>\r
-                <!-- <tr><td colspan='10' style='padding: 6px'><b>Fines</b></td></tr> -->\r
-                               <tr>\r
-                                       <th>&common.title;</th>\r
-                                       <th>&common.author;</th>\r
-                                       <th>&myopac.fines.checkout;</th>\r
-                                       <th>&myopac.fines.due;</th>\r
-                                       <th>&myopac.fines.returned;</th>\r
-                                       <th>&myopac.fines.balance;</th>\r
-                                       <th align="center" nowrap="nowrap" style="white-space:nowrap;">\r
-                        <div style='text-align:center'>Pay Fines<br/><input id="pay_fines_box1" type="checkbox" \r
-                            onclick="checkAll($('myopac_circ_trans_tbody'), this, 'selector');" class="" title="Click to (un)select all fines" />\r
-                        </div>\r
-                    </th>\r
-                               </tr>\r
-                       </thead>\r
-                       <tbody id='myopac_circ_trans_tbody'>\r
-                               <tr id='myopac_circ_trans_row'>\r
-                                       <td><a class='classic_link' name='myopac_circ_trans_title'> </a></td>\r
-                                       <td name='myopac_circ_trans_author'> </td>\r
-                                       <td name='myopac_circ_trans_start'> </td>\r
-                                       <td name='myopac_circ_trans_due'> </td>\r
-                                       <td name='myopac_circ_trans_finished'><span style='color:red;'>&myopac.fines.accruing;</span></td>\r
-                                       <td><span style='color: red; font-weight: bold;' name='myopac_circ_trans_balance'>&common.currency;</span></td>\r
-                                       <td align="center"><input type="checkbox" class="" name="selector" title="pay this fine" /></td>\r
-                               </tr>\r
-                       </tbody>\r
-               </table>\r
-       </div>\r
-\r
-       <!-- Table for all non-circulation transactions -->\r
-       <div id='myopac_trans_div' class='hide_me'>\r
-               <br/><hr style="border-bottom:none;*height:0px;" color="#dcdbdb" /><br/>\r
-        <style>#myopac_trans_table th { text-align: left; }</style>\r
-               <table width='100%' class='data_grid' id='myopac_trans_table'>\r
-                       <thead>\r
-                               <tr><td colspan='8' style='padding: 6px'><b>&myopac.fines.other;</b></td></tr>\r
-                               <tr>\r
-                                       <th width='16%'>Date Applied</th>\r
-                                       <th width='16%'>&myopac.fines.time.paid;</th>\r
-                                       <th width='16%'>&myopac.fines.owed.initial;</th>\r
-                                       <th width='16%'>&myopac.fines.paid.amount;</th>\r
-                                       <th width='16%'>&myopac.fines.balance;</th>\r
-                                       <th width='16%'>&myopac.fines.type;</th>\r
-                                       <th width='4%' align="center" nowrap="nowrap" style="white-space:nowrap;">\r
-                        <div style='text-align:center'>Pay Fines<br/>\r
-                            <input id="pay_fines_box2" class="" type="checkbox" onclick="checkAll($('myopac_trans_tbody'), this, 'selector');" title="Click to (un)select all fines" />\r
-                        </div>\r
-                    </th>\r
-                               </tr>\r
-                       </thead>\r
-       \r
-                       <tbody id='myopac_trans_tbody'>\r
-                               <tr id='myopac_trans_row'>\r
-                                       <td name='myopac_trans_start'> </td>\r
-                                       <td name='myopac_trans_last_payment'> </td>\r
-                                       <td name='myopac_trans_init_amount'>&common.currency;</td>\r
-                                       <td name='myopac_trans_total_paid'>&common.currency;</td>\r
-                                       <td style='color:red; font-weight: bold;'>\r
-                                               <span name='myopac_trans_balance_recur' class='hide_me'> * </span>\r
-                                               <span name='myopac_trans_balance'>&common.currency;</span>\r
-                                       </td>\r
-                                       <td name='myopac_trans_bill_type'> </td>\r
-                                       <td align="center"><input type="checkbox" name='selector' title='pay this fine' /></td>\r
-                               </tr>\r
-                       </tbody>\r
-               </table>\r
-       </div>\r
-       <a id='pay-fines-image' href="javascript:;" onclick="showPaymentForm();"><img alt="Pay Fines" onmouseover="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/pay-fines-btn-hover.png';" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/pay-fines-btn.png" style="position:relative;top:5px;" /></a>\r
-       \r
-       <br/>\r
-</div>\r
-</div>\r
-\r
-<!--\r
-<div id='receipt-print-frame-wrapper' class='hide_me'>\r
--->\r
-<div dojoType='dijit.Dialog' jsId='receiptPrintDialog'>\r
-    <div>\r
-        <button id='receipt-view-print-button'>Print</button>\r
-        <button id='receipt-view-print-cancel'>Cancel</button>\r
-    </div>\r
-    <iframe name='receipt-frame' style='border:1px solid #888; overflow:auto; width:500px; height:500px;'></iframe>\r
-</div>\r
-\r
-<div id='pay_fines_confirm' class='hide_me' style='font-size: 120%; width:100%; text-align: center; padding-top: 20px;'>\r
-    Amount to pay: $<strong id='pay_fines_confirm_amount'/>.  Are you sure?<br/><br/>\r
-    <button jsId='payConfirmSubmit' dojoType='dijit.form.Button'>Submit Payment</button>\r
-    <button jsId='payConfirmCancel' dojoType='dijit.form.Button'>Cancel</button>\r
-</div>\r
-<div id="pay_fines_now" class="hide_me">\r
-<div id='cc-payment-error-message' style='font-weight: bold; color: red; padding: 10px; border: 1px solid #888' class='hide_me'/>\r
-<table id='oils-selfck-cc-payment-table'>\r
-    <tbody>\r
-               <tr>\r
-                       <td colspan="2"><div style="width:324px;"><strong>KCLS only accespts Visa or MasterCard</strong></div></td>\r
-                       <td><div style="width:324px;"></div></td>\r
-               </tr>\r
-               <tr>\r
-                 <td colspan='2'><strong>Billing Information</strong></td>\r
-                 <td rowspan='13' valign='top'>\r
-                   Selected fines you are paying for:\r
-                       <table cellpadding="0" cellspacing="5" border="0">\r
-                       <thead><tr><td><strong>Name</strong></td><td><strong>Amount</strong></td></tr></thead>\r
-                       <tbody id="selectedFines"></tbody></table><br />\r
-                       <div id='oils-selfck-cc-payment-summary'>\r
-               Total amount to pay: <strong>$<span></span></strong>\r
-                       </div><br />\r
-                       Click <strong>Cancel</strong> to go back and (un)select other fines.\r
-                 </td>\r
-               </tr>\r
-        <tr>\r
-            <td>First Name</td>\r
-            <td><input dojoType='dijit.form.TextBox' jsId='oilsSelfckCCFName' required='true'/></td>\r
-        </tr>\r
-        <tr>\r
-            <td>Last Name</td>\r
-            <td><input dojoType='dijit.form.TextBox' jsId='oilsSelfckCCLName' required='true'/></td>\r
-        </tr>\r
-        <tr>\r
-            <td>Email Address</td>\r
-            <td>\r
-                <span id='myopac-cc-email'/>\r
-                <span style='margin-left:5px;'>\r
-                    <a href='javascript:' onclick='myopacReturnToPayment=true;myOPACChangePage("prefs");'>Update</a>\r
-                </span>\r
-            </td>\r
-        </tr>\r
-        <tr>\r
-            <td>Street Address</td>\r
-            <td><input dojoType='dijit.form.TextBox' jsId='oilsSelfckCCStreet' required='true'/></td>\r
-        </tr>\r
-        <tr>\r
-            <td>City</td>\r
-            <td><input dojoType='dijit.form.TextBox' jsId='oilsSelfckCCCity' required='true'/></td>\r
-        </tr>\r
-        <tr>\r
-            <td>State or Province</td>\r
-            <td><input dojoType='dijit.form.TextBox' jsId='oilsSelfckCCState' required='true'/></td>\r
-        </tr>\r
-        <tr>\r
-            <td>ZIP or Postal Code</td>\r
-            <td><input dojoType='dijit.form.TextBox' jsId='oilsSelfckCCZip' required='true'/></td>\r
-        </tr>\r
-               <tr>\r
-                 <td colspan='2'><strong>Credit Card Information</strong></td>\r
-               </tr>\r
-        <!-- Technically not needed since card type is derived from the CC number\r
-        <tr>\r
-            <td>Type of Card</td>\r
-            <td>\r
-                <select dojoType='dijit.form.FilteringSelect' jsId='oilsSelfckCCType' required='true'>\r
-                    <option value='VISA'>VISA</option>\r
-                    <option value='MasterCard'>MasterCard</option>\r
-                    <option value='American Express'>American Express</option>\r
-                </select>\r
-            </td>\r
-        </tr>\r
-        -->\r
-        <tr>\r
-            <td>Credit Card #</td>\r
-            <td><input dojoType='dijit.form.TextBox' jsId='oilsSelfckCCNumber' required='true'/></td>\r
-        </tr>\r
-        <tr>\r
-            <td><div style="position:absolute;"><div style="position:relative;left:80px;"><a href="javascript:;" onclick="alert('Also known as a CVV2 code, it is the 3-digit number on the back of the card next to your signature.\nKCLS only accpets VISA and MasterCard.');"><img src="/opac/skin/kcls/graphics/question-mark.png" /></a></div></div> Security Code</td>\r
-            <td><input dojoType='dijit.form.TextBox' jsId='oilsSelfckCCCVV' required='true'/></td>\r
-        </tr>\r
-        <tr>\r
-            <td>Exipration Month</td>\r
-            <td>\r
-                <select dojoType='dijit.form.FilteringSelect' jsId='oilsSelfckCCMonth' required='true'>\r
-                    <option value='01' selected='selected'>January</option>\r
-                    <option value='02'>February</option>\r
-                    <option value='03'>March</option>\r
-                    <option value='04'>April</option>\r
-                    <option value='05'>May</option>\r
-                    <option value='06'>June</option>\r
-                    <option value='07'>July</option>\r
-                    <option value='08'>August</option>\r
-                    <option value='09'>September</option>\r
-                    <option value='10'>October</option>\r
-                    <option value='11'>November</option>\r
-                    <option value='12'>December</option>\r
-                </select>\r
-            </td>\r
-        </tr>\r
-        <tr>\r
-            <td>Expiration Year</td>\r
-            <td>\r
-                         <select dojoType='dijit.form.FilteringSelect' jsId='oilsSelfckCCYear' required='true'>\r
-                               <option value='2011'>2011</option>\r
-                               <option value='2012'>2012</option>\r
-                               <option value='2013'>2013</option>\r
-                               <option value='2014'>2014</option>\r
-                               <option value='2015'>2015</option>\r
-                               <option value='2016'>2016</option>\r
-                               <option value='2017'>2017</option>\r
-                               <option value='2018'>2018</option>\r
-                               <option value='2019'>2019</option>\r
-                         </select>\r
-                         <!-- <input dojoType='dijit.form.NumberSpinner' constraints='{pattern:"0000", places:0, maxlength:4}' jsId='oilsSelfckCCYear' required='true'/> -->\r
-                       </td>\r
-        </tr>\r
-        <tr class="hide_me">\r
-            <td>Edit Billing Address</td>\r
-            <td><input dojoType='dijit.form.CheckBox' jsId='oilsSelfckEditDetails'/></td>\r
-        </tr>\r
-        <tr>\r
-            <td colspan='2' align="center">\r
-                <button dojoType='dijit.form.Button' jsId='oilsSelfckCCSubmit'>Submit Payment</button>\r
-                               <button dojoType='dijit.form.Button' onclick="hideMe($('pay_fines_now'));unHideMe($('acct_sum'));">Cancel</button>\r
-            </td>\r
-        </tr>\r
-               <tr>\r
-                 <td colspan="3"><br />\r
-                       <strong style="color:red;font-size:16px;">Important! You must have a printed receipt to be eligible for a refund on lost items (regulations allow for no exceptions).</strong><br /><br />\r
-                   <strong>To ensure your necessary receipt information is not lost, enter your email address above and a receipt will be emailed to you. Otherwise, make certain you have a printed receipt in hand before closing the payment receipt screen.</strong><br />Refunds are not available for parts and pieces, overdue fines, or items that do not display a specific title in My Account. For a full list of refundable and non-refundable items, visit <a href="http://www.kcls.org/usingthelibrary/borrowing/refundable.cfm">http://www.kcls.org/usingthelibrary/borrowing/refundable.cfm</a><br /><br />This site uses VeriSign SSL encryption to ensure your privacy.\r
-                 </td>\r
-               </tr>\r
-    </tbody>\r
-</table>\r
-</div>\r
-</div>\r
-\r
-<!--#include virtual="myopac_fines.xml"-->\r
-<![CDATA[<!-- ****************** end: myopac_summary.xml ***************************** -->]]>\r
-\r
+
+
+<![CDATA[<!-- ****************** myopac_summary.xml ***************************** -->]]>
+<div id='myopac_summary_div' xmlns:xi="http://www.w3.org/2001/XInclude" style="padding:0px;">
+ <div id="acct_sum">
+  <div style="width:742px;float:left;">
+       <div class="header_middle">Account Summary</div>
+  </div>
+       <div id="myopac_sum_fines">
+       <div style="position:absolute;"><div style="position:relative;top:-15px;left:-23px;"><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/acct_sum_fines_tl.png" /></div></div>
+       <div style="position:absolute;"><div style="position:relative;top:-15px;left:172px;"><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/acct_sum_fines_tr.png" /></div></div>
+       <div style="position:absolute;"><div style="position:relative;top:161px;left:-23px;"><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/acct_sum_fines_bl.png" /></div></div>
+       <div style="position:absolute;"><div style="position:relative;top:161px;left:172px;"><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/acct_sum_fines_br.png" /></div></div>
+         Fines: <span id="myopac_sum_fines_bal">$0.00</span><br />
+         <a class="hide_me" href="javascript:;" id="pay_fines_btn1" onclick="showPaymentForm();"><img alt="Pay Fines" onmouseover="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/pay-fines-btn-hover.png';" onmouseout="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/pay-fines-btn.png';" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/pay-fines-btn.png" style="position:relative;top:5px;" /></a>
+       </div>
+  
+  <div style="width:662px;">
+       <div style="float:left;">
+         <div style="padding:10px 0px;" id="myopac_sum_name"></div>
+         <div class="acct_sum_row"><table width="100%" cellspacing="0" cellpadding="0"><tr><td>Items Currently Checked out <span id="myopac_sum_checked" class="view_link">(0)</span></td><td align="right" class="view_link"><a href="javascript:;" onclick="swapTabs($('acct_checked_out'));myOPACChangePage('checked');" rel="myopac_checked_div">View All</a></td></tr></table></div>
+         <div class="acct_sum_row"><table width="100%" cellspacing="0" cellpadding="0"><tr><td>Items Currently on Hold <span id="myopac_sum_holds" class="view_link">(0)</span></td><td align="right" class="view_link"><a href="javascript:;" onclick="swapTabs($('acct_holds'));myOPACChangePage('holds');" rel="myopac_holds_div">View All</a></td></tr></table></div>
+         <div class="acct_sum_row"><table width="100%" cellspacing="0" cellpadding="0"><tr><td>Items ready for pickup <span id="myopac_sum_pickup" class="view_link">(0)</span></td><td align="right" class="view_link"><a href="javascript:;" onclick="swapTabs($('acct_holds'));myOPACChangePage('holds');" rel="myopac_holds_div">View All</a></td></tr></table></div>
+         <div class="acct_sum_row" id="myopac_sum_fines_slim"><table width="100%" cellspacing="0" cellpadding="0"><tr><td>Fees &amp; Fines</td><td align="right" class="view_link"><a class="hide_me" id="show_fines_link" href="javascript:;" onclick="showFinesDiv(this);">Show Overdue Materials</a></td></tr></table></div>
+       </div>
+  </div>
+ <div style="clear:both;"></div>
+ <div id='myopac_fines_div' xmlns:xi="http://www.w3.org/2001/XInclude" >
+       <table width='100%' class='data_grid data_grid_center'>
+               <thead class='color_3'>
+                       <tr><td colspan='3' style='padding: 6px'><b>&myopac.fines.title;</b></td></tr>
+                       <tr>
+                               <td width='33%'>&myopac.fines.owed;</td>
+                               <td width='33%'>&myopac.fines.paid;</td>
+                               <td width='33%'>&myopac.fines.balance;</td>
+                       </tr>
+               </thead>
+
+               <tbody id='myopac_fines_summary_tbody'>
+                       <tr id='myopac_fines_summary_loading'><td>&myopac.fines.status;</td></tr>
+                       <tr id='myopac_fines_summary_row' class='hide_me'>
+                               <td id='myopac_fines_summary_total' >&common.currency;</td>
+                               <td id='myopac_fines_summary_paid' >&common.currency;</td>
+                               <td id='myopac_fines_summary_balance' style='color:red;font-weight: bold;'>&common.currency;</td>
+                       </tr>
+               </tbody>
+       </table>
+
+    <!-- tab-like options for selection Fines or Payments view -->
+    <div id='fines_payments_wrapper' style='padding-left: 5px; padding-right: 5px;'>
+        <div id='acct_fines_tabs'>
+            <a id='acct_fines_tab' href='javascript:;' onclick='showFinesTab();'></a>
+            <a id='acct_payments_tab' href='javascript:;' onclick='myopacDrawPayments();'></a>
+        </div>
+    </div>
+
+    <!-- Payments History -->
+    <style>#myopac_payments_table th { text-align: left; }</style>
+    <div id='myopac_payments_div' class='hide_me'>
+        <div><b>Payments</b></div>
+               <table width='100%' class='data_grid' id='myopac_payments_table'>
+            <thead><tr>
+                <th>Payment Date</th>
+                <th>Payment For</th>
+                <th>Amount</th>
+                <th>Receipt</th>
+            </tr></thead>
+            <tbody id='myopac_payments_tbody'>
+                <tr id='myopac_payments_tmpl'>
+                    <td name='date'/>
+                    <td name='for'/> <!-- title links? -->
+                    <td name='amount'>$</td>
+                    <td>
+                        <a href='javascript:;' name='print_recpt'>Print</a> / <a href='javascript:;' name='email_recpt'>Email</a>
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+    </div>
+    <!-- /Payments History -->
+
+       <!--
+       <div id='accrue_explanation' class='hide_me'>
+               <span>Transactions whose balances are marked with a</span>
+               <span style='color:red; font-weight: bold'>*</span>
+               <span>will continue to accrue fines until the checked out item is returned.</span>
+       </div>
+       -->
+
+       <!-- Table for circulation transactions only -->
+       <div id='myopac_circ_trans_div' class='hide_me'>
+               <br/><hr/><br/>
+        <style>#myopac_circ_trans_table th { text-align: left; }</style>
+               <table width='100%' class='data_grid' id='myopac_circ_trans_table'>
+                       <thead>
+                <!-- <tr><td colspan='10' style='padding: 6px'><b>Fines</b></td></tr> -->
+                               <tr>
+                                       <th>&common.title;</th>
+                                       <th>&common.author;</th>
+                                       <th>&myopac.fines.checkout;</th>
+                                       <th>&myopac.fines.due;</th>
+                                       <th>&myopac.fines.returned;</th>
+                                       <th>&myopac.fines.balance;</th>
+                                       <th align="center" nowrap="nowrap" style="white-space:nowrap;">
+                        <div style='text-align:center'>Pay Fines<br/><input id="pay_fines_box1" type="checkbox" 
+                            onclick="checkAll($('myopac_circ_trans_tbody'), this, 'selector');" class="" title="Click to (un)select all fines" />
+                        </div>
+                    </th>
+                               </tr>
+                       </thead>
+                       <tbody id='myopac_circ_trans_tbody'>
+                               <tr id='myopac_circ_trans_row'>
+                                       <td><a class='classic_link' name='myopac_circ_trans_title'> </a></td>
+                                       <td name='myopac_circ_trans_author'> </td>
+                                       <td name='myopac_circ_trans_start'> </td>
+                                       <td name='myopac_circ_trans_due'> </td>
+                                       <td name='myopac_circ_trans_finished'><span style='color:red;'>&myopac.fines.accruing;</span></td>
+                                       <td><span style='color: red; font-weight: bold;' name='myopac_circ_trans_balance'>&common.currency;</span></td>
+                                       <td align="center"><input type="checkbox" class="" name="selector" title="pay this fine" /></td>
+                               </tr>
+                       </tbody>
+               </table>
+       </div>
+
+       <!-- Table for all non-circulation transactions -->
+       <div id='myopac_trans_div' class='hide_me'>
+               <br/><hr style="border-bottom:none;*height:0px;" color="#dcdbdb" /><br/>
+        <style>#myopac_trans_table th { text-align: left; }</style>
+               <table width='100%' class='data_grid' id='myopac_trans_table'>
+                       <thead>
+                               <tr><td colspan='8' style='padding: 6px'><b>&myopac.fines.other;</b></td></tr>
+                               <tr>
+                                       <th width='16%'>Date Applied</th>
+                                       <th width='16%'>&myopac.fines.time.paid;</th>
+                                       <th width='16%'>&myopac.fines.owed.initial;</th>
+                                       <th width='16%'>&myopac.fines.paid.amount;</th>
+                                       <th width='16%'>&myopac.fines.balance;</th>
+                                       <th width='16%'>&myopac.fines.type;</th>
+                                       <th width='4%' align="center" nowrap="nowrap" style="white-space:nowrap;">
+                        <div style='text-align:center'>Pay Fines<br/>
+                            <input id="pay_fines_box2" class="" type="checkbox" onclick="checkAll($('myopac_trans_tbody'), this, 'selector');" title="Click to (un)select all fines" />
+                        </div>
+                    </th>
+                               </tr>
+                       </thead>
+       
+                       <tbody id='myopac_trans_tbody'>
+                               <tr id='myopac_trans_row'>
+                                       <td name='myopac_trans_start'> </td>
+                                       <td name='myopac_trans_last_payment'> </td>
+                                       <td name='myopac_trans_init_amount'>&common.currency;</td>
+                                       <td name='myopac_trans_total_paid'>&common.currency;</td>
+                                       <td style='color:red; font-weight: bold;'>
+                                               <span name='myopac_trans_balance_recur' class='hide_me'> * </span>
+                                               <span name='myopac_trans_balance'>&common.currency;</span>
+                                       </td>
+                                       <td name='myopac_trans_bill_type'> </td>
+                                       <td align="center"><input type="checkbox" name='selector' title='pay this fine' /></td>
+                               </tr>
+                       </tbody>
+               </table>
+       </div>
+       <a id='pay-fines-image' href="javascript:;" onclick="showPaymentForm();"><img alt="Pay Fines" onmouseover="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/pay-fines-btn-hover.png';" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/pay-fines-btn.png" style="position:relative;top:5px;" /></a>
+       
+       <br/>
+</div>
+</div>
+
+<!--
+<div id='receipt-print-frame-wrapper' class='hide_me'>
+-->
+<div dojoType='dijit.Dialog' jsId='receiptPrintDialog'>
+    <div>
+        <button id='receipt-view-print-button'>Print</button>
+        <button id='receipt-view-print-cancel'>Cancel</button>
+    </div>
+    <iframe name='receipt-frame' style='border:1px solid #888; overflow:auto; width:500px; height:500px;'></iframe>
+</div>
+
+<div id='pay_fines_confirm' class='hide_me' style='font-size: 120%; width:100%; text-align: center; padding-top: 20px;'>
+    Amount to pay: $<strong id='pay_fines_confirm_amount'/>.  Are you sure?<br/><br/>
+    <button jsId='payConfirmSubmit' dojoType='dijit.form.Button'>Submit Payment</button>
+    <button jsId='payConfirmCancel' dojoType='dijit.form.Button'>Cancel</button>
+</div>
+<div id="pay_fines_now" class="hide_me">
+<div id='cc-payment-error-message' style='font-weight: bold; color: red; padding: 10px; border: 1px solid #888' class='hide_me'/>
+<table id='oils-selfck-cc-payment-table'>
+    <tbody>
+               <tr>
+                       <td colspan="2"><div style="width:324px;"><strong>KCLS only accespts Visa or MasterCard</strong></div></td>
+                       <td><div style="width:324px;"></div></td>
+               </tr>
+               <tr>
+                 <td colspan='2'><strong>Billing Information</strong></td>
+                 <td rowspan='13' valign='top'>
+                   Selected fines you are paying for:
+                       <table cellpadding="0" cellspacing="5" border="0">
+                       <thead><tr><td><strong>Name</strong></td><td><strong>Amount</strong></td></tr></thead>
+                       <tbody id="selectedFines"></tbody></table><br />
+                       <div id='oils-selfck-cc-payment-summary'>
+               Total amount to pay: <strong>$<span></span></strong>
+                       </div><br />
+                       Click <strong>Cancel</strong> to go back and (un)select other fines.
+                 </td>
+               </tr>
+        <tr>
+            <td>First Name</td>
+            <td><input dojoType='dijit.form.TextBox' jsId='oilsSelfckCCFName' required='true'/></td>
+        </tr>
+        <tr>
+            <td>Last Name</td>
+            <td><input dojoType='dijit.form.TextBox' jsId='oilsSelfckCCLName' required='true'/></td>
+        </tr>
+        <tr>
+            <td>Email Address</td>
+            <td>
+                <span id='myopac-cc-email'/>
+                <span style='margin-left:5px;'>
+                    <a href='javascript:' onclick='myopacReturnToPayment=true;myOPACChangePage("prefs");'>Update</a>
+                </span>
+            </td>
+        </tr>
+        <tr>
+            <td>Street Address</td>
+            <td><input dojoType='dijit.form.TextBox' jsId='oilsSelfckCCStreet' required='true'/></td>
+        </tr>
+        <tr>
+            <td>City</td>
+            <td><input dojoType='dijit.form.TextBox' jsId='oilsSelfckCCCity' required='true'/></td>
+        </tr>
+        <tr>
+            <td>State or Province</td>
+            <td><input dojoType='dijit.form.TextBox' jsId='oilsSelfckCCState' required='true'/></td>
+        </tr>
+        <tr>
+            <td>ZIP or Postal Code</td>
+            <td><input dojoType='dijit.form.TextBox' jsId='oilsSelfckCCZip' required='true'/></td>
+        </tr>
+               <tr>
+                 <td colspan='2'><strong>Credit Card Information</strong></td>
+               </tr>
+        <!-- Technically not needed since card type is derived from the CC number
+        <tr>
+            <td>Type of Card</td>
+            <td>
+                <select dojoType='dijit.form.FilteringSelect' jsId='oilsSelfckCCType' required='true'>
+                    <option value='VISA'>VISA</option>
+                    <option value='MasterCard'>MasterCard</option>
+                    <option value='American Express'>American Express</option>
+                </select>
+            </td>
+        </tr>
+        -->
+        <tr>
+            <td>Credit Card #</td>
+            <td><input dojoType='dijit.form.TextBox' jsId='oilsSelfckCCNumber' required='true'/></td>
+        </tr>
+        <tr>
+            <td><div style="position:absolute;"><div style="position:relative;left:80px;"><a href="javascript:;" onclick="alert('Also known as a CVV2 code, it is the 3-digit number on the back of the card next to your signature.\nKCLS only accpets VISA and MasterCard.');"><img src="/opac/skin/kcls/graphics/question-mark.png" /></a></div></div> Security Code</td>
+            <td><input dojoType='dijit.form.TextBox' jsId='oilsSelfckCCCVV' required='true'/></td>
+        </tr>
+        <tr>
+            <td>Exipration Month</td>
+            <td>
+                <select dojoType='dijit.form.FilteringSelect' jsId='oilsSelfckCCMonth' required='true'>
+                    <option value='01' selected='selected'>January</option>
+                    <option value='02'>February</option>
+                    <option value='03'>March</option>
+                    <option value='04'>April</option>
+                    <option value='05'>May</option>
+                    <option value='06'>June</option>
+                    <option value='07'>July</option>
+                    <option value='08'>August</option>
+                    <option value='09'>September</option>
+                    <option value='10'>October</option>
+                    <option value='11'>November</option>
+                    <option value='12'>December</option>
+                </select>
+            </td>
+        </tr>
+        <tr>
+            <td>Expiration Year</td>
+            <td>
+                         <select dojoType='dijit.form.FilteringSelect' jsId='oilsSelfckCCYear' required='true'>
+                               <option value='2011'>2011</option>
+                               <option value='2012'>2012</option>
+                               <option value='2013'>2013</option>
+                               <option value='2014'>2014</option>
+                               <option value='2015'>2015</option>
+                               <option value='2016'>2016</option>
+                               <option value='2017'>2017</option>
+                               <option value='2018'>2018</option>
+                               <option value='2019'>2019</option>
+                         </select>
+                         <!-- <input dojoType='dijit.form.NumberSpinner' constraints='{pattern:"0000", places:0, maxlength:4}' jsId='oilsSelfckCCYear' required='true'/> -->
+                       </td>
+        </tr>
+        <tr class="hide_me">
+            <td>Edit Billing Address</td>
+            <td><input dojoType='dijit.form.CheckBox' jsId='oilsSelfckEditDetails'/></td>
+        </tr>
+        <tr>
+            <td colspan='2' align="center">
+                <button dojoType='dijit.form.Button' jsId='oilsSelfckCCSubmit'>Submit Payment</button>
+                               <button dojoType='dijit.form.Button' onclick="hideMe($('pay_fines_now'));unHideMe($('acct_sum'));">Cancel</button>
+            </td>
+        </tr>
+               <tr>
+                 <td colspan="3"><br />
+                       <strong style="color:red;font-size:16px;">Important! You must have a printed receipt to be eligible for a refund on lost items (regulations allow for no exceptions).</strong><br /><br />
+                   <strong>To ensure your necessary receipt information is not lost, enter your email address above and a receipt will be emailed to you. Otherwise, make certain you have a printed receipt in hand before closing the payment receipt screen.</strong><br />Refunds are not available for parts and pieces, overdue fines, or items that do not display a specific title in My Account. For a full list of refundable and non-refundable items, visit <a href="http://www.kcls.org/usingthelibrary/borrowing/refundable.cfm">http://www.kcls.org/usingthelibrary/borrowing/refundable.cfm</a><br /><br />This site uses VeriSign SSL encryption to ensure your privacy.
+                 </td>
+               </tr>
+    </tbody>
+</table>
+</div>
+</div>
+
+<!--#include virtual="myopac_fines.xml"-->
+<![CDATA[<!-- ****************** end: myopac_summary.xml ***************************** -->]]>
+
index 4ca22f7..61d553c 100644 (file)
@@ -1,81 +1,81 @@
-\r
-<![CDATA[<!-- ****************** page_rdetail.xml ***************************** -->]]> \r
-\r
-<div id='canvas_main' class='canvas'>\r
-       <div id="rdetail_header">\r
-         <div style="float:left;">\r
-           Search Results<![CDATA[&nbsp;&nbsp;&nbsp;\r
-               <span id="rdetail_result_count" class="hide_me">Showing Item <strong id='np_offset'></strong>&nbsp;of&nbsp;<strong id='np_count'></strong></span>]]>\r
-         </div>\r
-         <div id="rdetail_result_nav">\r
-               <span class="hide_me"><a class='np_nav_link classic_link' id='np_start' href='javascript:rdetailStart();' title="&rdetail.page.results;">&rdetail.start;</a></span>\r
-                 <a class='np_nav_link classic_link hide_me' id='np_prev' href='javascript:rdetailPrev();' title='&rdetail.page.previous;'><span class="nav_arrow_fix">&#9668;</span> Previous</a>\r
-                 <span style="padding:0px 10px;"> </span>\r
-                 <a class='np_nav_link classic_link hide_me' id='np_next' href='javascript:rdetailNext();' title='&rdetail.page.next;'>Next <span class="nav_arrow_fix">&#9658;</span></a>\r
-                 <span class="hide_me"><a class='np_nav_link classic_link' id='np_end' href='javascript:rdetailEnd();' title="&rdetail.page.last;">&rdetail.end;</a></span>\r
-         </div>\r
-         <div style="clear:both;"></div>\r
-       </div>\r
-\r
-       <table width='100%' id='np_table' border='0' class="hide_me">\r
-               <tbody>\r
-                       <tr class='color_4'>\r
-                               <td style='vertical-align: top;' align="center">\r
-                                 <span style="float:left"><a href="javascript:;" onclick="history.go(-1);">&laquo; Back</a></span>\r
-\r
-                                       <span>\r
-\r
-                                       </span>\r
-       \r
-                               </td>\r
-                       </tr>\r
-               </tbody>\r
-       </table>\r
-\r
-       <table style='' class='rdetail_header color_1 hide_me' width='100%' border="0" cellspacing="0" cellpadding="0">\r
-               <tbody>\r
-\r
-                       <tr>\r
-                               <td width='33%' align='left' class="hide_me">\r
-                                       <span>&rdetail.detailMain.headerLabel;</span>\r
-                               </td>\r
-\r
-                               <td align='right' style='padding-right: 7px;' width='33%'>\r
-                                       <span id='rdetail_exp_refworks_span' class='hide_me' style='padding-right: 7px;'>\r
-                                               <a id='rdetail_exp_refworks'>&opac.holds.exportRefWorks;</a>\r
-                                       </span>\r
-                               \r
-                                       <span style='padding-right: 7px;' class='hide_me' id='rdetail_more_actions'>\r
-                                               <select id='rdetail_more_actions_selector' style='max-width: 11em;' class="hide_me">\r
-                                                       <option value='start'>&rdetail.more;</option>\r
-                                                       <option disabled='disabled'>--------------</option>\r
-                                                       <option disabled='disabled'>&rdetail.bookbag.add;</option>\r
-                                                       <option disabled='disabled'>--------------</option>\r
-                                                       <option value='new_bookbag' onclick='rdetailNewBookbag();'>&rdetail.bookbag.create;</option>\r
-                                               </select>\r
-                                       </span>\r
-\r
-                               </td>\r
-                       </tr>\r
-               </tbody>\r
-       </table>\r
-\r
-       <div style='font-weight: bold; padding: 5px; margin: 5px; width: 100%;' \r
-               class='hide_me color_4' id='rdetail_deleted_exp'>\r
-               &rdetail.record.deleted;\r
-       </div>\r
-\r
-       <!--#include virtual="rdetail/rdetail_summary.xml"-->\r
-       <div style="width:100%;" class="hide_me">\r
-         <div style="float:right;" class="hide_me" id="lib_info_more"><button dojoType="dijit.form.Button" onclick="unHideMe($('lib_info_less'));unHideMe($('rdetails_status2'));hideMe($('lib_info_more'));">More...</button></div>\r
-         <div style="float:right;" class="hide_me" id="lib_info_less"><button dojoType="dijit.form.Button" onclick="hideMe($('lib_info_less'));hideMe($('rdetails_status2'));unHideMe($('lib_info_more'));">...Less</button></div>\r
-       </div>\r
-       <!--#include virtual="rdetail/rdetail_extras.xml"-->\r
-\r
-       <div class='hide_me' id='rdetail_bb_none'>&rdetail.none;</div>\r
-       <div class='hide_me' id='rdetail_bb_item_success'>&rdetail.bookbag.add.success;</div>\r
-       <div class='hide_me' id='rdetail_bb_new'>&rdetail.bookbag.name;</div>\r
-       <div class='hide_me' id='rdetail_bb_success'>&rdetail.bookbag.create.success;</div>\r
-\r
-</div>\r
-<![CDATA[<!-- ****************** end; page_rdetail.xml ***************************** -->]]>\r
+
+<![CDATA[<!-- ****************** page_rdetail.xml ***************************** -->]]> 
+
+<div id='canvas_main' class='canvas'>
+       <div id="rdetail_header">
+         <div style="float:left;">
+           Search Results<![CDATA[&nbsp;&nbsp;&nbsp;
+               <span id="rdetail_result_count" class="hide_me">Showing Item <strong id='np_offset'></strong>&nbsp;of&nbsp;<strong id='np_count'></strong></span>]]>
+         </div>
+         <div id="rdetail_result_nav">
+               <span class="hide_me"><a class='np_nav_link classic_link' id='np_start' href='javascript:rdetailStart();' title="&rdetail.page.results;">&rdetail.start;</a></span>
+                 <a class='np_nav_link classic_link hide_me' id='np_prev' href='javascript:rdetailPrev();' title='&rdetail.page.previous;'><span class="nav_arrow_fix">&#9668;</span> Previous</a>
+                 <span style="padding:0px 10px;"> </span>
+                 <a class='np_nav_link classic_link hide_me' id='np_next' href='javascript:rdetailNext();' title='&rdetail.page.next;'>Next <span class="nav_arrow_fix">&#9658;</span></a>
+                 <span class="hide_me"><a class='np_nav_link classic_link' id='np_end' href='javascript:rdetailEnd();' title="&rdetail.page.last;">&rdetail.end;</a></span>
+         </div>
+         <div style="clear:both;"></div>
+       </div>
+
+       <table width='100%' id='np_table' border='0' class="hide_me">
+               <tbody>
+                       <tr class='color_4'>
+                               <td style='vertical-align: top;' align="center">
+                                 <span style="float:left"><a href="javascript:;" onclick="history.go(-1);">&laquo; Back</a></span>
+
+                                       <span>
+
+                                       </span>
+       
+                               </td>
+                       </tr>
+               </tbody>
+       </table>
+
+       <table style='' class='rdetail_header color_1 hide_me' width='100%' border="0" cellspacing="0" cellpadding="0">
+               <tbody>
+
+                       <tr>
+                               <td width='33%' align='left' class="hide_me">
+                                       <span>&rdetail.detailMain.headerLabel;</span>
+                               </td>
+
+                               <td align='right' style='padding-right: 7px;' width='33%'>
+                                       <span id='rdetail_exp_refworks_span' class='hide_me' style='padding-right: 7px;'>
+                                               <a id='rdetail_exp_refworks'>&opac.holds.exportRefWorks;</a>
+                                       </span>
+                               
+                                       <span style='padding-right: 7px;' class='hide_me' id='rdetail_more_actions'>
+                                               <select id='rdetail_more_actions_selector' style='max-width: 11em;' class="hide_me">
+                                                       <option value='start'>&rdetail.more;</option>
+                                                       <option disabled='disabled'>--------------</option>
+                                                       <option disabled='disabled'>&rdetail.bookbag.add;</option>
+                                                       <option disabled='disabled'>--------------</option>
+                                                       <option value='new_bookbag' onclick='rdetailNewBookbag();'>&rdetail.bookbag.create;</option>
+                                               </select>
+                                       </span>
+
+                               </td>
+                       </tr>
+               </tbody>
+       </table>
+
+       <div style='font-weight: bold; padding: 5px; margin: 5px; width: 100%;' 
+               class='hide_me color_4' id='rdetail_deleted_exp'>
+               &rdetail.record.deleted;
+       </div>
+
+       <!--#include virtual="rdetail/rdetail_summary.xml"-->
+       <div style="width:100%;" class="hide_me">
+         <div style="float:right;" class="hide_me" id="lib_info_more"><button dojoType="dijit.form.Button" onclick="unHideMe($('lib_info_less'));unHideMe($('rdetails_status2'));hideMe($('lib_info_more'));">More...</button></div>
+         <div style="float:right;" class="hide_me" id="lib_info_less"><button dojoType="dijit.form.Button" onclick="hideMe($('lib_info_less'));hideMe($('rdetails_status2'));unHideMe($('lib_info_more'));">...Less</button></div>
+       </div>
+       <!--#include virtual="rdetail/rdetail_extras.xml"-->
+
+       <div class='hide_me' id='rdetail_bb_none'>&rdetail.none;</div>
+       <div class='hide_me' id='rdetail_bb_item_success'>&rdetail.bookbag.add.success;</div>
+       <div class='hide_me' id='rdetail_bb_new'>&rdetail.bookbag.name;</div>
+       <div class='hide_me' id='rdetail_bb_success'>&rdetail.bookbag.create.success;</div>
+
+</div>
+<![CDATA[<!-- ****************** end; page_rdetail.xml ***************************** -->]]>
index cd52bfb..58f523f 100644 (file)
-<![CDATA[<!-- ****************** rdetail_extras.xml ***************************** -->]]>\r
-<div xmlns:xi="http://www.w3.org/2001/XInclude" id="rdetail_main_div" class="">\r
-       <table class='hide_me rdetails_extra_links'>\r
-               <thead>\r
-                       <tr>\r
-                               <td id='rdetail_annotation_link' class='hide_me rdetail_extras_td'\r
-                                       style='padding-right: 15px; padding-left: 15px;' >\r
-                                       <a href='javascript:rdetailShowExtra("annotation");' \r
-                                               class='classic_link'>&rdetail.extras.annotation;</a>\r
-                               </td>\r
-                       </tr>\r
-               </thead>\r
-       </table>\r
-\r
-       <div id='rdetail_extras_div' style='width: 100%;'> \r
-               <div id='rdetail_extras_loading' class='hide_me' style='padding: 10px;'>&common.loading;</div>\r
-               <div rel="rdetail_summary_div" rel2="summary" class="rdetail_extras hide_me" id="rdetail_summary_link"><div class="rdetail_extras_hr"></div>\r
-                 <div class="rdetail_extras_link">\r
-                       <a href='javascript:rdetailShowExtra("summary");'><img alt="" id="rdetail_summary_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>\r
-                       <a href='javascript:rdetailShowExtra("summary");' class="rdetail_extras_lbl">Summary</a>\r
-                 </div>\r
-               </div>\r
-               <div id='rdetail_summary_div' class='rdetail_extras_div hide_me'> \r
-                       <table style="margin-bottom:10px;" cellpadding="0" cellspacing="0" border="0"><tr><td width="1" style="padding-right:7px;" valign="top"><strong>Summary: </strong></td><td><div id='rdetail_summary_container'></div></td></tr></table>\r
-                       <iframe width="100%" height="400" id="content_cafe_summary" frameborder="0" />\r
-               </div>\r
-               \r
-               <div rel="rdetail_subject_div" rel2="subject" class="rdetail_extras hide_me" id="rdetail_subject_link"><div class="rdetail_extras_hr"></div>\r
-                 <div class="rdetail_extras_link">\r
-                       <a href='javascript:rdetailShowExtra("subject");'><img alt="" id="rdetail_subject_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>\r
-                       <a href='javascript:rdetailShowExtra("subject");' class="rdetail_extras_lbl">subject</a>\r
-                 </div>\r
-               </div>\r
-               <div id='rdetail_subject_div' class='rdetail_extras_div hide_me'> \r
-                       <table cellpadding="0" cellspacing="0" border="0"><tr id="subject_lbl" class="hide_me"><td width="1" style="padding-right:7px;" valign="top"><strong>Subject: </strong></td><td valign="top"><div id='rdetail_subject_container'></div></td></tr>\r
-                       <tr class="hide_me" id="genre_lbl"><td width="1" style="padding:10px 7px 0px 0px;" valign="top"><strong>Genre: </strong></td><td valign="top" style="padding-top:10px;"><div id='rdetail_genre_cont'></div></td></tr>\r
-                       <tr class="hide_me" id="topic_lbl"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Topic Heading: </strong></td><td valign="top" style="padding-top:10px;"><div id='rdetail_topic_cont'></div></td></tr>\r
-                       <tr class="hide_me" id="geo_set_lbl"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Geographic Setting: </strong></td><td valign="top" style="padding-top:10px;"><div id='rdetail_geo_cont'></div></td></tr>\r
-                       <tr class="hide_me" id="bio_sub_lbl"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Biographical Subject: </strong></td><td valign="top" style="padding-top:10px;"><div id='rdetail_bio_cont'></div></td></tr>\r
-                       <tr class="hide_me" id="char_attrib_lbl"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Character Attributes: </strong></td><td valign="top" style="padding-top:10px;"><div id='rdetail_attrib_cont'></div></td></tr>\r
-                       <tr class="hide_me" id="setting_lbl"><td width="1" style="padding:10px 7px 0px 0px;" valign="top"><strong>Setting: </strong></td><td valign="top" style="padding-top:10px;"><div id='rdetail_setting_cont'></div></td></tr>\r
-                       <tr class="hide_me" id="time_lbl"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Time Period: </strong></td><td valign="top" style="padding-top:10px;"><div id='rdetail_time_cont'></div></td></tr>\r
-                       </table>\r
-               </div>\r
-               \r
-               <div rel="rdetail_content_div" rel2="content" class="rdetail_extras hide_me" id="rdetail_content_link"><div class="rdetail_extras_hr"></div>\r
-                 <div class="rdetail_extras_link">\r
-                       <a href='javascript:rdetailShowExtra("content");'><img alt="" id="rdetail_content_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>\r
-                       <a href='javascript:rdetailShowExtra("content");' class="rdetail_extras_lbl">Contents</a>\r
-                 </div>\r
-               </div>\r
-               <div id='rdetail_content_div' class='rdetail_extras_div hide_me'>\r
-                 <strong>Contents:</strong><div id='rdetail_content_div_inner' style="padding-bottom:10px;"></div>\r
-                 <strong>&rdetail.extras.toc;:</strong><div id='rdetail_toc_div' class='rdetail_extras_div'></div>\r
-               </div>\r
-               \r
-               <div rel="rdetail_authors_div" rel2="authors" class="rdetail_extras hide_me" id="rdetail_authors_link"><div class="rdetail_extras_hr"></div>\r
-                 <div class="rdetail_extras_link">\r
-                       <a href='javascript:rdetailShowExtra("authors");'><img alt="" id="rdetail_authors_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>\r
-                       <a href='javascript:rdetailShowExtra("authors");' class="rdetail_extras_lbl">Author</a>\r
-                 </div>\r
-               </div>\r
-               <div id='rdetail_authors_div' class='rdetail_extras_div hide_me'>\r
-                 <table cellpadding="0" cellspacing="0" border="0"><tr id="authors_lbl" class="hide_me"><td width="1" style="padding-right:7px;" valign="top"><strong>Authors:</strong></td><td valign="top"><div id="rdetail_authors_inner"></div></td></tr>\r
-                 <tr id="add_authors_lbl" class="hide_me"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Added Authors:</strong></td><td valign="top" style="padding-top:10px;"><div id="rdetail_moar_authors"></div></td></tr>\r
-                 <tr id="credits_lbl" class="hide_me"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Credits:</strong></td><td valign="top" style="padding-top:10px;"><div id="rdetail_credits"></div></td></tr>\r
-                 <tr id="cast_lbl" class="hide_me"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Cast:</strong></td><td valign="top" style="padding-top:10px;"><div id="rdetail_cast"></div></td></tr>\r
-                 <tr id="author_notes_lbl" class="hide_me"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Author Notes:</strong></td><td valign="top" style="padding-top:10px;"><div id='rdetail_anotes_div' class='rdetail_extras_div'> </div></td></tr></table>\r
-               </div>\r
-               \r
-               <div rel="rdetail_series_div" rel2="series" class="rdetail_extras hide_me" id="rdetail_series_link"><div class="rdetail_extras_hr"></div>\r
-                 <div class="rdetail_extras_link">\r
-                       <a href='javascript:rdetailShowExtra("series");'><img alt="" id="rdetail_series_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>\r
-                       <a href='javascript:rdetailShowExtra("series");' class="rdetail_extras_lbl">series</a>\r
-                 </div>\r
-               </div>\r
-               <div id='rdetail_series_div' class='rdetail_extras_div hide_me'> \r
-                       <strong>Series:</strong><div id='rdetail_series_container'></div>\r
-               </div>\r
-               \r
-               <div rel="rdetail_awards_div" rel2="awards" class="rdetail_extras hide_me" id="rdetail_awards_link"><div class="rdetail_extras_hr"></div>\r
-                 <div class="rdetail_extras_link">\r
-                       <a href='javascript:rdetailShowExtra("awards");'><img alt="" id="rdetail_awards_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>\r
-                       <a href='javascript:rdetailShowExtra("awards");' class="rdetail_extras_lbl">awards, reviews &amp; suggested reads</a>\r
-                 </div>\r
-               </div>\r
-               <div id='rdetail_awards_div' class='rdetail_extras_div hide_me'> \r
-                       <div id="rdetail_awards_cont_lbl" class="hide_me"><strong>Awards:</strong> <div id='rdetail_awards_cont' style="margin-bottom:20px;"></div></div>\r
-                       <div id="rdetail_chilifresh_lbl" class="hide_me"><strong>Patron Reviews:</strong><div id='rdetail_chilifresh_reviews' class='hide_me' style="margin-bottom:20px;">\r
-                <div id='chilifreshReviewLink' name='chilifreshReviewLink' class='chili_review'></div>\r
-                <div id='chilifreshReviewResult' name='chilifreshReviewResult' style='display:none'></div>\r
-            </div></div>\r
-                       <div id="rdetail_reviews_lbl" class="hide_me"><strong>Reviews:</strong><div id='rdetail_review_container' style="margin-bottom:20px;"></div></div>\r
-                       <div id="rdetail_novelist_lbl" class="hide_me"><strong><!-- Suggested Reads: --></strong><div id='rdetail_novelist_div' class='rdetail_extras_div'>\r
-                         <div id="NoveListSelect" class="NoveListSelect">\r
-                               <div id="NoveListAnchor" class="NoveListSelect"></div>\r
-                               <div id="novsuggestions"></div>\r
-                               <div id="nextreads"></div>\r
-                               <div id="novrelatedauthors"></div>\r
-                           <div id="novrelateditems"></div>\r
-                               <div style="clear:both;"></div>\r
-                         </div>\r
-                       </div></div>\r
-               </div>\r
-               \r
-               <div rel="rdetail_reviews_div" rel2="reviews" class="rdetail_extras hide_me" id="rdetail_reviews_link"><div class="rdetail_extras_hr"></div>\r
-                 <div class="rdetail_extras_link">\r
-                       <a href='javascript:rdetailShowExtra("reviews");'><img alt="" id="rdetail_reviews_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>\r
-                       <a href='javascript:rdetailShowExtra("reviews");' class="rdetail_extras_lbl">&rdetail.extras.reviews;</a>\r
-                 </div>\r
-               </div>\r
-               <div id='rdetail_reviews_div' class='rdetail_extras_div hide_me'> </div>\r
-\r
-               <div rel="rdetail_excerpt_div" rel2="excerpt" class="rdetail_extras hide_me" id="rdetail_excerpt_link"><div class="rdetail_extras_hr"></div>\r
-                 <div class="rdetail_extras_link">\r
-                       <a href='javascript:rdetailShowExtra("excerpt");'><img alt="" id="rdetail_excerpt_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>\r
-                       <a href='javascript:rdetailShowExtra("excerpt");' class="rdetail_extras_lbl">&rdetail.extras.excerpt;</a>\r
-                 </div>\r
-               </div>\r
-               <div id='rdetail_excerpt_div' class='rdetail_extras_div hide_me'> </div>\r
-               \r
-               <div rel="rdetail_details_div" rel2="details" class="rdetail_extras hide_me" id="rdetail_details_link"><div class="rdetail_extras_hr"></div>\r
-                 <div class="rdetail_extras_link">\r
-                       <a href='javascript:rdetailShowExtra("details");'><img alt="" id="rdetail_details_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>\r
-                       <a href='javascript:rdetailShowExtra("details");' class="rdetail_extras_lbl">detailed description</a>\r
-                 </div>\r
-               </div>\r
-               <div id='rdetail_details_div' class='rdetail_extras_div hide_me'><![CDATA[\r
-                 <div class="hide_me" id="add_title_lbl" style="padding-bottom:7px;"><strong>Added Title:</strong>&nbsp;&nbsp;<div id="added_title"></div></div>\r
-                 <div class="hide_me" id="edition_lbl" style="padding-bottom:7px;"><strong>Edition:</strong>&nbsp;&nbsp;<span id="rdetail_edition"></span></div>\r
-                 <div class="hide_me" id="note_lbl" style="padding-bottom:7px;"><strong>Note:</strong>&nbsp;&nbsp;<span id="rdetail_note"></span></div>\r
-                 <div class="hide_me" id="lang_lbl" style="padding-bottom:7px;"><strong>Language:</strong>&nbsp;&nbsp;<span id="rdetail_lang"></span></div>\r
-                 <div class="hide_me" id="comp_note_lbl" style="padding-bottom:7px;"><strong>Computer File Note:</strong>&nbsp;&nbsp;<span id="comp_file_note"></span></div>\r
-                 <div class="hide_me" id="sys_detail_lbl" style="padding-bottom:7px;"><strong>System Details:</strong>&nbsp;&nbsp;<span id="sys_details"></span></div>\r
-                 <div class="hide_me" id="map_scale_lbl" style="padding-bottom:7px;"><strong>Scale Note for Maps:</strong>&nbsp;&nbsp;<span id="map_scale_note"></span></div>\r
-                 <div class="hide_me" id="event_lbl" style="padding-bottom:7px;"><strong>Event:</strong>&nbsp;&nbsp;<span id="rdetail_event"></span></div>\r
-                 <div class="hide_me" id="audience_lbl" style="padding-bottom:7px;"><strong>Audience:</strong>&nbsp;&nbsp;<span id="audience"></span></div>\r
-                 <div class="hide_me" id="phys_form_lbl" style="padding-bottom:7px;"><strong>Additional Physical Form:</strong>&nbsp;&nbsp;<span id="phys_form"></span></div>\r
-                 <div class="hide_me" id="biblio_lbl" style="padding-bottom:7px;"><strong>Bibliography:</strong>&nbsp;&nbsp;<span id="rdetail_biblio"></span></div>\r
-                 <div class="hide_me" id="local_note_lbl" style="padding-bottom:7px;"><strong>Local Note:</strong>&nbsp;&nbsp;<span id="local_note"></span></div>\r
-                 <div class="hide_me" id="restrict_lbl" style="padding-bottom:7px;"><strong>Restrictions on Access</strong>&nbsp;&nbsp;<span id="restrictions"></span></div>\r
-                 <div class="hide_me" id="continues_lbl" style="padding-bottom:7px;"><strong>Continues</strong>&nbsp;&nbsp;<span id="continues"></span></div>\r
-                 <div class="hide_me" id="cont_by_lbl" style="padding-bottom:7px;"><strong>Continued by:</strong>&nbsp;&nbsp;<span id="cont_by"></span></div> ]]>\r
-               </div>\r
-               \r
-               <div rel="rdetail_preview_div" rel2="preview" class="rdetail_extras hide_me" id="rdetail_preview_link"><div class="rdetail_extras_hr"></div>\r
-                 <div class="rdetail_extras_link">\r
-                       <a href='javascript:rdetailShowExtra("preview");'><img alt="" id="rdetail_preview_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>\r
-                       <a href='javascript:rdetailShowExtra("preview");' class="rdetail_extras_lbl">&rdetail.extras.preview;</a>\r
-                 </div>\r
-               </div>\r
-               <div id='rdetail_preview_div' class='rdetail_extras_div hide_me'> </div>\r
-               \r
-               <div rel="rdetail_novelist_div" rel2="novelist" class="rdetail_extras hide_me" id="rdetail_novelist_link"><div class="rdetail_extras_hr"></div>\r
-                 <div class="rdetail_extras_link">\r
-                       <a href='javascript:rdetailShowExtra("novelist");'><img alt="" id="rdetail_novelist_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>\r
-                       <a href='javascript:rdetailShowExtra("novelist");' class="rdetail_extras_lbl">&rdetail.extras.novelist;</a>\r
-                 </div>\r
-               </div>\r
-\r
-               <div rel="rdetail_cn_browse_div" rel2="cn" class="rdetail_extras" id="rdetail_viewcn_link"><div class="rdetail_extras_hr"></div>\r
-                 <div class="rdetail_extras_link">\r
-                       <a href='javascript:rdetailShowExtra("cn");'><img alt="" id="rdetail_cn_browse_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>\r
-                       <a href='javascript:rdetailShowExtra("cn");' class="rdetail_extras_lbl">&rdetail.extras.browser;</a>\r
-                 </div>\r
-               </div>\r
-               <div id='rdetail_cn_browse_div' style='text-align: center;' class='hide_me'>\r
-                       <div id='cn_browse_none' class='hide_me color_4' style='width: 90%; text-align: center; margin: 10px;'>\r
-                               &rdetail.extras.call.null;\r
-                       </div>\r
-\r
-                       <div id='rdetail_cn_browse_select_div' \r
-                               style='width: 100%; border: 1px solid black; padding: 6px; margin-top: 5px;'>\r
-                               <span>&rdetail.extras.call.local; </span>\r
-                               <select id='cn_browse_selector'> </select>\r
-                       </div>\r
-                       <!--#include virtual="../common/cn_browse.xml"-->\r
-               </div>\r
-\r
-               <!--#include virtual="rdetail_cn_details.xml"-->\r
-\r
-               <div rel="rdetail_copy_info_div" rel2="copyinfo" class="rdetail_extras" id="rdetail_copy_info_link"><div class="rdetail_extras_hr"></div>\r
-                 <div class="rdetail_extras_link">\r
-                       <a href='javascript:rdetailShowExtra("copyinfo");'><img alt="" id="rdetail_copy_info_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>\r
-                       <a href='javascript:rdetailShowExtra("copyinfo");' class="rdetail_extras_lbl">&rdetail.extras.summary;</a>\r
-                 </div>\r
-               </div>\r
-               <!--#include virtual="rdetail_copyinfo.xml"-->\r
-\r
-               <div rel="rdetail_marc_div" rel2="marc" class="rdetail_extras" id="rdetail_viewmarc_link"><div class="rdetail_extras_hr"></div>\r
-                 <div class="rdetail_extras_link">\r
-                       <a href='javascript:rdetailShowExtra("marc");'><img alt="" id="rdetail_marc_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>\r
-                       <a href='javascript:rdetailShowExtra("marc");' class="rdetail_extras_lbl">&rdetail.extras.marc;</a>\r
-                 </div>\r
-               </div>\r
-               <div id='rdetail_marc_div' class='rdetail_extras_div hide_me'>\r
-                       <div id='rdetail_view_marc_box'> </div>\r
-               </div>\r
-       </div>\r
-       <!-- Text for dynamic JavaScript -->\r
-       <div id='rdetail_preview_full_text' class='hide_me'>&rdetail.extras.preview.fulltext;</div>\r
-       <div id='rdetail_preview_title' class='hide_me'>&rdetail.extras.preview.title;</div>\r
-       <div id='rdetail_preview_badge' class='hide_me'>&rdetail.extras.preview.badge;</div>\r
-</div>\r
-\r
-    <!-- Novelist setup -->\r
-    <!--if expr="${OILS_NOVELIST_URL} && ${OILS_NOVELIST_URL}!='(none)'"-->\r
-    <!--endif-->\r
-\r
-<![CDATA[<!-- ****************** end: rdetail_extras.xml ***************************** -->]]>\r
+<![CDATA[<!-- ****************** rdetail_extras.xml ***************************** -->]]>
+<div xmlns:xi="http://www.w3.org/2001/XInclude" id="rdetail_main_div" class="">
+       <table class='hide_me rdetails_extra_links'>
+               <thead>
+                       <tr>
+                               <td id='rdetail_annotation_link' class='hide_me rdetail_extras_td'
+                                       style='padding-right: 15px; padding-left: 15px;' >
+                                       <a href='javascript:rdetailShowExtra("annotation");' 
+                                               class='classic_link'>&rdetail.extras.annotation;</a>
+                               </td>
+                       </tr>
+               </thead>
+       </table>
+
+       <div id='rdetail_extras_div' style='width: 100%;'> 
+               <div id='rdetail_extras_loading' class='hide_me' style='padding: 10px;'>&common.loading;</div>
+               <div rel="rdetail_summary_div" rel2="summary" class="rdetail_extras hide_me" id="rdetail_summary_link"><div class="rdetail_extras_hr"></div>
+                 <div class="rdetail_extras_link">
+                       <a href='javascript:rdetailShowExtra("summary");'><img alt="" id="rdetail_summary_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>
+                       <a href='javascript:rdetailShowExtra("summary");' class="rdetail_extras_lbl">Summary</a>
+                 </div>
+               </div>
+               <div id='rdetail_summary_div' class='rdetail_extras_div hide_me'> 
+                       <table style="margin-bottom:10px;" cellpadding="0" cellspacing="0" border="0"><tr><td width="1" style="padding-right:7px;" valign="top"><strong>Summary: </strong></td><td><div id='rdetail_summary_container'></div></td></tr></table>
+                       <iframe width="100%" height="400" id="content_cafe_summary" frameborder="0" />
+               </div>
+               
+               <div rel="rdetail_subject_div" rel2="subject" class="rdetail_extras hide_me" id="rdetail_subject_link"><div class="rdetail_extras_hr"></div>
+                 <div class="rdetail_extras_link">
+                       <a href='javascript:rdetailShowExtra("subject");'><img alt="" id="rdetail_subject_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>
+                       <a href='javascript:rdetailShowExtra("subject");' class="rdetail_extras_lbl">subject</a>
+                 </div>
+               </div>
+               <div id='rdetail_subject_div' class='rdetail_extras_div hide_me'> 
+                       <table cellpadding="0" cellspacing="0" border="0"><tr id="subject_lbl" class="hide_me"><td width="1" style="padding-right:7px;" valign="top"><strong>Subject: </strong></td><td valign="top"><div id='rdetail_subject_container'></div></td></tr>
+                       <tr class="hide_me" id="genre_lbl"><td width="1" style="padding:10px 7px 0px 0px;" valign="top"><strong>Genre: </strong></td><td valign="top" style="padding-top:10px;"><div id='rdetail_genre_cont'></div></td></tr>
+                       <tr class="hide_me" id="topic_lbl"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Topic Heading: </strong></td><td valign="top" style="padding-top:10px;"><div id='rdetail_topic_cont'></div></td></tr>
+                       <tr class="hide_me" id="geo_set_lbl"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Geographic Setting: </strong></td><td valign="top" style="padding-top:10px;"><div id='rdetail_geo_cont'></div></td></tr>
+                       <tr class="hide_me" id="bio_sub_lbl"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Biographical Subject: </strong></td><td valign="top" style="padding-top:10px;"><div id='rdetail_bio_cont'></div></td></tr>
+                       <tr class="hide_me" id="char_attrib_lbl"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Character Attributes: </strong></td><td valign="top" style="padding-top:10px;"><div id='rdetail_attrib_cont'></div></td></tr>
+                       <tr class="hide_me" id="setting_lbl"><td width="1" style="padding:10px 7px 0px 0px;" valign="top"><strong>Setting: </strong></td><td valign="top" style="padding-top:10px;"><div id='rdetail_setting_cont'></div></td></tr>
+                       <tr class="hide_me" id="time_lbl"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Time Period: </strong></td><td valign="top" style="padding-top:10px;"><div id='rdetail_time_cont'></div></td></tr>
+                       </table>
+               </div>
+               
+               <div rel="rdetail_content_div" rel2="content" class="rdetail_extras hide_me" id="rdetail_content_link"><div class="rdetail_extras_hr"></div>
+                 <div class="rdetail_extras_link">
+                       <a href='javascript:rdetailShowExtra("content");'><img alt="" id="rdetail_content_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>
+                       <a href='javascript:rdetailShowExtra("content");' class="rdetail_extras_lbl">Contents</a>
+                 </div>
+               </div>
+               <div id='rdetail_content_div' class='rdetail_extras_div hide_me'>
+                 <strong>Contents:</strong><div id='rdetail_content_div_inner' style="padding-bottom:10px;"></div>
+                 <strong>&rdetail.extras.toc;:</strong><div id='rdetail_toc_div' class='rdetail_extras_div'></div>
+               </div>
+               
+               <div rel="rdetail_authors_div" rel2="authors" class="rdetail_extras hide_me" id="rdetail_authors_link"><div class="rdetail_extras_hr"></div>
+                 <div class="rdetail_extras_link">
+                       <a href='javascript:rdetailShowExtra("authors");'><img alt="" id="rdetail_authors_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>
+                       <a href='javascript:rdetailShowExtra("authors");' class="rdetail_extras_lbl">Author</a>
+                 </div>
+               </div>
+               <div id='rdetail_authors_div' class='rdetail_extras_div hide_me'>
+                 <table cellpadding="0" cellspacing="0" border="0"><tr id="authors_lbl" class="hide_me"><td width="1" style="padding-right:7px;" valign="top"><strong>Authors:</strong></td><td valign="top"><div id="rdetail_authors_inner"></div></td></tr>
+                 <tr id="add_authors_lbl" class="hide_me"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Added Authors:</strong></td><td valign="top" style="padding-top:10px;"><div id="rdetail_moar_authors"></div></td></tr>
+                 <tr id="credits_lbl" class="hide_me"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Credits:</strong></td><td valign="top" style="padding-top:10px;"><div id="rdetail_credits"></div></td></tr>
+                 <tr id="cast_lbl" class="hide_me"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Cast:</strong></td><td valign="top" style="padding-top:10px;"><div id="rdetail_cast"></div></td></tr>
+                 <tr id="author_notes_lbl" class="hide_me"><td width="1" style="padding:10px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Author Notes:</strong></td><td valign="top" style="padding-top:10px;"><div id='rdetail_anotes_div' class='rdetail_extras_div'> </div></td></tr></table>
+               </div>
+               
+               <div rel="rdetail_series_div" rel2="series" class="rdetail_extras hide_me" id="rdetail_series_link"><div class="rdetail_extras_hr"></div>
+                 <div class="rdetail_extras_link">
+                       <a href='javascript:rdetailShowExtra("series");'><img alt="" id="rdetail_series_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>
+                       <a href='javascript:rdetailShowExtra("series");' class="rdetail_extras_lbl">series</a>
+                 </div>
+               </div>
+               <div id='rdetail_series_div' class='rdetail_extras_div hide_me'> 
+                       <strong>Series:</strong><div id='rdetail_series_container'></div>
+               </div>
+               
+               <div rel="rdetail_awards_div" rel2="awards" class="rdetail_extras hide_me" id="rdetail_awards_link"><div class="rdetail_extras_hr"></div>
+                 <div class="rdetail_extras_link">
+                       <a href='javascript:rdetailShowExtra("awards");'><img alt="" id="rdetail_awards_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>
+                       <a href='javascript:rdetailShowExtra("awards");' class="rdetail_extras_lbl">awards, reviews &amp; suggested reads</a>
+                 </div>
+               </div>
+               <div id='rdetail_awards_div' class='rdetail_extras_div hide_me'> 
+                       <div id="rdetail_awards_cont_lbl" class="hide_me"><strong>Awards:</strong> <div id='rdetail_awards_cont' style="margin-bottom:20px;"></div></div>
+                       <div id="rdetail_chilifresh_lbl" class="hide_me"><strong>Patron Reviews:</strong><div id='rdetail_chilifresh_reviews' class='hide_me' style="margin-bottom:20px;">
+                <div id='chilifreshReviewLink' name='chilifreshReviewLink' class='chili_review'></div>
+                <div id='chilifreshReviewResult' name='chilifreshReviewResult' style='display:none'></div>
+            </div></div>
+                       <div id="rdetail_reviews_lbl" class="hide_me"><strong>Reviews:</strong><div id='rdetail_review_container' style="margin-bottom:20px;"></div></div>
+                       <div id="rdetail_novelist_lbl" class="hide_me"><strong><!-- Suggested Reads: --></strong><div id='rdetail_novelist_div' class='rdetail_extras_div'>
+                         <div id="NoveListSelect" class="NoveListSelect">
+                               <div id="NoveListAnchor" class="NoveListSelect"></div>
+                               <div id="novsuggestions"></div>
+                               <div id="nextreads"></div>
+                               <div id="novrelatedauthors"></div>
+                           <div id="novrelateditems"></div>
+                               <div style="clear:both;"></div>
+                         </div>
+                       </div></div>
+               </div>
+               
+               <div rel="rdetail_reviews_div" rel2="reviews" class="rdetail_extras hide_me" id="rdetail_reviews_link"><div class="rdetail_extras_hr"></div>
+                 <div class="rdetail_extras_link">
+                       <a href='javascript:rdetailShowExtra("reviews");'><img alt="" id="rdetail_reviews_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>
+                       <a href='javascript:rdetailShowExtra("reviews");' class="rdetail_extras_lbl">&rdetail.extras.reviews;</a>
+                 </div>
+               </div>
+               <div id='rdetail_reviews_div' class='rdetail_extras_div hide_me'> </div>
+
+               <div rel="rdetail_excerpt_div" rel2="excerpt" class="rdetail_extras hide_me" id="rdetail_excerpt_link"><div class="rdetail_extras_hr"></div>
+                 <div class="rdetail_extras_link">
+                       <a href='javascript:rdetailShowExtra("excerpt");'><img alt="" id="rdetail_excerpt_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>
+                       <a href='javascript:rdetailShowExtra("excerpt");' class="rdetail_extras_lbl">&rdetail.extras.excerpt;</a>
+                 </div>
+               </div>
+               <div id='rdetail_excerpt_div' class='rdetail_extras_div hide_me'> </div>
+               
+               <div rel="rdetail_details_div" rel2="details" class="rdetail_extras hide_me" id="rdetail_details_link"><div class="rdetail_extras_hr"></div>
+                 <div class="rdetail_extras_link">
+                       <a href='javascript:rdetailShowExtra("details");'><img alt="" id="rdetail_details_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>
+                       <a href='javascript:rdetailShowExtra("details");' class="rdetail_extras_lbl">detailed description</a>
+                 </div>
+               </div>
+               <div id='rdetail_details_div' class='rdetail_extras_div hide_me'><![CDATA[
+                 <div class="hide_me" id="add_title_lbl" style="padding-bottom:7px;"><strong>Added Title:</strong>&nbsp;&nbsp;<div id="added_title"></div></div>
+                 <div class="hide_me" id="edition_lbl" style="padding-bottom:7px;"><strong>Edition:</strong>&nbsp;&nbsp;<span id="rdetail_edition"></span></div>
+                 <div class="hide_me" id="note_lbl" style="padding-bottom:7px;"><strong>Note:</strong>&nbsp;&nbsp;<span id="rdetail_note"></span></div>
+                 <div class="hide_me" id="lang_lbl" style="padding-bottom:7px;"><strong>Language:</strong>&nbsp;&nbsp;<span id="rdetail_lang"></span></div>
+                 <div class="hide_me" id="comp_note_lbl" style="padding-bottom:7px;"><strong>Computer File Note:</strong>&nbsp;&nbsp;<span id="comp_file_note"></span></div>
+                 <div class="hide_me" id="sys_detail_lbl" style="padding-bottom:7px;"><strong>System Details:</strong>&nbsp;&nbsp;<span id="sys_details"></span></div>
+                 <div class="hide_me" id="map_scale_lbl" style="padding-bottom:7px;"><strong>Scale Note for Maps:</strong>&nbsp;&nbsp;<span id="map_scale_note"></span></div>
+                 <div class="hide_me" id="event_lbl" style="padding-bottom:7px;"><strong>Event:</strong>&nbsp;&nbsp;<span id="rdetail_event"></span></div>
+                 <div class="hide_me" id="audience_lbl" style="padding-bottom:7px;"><strong>Audience:</strong>&nbsp;&nbsp;<span id="audience"></span></div>
+                 <div class="hide_me" id="phys_form_lbl" style="padding-bottom:7px;"><strong>Additional Physical Form:</strong>&nbsp;&nbsp;<span id="phys_form"></span></div>
+                 <div class="hide_me" id="biblio_lbl" style="padding-bottom:7px;"><strong>Bibliography:</strong>&nbsp;&nbsp;<span id="rdetail_biblio"></span></div>
+                 <div class="hide_me" id="local_note_lbl" style="padding-bottom:7px;"><strong>Local Note:</strong>&nbsp;&nbsp;<span id="local_note"></span></div>
+                 <div class="hide_me" id="restrict_lbl" style="padding-bottom:7px;"><strong>Restrictions on Access</strong>&nbsp;&nbsp;<span id="restrictions"></span></div>
+                 <div class="hide_me" id="continues_lbl" style="padding-bottom:7px;"><strong>Continues</strong>&nbsp;&nbsp;<span id="continues"></span></div>
+                 <div class="hide_me" id="cont_by_lbl" style="padding-bottom:7px;"><strong>Continued by:</strong>&nbsp;&nbsp;<span id="cont_by"></span></div> ]]>
+               </div>
+               
+               <div rel="rdetail_preview_div" rel2="preview" class="rdetail_extras hide_me" id="rdetail_preview_link"><div class="rdetail_extras_hr"></div>
+                 <div class="rdetail_extras_link">
+                       <a href='javascript:rdetailShowExtra("preview");'><img alt="" id="rdetail_preview_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>
+                       <a href='javascript:rdetailShowExtra("preview");' class="rdetail_extras_lbl">&rdetail.extras.preview;</a>
+                 </div>
+               </div>
+               <div id='rdetail_preview_div' class='rdetail_extras_div hide_me'> </div>
+               
+               <div rel="rdetail_novelist_div" rel2="novelist" class="rdetail_extras hide_me" id="rdetail_novelist_link"><div class="rdetail_extras_hr"></div>
+                 <div class="rdetail_extras_link">
+                       <a href='javascript:rdetailShowExtra("novelist");'><img alt="" id="rdetail_novelist_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>
+                       <a href='javascript:rdetailShowExtra("novelist");' class="rdetail_extras_lbl">&rdetail.extras.novelist;</a>
+                 </div>
+               </div>
+
+               <div rel="rdetail_cn_browse_div" rel2="cn" class="rdetail_extras" id="rdetail_viewcn_link"><div class="rdetail_extras_hr"></div>
+                 <div class="rdetail_extras_link">
+                       <a href='javascript:rdetailShowExtra("cn");'><img alt="" id="rdetail_cn_browse_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>
+                       <a href='javascript:rdetailShowExtra("cn");' class="rdetail_extras_lbl">&rdetail.extras.browser;</a>
+                 </div>
+               </div>
+               <div id='rdetail_cn_browse_div' style='text-align: center;' class='hide_me'>
+                       <div id='cn_browse_none' class='hide_me color_4' style='width: 90%; text-align: center; margin: 10px;'>
+                               &rdetail.extras.call.null;
+                       </div>
+
+                       <div id='rdetail_cn_browse_select_div' 
+                               style='width: 100%; border: 1px solid black; padding: 6px; margin-top: 5px;'>
+                               <span>&rdetail.extras.call.local; </span>
+                               <select id='cn_browse_selector'> </select>
+                       </div>
+                       <!--#include virtual="../common/cn_browse.xml"-->
+               </div>
+
+               <!--#include virtual="rdetail_cn_details.xml"-->
+
+               <div rel="rdetail_copy_info_div" rel2="copyinfo" class="rdetail_extras" id="rdetail_copy_info_link"><div class="rdetail_extras_hr"></div>
+                 <div class="rdetail_extras_link">
+                       <a href='javascript:rdetailShowExtra("copyinfo");'><img alt="" id="rdetail_copy_info_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>
+                       <a href='javascript:rdetailShowExtra("copyinfo");' class="rdetail_extras_lbl">&rdetail.extras.summary;</a>
+                 </div>
+               </div>
+               <!--#include virtual="rdetail_copyinfo.xml"-->
+
+               <div rel="rdetail_marc_div" rel2="marc" class="rdetail_extras" id="rdetail_viewmarc_link"><div class="rdetail_extras_hr"></div>
+                 <div class="rdetail_extras_link">
+                       <a href='javascript:rdetailShowExtra("marc");'><img alt="" id="rdetail_marc_div_arrow" src="/opac/skin/kcls/graphics/rdetail_arrow.png" /></a>
+                       <a href='javascript:rdetailShowExtra("marc");' class="rdetail_extras_lbl">&rdetail.extras.marc;</a>
+                 </div>
+               </div>
+               <div id='rdetail_marc_div' class='rdetail_extras_div hide_me'>
+                       <div id='rdetail_view_marc_box'> </div>
+               </div>
+       </div>
+       <!-- Text for dynamic JavaScript -->
+       <div id='rdetail_preview_full_text' class='hide_me'>&rdetail.extras.preview.fulltext;</div>
+       <div id='rdetail_preview_title' class='hide_me'>&rdetail.extras.preview.title;</div>
+       <div id='rdetail_preview_badge' class='hide_me'>&rdetail.extras.preview.badge;</div>
+</div>
+
+    <!-- Novelist setup -->
+    <!--if expr="${OILS_NOVELIST_URL} && ${OILS_NOVELIST_URL}!='(none)'"-->
+    <!--endif-->
+
+<![CDATA[<!-- ****************** end: rdetail_extras.xml ***************************** -->]]>
index dee0ef9..377c9ae 100644 (file)
-<![CDATA[<!-- ****************** rdetail_summary.xml ***************************** -->]]>\r
-<abbr class="unapi-id" title='tag:<!--#echo var="HTTP_HOST"-->,<!--#echo var="OILS_TIME_YEAR"-->:biblio-record_entry/<!--#echo var="OILS_OPAC_RID"-->'></abbr>\r
-<!-- This holds the record summary information -->\r
-\r
-<table width="100%" border="0" cellpadding="0" cellspacing="0" id="rdetail_details_table">\r
-  <tbody id="rdetail_details_tbody"><tr>\r
-    <td width="90" valign="top" id="rdetail_image_cell">\r
-               <a id='rdetail_img_link' href='javascript:;' class="hide_me"><img alt="Image of item" style='border: none;' id='rdetail_image' src='' onload='unHideMe($("rdetail_img_link"))' onerror='hideMe($("rdetail.jacket_attrib_div"));hideMe($("rdetail_img_link"));'/></a><br />\r
-         <div class='jacket_attrib hide_me' id='rdetail.jacket_attrib_div'>\r
-               <div>&opac.image_provided;</div>\r
-               <div><a target='_blank' href='&vendor.base_link;' class='classic_link' id='rdetail.jacket_attrib_link'>&vendor.name;</a></div>\r
-         </div>\r
-       </td>\r
-       \r
-       <td valign="top">\r
-         <table border="0" cellpadding="0" cellspacing="0" width="100%">\r
-           <tr><td valign="top">\r
-             <span class="rdetail_item" id='rdetail_title'></span>\r
-                 <span style="color:#545454;" id="author_lbl" class="hide_me">&common.author;: </span> <em id='rdetail_author'></em>\r
-                 <div><table cellpadding="0" cellspacing="0" border="0"><tr><td nowrap="nowrap" style="white-space:nowrap;" valign="top"><strong id="online_res_lbl" class="hide_me">Online Resources: <![CDATA[&nbsp;]]></strong></td><td id="online_resources"> </td></tr></table></div>\r
-           </td>\r
-           <td align="right" valign="top" nowrap="nowrap" style="white-space:nowrap;">\r
-                 <div style="width:230px;text-align:left;margin-top:3px;"><div style="float:right;">\r
-                   <div style="border-bottom:1px dotted #ccc;padding-top:10px;" class="rdetail_aux_utils"><a href="javascript:;" id="rdetail_place_hold"><img src="/opac/skin/kcls/graphics/green_check.png" alt="place hold" /> <span style="position:relative;top:-3px;left:3px;">Place Hold</span></a></div>\r
-                   <div style="padding-top:6px;" class="rdetail_aux_utils"><div style="position:absolute;"><div style="position:relative;top:5px; left: 25px;"><a title="Add to my list" id="add_mylist" href="javascript:addMyList();">Add to my list</a></div></div><a href="javascript:addMyList();"><img alt="add to my list" src="/opac/skin/kcls/graphics/clipboard.png" /></a></div>\r
-                 </div>\r
-             <div style="float:right;margin-right:17px;"><img id="rdetail_tor_pic" alt="Format" class="hide_me" src="" /></div></div>\r
-           </td></tr>\r
-         </table>\r
-         <div style="border-top: 1px dotted #ccc;padding-top:17px;">\r
-           <table border="0" cellpadding="0" width="100%">\r
-                 <tr>\r
-                   <td valign="top" width="50%">\r
-                         <table cellpadding="0" cellspacing="0" border="0"><tr><td valign="top" nowrap="nowrap" style="white-space:nowrap;"><strong id="callnum_lbl" class="hide_me">&common.callnumber;:<![CDATA[&nbsp;&nbsp;]]></strong></td><td><span id="rdetail_callnum"></span></td></tr></table>\r
-                         <table cellpadding="0" cellspacing="0" border="0"><tr><td valign="top" nowrap="nowrap" style="white-space:nowrap;"><strong id="pubdate_lbl" class="hide_me">&common.pubdate;:<![CDATA[&nbsp;&nbsp;]]></strong></td><td><span id="rdetail_pubdate"></span></td></tr></table>\r
-                       </td>\r
-                       <td valign="top" width="50%">\r
-                         <table cellpadding="0" cellspacing="0" border="0"><tr><td valign="top" nowrap="nowrap" style="white-space:nowrap;"><strong id="phys_desc_lbl" class="hide_me">&common.physical;:<![CDATA[&nbsp;&nbsp;]]></strong></td><td><span id="rdetail_physical_desc"></span></td></tr></table>\r
-                         <table cellpadding="0" cellspacing="0" border="0"><tr><td valign="top" nowrap="nowrap" style="white-space:nowrap;"><strong id="publisher_lbl" class="hide_me">&common.publisher;:<![CDATA[&nbsp;&nbsp;]]></strong></td><td><span id="rdetail_publisher"></span></td></tr></table>\r
-                       </td>\r
-                 </tr>\r
-               </table>\r
-               <div style="padding-top:15px;" id="rdetail_copies_avail"></div>\r
-         </div>\r
-       </td>\r
-  </tr></tbody>\r
-</table>\r
-<br /><br />\r
-\r
-\r
-\r
-\r
-\r
-<table cellpadding="0" cellspacing="0" border="0" width="100%" id="rdetails_status" class="hide_me">\r
-  <tr id="rdetails_status_head">\r
-       <td width="25%">Location</td>\r
-       <td width="20%">Call Number</td>\r
-       <td width="18%">Selving Location</td>\r
-       <td width="17%">Status</td>\r
-       <td width="20%">Due Date</td>\r
-  </tr>\r
-</table>\r
-<table cellpadding="0" cellspacing="0" border="0" width="100%">\r
-  <tbody id="rdetails_status2" class="hide_me">\r
-    <tr id="rdetails_status_head2">\r
-         <td width="25%"></td>\r
-         <td width="20%"></td>\r
-         <td width="18%"></td>\r
-         <td width="17%"></td>\r
-         <td width="20%"></td>\r
-    </tr>\r
-  </tbody>\r
-</table>\r
-<div style="height:15px;"></div>\r
-\r
-<div id="rdetail_locs_expand" class="hide_me"><a href="javascript:;" onclick="expandBoxes('locs',true);"><img src="/opac/skin/kcls/graphics/plus_sign.png" /></a> <a style="position:relative;top:-3px;" href="javascript:;" onclick="expandBoxes('locs',true);">Show more copies</a></div>\r
-<div id="rdetail_locs_collapse" class="hide_me"><a href="javascript:;" onclick="expandBoxes('locs',false);"><img src="/opac/skin/kcls/graphics/minus_sign.png" /></a> <a style="position:relative;top:-3px;" href="javascript:;" onclick="expandBoxes('locs',false);">Collapse copies</a></div>\r
-<div id="rdetail_extras_expand"><a href="javascript:;" onclick="expandBoxes('tabs',true);"><img src="/opac/skin/kcls/graphics/plus_sign.png" /></a> <a style="position:relative;top:-3px;" href="javascript:;" onclick="expandBoxes('tabs',true);">Expand all tabs</a></div>\r
-<div id="rdetail_extras_collapse" class="hide_me"><a href="javascript:;" onclick="expandBoxes('tabs',false);"><img src="/opac/skin/kcls/graphics/minus_sign.png" /></a> <a style="position:relative;top:-3px;" href="javascript:;" onclick="expandBoxes('tabs',false);">Collapse all tabs</a></div>\r
-\r
-\r
-\r
-<div class="hide_me">\r
-       <table id='' border="0" width="100%">\r
-               <tbody id='rdetail_details_tbody'>\r
-\r
-                       <tr>\r
-                               <td id='' rowspan='2' valign="top" align="center" style="padding-right:10px;"></td>\r
-                               <td class='rdetail_desc' valign="top" colspan="3">\r
-                                 <table border="0" width="100%"><tr><td valign="top">\r
-                                       <div style="padding-bottom:7px;"><strong>&common.title;:</strong> </div>\r
-                                       \r
-                                 </td><td width="1" valign="top" align="right" style="white-space:nowrap;">\r
-                                   <a href="javascript:;" id=''><img alt="Place Hold" src="/opac/skin/kcls/graphics/place_hold.gif" /></a>\r
-                                       <a href="javascript:;" id="rd_reviews_and_more" target="_blank"><img alt="Reviews and More" src="/opac/skin/kcls/graphics/reviews.gif" /></a>\r
-                                       <a href="javascript:addMyList();" id=""><img alt="Add to My List" src="/opac/skin/kcls/graphics/add_mylist.gif" /></a>\r
-                                 </td></tr></table>\r
-                               </td>           \r
-                <!-- *** Example of how to use the openils.BibTemplate infrastructure to augment the stock\r
-                     *** summary screen with more and/or different information.  In this case, the raw MARC 245. -->\r
-                       </tr>\r
-\r
-                       <tr>\r
-                               <td nowrap='nowrap' colspan="3" valign="bottom" style="padding-bottom:16px;"></td>\r
-                       </tr>\r
-                       <tr><td><div style="height:20px;"></div></td></tr>\r
-\r
-\r
-\r
-                       <tr class='hide_me' id='rdetail_online_row'>\r
-                               <!-- *** Example of how to use the openils.BibTemplate infrastructure to augment the stock\r
-                                    *** summary screen with complex information, such as location-specific URIs (856$9). -->\r
-                               <td nowrap='nowrap' class='rdetail_desc'>&rdetail.summary.online;\r
-                                       <span class='hide_me' type='opac/slot-data' query='datafield[tag=856] subfield[code=9]'>\r
-                                               <script type='opac/slot-format'><![CDATA[\r
-                                                       // There exists at least one localized URI. Clear all links.\r
-                                                       dojo.query('*:not([type^=opac])', 'rdetail_online').orphan();\r
-                                                       return '';\r
-                                               ]]></script>\r
-                                       </span>\r
-                               </td>\r
-                               <td class='rdetail_item' id='rdetail_online' type='opac/slot-data' query='volumes volume uris uri' join=", ">\r
-                                       <script type='opac/slot-format'><![CDATA[\r
-                                               var link = '<a href="' + item.getAttribute('href') + '">' + item.getAttribute('label') + '</a>';\r
-                                               if (item.getAttribute('use_restriction'))\r
-                                                       link += ' (Use restriction: ' + item.getAttribute('use_restriction') + ')';\r
-                                               return link;\r
-                                       ]]></script>\r
-                               </td>\r
-                       </tr>\r
-               </tbody>\r
-       </table>\r
-\r
-       <!-- Empty span used for creating unAPI links -->\r
-       <abbr name="unapi" class="unapi-id">\r
-               <!-- unAPI URI goes here -->\r
-       </abbr>\r
-</div> <!-- details_body -->\r
-\r
-    <!-- ChiliFresh setup -->\r
-    <!--if expr="${OILS_CHILIFRESH_ACCOUNT} && ${OILS_CHILIFRESH_ACCOUNT}!='(none)'"-->\r
-        <input type="hidden" id="chilifresh_account" name="chilifresh_account"\r
-            value="<!--#echo var='OILS_CHILIFRESH_ACCOUNT'-->" />\r
-        <input type="hidden" id="chilifresh_profile" name="chilifresh_profile"\r
-            value="<!--#echo var='OILS_CHILIFRESH_PROFILE'-->" />\r
-        <input type="hidden" id="chilifresh_version" name="chilifresh_version" value="onsite_v1" />\r
-        <input type="hidden" id="chilifresh_type" name="chilifresh_type" value="search" />\r
-    <!--endif-->\r
-<![CDATA[<!-- ****************** end: rdetail_summary.xml ***************************** -->]]>\r
+<![CDATA[<!-- ****************** rdetail_summary.xml ***************************** -->]]>
+<abbr class="unapi-id" title='tag:<!--#echo var="HTTP_HOST"-->,<!--#echo var="OILS_TIME_YEAR"-->:biblio-record_entry/<!--#echo var="OILS_OPAC_RID"-->'></abbr>
+<!-- This holds the record summary information -->
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0" id="rdetail_details_table">
+  <tbody id="rdetail_details_tbody"><tr>
+    <td width="90" valign="top" id="rdetail_image_cell">
+               <a id='rdetail_img_link' href='javascript:;' class="hide_me"><img alt="Image of item" style='border: none;' id='rdetail_image' src='' onload='unHideMe($("rdetail_img_link"))' onerror='hideMe($("rdetail.jacket_attrib_div"));hideMe($("rdetail_img_link"));'/></a><br />
+         <div class='jacket_attrib hide_me' id='rdetail.jacket_attrib_div'>
+               <div>&opac.image_provided;</div>
+               <div><a target='_blank' href='&vendor.base_link;' class='classic_link' id='rdetail.jacket_attrib_link'>&vendor.name;</a></div>
+         </div>
+       </td>
+       
+       <td valign="top">
+         <table border="0" cellpadding="0" cellspacing="0" width="100%">
+           <tr><td valign="top">
+             <span class="rdetail_item" id='rdetail_title'></span>
+                 <span style="color:#545454;" id="author_lbl" class="hide_me">&common.author;: </span> <em id='rdetail_author'></em>
+                 <div><table cellpadding="0" cellspacing="0" border="0"><tr><td nowrap="nowrap" style="white-space:nowrap;" valign="top"><strong id="online_res_lbl" class="hide_me">Online Resources: <![CDATA[&nbsp;]]></strong></td><td id="online_resources"> </td></tr></table></div>
+           </td>
+           <td align="right" valign="top" nowrap="nowrap" style="white-space:nowrap;">
+                 <div style="width:230px;text-align:left;margin-top:3px;"><div style="float:right;">
+                   <div style="border-bottom:1px dotted #ccc;padding-top:10px;" class="rdetail_aux_utils"><a href="javascript:;" id="rdetail_place_hold"><img src="/opac/skin/kcls/graphics/green_check.png" alt="place hold" /> <span style="position:relative;top:-3px;left:3px;">Place Hold</span></a></div>
+                   <div style="padding-top:6px;" class="rdetail_aux_utils"><div style="position:absolute;"><div style="position:relative;top:5px; left: 25px;"><a title="Add to my list" id="add_mylist" href="javascript:addMyList();">Add to my list</a></div></div><a href="javascript:addMyList();"><img alt="add to my list" src="/opac/skin/kcls/graphics/clipboard.png" /></a></div>
+                 </div>
+             <div style="float:right;margin-right:17px;"><img id="rdetail_tor_pic" alt="Format" class="hide_me" src="" /></div></div>
+           </td></tr>
+         </table>
+         <div style="border-top: 1px dotted #ccc;padding-top:17px;">
+           <table border="0" cellpadding="0" width="100%">
+                 <tr>
+                   <td valign="top" width="50%">
+                         <table cellpadding="0" cellspacing="0" border="0"><tr><td valign="top" nowrap="nowrap" style="white-space:nowrap;"><strong id="callnum_lbl" class="hide_me">&common.callnumber;:<![CDATA[&nbsp;&nbsp;]]></strong></td><td><span id="rdetail_callnum"></span></td></tr></table>
+                         <table cellpadding="0" cellspacing="0" border="0"><tr><td valign="top" nowrap="nowrap" style="white-space:nowrap;"><strong id="pubdate_lbl" class="hide_me">&common.pubdate;:<![CDATA[&nbsp;&nbsp;]]></strong></td><td><span id="rdetail_pubdate"></span></td></tr></table>
+                       </td>
+                       <td valign="top" width="50%">
+                         <table cellpadding="0" cellspacing="0" border="0"><tr><td valign="top" nowrap="nowrap" style="white-space:nowrap;"><strong id="phys_desc_lbl" class="hide_me">&common.physical;:<![CDATA[&nbsp;&nbsp;]]></strong></td><td><span id="rdetail_physical_desc"></span></td></tr></table>
+                         <table cellpadding="0" cellspacing="0" border="0"><tr><td valign="top" nowrap="nowrap" style="white-space:nowrap;"><strong id="publisher_lbl" class="hide_me">&common.publisher;:<![CDATA[&nbsp;&nbsp;]]></strong></td><td><span id="rdetail_publisher"></span></td></tr></table>
+                       </td>
+                 </tr>
+               </table>
+               <div style="padding-top:15px;" id="rdetail_copies_avail"></div>
+         </div>
+       </td>
+  </tr></tbody>
+</table>
+<br /><br />
+
+
+
+
+
+<table cellpadding="0" cellspacing="0" border="0" width="100%" id="rdetails_status" class="hide_me">
+  <tr id="rdetails_status_head">
+       <td width="25%">Location</td>
+       <td width="20%">Call Number</td>
+       <td width="18%">Selving Location</td>
+       <td width="17%">Status</td>
+       <td width="20%">Due Date</td>
+  </tr>
+</table>
+<table cellpadding="0" cellspacing="0" border="0" width="100%">
+  <tbody id="rdetails_status2" class="hide_me">
+    <tr id="rdetails_status_head2">
+         <td width="25%"></td>
+         <td width="20%"></td>
+         <td width="18%"></td>
+         <td width="17%"></td>
+         <td width="20%"></td>
+    </tr>
+  </tbody>
+</table>
+<div style="height:15px;"></div>
+
+<div id="rdetail_locs_expand" class="hide_me"><a href="javascript:;" onclick="expandBoxes('locs',true);"><img src="/opac/skin/kcls/graphics/plus_sign.png" /></a> <a style="position:relative;top:-3px;" href="javascript:;" onclick="expandBoxes('locs',true);">Show more copies</a></div>
+<div id="rdetail_locs_collapse" class="hide_me"><a href="javascript:;" onclick="expandBoxes('locs',false);"><img src="/opac/skin/kcls/graphics/minus_sign.png" /></a> <a style="position:relative;top:-3px;" href="javascript:;" onclick="expandBoxes('locs',false);">Collapse copies</a></div>
+<div id="rdetail_extras_expand"><a href="javascript:;" onclick="expandBoxes('tabs',true);"><img src="/opac/skin/kcls/graphics/plus_sign.png" /></a> <a style="position:relative;top:-3px;" href="javascript:;" onclick="expandBoxes('tabs',true);">Expand all tabs</a></div>
+<div id="rdetail_extras_collapse" class="hide_me"><a href="javascript:;" onclick="expandBoxes('tabs',false);"><img src="/opac/skin/kcls/graphics/minus_sign.png" /></a> <a style="position:relative;top:-3px;" href="javascript:;" onclick="expandBoxes('tabs',false);">Collapse all tabs</a></div>
+
+
+
+<div class="hide_me">
+       <table id='' border="0" width="100%">
+               <tbody id='rdetail_details_tbody'>
+
+                       <tr>
+                               <td id='' rowspan='2' valign="top" align="center" style="padding-right:10px;"></td>
+                               <td class='rdetail_desc' valign="top" colspan="3">
+                                 <table border="0" width="100%"><tr><td valign="top">
+                                       <div style="padding-bottom:7px;"><strong>&common.title;:</strong> </div>
+                                       
+                                 </td><td width="1" valign="top" align="right" style="white-space:nowrap;">
+                                   <a href="javascript:;" id=''><img alt="Place Hold" src="/opac/skin/kcls/graphics/place_hold.gif" /></a>
+                                       <a href="javascript:;" id="rd_reviews_and_more" target="_blank"><img alt="Reviews and More" src="/opac/skin/kcls/graphics/reviews.gif" /></a>
+                                       <a href="javascript:addMyList();" id=""><img alt="Add to My List" src="/opac/skin/kcls/graphics/add_mylist.gif" /></a>
+                                 </td></tr></table>
+                               </td>           
+                <!-- *** Example of how to use the openils.BibTemplate infrastructure to augment the stock
+                     *** summary screen with more and/or different information.  In this case, the raw MARC 245. -->
+                       </tr>
+
+                       <tr>
+                               <td nowrap='nowrap' colspan="3" valign="bottom" style="padding-bottom:16px;"></td>
+                       </tr>
+                       <tr><td><div style="height:20px;"></div></td></tr>
+
+
+
+                       <tr class='hide_me' id='rdetail_online_row'>
+                               <!-- *** Example of how to use the openils.BibTemplate infrastructure to augment the stock
+                                    *** summary screen with complex information, such as location-specific URIs (856$9). -->
+                               <td nowrap='nowrap' class='rdetail_desc'>&rdetail.summary.online;
+                                       <span class='hide_me' type='opac/slot-data' query='datafield[tag=856] subfield[code=9]'>
+                                               <script type='opac/slot-format'><![CDATA[
+                                                       // There exists at least one localized URI. Clear all links.
+                                                       dojo.query('*:not([type^=opac])', 'rdetail_online').orphan();
+                                                       return '';
+                                               ]]></script>
+                                       </span>
+                               </td>
+                               <td class='rdetail_item' id='rdetail_online' type='opac/slot-data' query='volumes volume uris uri' join=", ">
+                                       <script type='opac/slot-format'><![CDATA[
+                                               var link = '<a href="' + item.getAttribute('href') + '">' + item.getAttribute('label') + '</a>';
+                                               if (item.getAttribute('use_restriction'))
+                                                       link += ' (Use restriction: ' + item.getAttribute('use_restriction') + ')';
+                                               return link;
+                                       ]]></script>
+                               </td>
+                       </tr>
+               </tbody>
+       </table>
+
+       <!-- Empty span used for creating unAPI links -->
+       <abbr name="unapi" class="unapi-id">
+               <!-- unAPI URI goes here -->
+       </abbr>
+</div> <!-- details_body -->
+
+    <!-- ChiliFresh setup -->
+    <!--if expr="${OILS_CHILIFRESH_ACCOUNT} && ${OILS_CHILIFRESH_ACCOUNT}!='(none)'"-->
+        <input type="hidden" id="chilifresh_account" name="chilifresh_account"
+            value="<!--#echo var='OILS_CHILIFRESH_ACCOUNT'-->" />
+        <input type="hidden" id="chilifresh_profile" name="chilifresh_profile"
+            value="<!--#echo var='OILS_CHILIFRESH_PROFILE'-->" />
+        <input type="hidden" id="chilifresh_version" name="chilifresh_version" value="onsite_v1" />
+        <input type="hidden" id="chilifresh_type" name="chilifresh_type" value="search" />
+    <!--endif-->
+<![CDATA[<!-- ****************** end: rdetail_summary.xml ***************************** -->]]>
index 2e0d4ef..88a4d00 100644 (file)
@@ -1,24 +1,24 @@
-<div style="height: 10px;"></div>\r
-<div id="results_header_nav1">\r
-  <table cellpadding="0" cellspacing="0" border="0" width="100%"><tr>\r
-    <td class="h1" width="116">Search Results</td>\r
-       <td valign="bottom" nowrap="nowrap" width="320" style="white-space:nowrap;" class="hide_me" id="result_numbers1">\r
-                       <span> &common.results; </span>\r
-                       <span id='offset_start' style='font-weight:bold'></span><span><![CDATA[&nbsp;]]>- </span>\r
-                       <span id='offset_end' style='font-weight:bold'></span><span><![CDATA[&nbsp;]]>&common.of; </span>\r
-                       <span id='result_count' style='font-weight:bold'></span>\r
-                       <span style='padding-left: 6px;'> (page </span>\r
-                                       <span id='current_page'></span><span><![CDATA[&nbsp;]]>&common.of; </span>\r
-                                       <span id='num_pages'></span>)\r
-       </td>\r
-       <td align="right" valign="bottom">\r
-         <span id='start_end_links_span' class='hide_me'>\r
-         <a class='search_page_nav_link' id='prev_link' title='&rdetail.page.previous;' style="cursor:pointer;"><span class="nav_arrow_fix">&#9668;</span> Previous</a>\r
-               <span class='hide_me' id='result_info_div' style='padding-left: 11px; padding-right:11px;'>\r
-                       <span id="nav_pages"></span>\r
-               </span>\r
-               <a class='search_page_nav_link' id='next_link' title='&rdetail.page.next;' style="cursor:pointer;">Next <span class="nav_arrow_fix">&#9658;</span></a>\r
-         </span>\r
-       </td>\r
-  </tr></table>\r
-</div>\r
+<div style="height: 10px;"></div>
+<div id="results_header_nav1">
+  <table cellpadding="0" cellspacing="0" border="0" width="100%"><tr>
+    <td class="h1" width="116">Search Results</td>
+       <td valign="bottom" nowrap="nowrap" width="320" style="white-space:nowrap;" class="hide_me" id="result_numbers1">
+                       <span> &common.results; </span>
+                       <span id='offset_start' style='font-weight:bold'></span><span><![CDATA[&nbsp;]]>- </span>
+                       <span id='offset_end' style='font-weight:bold'></span><span><![CDATA[&nbsp;]]>&common.of; </span>
+                       <span id='result_count' style='font-weight:bold'></span>
+                       <span style='padding-left: 6px;'> (page </span>
+                                       <span id='current_page'></span><span><![CDATA[&nbsp;]]>&common.of; </span>
+                                       <span id='num_pages'></span>)
+       </td>
+       <td align="right" valign="bottom">
+         <span id='start_end_links_span' class='hide_me'>
+         <a class='search_page_nav_link' id='prev_link' title='&rdetail.page.previous;' style="cursor:pointer;"><span class="nav_arrow_fix">&#9668;</span> Previous</a>
+               <span class='hide_me' id='result_info_div' style='padding-left: 11px; padding-right:11px;'>
+                       <span id="nav_pages"></span>
+               </span>
+               <a class='search_page_nav_link' id='next_link' title='&rdetail.page.next;' style="cursor:pointer;">Next <span class="nav_arrow_fix">&#9658;</span></a>
+         </span>
+       </td>
+  </tr></table>
+</div>
index 47e8c3d..13c0454 100644 (file)
@@ -1,57 +1,57 @@
-\r
-<![CDATA[<!-- ****************** result_info.xml ***************************** -->]]>\r
-<table style='width: 100%;'>\r
-       <tbody>\r
-\r
-               <tr class='color_4'>\r
-\r
-                       <td style='vertical-align: top;' id='next_prev_links'>\r
-\r
-                               \r
-                               <span class="hide_me">\r
-                                       <a class='search_page_nav_link' id='search_home_link' title="&rdetail.page.results;">&rdetail.start;</a>\r
-                                       <span class='search_page_nav_link' id='page_numbers'> </span>\r
-                                       <a class='search_page_nav_link' id='end_link' title="&rdetail.page.last;">&rdetail.end;</a>\r
-                               </span>\r
-                               \r
-                               <span style="float:right;" class="hide_me" id="results_view_span">\r
-                                 View: <span id="results_simple_lbl">Simple</span><a id="results_simple_link" class="hide_me" href="javascript:showDetailedInfo(false);">Simple</a> / <span id="results_detail_lbl" class="hide_me">Detailed</span><a id="results_detail_link" href="javascript:showDetailedInfo(true);">Detailed</a>\r
-                               </span>\r
-                       </td>\r
-\r
-                       <td  colspan='5' class="hide_me" \r
-                               style='padding-bottom: 4px; text-align:center; vertical-align: top; border-bottom: 1px solid #E0E0E0;'>\r
-                                       <span id='search_info_table' class='hide_me' style='font-size: 8pt;'>\r
-                                               <b>&result.info.copies; </b>\r
-                                       </span>\r
-                       </td>\r
-               </tr>\r
-\r
-               <tr style='height: 1.1em;' id='result_thead_row'>\r
-                       <td>\r
-                               <div class='hide_me' id='no_formats' style='padding: 4px;'>\r
-                                       <b>\r
-                                               <span style='color:red;'>*</span>\r
-                                               &result.info.no.items;\r
-                                               <div>&result.info.format.items;</div>\r
-                                       </b>\r
-                               </div>\r
-\r
-                               <div class='hide_me' id='rresult_show_all' style='padding: 4px;'>\r
-                                       <a href='javascript:rresultExpandSearch();' id='rresult_show_all_link' \r
-                                               class='classic_link'>&result.info.show; </a>\r
-                               </div>\r
-\r
-                               <div class='hide_me' id='rresult_show_here' style='padding: 4px;'>\r
-                                       <a href='javascript:rresultContractSearch();' id='rresult_show_here_link' \r
-                                               class='classic_link'>&result.info.show; </a>\r
-                               </div>\r
-\r
-                       </td>\r
-                       <td rowspan='2' style='font-size: 8pt; padding-top: 4px;' class='copy_count_cell hide_me' \r
-                               width='12%' align='center' name='result_thead_ccell'> </td>\r
-               </tr>\r
-\r
-       </tbody>\r
-</table>\r
-<![CDATA[<!-- ****************** end: result_info.xml ***************************** -->]]>\r
+
+<![CDATA[<!-- ****************** result_info.xml ***************************** -->]]>
+<table style='width: 100%;'>
+       <tbody>
+
+               <tr class='color_4'>
+
+                       <td style='vertical-align: top;' id='next_prev_links'>
+
+                               
+                               <span class="hide_me">
+                                       <a class='search_page_nav_link' id='search_home_link' title="&rdetail.page.results;">&rdetail.start;</a>
+                                       <span class='search_page_nav_link' id='page_numbers'> </span>
+                                       <a class='search_page_nav_link' id='end_link' title="&rdetail.page.last;">&rdetail.end;</a>
+                               </span>
+                               
+                               <span style="float:right;" class="hide_me" id="results_view_span">
+                                 View: <span id="results_simple_lbl">Simple</span><a id="results_simple_link" class="hide_me" href="javascript:showDetailedInfo(false);">Simple</a> / <span id="results_detail_lbl" class="hide_me">Detailed</span><a id="results_detail_link" href="javascript:showDetailedInfo(true);">Detailed</a>
+                               </span>
+                       </td>
+
+                       <td  colspan='5' class="hide_me" 
+                               style='padding-bottom: 4px; text-align:center; vertical-align: top; border-bottom: 1px solid #E0E0E0;'>
+                                       <span id='search_info_table' class='hide_me' style='font-size: 8pt;'>
+                                               <b>&result.info.copies; </b>
+                                       </span>
+                       </td>
+               </tr>
+
+               <tr style='height: 1.1em;' id='result_thead_row'>
+                       <td>
+                               <div class='hide_me' id='no_formats' style='padding: 4px;'>
+                                       <b>
+                                               <span style='color:red;'>*</span>
+                                               &result.info.no.items;
+                                               <div>&result.info.format.items;</div>
+                                       </b>
+                               </div>
+
+                               <div class='hide_me' id='rresult_show_all' style='padding: 4px;'>
+                                       <a href='javascript:rresultExpandSearch();' id='rresult_show_all_link' 
+                                               class='classic_link'>&result.info.show; </a>
+                               </div>
+
+                               <div class='hide_me' id='rresult_show_here' style='padding: 4px;'>
+                                       <a href='javascript:rresultContractSearch();' id='rresult_show_here_link' 
+                                               class='classic_link'>&result.info.show; </a>
+                               </div>
+
+                       </td>
+                       <td rowspan='2' style='font-size: 8pt; padding-top: 4px;' class='copy_count_cell hide_me' 
+                               width='12%' align='center' name='result_thead_ccell'> </td>
+               </tr>
+
+       </tbody>
+</table>
+<![CDATA[<!-- ****************** end: result_info.xml ***************************** -->]]>
index 5e2a716..a5998e4 100644 (file)
-<!-- Search results are spit into this table -->\r
-<![CDATA[<!-- ****************** result_table.xml ***************************** -->]]>\r
-<div id="result_table_div">\r
-  <table cellpadding="0" cellspacing="0" border="0" width="100%"><tr>\r
-    <td valign="top" width="1" style=""><!-- padding-right:20px; --><div class="hide_me"><div style="width:174px;" class="hide_me" id="tehSideBar"><!--#include virtual="../common/sidebar.xml"--></div></div></td>\r
-       <td style="" width="1"><!-- border-left:1px solid #e9ebf3;padding-right:27px; --></td>\r
-       <td valign="top">\r
-         <table id="res_table" cellpadding="0" cellspacing="0" border="0" width="100%" style="margin-top:10px;">\r
-               <tbody id="result_table"><tr id='result_table_template' class='hide_me'>\r
-                               <td class='result_table_row' align='left' width='100%'>\r
-                                       <table cellpadding="0" cellspacing="0" border="0" width="100%" class='result_table_subtable' id="results_table" style="border-collapse: collapse;">\r
-                                               <tbody class='result_table_subtbody'>\r
-                                                       <tr name='counts_row'>\r
-                                                               <td width="58" style="font-weight:bold;padding-left:10px;" valign="top" name="results_row_count">1.</td>\r
-                                                               <td class='result_table_pic_header' width="78" nowrap="nowrap" valign="top">\r
-                                                                       <span type='opac/slot-data' query='datafield[tag=020] subfield[code=a],datafield[tag=024] subfield[code=a]' templated='true'>\r
-                                                                               <span class='hide_me' type='opac/template-value' name='ident'>\r
-                                                                                       var content;\r
-                                                                                       for (var i = 0; item_list[i]; i++) {\r
-                                                                                               if (content = BT.textContent(item_list[i])) break; /* assignment */\r
-                                                                                       }\r
-                                                                                       return buildISBNSrc(plausible_ident(content));\r
-                                                                               </span>\r
-                                                                               <a><img alt="Image of item" name='item_jacket' class='result_table_pic' src='${ident}' /></a><br />\r
-                                                                       </span>\r
-\r
-                                                               </td>\r
-                                                               <td class='result_table_title_cell' name='result_table_title_cell' valign="top">\r
-                                                                 <div style="font-weight:bold;"><a title="&result.table.keyword;" name='item_title' class='search_link'></a></div>\r
-                                                                 <span style="font-size:11px;">\r
-                                                                       <div><em><a title="&result.table.author;" name='item_author' class='search_link'></a></em> <![CDATA[&nbsp;&nbsp;]]><span name="results_pub_date"></span></div>\r
-                                                                       <table cellpadding="0" cellspacing="0" border="0" class="results_info_table">\r
-                                                                         <tr><td nowrap="nowrap" valign="top" class="hide_me"><strong>Call number:</strong> </td><td> <span name="results_call_num"></span></td></tr>\r
-<!-- BILL -->\r
-                                   <tr name='bib_cn_list' class='result_table_title_cell'>\r
-                                       <td colspan='2'>\r
-                                           <span><strong>Call number:</strong></span>\r
-                                           <span type='opac/slot-data+marcxml' query='datafield[tag=092]'> </span>\r
-                                           <span type='opac/slot-data+marcxml' query='datafield[tag=099]'> </span>\r
-                                           <span type='opac/slot-data+marcxml' query='datafield[tag=998] subfield[code=d]' class='hide_me'>\r
-                                               <span type='opac/call-back+pre-render' class='hide_me'>\r
-                                                        var mattype = dojox.xml.parser.textContent(item_list[0]);\r
-                                                        var node = dojo.query('[name=result_mat_type]', /*OMG, must be better way*/\r
-                                                            slot.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode)[0];\r
-                                                        setFormatIcon(node, mattype);\r
-                                               </span>\r
-                                            </span>\r
-                                       </td>\r
-                                   </tr>\r
-<!-- BILL -->\r
-                                                                         <tr name="results_pub_tr" class="hide_me"><td valign="top"><strong>Publisher:</strong> </td><td> <span name="results_pub"></span></td></tr>\r
-                                                                         <tr name="results_isbn_tr" class="hide_me"><td valign="top"><strong>ISBN:</strong> </td><td> <span name="results_isbn"></span></td></tr>\r
-                                                                         <tr name="results_edition_tr" class="hide_me"><td valign="top"><strong>Edition:</strong> </td><td> <span name="results_edition"></span></td></tr>\r
-                                                                         <tr name="results_phys_desc_tr" class="hide_me"><td nowrap="nowrap" valign="top"><strong>Phys. Desc.:</strong> </td><td> <span name="results_phys_desc"></span></td></tr>\r
-                                                                       </table>\r
-                                                                       <div><span name="copy_holds"></span> <span name="copy_holds2"></span><br /><span name="copy_count_avail"></span> <!-- of <span name="copy_count"></span> on <span name="copy_count_total"></span> copies available--></div>\r
-                                                                 </span>\r
-                                                                 \r
-                                                                       <div class="hide_me">\r
-                                                                       <span name='result_table_extra_span' class='hide_me'>\r
-                                                                               <span name='result_table_pub_box' style='padding-left: 10px;'> \r
-                                                                                       <span name='result_table_edition_span' style='padding-left: 10px;'></span> |\r
-                                                                                       <span name='result_table_pub_span'> </span> |\r
-                                                                                       <span name='result_table_phys_span'> </span>\r
-                                                                               </span>\r
-                                                                       </span>\r
-                                                                       </div>\r
-                                                               </td>\r
-\r
-                                                               <!-- Copy this td for each copy count appended -->\r
-                                                               <td nowrap='nowrap' name="copy_count_cell" class='copy_count_cell hide_me' width="1"> </td>\r
-\r
-                                                               <td name='result_table_format_cell' class='result_table_format_cell' align="center" width="1" style="padding:0px 10px;">\r
-                                                               \r
-                                                                       <img alt="Format" src="" class="hide_me" name="" />\r
-                                                                       <span class='hide_me' \r
-                                                                               style='color: #9999FF; padding-left: 10px; font-size: 7pt; font-weight: 300;'> \r
-                                                                               <span>&common.relevancy; </span><span name='relevancy_span'> </span>\r
-                                                                       </span>\r
-\r
-                                                                       <!-- Empty span used for creating unAPI links -->\r
-                                                                       <span class="hide_me">\r
-                                                                       <abbr style='padding-left: 8px;' name="unapi" class="unapi-id">\r
-                                                                               <!-- unAPI URI goes here -->\r
-                                                                       </abbr>\r
-                                                                       </span>\r
-\r
-                                                                       <!-- Empty span used for creating Google Book Search-->\r
-                                                                       <span name="googleBooksLink" class="hide_me">\r
-                                                                               <a style='padding-left: 8px;' class='classic_link hide_me' name="googleBooks-link">&result.googleBooks.browse;</a>\r
-                                                                       </span>\r
-                                                               </td>\r
-                                                               <td nowrap='nowrap' width="1" align="right">\r
-                 <div style="width:250px;text-align:left;"><div style="float:right;">\r
-                   <div style="border-bottom:1px dotted #ccc;padding-top:10px;" class="results_aux_utils"><a href="javascript:;" name="place_hold_link"><img src="/opac/skin/kcls/graphics/green_check.png" alt="place hold" /> <span style="position:relative;top:-3px;left:3px;">Place Hold</span></a></div>\r
-                   <div style="border-bottom:1px dotted #ccc;padding-top:6px;" class="results_aux_utils"><div style="position:absolute;"><div style="position:relative;top:5px; left: 25px;"><a title="Add to my list" name="result_my_list_link" href="javascript:;">Add to my list</a></div></div><a href="javascript:;" name="result_my_list_link_img"><img alt="add to my list" src="/opac/skin/kcls/graphics/clipboard.png" /></a></div>\r
-                   <div style="padding-top:7px;" class="results_aux_utils"><a title="Reviews and More" target="_blank" name="reviews_and_more" href="javascript:;"><img alt="reviews &amp; more" src="/opac/skin/kcls/graphics/starz.png" /> <span style="position:relative;top:-5px;">Reviews &amp; More</span></a></div>\r
-                 </div>\r
-             <div style="float:right;margin-right:17px;"><img alt="Format" class="hide_me" src="" name="result_mat_type" /></div></div>\r
-                                                               </td>\r
-                                                       </tr>\r
-                                                       \r
-                            <!-- Placeholder for ChiliFresh Review -->\r
-                            <tr class="hide_me" name="chilifreshReview">\r
-                                                               <td></td>\r
-                                <td valign="top" colspan="5">\r
-                                                                       <div style="position:relative;left:-19px;">\r
-                                        <span name="chilifreshReviewLink" class="chili_review"></span>\r
-                                        <div name="chilifreshReviewResult" style="display:none"></div>\r
-                                                                       </div>\r
-                                </td>\r
-                            </tr>\r
-                                                       \r
-                                                       <tr><td colspan="5"><div style="height:0px;border-top:1px solid #b7b7b7;border-bottom:1px solid #d4d4d4;margin:15px 0px;"></div><!-- <hr style="border-bottom:none;*height:0px;" color="#FFCC33" /> --></td></tr>\r
-                                               </tbody>\r
-                                       </table>\r
-                                       </td>\r
-                       </tr></tbody>\r
-         </table>\r
-       </td>\r
-  </tr></table>  \r
-</div>\r
-\r
-\r
-\r
-<div id='' xmlns:xi="http://www.w3.org/2001/XInclude" class="">\r
-\r
-       <table id='' style="width:100%;"> \r
-               <tbody id=''>\r
-                       <tr class="hide_me">\r
-                               <td class='result_table_row' width="100%">\r
-                                       <!--#include virtual="result_info.xml"-->\r
-                               </td>\r
-                       </tr>\r
-\r
-                       <!-- Template for displaying a search result.  This row template is cloned and inserted\r
-                                       for each result returned -->\r
-\r
-                       \r
-               </tbody>\r
-       </table>\r
-\r
-   <!-- ====================== -->\r
-   <div class="">\r
-   <table style='width: 100%;margin-top:20px;border-top:1px dotted #ccc;padding-top:8px;' id='result_info_2' class='hide_me'>\r
-      <tbody>\r
-                 <tr>\r
-                   <td valign="top">\r
-                   <span class='hide_me' id='result_info_div2' style='font-size: 11px;'>\r
-                      <span> &common.results; </span> \r
-                      <b id='offset_start2'> </b><span><![CDATA[&nbsp;]]>- </span>\r
-                      <b id='offset_end2'> </b><span><![CDATA[&nbsp;]]>&common.of; </span>\r
-                      <b id='result_count2'> </b>\r
-                      <span style='padding-left: 6px;'> (page </span>\r
-                      <span id='current_page2'> </span><span><![CDATA[&nbsp;]]>&common.of; </span>\r
-                      <span id='num_pages2'> </span>\r
-                   </span>\r
-                   </td>\r
-                <td valign="top" id='next_prev_links2' align="right">\r
-                               <span id='start_end_links_span2' class='hide_me'>\r
-                                 <a class='search_page_nav_link' id='prev_link2' title='&rdetail.page.previous;' style="cursor:pointer;"><span class="nav_arrow_fix">&#9668;</span> Previous</a>\r
-                                 <span id="nav_pages2" style='padding-left: 11px; padding-right:13px;'></span>\r
-                     <a class='search_page_nav_link' id='next_link2' title='&rdetail.page.next;' style="cursor:pointer;">Next <span class="nav_arrow_fix">&#9658;</span></a>\r
-                   </span>\r
-                </td>\r
-                 </tr>\r
-      </tbody>\r
-   </table>\r
-   </div>\r
-   <!-- ====================== -->\r
-\r
-\r
-    <!-- ChiliFresh setup -->\r
-    <!--if expr="${OILS_CHILIFRESH_ACCOUNT} && ${OILS_CHILIFRESH_ACCOUNT}!='(none)'"-->\r
-        <input type="hidden" id="chilifresh_account" name="chilifresh_account"\r
-            value="<!--#echo var='OILS_CHILIFRESH_ACCOUNT'-->" />\r
-        <input type="hidden" id="chilifresh_profile" name="chilifresh_profile"\r
-            value="<!--#echo var='OILS_CHILIFRESH_PROFILE'-->" />\r
-        <input type="hidden" id="chilifresh_version" name="chilifresh_version" value="onsite_v1" />\r
-        <input type="hidden" id="chilifresh_type" name="chilifresh_type" value="search" />\r
-    <!--endif-->\r
-</div>\r
-<![CDATA[<!-- ****************** end: result_table.xml ***************************** -->]]>\r
+<!-- Search results are spit into this table -->
+<![CDATA[<!-- ****************** result_table.xml ***************************** -->]]>
+<div id="result_table_div">
+  <table cellpadding="0" cellspacing="0" border="0" width="100%"><tr>
+    <td valign="top" width="1" style=""><!-- padding-right:20px; --><div class="hide_me"><div style="width:174px;" class="hide_me" id="tehSideBar"><!--#include virtual="../common/sidebar.xml"--></div></div></td>
+       <td style="" width="1"><!-- border-left:1px solid #e9ebf3;padding-right:27px; --></td>
+       <td valign="top">
+         <table id="res_table" cellpadding="0" cellspacing="0" border="0" width="100%" style="margin-top:10px;">
+               <tbody id="result_table"><tr id='result_table_template' class='hide_me'>
+                               <td class='result_table_row' align='left' width='100%'>
+                                       <table cellpadding="0" cellspacing="0" border="0" width="100%" class='result_table_subtable' id="results_table" style="border-collapse: collapse;">
+                                               <tbody class='result_table_subtbody'>
+                                                       <tr name='counts_row'>
+                                                               <td width="58" style="font-weight:bold;padding-left:10px;" valign="top" name="results_row_count">1.</td>
+                                                               <td class='result_table_pic_header' width="78" nowrap="nowrap" valign="top">
+                                                                       <span type='opac/slot-data' query='datafield[tag=020] subfield[code=a],datafield[tag=024] subfield[code=a]' templated='true'>
+                                                                               <span class='hide_me' type='opac/template-value' name='ident'>
+                                                                                       var content;
+                                                                                       for (var i = 0; item_list[i]; i++) {
+                                                                                               if (content = BT.textContent(item_list[i])) break; /* assignment */
+                                                                                       }
+                                                                                       return buildISBNSrc(plausible_ident(content));
+                                                                               </span>
+                                                                               <a><img alt="Image of item" name='item_jacket' class='result_table_pic' src='${ident}' /></a><br />
+                                                                       </span>
+
+                                                               </td>
+                                                               <td class='result_table_title_cell' name='result_table_title_cell' valign="top">
+                                                                 <div style="font-weight:bold;"><a title="&result.table.keyword;" name='item_title' class='search_link'></a></div>
+                                                                 <span style="font-size:11px;">
+                                                                       <div><em><a title="&result.table.author;" name='item_author' class='search_link'></a></em> <![CDATA[&nbsp;&nbsp;]]><span name="results_pub_date"></span></div>
+                                                                       <table cellpadding="0" cellspacing="0" border="0" class="results_info_table">
+                                                                         <tr><td nowrap="nowrap" valign="top" class="hide_me"><strong>Call number:</strong> </td><td> <span name="results_call_num"></span></td></tr>
+<!-- BILL -->
+                                   <tr name='bib_cn_list' class='result_table_title_cell'>
+                                       <td colspan='2'>
+                                           <span><strong>Call number:</strong></span>
+                                           <span type='opac/slot-data+marcxml' query='datafield[tag=092]'> </span>
+                                           <span type='opac/slot-data+marcxml' query='datafield[tag=099]'> </span>
+                                           <span type='opac/slot-data+marcxml' query='datafield[tag=998] subfield[code=d]' class='hide_me'>
+                                               <span type='opac/call-back+pre-render' class='hide_me'>
+                                                        var mattype = dojox.xml.parser.textContent(item_list[0]);
+                                                        var node = dojo.query('[name=result_mat_type]', /*OMG, must be better way*/
+                                                            slot.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode)[0];
+                                                        setFormatIcon(node, mattype);
+                                               </span>
+                                            </span>
+                                       </td>
+                                   </tr>
+<!-- BILL -->
+                                                                         <tr name="results_pub_tr" class="hide_me"><td valign="top"><strong>Publisher:</strong> </td><td> <span name="results_pub"></span></td></tr>
+                                                                         <tr name="results_isbn_tr" class="hide_me"><td valign="top"><strong>ISBN:</strong> </td><td> <span name="results_isbn"></span></td></tr>
+                                                                         <tr name="results_edition_tr" class="hide_me"><td valign="top"><strong>Edition:</strong> </td><td> <span name="results_edition"></span></td></tr>
+                                                                         <tr name="results_phys_desc_tr" class="hide_me"><td nowrap="nowrap" valign="top"><strong>Phys. Desc.:</strong> </td><td> <span name="results_phys_desc"></span></td></tr>
+                                                                       </table>
+                                                                       <div><span name="copy_holds"></span> <span name="copy_holds2"></span><br /><span name="copy_count_avail"></span> <!-- of <span name="copy_count"></span> on <span name="copy_count_total"></span> copies available--></div>
+                                                                 </span>
+                                                                 
+                                                                       <div class="hide_me">
+                                                                       <span name='result_table_extra_span' class='hide_me'>
+                                                                               <span name='result_table_pub_box' style='padding-left: 10px;'> 
+                                                                                       <span name='result_table_edition_span' style='padding-left: 10px;'></span> |
+                                                                                       <span name='result_table_pub_span'> </span> |
+                                                                                       <span name='result_table_phys_span'> </span>
+                                                                               </span>
+                                                                       </span>
+                                                                       </div>
+                                                               </td>
+
+                                                               <!-- Copy this td for each copy count appended -->
+                                                               <td nowrap='nowrap' name="copy_count_cell" class='copy_count_cell hide_me' width="1"> </td>
+
+                                                               <td name='result_table_format_cell' class='result_table_format_cell' align="center" width="1" style="padding:0px 10px;">
+                                                               
+                                                                       <img alt="Format" src="" class="hide_me" name="" />
+                                                                       <span class='hide_me' 
+                                                                               style='color: #9999FF; padding-left: 10px; font-size: 7pt; font-weight: 300;'> 
+                                                                               <span>&common.relevancy; </span><span name='relevancy_span'> </span>
+                                                                       </span>
+
+                                                                       <!-- Empty span used for creating unAPI links -->
+                                                                       <span class="hide_me">
+                                                                       <abbr style='padding-left: 8px;' name="unapi" class="unapi-id">
+                                                                               <!-- unAPI URI goes here -->
+                                                                       </abbr>
+                                                                       </span>
+
+                                                                       <!-- Empty span used for creating Google Book Search-->
+                                                                       <span name="googleBooksLink" class="hide_me">
+                                                                               <a style='padding-left: 8px;' class='classic_link hide_me' name="googleBooks-link">&result.googleBooks.browse;</a>
+                                                                       </span>
+                                                               </td>
+                                                               <td nowrap='nowrap' width="1" align="right">
+                 <div style="width:250px;text-align:left;"><div style="float:right;">
+                   <div style="border-bottom:1px dotted #ccc;padding-top:10px;" class="results_aux_utils"><a href="javascript:;" name="place_hold_link"><img src="/opac/skin/kcls/graphics/green_check.png" alt="place hold" /> <span style="position:relative;top:-3px;left:3px;">Place Hold</span></a></div>
+                   <div style="border-bottom:1px dotted #ccc;padding-top:6px;" class="results_aux_utils"><div style="position:absolute;"><div style="position:relative;top:5px; left: 25px;"><a title="Add to my list" name="result_my_list_link" href="javascript:;">Add to my list</a></div></div><a href="javascript:;" name="result_my_list_link_img"><img alt="add to my list" src="/opac/skin/kcls/graphics/clipboard.png" /></a></div>
+                   <div style="padding-top:7px;" class="results_aux_utils"><a title="Reviews and More" target="_blank" name="reviews_and_more" href="javascript:;"><img alt="reviews &amp; more" src="/opac/skin/kcls/graphics/starz.png" /> <span style="position:relative;top:-5px;">Reviews &amp; More</span></a></div>
+                 </div>
+             <div style="float:right;margin-right:17px;"><img alt="Format" class="hide_me" src="" name="result_mat_type" /></div></div>
+                                                               </td>
+                                                       </tr>
+                                                       
+                            <!-- Placeholder for ChiliFresh Review -->
+                            <tr class="hide_me" name="chilifreshReview">
+                                                               <td></td>
+                                <td valign="top" colspan="5">
+                                                                       <div style="position:relative;left:-19px;">
+                                        <span name="chilifreshReviewLink" class="chili_review"></span>
+                                        <div name="chilifreshReviewResult" style="display:none"></div>
+                                                                       </div>
+                                </td>
+                            </tr>
+                                                       
+                                                       <tr><td colspan="5"><div style="height:0px;border-top:1px solid #b7b7b7;border-bottom:1px solid #d4d4d4;margin:15px 0px;"></div><!-- <hr style="border-bottom:none;*height:0px;" color="#FFCC33" /> --></td></tr>
+                                               </tbody>
+                                       </table>
+                                       </td>
+                       </tr></tbody>
+         </table>
+       </td>
+  </tr></table>  
+</div>
+
+
+
+<div id='' xmlns:xi="http://www.w3.org/2001/XInclude" class="">
+
+       <table id='' style="width:100%;"> 
+               <tbody id=''>
+                       <tr class="hide_me">
+                               <td class='result_table_row' width="100%">
+                                       <!--#include virtual="result_info.xml"-->
+                               </td>
+                       </tr>
+
+                       <!-- Template for displaying a search result.  This row template is cloned and inserted
+                                       for each result returned -->
+
+                       
+               </tbody>
+       </table>
+
+   <!-- ====================== -->
+   <div class="">
+   <table style='width: 100%;margin-top:20px;border-top:1px dotted #ccc;padding-top:8px;' id='result_info_2' class='hide_me'>
+      <tbody>
+                 <tr>
+                   <td valign="top">
+                   <span class='hide_me' id='result_info_div2' style='font-size: 11px;'>
+                      <span> &common.results; </span> 
+                      <b id='offset_start2'> </b><span><![CDATA[&nbsp;]]>- </span>
+                      <b id='offset_end2'> </b><span><![CDATA[&nbsp;]]>&common.of; </span>
+                      <b id='result_count2'> </b>
+                      <span style='padding-left: 6px;'> (page </span>
+                      <span id='current_page2'> </span><span><![CDATA[&nbsp;]]>&common.of; </span>
+                      <span id='num_pages2'> </span>
+                   </span>
+                   </td>
+                <td valign="top" id='next_prev_links2' align="right">
+                               <span id='start_end_links_span2' class='hide_me'>
+                                 <a class='search_page_nav_link' id='prev_link2' title='&rdetail.page.previous;' style="cursor:pointer;"><span class="nav_arrow_fix">&#9668;</span> Previous</a>
+                                 <span id="nav_pages2" style='padding-left: 11px; padding-right:13px;'></span>
+                     <a class='search_page_nav_link' id='next_link2' title='&rdetail.page.next;' style="cursor:pointer;">Next <span class="nav_arrow_fix">&#9658;</span></a>
+                   </span>
+                </td>
+                 </tr>
+      </tbody>
+   </table>
+   </div>
+   <!-- ====================== -->
+
+
+    <!-- ChiliFresh setup -->
+    <!--if expr="${OILS_CHILIFRESH_ACCOUNT} && ${OILS_CHILIFRESH_ACCOUNT}!='(none)'"-->
+        <input type="hidden" id="chilifresh_account" name="chilifresh_account"
+            value="<!--#echo var='OILS_CHILIFRESH_ACCOUNT'-->" />
+        <input type="hidden" id="chilifresh_profile" name="chilifresh_profile"
+            value="<!--#echo var='OILS_CHILIFRESH_PROFILE'-->" />
+        <input type="hidden" id="chilifresh_version" name="chilifresh_version" value="onsite_v1" />
+        <input type="hidden" id="chilifresh_type" name="chilifresh_type" value="search" />
+    <!--endif-->
+</div>
+<![CDATA[<!-- ****************** end: result_table.xml ***************************** -->]]>
index 2cfa9a1..2430415 100644 (file)
@@ -1,49 +1,49 @@
-\r
-<![CDATA[<!-- ****************** top_nav.xml ***************************** -->]]>\r
-<div id="header">\r
-  <div style="float:left;"><a href="http://www.kcls.org"><img alt="KCLS Logo" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/KCLS_logo_horiz.gif" /></a></div>\r
-  <div style="float:right;">\r
-    <div id="your-acct-login" class="hide_me"><a href="javascript:void(0);" id="home_myopac_link"><img alt="Your Account Log in" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/login-btn.png" onmouseover="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/login-btn-hover.png';" onmouseout="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/login-btn.png';" /></a></div>\r
-\r
-       <div id="dash_wrapper" class="hide_me">\r
-         <div style="float:right;">\r
-               <table cellpadding="0" cellspacing="0" border="0"><tr>\r
-                 <td><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-corner-left1.png" /></td>\r
-                 <td valign="top" style="background:url('<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-corner-mid1.png') repeat-x; padding-left:8px;">\r
-                   <span style="position:relative;top:10px;"><span id="dash_user"></span></span>\r
-                 </td>\r
-                 <td style="background:url('<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-corner-mid1.png') repeat-x;padding:0px 8px 0px 10px;"><img style="position:relative;top:-1px;" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-divider.jpg" /></td>\r
-                 <td valign="top" style="background:url('<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-corner-mid1.png') repeat-x;">\r
-                   <a href="javascript:;" id="myopac_link" style="position:relative;top:4px;"><img alt="My Account" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/acct-btn.png" onmouseover="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/acct-btn-hover.png';" onmouseout="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/acct-btn.png';" /></a>\r
-                       <a href="javascript:;" onclick="doLogout()" style="position:relative;top:4px;left:1px;"><img alt="Logout" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/logout-btn.png" onmouseover="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/logout-btn-hover.png';" onmouseout="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/logout-btn.png';" /></a>\r
-                 </td>\r
-                 <td><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-corner-right1.png" /></td>\r
-               </tr></table>\r
-         </div>\r
-         <div id="dashboard">\r
-          <div style="position:absolute;"><div style="position:relative;top:4px;">\r
-               <table cellpadding="0" cellspacing="0" border="0"><tr>\r
-                 <td><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-corner-left2.png" /></td>\r
-                 <td valign="top" width="372" style="background:url('<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-corner-mid2.png') repeat-x;">\r
-                  <div style="position:relative;top:6px;">\r
-                       <div style="position:absolute;"><div style="position:relative;left:3px;"><div style="text-align:right;width:86px;"><span id="dash_checked" style="color:#ffcc33;">0</span> Checked Out</div></div></div>\r
-                       <div style="position:absolute;"><div style="position:relative;left:100px;"><div style="text-align:right;width:62px;"><span id="dash_holds" style="color:#ffcc33;">0</span> On Hold</div></div></div>\r
-                       <div style="position:absolute;"><div style="position:relative;left:170px;"><div style="text-align:right;width:111px;"><span id="dash_pickup" style="color:#1dd93c;">0</span> Ready for Pickup</div></div></div>\r
-                       <div style="position:absolute;"><div style="position:relative;left:284px;"><div style="text-align:right;width:76px;"><span id="dash_fines">No</span> Fines</div></div></div>\r
-                  </div>\r
-                 </td>\r
-                 <td><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-corner-right2.png" /></td>\r
-               </tr></table>\r
-          </div></div>\r
-         </div>\r
-       </div>\r
-\r
-  </div>\r
-  <div style="clear:both;height:0px;margin:0px;padding:0px;"></div>\r
-</div>\r
-<div style="height:24px;background:#252525;">\r
-  <div id="gold-links">\r
-  <![CDATA[<div id="header-links"><a href="http://www.kcls.org/usingthelibrary/index.cfm">Using the Library</a><a href="http://www.kcls.org/booksandreading/">Books &amp; Reading</a><a href="http://www.kcls.org/research/index.cfm">Research &amp; Homework</a><a href="http://www.kcls.org/programs/">Programs &amp; Classes</a><a href="http://www.kcls.org/events/">Events</a><a href="/opac/extras/mobile/">Mobile Catalog</a><a href="http://www.kcls.org/about/">About KCLS</a></div>]]>\r
-  </div>\r
-</div>\r
-<![CDATA[<!-- ****************** end: top_nav.xml ***************************** -->]]>\r
+
+<![CDATA[<!-- ****************** top_nav.xml ***************************** -->]]>
+<div id="header">
+  <div style="float:left;"><a href="http://www.kcls.org"><img alt="KCLS Logo" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/KCLS_logo_horiz.gif" /></a></div>
+  <div style="float:right;">
+    <div id="your-acct-login" class="hide_me"><a href="javascript:void(0);" id="home_myopac_link"><img alt="Your Account Log in" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/login-btn.png" onmouseover="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/login-btn-hover.png';" onmouseout="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/login-btn.png';" /></a></div>
+
+       <div id="dash_wrapper" class="hide_me">
+         <div style="float:right;">
+               <table cellpadding="0" cellspacing="0" border="0"><tr>
+                 <td><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-corner-left1.png" /></td>
+                 <td valign="top" style="background:url('<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-corner-mid1.png') repeat-x; padding-left:8px;">
+                   <span style="position:relative;top:10px;"><span id="dash_user"></span></span>
+                 </td>
+                 <td style="background:url('<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-corner-mid1.png') repeat-x;padding:0px 8px 0px 10px;"><img style="position:relative;top:-1px;" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-divider.jpg" /></td>
+                 <td valign="top" style="background:url('<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-corner-mid1.png') repeat-x;">
+                   <a href="javascript:;" id="myopac_link" style="position:relative;top:4px;"><img alt="My Account" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/acct-btn.png" onmouseover="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/acct-btn-hover.png';" onmouseout="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/acct-btn.png';" /></a>
+                       <a href="javascript:;" onclick="doLogout()" style="position:relative;top:4px;left:1px;"><img alt="Logout" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/logout-btn.png" onmouseover="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/logout-btn-hover.png';" onmouseout="this.src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/logout-btn.png';" /></a>
+                 </td>
+                 <td><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-corner-right1.png" /></td>
+               </tr></table>
+         </div>
+         <div id="dashboard">
+          <div style="position:absolute;"><div style="position:relative;top:4px;">
+               <table cellpadding="0" cellspacing="0" border="0"><tr>
+                 <td><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-corner-left2.png" /></td>
+                 <td valign="top" width="372" style="background:url('<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-corner-mid2.png') repeat-x;">
+                  <div style="position:relative;top:6px;">
+                       <div style="position:absolute;"><div style="position:relative;left:3px;"><div style="text-align:right;width:86px;"><span id="dash_checked" style="color:#ffcc33;">0</span> Checked Out</div></div></div>
+                       <div style="position:absolute;"><div style="position:relative;left:100px;"><div style="text-align:right;width:62px;"><span id="dash_holds" style="color:#ffcc33;">0</span> On Hold</div></div></div>
+                       <div style="position:absolute;"><div style="position:relative;left:170px;"><div style="text-align:right;width:111px;"><span id="dash_pickup" style="color:#1dd93c;">0</span> Ready for Pickup</div></div></div>
+                       <div style="position:absolute;"><div style="position:relative;left:284px;"><div style="text-align:right;width:76px;"><span id="dash_fines">No</span> Fines</div></div></div>
+                  </div>
+                 </td>
+                 <td><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/dash-corner-right2.png" /></td>
+               </tr></table>
+          </div></div>
+         </div>
+       </div>
+
+  </div>
+  <div style="clear:both;height:0px;margin:0px;padding:0px;"></div>
+</div>
+<div style="height:24px;background:#252525;">
+  <div id="gold-links">
+  <![CDATA[<div id="header-links"><a href="http://www.kcls.org/usingthelibrary/index.cfm">Using the Library</a><a href="http://www.kcls.org/booksandreading/">Books &amp; Reading</a><a href="http://www.kcls.org/research/index.cfm">Research &amp; Homework</a><a href="http://www.kcls.org/programs/">Programs &amp; Classes</a><a href="http://www.kcls.org/events/">Events</a><a href="/opac/extras/mobile/">Mobile Catalog</a><a href="http://www.kcls.org/about/">About KCLS</a></div>]]>
+  </div>
+</div>
+<![CDATA[<!-- ****************** end: top_nav.xml ***************************** -->]]>