initial load of current skin
authorBill Erickson <berick@esilibrary.com>
Mon, 7 Feb 2011 20:52:24 +0000 (15:52 -0500)
committerBill Erickson <berick@esilibrary.com>
Mon, 7 Feb 2011 20:52:24 +0000 (15:52 -0500)
257 files changed:
Open-ILS/web/opac/skin/kcls/css/EricKCLSTest.css [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/css/contentslider.css [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/css/layout.css [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/css/style.css [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/KCLS_logo_horiz.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct-btn-hover.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct-btn.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct_checked_out_off.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct_checked_out_on.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct_favs_off.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct_favs_on.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct_holds_off.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct_holds_on.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct_lists_off.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct_lists_on.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct_prefs_off.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct_prefs_on.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct_sum_fines_bl.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct_sum_fines_br.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct_sum_fines_tl.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct_sum_fines_tr.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct_summary_off.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/acct_summary_on.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/add_mylist.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/add_mylist_sel.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/add_mylist_sel.kcls.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/add_search_row_btn.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/adv_search.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/adv_search_hover.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/adv_search_off.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/adv_search_on.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/another_search.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/another_search_hover.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/arrow-down.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/arrow-right.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/arrow-right.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/asknow_available.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/banner-bg.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/banner1.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/btnCancel.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/btnSubmit.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/button-bg.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/cancel_btn.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/cd-small.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/clipboard.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/dash-corner-left1.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/dash-corner-left2.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/dash-corner-mid1.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/dash-corner-mid2.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/dash-corner-right1.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/dash-corner-right2.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/dash-divider.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/dropdown-hover.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/dropdown.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/expert_search_off.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/expert_search_on.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/faqs-btn.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/go-btn-hover.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/go-btn.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/go_but_long.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/golive.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/gray-arrow.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/green_check.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/header_left.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/header_right.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/hp-links-left.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/hp-links-mid.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/hp-links-right.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/locations.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/login-bg.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/login-bg2.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/login-box-bg.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/login-btn-hover.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/login-btn.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/login-btn.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/login-btn2.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/logout-btn-hover.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/logout-btn.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_3dobject.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_book.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_bookoncassette.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_bookoncassettecd.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_bookoncd.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_cassettewithbook.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_cdrom.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_cdwithbook.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_downloadebook.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_downloadmusic.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_downloadvideo.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_dvd.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_eaudio.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_ebooktext.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_equipment.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_films.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_games.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_kit.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_language.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_largeprint.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_magazines.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_map.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_microform.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_musiccassete.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_musiccassette.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_musiccd.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_musicrecord.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_newspaper.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_online.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_onlinejournal.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_podcasts.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_printedmusic.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_projectedmedia.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_sheetmusic.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_slide.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_software.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_streamingaudio.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_streamingvideo.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/media_vhs.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/num_search_off.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/num_search_on.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/one_land.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/pay-fines-btn-hover.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/pay-fines-btn.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/pay_fines_btn.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/place_hold.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/plus_sign.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/projectedmedia.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/question-mark.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/questions.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/rdetail_arrow.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/reset_form_btn.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/reviews.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/save-btn.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/save_btn.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/search_btn.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/starz.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/sub_checked_hist_off.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/sub_checked_hist_on.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/sub_checked_out_off.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/sub_checked_out_on.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/sub_holds_hist_off.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/sub_holds_hist_on.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/sub_holds_off.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/sub_holds_on.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_info_off.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_info_on.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_notify_off.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_notify_on.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_search_off.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_search_on.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/submit_btn.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/tool_back.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/tool_back.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/tool_font.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/tool_forward.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/tool_forward.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/tool_help.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/tool_help.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/tool_home.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/tool_home.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/tool_mail.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/tool_print.gif [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/tool_print.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/utils-corner-left.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/utils-corner-mid.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/utils-corner-right.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/utils-corner-right.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/utils-corner.jpg [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/view_my_list.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/graphics/view_my_list_hover.png [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/adv_global.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/advanced.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/cn_browse.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/combined.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/container.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/contentslider.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/copy_details.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/depth_selector.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/fgi-search_bar.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/holds.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/miker-search_bar.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/misc.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/mresult.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/myopac.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/password_reset.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/rdetail.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/result_common.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/rresult.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/search_bar.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/sidebar.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/sidebar_extras.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/js/tips.js [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/advanced.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/advanced/adv_global_row - Copy.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/advanced/adv_global_row.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/advanced/advanced_global.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/advanced/advanced_marc.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/advanced/advanced_quick.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/body.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/cnbrowse.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/altcanvas.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/cn_browse.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/css_common.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/fonts.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/format_selector.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/holds.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/ilsevents.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/js_common.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/js_common.xml.2010_11_12_bill [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/js_common_postbody.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/js_shared.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/libselect.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/login.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/logo.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/mylist.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/orgtree.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/searchbar.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/sidebar.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/statusbar.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/stypes_selector.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/common/tips.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/footer.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/header.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/home/homesearch.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/home/index_body.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/home/slideshow.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/html_xsl.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/index.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/mresult.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/myopac.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_bookbags.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_checked.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_fines.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_holds.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_prefs.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_summary.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/page_advanced.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/page_cnbrowse.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/page_mresult.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/page_myopac.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/page_rdetail.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/page_rresult.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/rdetail.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_altcanvas.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_cn_details.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_copyinfo.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_extras.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_summary.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/result/filtersort.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/result/result_common.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/result/result_header.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/result/result_info.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/result/result_lowhits.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/result/result_table.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/rresult.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/setenv.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/top_nav.xml [new file with mode: 0644]
Open-ILS/web/opac/skin/kcls/xml/utils.xml [new file with mode: 0644]

diff --git a/Open-ILS/web/opac/skin/kcls/css/EricKCLSTest.css b/Open-ILS/web/opac/skin/kcls/css/EricKCLSTest.css
new file mode 100644 (file)
index 0000000..32f43f8
--- /dev/null
@@ -0,0 +1,2 @@
+Please feel free to delete, only for testing purposes.\r
+Test2\r
diff --git a/Open-ILS/web/opac/skin/kcls/css/contentslider.css b/Open-ILS/web/opac/skin/kcls/css/contentslider.css
new file mode 100644 (file)
index 0000000..64a6d25
--- /dev/null
@@ -0,0 +1,39 @@
+.sliderwrapper{
+position: relative; /*leave as is*/
+overflow: hidden; /*leave as is*/
+width: 675px; /*width of featured content slider*/
+height: 213px;
+}
+
+
+
+.sliderwrapper .contentdiv{
+visibility: hidden; /*leave as is*/
+position: absolute; /*leave as is*/ 
+left: 0;  /*leave as is*/
+top: 0;  /*leave as is*/
+width: 675px; /*width of content DIVs within slider. Total width should equal slider's inner width (390+5+5=400) */
+height: 100%;
+filter:progid:DXImageTransform.Microsoft.alpha(opacity=100);
+-moz-opacity: 1;
+opacity: 1;
+}
+
+.pagination{
+width: 400px; /*Width of pagination DIV. Total width should equal slider's outer width (400+10+10=420)*/
+text-align: right;
+background-color: navy;
+padding: 5px 10px;
+}
+
+.pagination a{
+padding: 0 5px;
+text-decoration: none; 
+color: #00007D;
+background: white;
+}
+
+.pagination a:hover, .pagination a.selected{
+color: #000;
+background-color: #FEE496;
+}
\ No newline at end of file
diff --git a/Open-ILS/web/opac/skin/kcls/css/layout.css b/Open-ILS/web/opac/skin/kcls/css/layout.css
new file mode 100644 (file)
index 0000000..c17ea59
--- /dev/null
@@ -0,0 +1,247 @@
+body { margin: 6px; }
+body { background-color: white; }
+
+.main_header   { width: 100%; }
+.space                 { padding-right:5px; }
+.vert_space            { padding-top: 82px; width: 100%;}
+.right                 { position:absolute; right: 0px; }
+.hide_me                       { display:none; visibility: hidden; }
+
+table { border-collapse: collapse; }
+
+/* generic CSS for a table with data */
+.data_grid { font-weight: 500; border-collapse: collapse;}
+.data_grid thead tr { }
+.data_grid thead td { padding-right: 5px; padding-left: 5px;}
+.data_grid tbody td { padding: 5px; }
+.data_grid_center { text-align: center; }
+
+.data_grid_nb { font-weight: 500; border-collapse: collapse;}
+.data_grid_nb thead tr { color: #000000; }
+.data_grid_nb thead td { padding-right: 5px; padding-left: 5px;}
+.data_grid_nb tbody td { padding: 5px; }
+
+
+.classic_link { text-decoration: underline; color: black;}
+.classic_link:visited { text-decoration: underline; color: black;}
+.classic_link_col { text-decoration: underline; color: red;}
+
+.encircled { border: 1px solid black; }
+
+
+.adv_quick_search { padding: 3px;}
+.adv_quick_search_submit { padding: 3px;}
+
+.overdue { color: red; font-weight: bold;}
+
+#main_table { border-collapse: collapse; width: 100%;  }
+#main_left_cell { width: 20%; vertical-align: top;margin: 0px; padding: 0px;}
+#main_right_cell { width: 80%; vertical-align: top; margin: 0px; padding:0px;}
+
+
+#content { min-height: 300px; }
+
+.canvas {  min-height: 300px; padding-left: 4px; -moz-border-radius: 6px;}
+#canvas_main { padding-bottom: 4px; }
+
+#loading_div { width: 100%;}
+
+
+
+.shadowed { background: #F0F0E0; }
+.no_copies { background: #E0E0E0; }
+.overdue_circ { border: 2px dashed #F0D0E0; }
+
+.org_tree { padding-left: 2px; padding-right: 2px; }            
+.org_link { padding-right: 15px; }
+#org_link_container { margin-bottom: 5px; padding-left: 4px; padding-bottom: 3px; padding-top: 3px; width: 100%; }
+#left_div { float:left; width: 20%; }
+#statusbar {}
+
+#frontsearch_table { }
+#frontsearch_table tr { margin: 6px; }
+
+/* ---------------------------------------------------------------------- */
+.sidebar_div { width: 100%; font-size: 9pt; margin-top: 12px; }
+.sidebar_header { margin-top: 10px; padding-left: 3px; margin-right: 6px; }
+
+.sidebar_extra_item { padding: 0px; margin-right: 8px;}
+.side_bar_item { padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px; margin-right: 8px; }
+
+.sidebar_item_active { margin-right: 0px; }
+
+.sidebar_chunk { width: 100%; }
+
+/* ---------------------------------------------------------------------- */
+
+#searchbar { margin-top: 22px; width: 100%; }
+#searchbar table tr td {font-weight: bold; font-size: 8pt; }
+#searchbar select, input { border-collapse: collapse; font-size: 9pt; }
+.searchbar_item { margin: 3px; font-size: 9pt; } 
+.searchbar_label_span { font-size: 9pt; }
+#searchbar_table { border-collapse: collapse; }
+
+.search_box_container { width: 240px; padding: 3px; }/* border: 1px solid #A0A0A0;' class='color_2'>*/
+#search_box { width: 260px; }
+
+
+/* ---------------------------------------------------------------------- */
+#login_box { width: 70%; padding: 5px;}
+.login_text { margin-left: 8px; }
+
+/* ---------------------------------------------------------------------- */
+#result_table_div { text-align: left; width: 100%; }
+
+#search_nav_links { width: 100%; }
+#result_info_box { text-align: left; }
+#next_prev_links { padding-left: 2px; padding-right: 2px; text-align: left;}
+#goto_page_links { text-align: left; padding-left: 2px; padding-right: 2px;}
+
+#next_prev_links_dead {padding-left: 5px; padding-right: 5px;}
+
+#res_table { width: 100%; }
+
+.result_table_pic_cell { width: 43px;}
+.result_table_pic { height: 50px; width: 40px;  border: none;}
+.result_table_pic_header { width: 43px; }
+
+.result_table_row { text-align: left; width: 100%;}
+.result_table_subtable { width: 100%; border-collapse: collapse; vertical-align: top;}
+.result_table_subtbody { height: 100%; width: 100%; }
+.result_table_title_cell { text-align: left; }
+
+.copy_count_cell { width: 12%; vertical-align: middle; text-align: center; }
+.copy_count_div { width:  4em; height: 99%; vertical-align: middle; text-align: center; }
+
+.search_page_nav_link { margin-right: 5px; }
+
+.np_nav_link { margin-right: 5px; }
+
+/* ---------------------------------------------------------------------- */
+
+#rdetail_detail_main { width: 100%; }
+#rdetail_details_table { padding-top: 10px; width: 100%; padding: 30px; border-collapse: collapse;}
+.rdetail_header { padding: 3px; padding-left: 10px;}
+.rdetail_desc { padding: 2px; padding-left: 2px; padding-right: 2px;}
+.rdetail_item { width: 75%; padding-left: 10px; }
+#rdetail_image { padding-right: 10px; }
+#rdetail_copy_info_table { padding: 4px; width: 100%; border-collapse: collapse; }
+.rdetail_copy_info_header_cell { padding: 2px; }
+.rdetail_copy_count_cell { text-align: center; }
+
+
+.tor_pic { width: 17px; height: 17px; border: none;}
+
+.dim2_border { border: 1px solid #F06000; -moz-border-radius: 3px;}
+
+.dim2 { 
+       filter:alpha(opacity=50); 
+       -moz-opacity:0.5; 
+       opacity: 0.5; 
+       text-decoration: none; }
+
+.dim { 
+       filter:alpha(opacity=10); 
+       -moz-opacity:0.1; 
+       opacity: 0.1; 
+       text-decoration: none; }
+
+/* ---------------------------------------------------------------------- */
+
+.myopac_link { width: 12%; margin: 3px; padding: 3px; text-align: center; vertical-align: middle;  }
+.myopac_link_active { font-weight: 700;}
+.myopac_table thead tr td { padding: 2px; font-weight: 500; border: 1px solid #808080;}
+.myopac_table td { padding: 3px; }
+.myopac_form_pic { width: 20px; height: 20px; }
+
+.tips { padding: 2px; text-align: center; border: solid #E0E0E0 3px; -moz-border-radius: 3px; width: 99%; }
+
+.holds_cell { border: 1px solid #E0E0E0; padding: 5px; width: 50%;}
+.myopac_update_cell { border: 3px solid #E0E0E0; width:100%; padding-top: 4px; padding-bottom: 4px;}
+.myopac_update_span { padding: 5px;}
+
+.lowhits_div { width: 100%; border-top: 1px solid #E0E0E0; text-align: center; 
+       padding-top: 8px; padding-bottom: 8px; }
+
+.rdetail_extras_div {
+       border-top: 3px solid #E0E0E0;margin-top: 3px; padding-top: 5px; width: 100%;}
+
+.copy_info_region_row {
+       padding: 6px;
+       border: 2px solid #E0E0E0;
+       font-weight: 600;
+}
+
+.rdetail_extras_td { padding-right: 15px; padding-left: 15px; border-right: 1px solid #888; }
+.rdetails_extra_links { border: 1px solid #808080; padding-right: 5px; padding-left: 5px; }
+
+
+.cn_browse_item { height: 190px; }
+.cn_browse_info { padding: 4px; border-bottom: 1px dashed #E0E0E0;}
+
+.bookshelf {
+        /*background-image: url(http://10.4.0.10/woodgrain.jpeg);*/
+        /*
+        background-image: url(http://dev.gapines.org/opac/images/woodgrain.jpg);
+        background-repeat: repeat;
+        */
+        border-bottom: 1px solid black;
+}
+
+.cn_browse_loading { width: 95%; padding: 15px; text-align: center; background: #E0F0E0; }
+
+.cn_browse_home_cn { border: 2px solid #E0F0E0; background: green; font-weight: 700;}
+
+.rdetail_context_row { background: #F0E0E0; }
+
+.unadorned_link { text-decoration: none; vertical-align: bottom; }
+
+
+/* ie does not support disabling <option> elements */
+.disabled_option { color: #808080; }
+
+.copy_more_info { padding-left: 6px; color: #804070; }
+
+.invalid_hold { background: #F0F0D0; }
+.myopac_summary_table td { padding : 3px; }
+
+.jacket_attrib { font-size: 7pt; }
+
+/* block that contains footer links and copyright */
+#copyright_block { 
+    width: 100%; 
+    text-align: center; 
+    vertical-align: bottom; 
+    margin-top: 10px;
+}
+
+/* block that contains the footer links */
+#footer_links {
+    width: 80%;
+    text-align: center;
+    padding: 10px;
+    margin: auto;
+}
+
+/* span for each link in the footer */
+.footer-link {
+    margin-left: 10px;
+    margin-right: 10px;
+}
+
+/* block that contains the copyright text */
+#copyright_text {
+    margin-top: 4px;
+}
+
+/* block that contains the logo */
+#footer_logo {
+    text-align: center;
+    margin: auto;
+}
+
+#opac.result.sort { margin-left: 5px; }
+
+#xul_recipient_me { margin-left: 25px; }
+#myopac_holds_thaw_date_form {padding: 10px; text-align: center;}
+#myopac_holds_freeze_select_thaw {margin-right: 100px; margin-left: 100px; }
diff --git a/Open-ILS/web/opac/skin/kcls/css/style.css b/Open-ILS/web/opac/skin/kcls/css/style.css
new file mode 100644 (file)
index 0000000..0668f2e
--- /dev/null
@@ -0,0 +1,866 @@
+@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 {\r
+       height:33px;\r
+       width:974px;\r
+       margin:auto;\r
+}\r
+\r
+#acct_tabs a {\r
+       float: left;\r
+       display: block;\r
+       height:33px;\r
+       margin-right:7px;\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-top:15px;\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: 0px 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 {\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
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/KCLS_logo_horiz.gif b/Open-ILS/web/opac/skin/kcls/graphics/KCLS_logo_horiz.gif
new file mode 100644 (file)
index 0000000..8e1d56e
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/KCLS_logo_horiz.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct-btn-hover.png b/Open-ILS/web/opac/skin/kcls/graphics/acct-btn-hover.png
new file mode 100644 (file)
index 0000000..1e6e20a
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct-btn-hover.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct-btn.png b/Open-ILS/web/opac/skin/kcls/graphics/acct-btn.png
new file mode 100644 (file)
index 0000000..c9b92cd
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct-btn.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct_checked_out_off.gif b/Open-ILS/web/opac/skin/kcls/graphics/acct_checked_out_off.gif
new file mode 100644 (file)
index 0000000..dcfcfcb
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct_checked_out_off.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct_checked_out_on.gif b/Open-ILS/web/opac/skin/kcls/graphics/acct_checked_out_on.gif
new file mode 100644 (file)
index 0000000..f364d38
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct_checked_out_on.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct_favs_off.gif b/Open-ILS/web/opac/skin/kcls/graphics/acct_favs_off.gif
new file mode 100644 (file)
index 0000000..5ffc024
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct_favs_off.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct_favs_on.gif b/Open-ILS/web/opac/skin/kcls/graphics/acct_favs_on.gif
new file mode 100644 (file)
index 0000000..f96342a
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct_favs_on.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct_holds_off.gif b/Open-ILS/web/opac/skin/kcls/graphics/acct_holds_off.gif
new file mode 100644 (file)
index 0000000..6179396
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct_holds_off.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct_holds_on.gif b/Open-ILS/web/opac/skin/kcls/graphics/acct_holds_on.gif
new file mode 100644 (file)
index 0000000..d1c75bb
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct_holds_on.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct_lists_off.gif b/Open-ILS/web/opac/skin/kcls/graphics/acct_lists_off.gif
new file mode 100644 (file)
index 0000000..9a5b2a2
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct_lists_off.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct_lists_on.gif b/Open-ILS/web/opac/skin/kcls/graphics/acct_lists_on.gif
new file mode 100644 (file)
index 0000000..668b0c9
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct_lists_on.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct_prefs_off.gif b/Open-ILS/web/opac/skin/kcls/graphics/acct_prefs_off.gif
new file mode 100644 (file)
index 0000000..c357add
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct_prefs_off.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct_prefs_on.gif b/Open-ILS/web/opac/skin/kcls/graphics/acct_prefs_on.gif
new file mode 100644 (file)
index 0000000..67d1f47
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct_prefs_on.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct_sum_fines_bl.png b/Open-ILS/web/opac/skin/kcls/graphics/acct_sum_fines_bl.png
new file mode 100644 (file)
index 0000000..d750579
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct_sum_fines_bl.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct_sum_fines_br.png b/Open-ILS/web/opac/skin/kcls/graphics/acct_sum_fines_br.png
new file mode 100644 (file)
index 0000000..8aa81f0
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct_sum_fines_br.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct_sum_fines_tl.png b/Open-ILS/web/opac/skin/kcls/graphics/acct_sum_fines_tl.png
new file mode 100644 (file)
index 0000000..17051c9
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct_sum_fines_tl.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct_sum_fines_tr.png b/Open-ILS/web/opac/skin/kcls/graphics/acct_sum_fines_tr.png
new file mode 100644 (file)
index 0000000..fb9dac3
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct_sum_fines_tr.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct_summary_off.gif b/Open-ILS/web/opac/skin/kcls/graphics/acct_summary_off.gif
new file mode 100644 (file)
index 0000000..63456c1
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct_summary_off.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/acct_summary_on.gif b/Open-ILS/web/opac/skin/kcls/graphics/acct_summary_on.gif
new file mode 100644 (file)
index 0000000..99d4990
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/acct_summary_on.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/add_mylist.gif b/Open-ILS/web/opac/skin/kcls/graphics/add_mylist.gif
new file mode 100644 (file)
index 0000000..a30b32d
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/add_mylist.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/add_mylist_sel.gif b/Open-ILS/web/opac/skin/kcls/graphics/add_mylist_sel.gif
new file mode 100644 (file)
index 0000000..0448d21
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/add_mylist_sel.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/add_mylist_sel.kcls.gif b/Open-ILS/web/opac/skin/kcls/graphics/add_mylist_sel.kcls.gif
new file mode 100644 (file)
index 0000000..45bd8b6
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/add_mylist_sel.kcls.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/add_search_row_btn.gif b/Open-ILS/web/opac/skin/kcls/graphics/add_search_row_btn.gif
new file mode 100644 (file)
index 0000000..a48e68c
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/add_search_row_btn.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/adv_search.png b/Open-ILS/web/opac/skin/kcls/graphics/adv_search.png
new file mode 100644 (file)
index 0000000..79fb08a
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/adv_search.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/adv_search_hover.png b/Open-ILS/web/opac/skin/kcls/graphics/adv_search_hover.png
new file mode 100644 (file)
index 0000000..0cb3fe1
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/adv_search_hover.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/adv_search_off.gif b/Open-ILS/web/opac/skin/kcls/graphics/adv_search_off.gif
new file mode 100644 (file)
index 0000000..a129b93
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/adv_search_off.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/adv_search_on.gif b/Open-ILS/web/opac/skin/kcls/graphics/adv_search_on.gif
new file mode 100644 (file)
index 0000000..d0faa4f
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/adv_search_on.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/another_search.png b/Open-ILS/web/opac/skin/kcls/graphics/another_search.png
new file mode 100644 (file)
index 0000000..4bcd214
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/another_search.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/another_search_hover.png b/Open-ILS/web/opac/skin/kcls/graphics/another_search_hover.png
new file mode 100644 (file)
index 0000000..08efaf5
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/another_search_hover.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/arrow-down.gif b/Open-ILS/web/opac/skin/kcls/graphics/arrow-down.gif
new file mode 100644 (file)
index 0000000..ebf64c4
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/arrow-down.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/arrow-right.gif b/Open-ILS/web/opac/skin/kcls/graphics/arrow-right.gif
new file mode 100644 (file)
index 0000000..6c82655
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/arrow-right.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/arrow-right.png b/Open-ILS/web/opac/skin/kcls/graphics/arrow-right.png
new file mode 100644 (file)
index 0000000..232a5e4
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/arrow-right.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/asknow_available.gif b/Open-ILS/web/opac/skin/kcls/graphics/asknow_available.gif
new file mode 100644 (file)
index 0000000..326c8d1
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/asknow_available.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/banner-bg.png b/Open-ILS/web/opac/skin/kcls/graphics/banner-bg.png
new file mode 100644 (file)
index 0000000..6d990c5
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/banner-bg.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/banner1.jpg b/Open-ILS/web/opac/skin/kcls/graphics/banner1.jpg
new file mode 100644 (file)
index 0000000..28eaafc
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/banner1.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/btnCancel.png b/Open-ILS/web/opac/skin/kcls/graphics/btnCancel.png
new file mode 100644 (file)
index 0000000..4cfacaf
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/btnCancel.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/btnSubmit.png b/Open-ILS/web/opac/skin/kcls/graphics/btnSubmit.png
new file mode 100644 (file)
index 0000000..7a67408
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/btnSubmit.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/button-bg.png b/Open-ILS/web/opac/skin/kcls/graphics/button-bg.png
new file mode 100644 (file)
index 0000000..38390aa
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/button-bg.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/cancel_btn.gif b/Open-ILS/web/opac/skin/kcls/graphics/cancel_btn.gif
new file mode 100644 (file)
index 0000000..1cebf59
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/cancel_btn.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/cd-small.png b/Open-ILS/web/opac/skin/kcls/graphics/cd-small.png
new file mode 100644 (file)
index 0000000..d2f8fb4
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/cd-small.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/clipboard.png b/Open-ILS/web/opac/skin/kcls/graphics/clipboard.png
new file mode 100644 (file)
index 0000000..b4bf071
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/clipboard.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-left1.png b/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-left1.png
new file mode 100644 (file)
index 0000000..9559e8b
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-left1.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-left2.png b/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-left2.png
new file mode 100644 (file)
index 0000000..5bc8112
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-left2.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-mid1.png b/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-mid1.png
new file mode 100644 (file)
index 0000000..546b8a8
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-mid1.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-mid2.png b/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-mid2.png
new file mode 100644 (file)
index 0000000..15af112
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-mid2.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-right1.png b/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-right1.png
new file mode 100644 (file)
index 0000000..061afc9
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-right1.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-right2.png b/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-right2.png
new file mode 100644 (file)
index 0000000..8663e0c
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/dash-corner-right2.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/dash-divider.jpg b/Open-ILS/web/opac/skin/kcls/graphics/dash-divider.jpg
new file mode 100644 (file)
index 0000000..19dda7d
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/dash-divider.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/dropdown-hover.gif b/Open-ILS/web/opac/skin/kcls/graphics/dropdown-hover.gif
new file mode 100644 (file)
index 0000000..1ac62ae
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/dropdown-hover.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/dropdown.gif b/Open-ILS/web/opac/skin/kcls/graphics/dropdown.gif
new file mode 100644 (file)
index 0000000..3aab6fe
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/dropdown.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/expert_search_off.gif b/Open-ILS/web/opac/skin/kcls/graphics/expert_search_off.gif
new file mode 100644 (file)
index 0000000..96b4f51
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/expert_search_off.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/expert_search_on.gif b/Open-ILS/web/opac/skin/kcls/graphics/expert_search_on.gif
new file mode 100644 (file)
index 0000000..6a41861
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/expert_search_on.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/faqs-btn.png b/Open-ILS/web/opac/skin/kcls/graphics/faqs-btn.png
new file mode 100644 (file)
index 0000000..38134ec
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/faqs-btn.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/go-btn-hover.png b/Open-ILS/web/opac/skin/kcls/graphics/go-btn-hover.png
new file mode 100644 (file)
index 0000000..9b878b2
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/go-btn-hover.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/go-btn.png b/Open-ILS/web/opac/skin/kcls/graphics/go-btn.png
new file mode 100644 (file)
index 0000000..24091c9
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/go-btn.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/go_but_long.gif b/Open-ILS/web/opac/skin/kcls/graphics/go_but_long.gif
new file mode 100644 (file)
index 0000000..79d2f9a
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/go_but_long.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/golive.jpg b/Open-ILS/web/opac/skin/kcls/graphics/golive.jpg
new file mode 100644 (file)
index 0000000..8b34912
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/golive.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/gray-arrow.png b/Open-ILS/web/opac/skin/kcls/graphics/gray-arrow.png
new file mode 100644 (file)
index 0000000..bf56b6e
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/gray-arrow.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/green_check.png b/Open-ILS/web/opac/skin/kcls/graphics/green_check.png
new file mode 100644 (file)
index 0000000..9738bd8
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/green_check.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/header_left.gif b/Open-ILS/web/opac/skin/kcls/graphics/header_left.gif
new file mode 100644 (file)
index 0000000..9543795
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/header_left.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/header_right.gif b/Open-ILS/web/opac/skin/kcls/graphics/header_right.gif
new file mode 100644 (file)
index 0000000..f00ff76
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/header_right.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/hp-links-left.jpg b/Open-ILS/web/opac/skin/kcls/graphics/hp-links-left.jpg
new file mode 100644 (file)
index 0000000..e7806c3
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/hp-links-left.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/hp-links-mid.jpg b/Open-ILS/web/opac/skin/kcls/graphics/hp-links-mid.jpg
new file mode 100644 (file)
index 0000000..c9cdabf
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/hp-links-mid.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/hp-links-right.jpg b/Open-ILS/web/opac/skin/kcls/graphics/hp-links-right.jpg
new file mode 100644 (file)
index 0000000..0b713d9
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/hp-links-right.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/locations.jpg b/Open-ILS/web/opac/skin/kcls/graphics/locations.jpg
new file mode 100644 (file)
index 0000000..56e7785
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/locations.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/login-bg.jpg b/Open-ILS/web/opac/skin/kcls/graphics/login-bg.jpg
new file mode 100644 (file)
index 0000000..46fc85f
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/login-bg.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/login-bg2.jpg b/Open-ILS/web/opac/skin/kcls/graphics/login-bg2.jpg
new file mode 100644 (file)
index 0000000..2c38853
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/login-bg2.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/login-box-bg.jpg b/Open-ILS/web/opac/skin/kcls/graphics/login-box-bg.jpg
new file mode 100644 (file)
index 0000000..e654734
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/login-box-bg.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/login-btn-hover.png b/Open-ILS/web/opac/skin/kcls/graphics/login-btn-hover.png
new file mode 100644 (file)
index 0000000..442f33f
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/login-btn-hover.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/login-btn.gif b/Open-ILS/web/opac/skin/kcls/graphics/login-btn.gif
new file mode 100644 (file)
index 0000000..69d6a56
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/login-btn.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/login-btn.png b/Open-ILS/web/opac/skin/kcls/graphics/login-btn.png
new file mode 100644 (file)
index 0000000..5548b99
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/login-btn.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/login-btn2.png b/Open-ILS/web/opac/skin/kcls/graphics/login-btn2.png
new file mode 100644 (file)
index 0000000..ff4af14
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/login-btn2.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/logout-btn-hover.png b/Open-ILS/web/opac/skin/kcls/graphics/logout-btn-hover.png
new file mode 100644 (file)
index 0000000..411fc01
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/logout-btn-hover.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/logout-btn.png b/Open-ILS/web/opac/skin/kcls/graphics/logout-btn.png
new file mode 100644 (file)
index 0000000..bd31a47
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/logout-btn.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_3dobject.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_3dobject.jpg
new file mode 100644 (file)
index 0000000..21ee11d
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_3dobject.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_book.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_book.jpg
new file mode 100644 (file)
index 0000000..d928e6e
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_book.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_bookoncassette.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_bookoncassette.jpg
new file mode 100644 (file)
index 0000000..acc469e
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_bookoncassette.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_bookoncassettecd.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_bookoncassettecd.jpg
new file mode 100644 (file)
index 0000000..e288689
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_bookoncassettecd.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_bookoncd.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_bookoncd.jpg
new file mode 100644 (file)
index 0000000..9e49aed
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_bookoncd.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_cassettewithbook.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_cassettewithbook.jpg
new file mode 100644 (file)
index 0000000..c434af6
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_cassettewithbook.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_cdrom.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_cdrom.jpg
new file mode 100644 (file)
index 0000000..59f9702
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_cdrom.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_cdwithbook.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_cdwithbook.jpg
new file mode 100644 (file)
index 0000000..b1828d8
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_cdwithbook.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_downloadebook.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_downloadebook.jpg
new file mode 100644 (file)
index 0000000..ce97463
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_downloadebook.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_downloadmusic.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_downloadmusic.jpg
new file mode 100644 (file)
index 0000000..953b7e7
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_downloadmusic.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_downloadvideo.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_downloadvideo.jpg
new file mode 100644 (file)
index 0000000..e3abfc3
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_downloadvideo.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_dvd.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_dvd.jpg
new file mode 100644 (file)
index 0000000..905f623
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_dvd.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_eaudio.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_eaudio.jpg
new file mode 100644 (file)
index 0000000..0d810ba
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_eaudio.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_ebooktext.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_ebooktext.jpg
new file mode 100644 (file)
index 0000000..c45f944
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_ebooktext.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_equipment.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_equipment.jpg
new file mode 100644 (file)
index 0000000..47b8377
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_equipment.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_films.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_films.jpg
new file mode 100644 (file)
index 0000000..99b74a0
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_films.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_games.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_games.jpg
new file mode 100644 (file)
index 0000000..24d50ae
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_games.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_kit.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_kit.jpg
new file mode 100644 (file)
index 0000000..ea50e56
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_kit.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_language.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_language.jpg
new file mode 100644 (file)
index 0000000..0d86b5b
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_language.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_largeprint.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_largeprint.jpg
new file mode 100644 (file)
index 0000000..bd8b0a4
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_largeprint.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_magazines.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_magazines.jpg
new file mode 100644 (file)
index 0000000..e8bb737
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_magazines.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_map.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_map.jpg
new file mode 100644 (file)
index 0000000..9236724
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_map.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_microform.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_microform.jpg
new file mode 100644 (file)
index 0000000..7e7e0dc
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_microform.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_musiccassete.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_musiccassete.jpg
new file mode 100644 (file)
index 0000000..7d9a779
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_musiccassete.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_musiccassette.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_musiccassette.jpg
new file mode 100644 (file)
index 0000000..c4a673f
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_musiccassette.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_musiccd.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_musiccd.jpg
new file mode 100644 (file)
index 0000000..f82eaed
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_musiccd.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_musicrecord.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_musicrecord.jpg
new file mode 100644 (file)
index 0000000..4731692
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_musicrecord.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_newspaper.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_newspaper.jpg
new file mode 100644 (file)
index 0000000..8a7b769
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_newspaper.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_online.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_online.jpg
new file mode 100644 (file)
index 0000000..2f9cfcc
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_online.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_onlinejournal.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_onlinejournal.jpg
new file mode 100644 (file)
index 0000000..3528f1c
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_onlinejournal.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_podcasts.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_podcasts.jpg
new file mode 100644 (file)
index 0000000..c65727c
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_podcasts.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_printedmusic.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_printedmusic.jpg
new file mode 100644 (file)
index 0000000..2379dbd
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_printedmusic.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_projectedmedia.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_projectedmedia.jpg
new file mode 100644 (file)
index 0000000..99b74a0
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_projectedmedia.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_sheetmusic.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_sheetmusic.jpg
new file mode 100644 (file)
index 0000000..9207268
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_sheetmusic.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_slide.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_slide.jpg
new file mode 100644 (file)
index 0000000..62aca57
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_slide.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_software.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_software.jpg
new file mode 100644 (file)
index 0000000..090cee2
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_software.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_streamingaudio.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_streamingaudio.jpg
new file mode 100644 (file)
index 0000000..3efafe8
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_streamingaudio.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_streamingvideo.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_streamingvideo.jpg
new file mode 100644 (file)
index 0000000..ab9bf9c
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_streamingvideo.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/media_vhs.jpg b/Open-ILS/web/opac/skin/kcls/graphics/media_vhs.jpg
new file mode 100644 (file)
index 0000000..228d156
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/media_vhs.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/num_search_off.gif b/Open-ILS/web/opac/skin/kcls/graphics/num_search_off.gif
new file mode 100644 (file)
index 0000000..1062802
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/num_search_off.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/num_search_on.gif b/Open-ILS/web/opac/skin/kcls/graphics/num_search_on.gif
new file mode 100644 (file)
index 0000000..f7d7829
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/num_search_on.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/one_land.gif b/Open-ILS/web/opac/skin/kcls/graphics/one_land.gif
new file mode 100644 (file)
index 0000000..082b996
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/one_land.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/pay-fines-btn-hover.png b/Open-ILS/web/opac/skin/kcls/graphics/pay-fines-btn-hover.png
new file mode 100644 (file)
index 0000000..b7708da
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/pay-fines-btn-hover.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/pay-fines-btn.png b/Open-ILS/web/opac/skin/kcls/graphics/pay-fines-btn.png
new file mode 100644 (file)
index 0000000..356433b
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/pay-fines-btn.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/pay_fines_btn.gif b/Open-ILS/web/opac/skin/kcls/graphics/pay_fines_btn.gif
new file mode 100644 (file)
index 0000000..eb4816f
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/pay_fines_btn.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/place_hold.gif b/Open-ILS/web/opac/skin/kcls/graphics/place_hold.gif
new file mode 100644 (file)
index 0000000..3f72215
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/place_hold.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/plus_sign.png b/Open-ILS/web/opac/skin/kcls/graphics/plus_sign.png
new file mode 100644 (file)
index 0000000..a17d58a
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/plus_sign.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/projectedmedia.jpg b/Open-ILS/web/opac/skin/kcls/graphics/projectedmedia.jpg
new file mode 100644 (file)
index 0000000..ba0e6d2
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/projectedmedia.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/question-mark.png b/Open-ILS/web/opac/skin/kcls/graphics/question-mark.png
new file mode 100644 (file)
index 0000000..b5f0f87
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/question-mark.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/questions.png b/Open-ILS/web/opac/skin/kcls/graphics/questions.png
new file mode 100644 (file)
index 0000000..9be69b2
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/questions.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/rdetail_arrow.png b/Open-ILS/web/opac/skin/kcls/graphics/rdetail_arrow.png
new file mode 100644 (file)
index 0000000..e464bf2
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/rdetail_arrow.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/reset_form_btn.gif b/Open-ILS/web/opac/skin/kcls/graphics/reset_form_btn.gif
new file mode 100644 (file)
index 0000000..6b70964
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/reset_form_btn.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/reviews.gif b/Open-ILS/web/opac/skin/kcls/graphics/reviews.gif
new file mode 100644 (file)
index 0000000..b78fa25
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/reviews.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/save-btn.png b/Open-ILS/web/opac/skin/kcls/graphics/save-btn.png
new file mode 100644 (file)
index 0000000..4565850
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/save-btn.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/save_btn.gif b/Open-ILS/web/opac/skin/kcls/graphics/save_btn.gif
new file mode 100644 (file)
index 0000000..f87282a
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/save_btn.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/search_btn.gif b/Open-ILS/web/opac/skin/kcls/graphics/search_btn.gif
new file mode 100644 (file)
index 0000000..f2fdc9b
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/search_btn.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/starz.png b/Open-ILS/web/opac/skin/kcls/graphics/starz.png
new file mode 100644 (file)
index 0000000..4a79dd4
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/starz.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/sub_checked_hist_off.jpg b/Open-ILS/web/opac/skin/kcls/graphics/sub_checked_hist_off.jpg
new file mode 100644 (file)
index 0000000..7fda1c3
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/sub_checked_hist_off.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/sub_checked_hist_on.jpg b/Open-ILS/web/opac/skin/kcls/graphics/sub_checked_hist_on.jpg
new file mode 100644 (file)
index 0000000..703aac1
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/sub_checked_hist_on.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/sub_checked_out_off.jpg b/Open-ILS/web/opac/skin/kcls/graphics/sub_checked_out_off.jpg
new file mode 100644 (file)
index 0000000..0573fbd
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/sub_checked_out_off.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/sub_checked_out_on.jpg b/Open-ILS/web/opac/skin/kcls/graphics/sub_checked_out_on.jpg
new file mode 100644 (file)
index 0000000..97bb178
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/sub_checked_out_on.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/sub_holds_hist_off.jpg b/Open-ILS/web/opac/skin/kcls/graphics/sub_holds_hist_off.jpg
new file mode 100644 (file)
index 0000000..020abe9
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/sub_holds_hist_off.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/sub_holds_hist_on.jpg b/Open-ILS/web/opac/skin/kcls/graphics/sub_holds_hist_on.jpg
new file mode 100644 (file)
index 0000000..020abe9
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/sub_holds_hist_on.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/sub_holds_off.jpg b/Open-ILS/web/opac/skin/kcls/graphics/sub_holds_off.jpg
new file mode 100644 (file)
index 0000000..b888359
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/sub_holds_off.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/sub_holds_on.jpg b/Open-ILS/web/opac/skin/kcls/graphics/sub_holds_on.jpg
new file mode 100644 (file)
index 0000000..9505638
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/sub_holds_on.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_info_off.jpg b/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_info_off.jpg
new file mode 100644 (file)
index 0000000..896e227
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_info_off.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_info_on.jpg b/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_info_on.jpg
new file mode 100644 (file)
index 0000000..0895969
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_info_on.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_notify_off.jpg b/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_notify_off.jpg
new file mode 100644 (file)
index 0000000..55df9da
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_notify_off.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_notify_on.jpg b/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_notify_on.jpg
new file mode 100644 (file)
index 0000000..fd536a8
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_notify_on.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_search_off.jpg b/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_search_off.jpg
new file mode 100644 (file)
index 0000000..89115f6
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_search_off.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_search_on.jpg b/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_search_on.jpg
new file mode 100644 (file)
index 0000000..3eab9fa
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/sub_prefs_search_on.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/submit_btn.gif b/Open-ILS/web/opac/skin/kcls/graphics/submit_btn.gif
new file mode 100644 (file)
index 0000000..5286943
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/submit_btn.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/tool_back.gif b/Open-ILS/web/opac/skin/kcls/graphics/tool_back.gif
new file mode 100644 (file)
index 0000000..37d1278
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/tool_back.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/tool_back.png b/Open-ILS/web/opac/skin/kcls/graphics/tool_back.png
new file mode 100644 (file)
index 0000000..41a13e2
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/tool_back.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/tool_font.gif b/Open-ILS/web/opac/skin/kcls/graphics/tool_font.gif
new file mode 100644 (file)
index 0000000..9dc10a9
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/tool_font.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/tool_forward.gif b/Open-ILS/web/opac/skin/kcls/graphics/tool_forward.gif
new file mode 100644 (file)
index 0000000..db0d800
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/tool_forward.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/tool_forward.png b/Open-ILS/web/opac/skin/kcls/graphics/tool_forward.png
new file mode 100644 (file)
index 0000000..582a6b9
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/tool_forward.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/tool_help.gif b/Open-ILS/web/opac/skin/kcls/graphics/tool_help.gif
new file mode 100644 (file)
index 0000000..2a3de86
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/tool_help.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/tool_help.png b/Open-ILS/web/opac/skin/kcls/graphics/tool_help.png
new file mode 100644 (file)
index 0000000..3007c20
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/tool_help.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/tool_home.gif b/Open-ILS/web/opac/skin/kcls/graphics/tool_home.gif
new file mode 100644 (file)
index 0000000..9b83ccf
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/tool_home.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/tool_home.png b/Open-ILS/web/opac/skin/kcls/graphics/tool_home.png
new file mode 100644 (file)
index 0000000..0620200
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/tool_home.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/tool_mail.gif b/Open-ILS/web/opac/skin/kcls/graphics/tool_mail.gif
new file mode 100644 (file)
index 0000000..83c3573
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/tool_mail.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/tool_print.gif b/Open-ILS/web/opac/skin/kcls/graphics/tool_print.gif
new file mode 100644 (file)
index 0000000..d3d7ee3
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/tool_print.gif differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/tool_print.png b/Open-ILS/web/opac/skin/kcls/graphics/tool_print.png
new file mode 100644 (file)
index 0000000..2c0dc0b
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/tool_print.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/utils-corner-left.png b/Open-ILS/web/opac/skin/kcls/graphics/utils-corner-left.png
new file mode 100644 (file)
index 0000000..db70a75
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/utils-corner-left.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/utils-corner-mid.png b/Open-ILS/web/opac/skin/kcls/graphics/utils-corner-mid.png
new file mode 100644 (file)
index 0000000..80d4857
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/utils-corner-mid.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/utils-corner-right.jpg b/Open-ILS/web/opac/skin/kcls/graphics/utils-corner-right.jpg
new file mode 100644 (file)
index 0000000..1559897
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/utils-corner-right.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/utils-corner-right.png b/Open-ILS/web/opac/skin/kcls/graphics/utils-corner-right.png
new file mode 100644 (file)
index 0000000..303ab75
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/utils-corner-right.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/utils-corner.jpg b/Open-ILS/web/opac/skin/kcls/graphics/utils-corner.jpg
new file mode 100644 (file)
index 0000000..4932a28
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/utils-corner.jpg differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/view_my_list.png b/Open-ILS/web/opac/skin/kcls/graphics/view_my_list.png
new file mode 100644 (file)
index 0000000..d5f1b83
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/view_my_list.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/graphics/view_my_list_hover.png b/Open-ILS/web/opac/skin/kcls/graphics/view_my_list_hover.png
new file mode 100644 (file)
index 0000000..369cb1a
Binary files /dev/null and b/Open-ILS/web/opac/skin/kcls/graphics/view_my_list_hover.png differ
diff --git a/Open-ILS/web/opac/skin/kcls/js/adv_global.js b/Open-ILS/web/opac/skin/kcls/js/adv_global.js
new file mode 100644 (file)
index 0000000..1e0055d
--- /dev/null
@@ -0,0 +1,343 @@
+\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(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
+    //advInitPubFilter();\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
+        }\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 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]               = depthSelGetDepth();\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
+\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
diff --git a/Open-ILS/web/opac/skin/kcls/js/advanced.js b/Open-ILS/web/opac/skin/kcls/js/advanced.js
new file mode 100644 (file)
index 0000000..e726c01
--- /dev/null
@@ -0,0 +1,172 @@
+/* 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
+       /*\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
+\r
+\r
diff --git a/Open-ILS/web/opac/skin/kcls/js/cn_browse.js b/Open-ILS/web/opac/skin/kcls/js/cn_browse.js
new file mode 100644 (file)
index 0000000..232e37d
--- /dev/null
@@ -0,0 +1,134 @@
+var cnOffset = 0;
+var cnCount = 9;
+var cnBrowseCN;
+var cnBrowseOrg;
+
+if( findCurrentPage() == CNBROWSE ) {
+       attachEvt("common", "run", cnBrowseLoadSearch);
+       attachEvt( "common", "locationUpdated", cnBrowseResubmit );
+       attachEvt( "common", "depthChanged", cnBrowseResubmit );
+}
+
+
+function cnBrowseLoadSearch() {
+       unHideMe($('cn_browse'));
+       cnBrowseGo(getCallnumber(), getLocation(), getDepth());
+}
+
+
+function cnBrowseResubmit() {
+       var args = {}
+       args[PARAM_CN] = cnBrowseCN;
+       args[PARAM_DEPTH] = depthSelGetDepth();
+       args[PARAM_LOCATION] = getNewSearchLocation();
+       goTo(buildOPACLink(args));
+}
+
+
+
+function cnBrowseGo(cn, org, depth) { 
+       if(depth == null) depth = getDepth();
+
+       org = findOrgUnit(org);
+       cnOffset = 0;
+
+       do {
+               var t = findOrgType(org.ou_type());
+               if( t.depth() > depth ) 
+                       org = findOrgUnit(org.parent_ou());
+               else break;
+       } while(true); 
+
+       cnBrowseOrg = org;
+       cnBrowseCN = cn;
+
+       _cnBrowseGo( cn, org );
+       appendClear($('cn_browse_where'), text(org.name()));
+}
+
+
+function _cnBrowseGo( cn, org ) {
+       var req = new Request( FETCH_CNBROWSE, cn, org.id(), cnCount, cnOffset );
+       req.callback( cnBrowseDraw );
+       req.send();
+}
+
+function cnBrowseNext() {
+       cnOffset++;
+       _cnBrowseGo( cnBrowseCN, cnBrowseOrg );
+}
+
+function cnBrowsePrev() {
+       cnOffset--;
+       _cnBrowseGo( cnBrowseCN, cnBrowseOrg );
+}
+
+
+function cnBrowseDraw( r ) {
+       var list = r.getResultObject();
+       _cnBrowseDraw(list);
+}
+
+
+var cnTbody;
+var cnRowT;
+var cnTdT;
+function _cnBrowseDraw( list ) {
+
+       if(!cnTbody) {
+               cnTbody = $('cn_tbody');
+               cnRowT = $('cn_browse_row');
+               cnTdT = cnRowT.removeChild($('cn_browse_td'));
+               cnTbody.removeChild(cnRowT);
+       }
+       removeChildren(cnTbody);
+
+       var counter = 1;
+       var currentRow = cnRowT.cloneNode(true);
+       cnTbody.appendChild(currentRow);
+
+       for( var idx in list ) {
+               
+
+               var currentTd = cnTdT.cloneNode(true);
+               currentRow.appendChild(currentTd);
+
+               var td = cnTdT.cloneNode(true);
+
+               var obj = list[idx];
+               var cn  = obj.cn;
+               var mods = obj.mods;
+
+               var cn_td                       = $n(currentTd, 'cn_browse_cn');
+               var lib_td                      = $n(currentTd, 'cn_browse_lib');
+               var title_td            = $n(currentTd, 'cn_browse_title');
+               var author_td           = $n(currentTd, 'cn_browse_author');
+               var pic_td                      = $n(currentTd, 'cn_browse_pic');
+
+               cn_td.appendChild(text(cn.label()));
+               lib_td.appendChild(text(findOrgUnit(cn.owning_lib()).name()));
+               cnBrowseDrawTitle(mods, title_td, author_td, pic_td);
+
+               if( counter++ % 3 == 0 ) {
+                       counter = 1;
+                       currentRow = cnRowT.cloneNode(true);
+                       cnTbody.appendChild(currentRow);
+               }
+       }
+}
+
+
+function cnBrowseDrawTitle(mods, title_td, author_td, pic_td) {
+
+       buildTitleDetailLink(mods, title_td); 
+       buildSearchLink(STYPE_AUTHOR, mods.author(), author_td);
+       pic_td.setAttribute("src", buildISBNSrc(cleanISBN(mods.isbn())));
+
+       var args = {};
+       args.page = RDETAIL;
+       args[PARAM_OFFSET] = 0;
+       args[PARAM_RID] = mods.doc_id();
+       args[PARAM_MRID] = 0;
+       pic_td.parentNode.setAttribute("href", buildOPACLink(args));
+}
+
diff --git a/Open-ILS/web/opac/skin/kcls/js/combined.js b/Open-ILS/web/opac/skin/kcls/js/combined.js
new file mode 100644 (file)
index 0000000..85c968a
--- /dev/null
@@ -0,0 +1 @@
+var _lasso=[];function $(a){return getId(a)}function getId(a){return document.getElementById(a)}function swapCSSClass(b,a,c){removeCSSClass(b,a);addCSSClass(b,c)}function addCSSClass(d,h){if(!d||!h){return}var g=d.className;var b;if(g){b=g.split(/\s+/)}var f="";for(var a in b){if(b[a]==h){return}if(b[a]!=null){f+=b[a]+" "}}f+=h;d.className=f}function removeCSSClass(d,h){if(!d||!h){return}var g="";var b=d.className;if(b){b=b.split(/\s+/)}var f=1;for(var a in b){if(b[a]!=h){if(f==1){g=b[a];f=0}else{g=g+" "+b[a]}}}d.className=g}function grabCharCode(a){a=(a)?a:((window.event)?event:null);if(a){return(a.charCode?a.charCode:((a.which)?a.which:a.keyCode))}else{return -1}}function userPressedEnter(a){var b=grabCharCode(a);if(b==13||b==3){return true}return false}function goTo(a){setTimeout(function(){location.href=a},0)}function removeChildren(a){if(!a){return}while(a.childNodes[0]){a.removeChild(a.childNodes[0])}}function appendClear(a,b){if(typeof b=="string"){b=text(b)}removeChildren(a);a.appendChild(b)}function instanceOf(b,a){if(!IE){while(b!=null){if(b==a.prototype){return true}b=b.__proto__}}else{while(b!=null){if(b instanceof a){return true}b=b.__proto__}}return false}var isMac,NS,NS4,NS6,IE,IE4,IEmac,IE4plus,IE5,IE5plus,IE6,IEMajor,ver4,Safari;function detect_browser(){isMac=(navigator.appVersion.indexOf("Mac")!=-1)?true:false;NS=(navigator.appName=="Netscape")?true:false;NS4=(document.layers)?true:false;IE=(navigator.appName=="Microsoft Internet Explorer")?true:false;IEmac=((document.all)&&(isMac))?true:false;IE4plus=(document.all)?true:false;IE4=((document.all)&&(navigator.appVersion.indexOf("MSIE 4.")!=-1))?true:false;IE5=((document.all)&&(navigator.appVersion.indexOf("MSIE 5.")!=-1))?true:false;IE6=((document.all)&&(navigator.appVersion.indexOf("MSIE 6.")!=-1))?true:false;ver4=(NS4||IE4plus)?true:false;NS6=(!document.layers)&&(navigator.userAgent.indexOf("Netscape")!=-1)?true:false;Safari=navigator.userAgent.match(/Safari/);IE5plus=IE5||IE6;IEMajor=0;if(IE4plus){var b=navigator.appVersion.indexOf("MSIE");var a=navigator.appVersion.indexOf(".",b);IEMajor=parseInt(navigator.appVersion.substring(b+5,a));IE5plus=(IEMajor>=5)?true:false}}detect_browser();function text(a){if(a==null){a=""}return document.createTextNode(a)}function elem(c,b,a){var d=document.createElement(c);if(b){for(key in b){if(key=="id"){d.id=b[key]}else{d.setAttribute(key,b[key])}}}if(a){d.appendChild(text(a))}return d}function setSelector(c,b){if(c&&b!=null){for(var a=0;a!=c.options.length;a++){if(c.options[a]){var d=c.options[a].value;if(d==null||d==""){d=c.options[a].innerHTML}b+="";if(d&&d.toLowerCase()==b.toLowerCase()){c.selectedIndex=a;c.options[a].selected=true;return true}}}}return false}function setSelectorRegex(c,b){if(c&&b!=null){for(var a=0;a!=c.options.length;a++){if(c.options[a]){var d=c.options[a].value;if(d==null||d==""){d=c.options[a].innerHTML}value+="";if(d&&d.match(b)){c.selectedIndex=a;c.options[a].selected=true;return true}}}}return false}function getSelectorVal(c){if(!c){return null}var a=c.selectedIndex;if(a<0){return null}var d=c.options[a];var b=d.value;if(b==null){b=d.innerHTML}return b}function getSelectorName(b){var c=b.options[b.selectedIndex];var a=c.name;if(a==null||a==undefined||a==""){a=c.innerHTML}return a}function setSelectorByName(c,a){for(var d in c.options){var b=c.options[d];if(b.name==a||b.innerHTML==a){c.selectedIndex=d;b.selected=true}}}function findSelectorOptByValue(c,d){for(var b=0;b<c.options.length;b++){var a=c.options[b];if(a.value==d){return a}}return null}function debugSelector(c){var b="Selector\n";for(var a=0;a!=c.options.length;a++){var d=c.options[a];b+="\t"+d.innerHTML+"\n"}return b}function findParentByNodeName(b,a){while((b=b.parentNode)){if(b.nodeName==a){return b}}return null}function getElementsByTagNameFlat(b,a){var c=[];for(var d in b.childNodes){var f=b.childNodes[d];if(f&&f.nodeName==a){c.push(f)}}return c}function findTreeItemById(a,f){if(a.id()==f){return a}for(var d in a.children()){var b=findTreeItemById(a.children()[d],f);if(b){return b}}return null}function grep(a,d){var c=[];if(!a){return null}if(a.constructor==Array){for(var b=0;b<a.length;b++){if(d(a[b])){c.push(a[b])}}}else{for(var b in a){if(d(a[b])){c.push(a[b])}}}if(c.length>0){return c}return null}function ogrep(f,c){var b={};var d=false;for(var a in f){if(c(f[a])){b[a]=f[a];d=true}}if(d){return b}return null}function doSelectorActions(a){if((IE||Safari)&&a){a.onchange=function(){var b=a.options[a.selectedIndex];if(b&&b.onclick){b.onclick()}}}}function insertSelectorVal(f,j,b,l,g,d){if(j<0){j=f.options.length}var k=[];for(var h=f.options.length;h!=j;h--){k[h]=f.options[h-1]}var c=setSelectorVal(f,j,b,l,g,d);for(var h=j+1;h<k.length;h++){f.options[h]=k[h]}return c}function setSelectorVal(d,j,a,k,f,b){if(!b||b<0){b=0}b=parseInt(b);var h;if(IE){var c=elem("pre");for(var g=0;g!=b;g++){c.appendChild(text("   "))}c.appendChild(text(a));h=new Option("",k);d.options[j]=h;h.appendChild(c)}else{b=b*14;h=new Option(a,k);h.setAttribute("style","padding-left: "+b+"px;");d.options[j]=h;if(f){h.onclick=f}}if(f){h.onclick=f}return h}function normalize(f){return f;if(!f){return""}var d="";try{f=f.split(" ")}catch(l){return f}var b=/\w/;for(var h=0;h<f.length;h++){var g=f[h];var k=false;for(var j=0;j!=g.length;j++){if(!k){var a=g.charAt(j);if(b.exec(a+"")){d+=g.charAt(j).toUpperCase();k=true;continue}}d+=g.charAt(j).toLowerCase()}if(h<(f.length-1)){d+=" "}}d=d.replace(/\s*\.\s*$/,"");d=d.replace(/\s*\/\s*\/\s*$/," / ");d=d.replace(/\s*\/\s*$/,"");return d}function isNull(a){if(a==null||a==undefined||a.toString().toLowerCase()=="undefined"||a.toString().toLowerCase()=="null"){return true}return false}function $n(a,b){return findNodeByName(a,b)}function findNodeByName(a,f){if(!a||!f){return null}if(a.nodeType!=1){return null}if(a.getAttribute("name")==f||a.name==f){return a}var c=a.childNodes;for(var b=0;b!=c.length;b++){var d=findNodeByName(c[b],f);if(d){return d}}return null}function truncate(a,b){if(a&&b!=null&&b>-1&&a.length>b){return a.substr(0,b)+"... "}return a}function setActivateStyleSheet(d){var f,c,b;for(f=0;(c=document.getElementsByTagName("link")[f]);f++){if(c.getAttribute("rel").indexOf("style")!=-1&&c.getAttribute("name")){c.disabled=true;if(c.getAttribute("name").indexOf(d)!=-1){c.disabled=false}}}}var currentFontSize;function scaleFonts(g){var d="";var c="";var f="";var b;if(!currentFontSize){currentFontSize="regular"}if(currentFontSize=="regular"&&g=="regular"){return}if(currentFontSize==g){return}currentFontSize=g;switch(g){case"large":d="142%";f="107%";c="94%";break}document.getElementsByTagName("body")[0].style.fontSize=d;for(i=0;(b=document.getElementsByTagName("td")[i]);i++){b.style.fontSize=d}for(i=0;(b=document.getElementsByTagName("div")[i]);i++){b.style.fontSize=c}for(i=0;(b=document.getElementsByTagName("option")[i]);i++){b.style.fontSize=c}for(i=0;(b=document.getElementsByTagName("li")[i]);i++){b.style.fontSize=c}for(i=0;(b=document.getElementsByTagName("span")[i]);i++){b.style.fontSize=c}for(i=0;(b=document.getElementsByTagName("select")[i]);i++){b.style.fontSize=c}for(i=0;(b=document.getElementsByTagName("a")[i]);i++){b.style.fontSize=f}}function sortWordsIgnoreCase(d,c){d=d.toLowerCase();c=c.toLowerCase();if(d>c){return 1}if(d<c){return -1}return 0}function getSelectedList(c){if(!c){return[]}var b=[];for(var a=0;a!=c.options.length;a++){if(c.options[a].selected){b.push(c.options[a].value)}}return b}function setEnterFunc(b,a){if(!(b&&a)){return}b.onkeydown=function(c){if(userPressedEnter(c)){a()}}}function iterate(a,c){for(var b=0;a&&b<a.length;b++){c(a[b])}}function interval_to_seconds(f){f=f.replace(/and/,",");f=f.replace(/,/," ");var d=0;var c=f.match(/\s*\+?\s*(\d+)\s*(\w{1})\w*\s*/g);for(var b=0;b<c.length;b++){if(!c[b]){continue}var a=c[b].match(/\s*\+?\s*(\d+)\s*(\w{1})\w*\s*/);if(a[2]=="s"){d+=a[1]}if(a[2]=="m"){d+=60*a[1]}if(a[2]=="h"){d+=60*60*a[1]}if(a[2]=="d"){d+=60*60*24*a[1]}if(a[2]=="w"){d+=60*60*24*7*a[1]}if(a[2]=="M"){d+=((60*60*24*365)/12)*a[1]}if(a[2]=="y"){d+=60*60*24*365*a[1]}}return d}function openWindow(a){if(isXUL()){var a=window.escape("<html><head><title></title></head><body>"+a+"</body></html>");xulG.window_open("data:text/html,"+a,"","chrome,resizable,width=700,height=500")}else{win=window.open("","","resizable,width=700,height=500,scrollbars=1");win.document.body.innerHTML=a}}function alertId(b){var a=$(b);if(a){alert(a.innerHTML)}}function alertIdText(c,b){var a=$(c);if(!a){return}if(b){alert(b+"\n\n"+a.innerHTML)}else{alert(a.innerHTML)}}function confirmId(b){var a=$(b);if(a){return confirm(a.innerHTML)}}function goBack(){history.back()}function goForward(){history.forward()}function uniquify(a){if(!a){return[]}var d=[];for(var b=0;b<a.length;b++){var c=a[b];if(!grep(d,function(f){return(f==c)})){d.push(c)}}return d}function contains(a,c){for(var b=0;b<a.length;b++){if(a[b]==c){return true}}return false}function isTrue(a){return(a&&!(a+"").match(/f/i))}function buildDate(f,g,b,a,c,j){if(!f){f=0}if(!g){g=1}if(!b){b=1}if(!a){a=0}if(!c){c=0}if(!j){j=0}var h=new Date(f,g-1,b,a,c,j);_debug("created date with "+(h.getYear()+1900)+"-"+(h.getMonth()+1)+"-"+h.getDate()+" "+h.getHours()+":"+h.getMinutes()+":"+h.getSeconds());if((h.getYear()+1900)==f&&h.getMonth()==(g-1)&&h.getDate()==new Number(b)&&h.getHours()==new Number(a)&&h.getMinutes()==new Number(c)&&h.getSeconds()==new Number(j)){return h}return null}function mkYearMonDay(b){if(!b){b=new Date()}var f=b.getYear()+1900;var a=(b.getMonth()+1)+"";var c=b.getDate()+"";if(a.length==1){a="0"+a}if(c.length==1){c="0"+c}return f+"-"+a+"-"+c}function debugFMObject(d){if(typeof d!="object"){return d}_debug("---------------------");var c=fmclasses[d.classname];if(!c){_debug(formatJSON(js2JSON(d)));return}c.sort();for(var b=0;b<c.length;b++){var a=c[b];while(a.length<12){a+=" "}var f=d[c[b]]();if(typeof f=="object"){_debug(a+" :=\n");_debugFMObject(f)}else{_debug(a+" = "+f)}}_debug("---------------------")}function getTableRows(a){var d=[];if(!a){return d}var c=a.childNodes;if(!c){return d}for(var b=0;b<c.length;b++){var f=c[b];if(f.nodeName.match(/^tr$/i)){d.push(f)}}return d}function getObjectKeys(b){keys=[];for(var a in b){keys.push(a)}return keys}var SHOW_MR_DEFAULT=false;var DO_AUTHORITY_LOOKUPS=true;var STAFF_WEB_BASE_PATH="/eg";var PARAM_TERM="t";var PARAM_FACET="ft";var PARAM_STYPE="tp";var PARAM_LOCATION="l";var PARAM_LASSO="sg";var PARAM_DEPTH="d";var PARAM_FORM="f";var PARAM_OFFSET="o";var PARAM_COUNT="c";var PARAM_HITCOUNT="hc";var PARAM_MRID="m";var PARAM_RID="r";var PARAM_RLIST="rl";var PARAM_ORIGLOC="ol";var PARAM_AUTHTIME="at";var PARAM_ADVTERM="adv";var PARAM_ADVTYPE="adt";var PARAM_RTYPE="rt";var PARAM_SORT="s";var PARAM_SORT_DIR="sd";var PARAM_DEBUG="dbg";var PARAM_CN="cn";var PARAM_LITFORM="lf";var PARAM_ITEMFORM="if";var PARAM_ITEMTYPE="it";var PARAM_BIBLEVEL="bl";var PARAM_AUDIENCE="a";var PARAM_SEARCHES="ss";var PARAM_LANGUAGE="la";var PARAM_TFORM="tf";var PARAM_RDEPTH="rd";var PARAM_REDIR="re";var PARAM_AVAIL="av";var PARAM_COPYLOCS="cl";var PARAM_PUBD_BEFORE="pdb";var PARAM_PUBD_AFTER="pda";var PARAM_PUBD_BETWEEN="pdt";var PARAM_PUBD_DURING="pdd";var PARAM_NOPERSIST_SEARCH="nps";var TERM;var FACET;var STYPE;var LOCATION;var LASSO;var DEPTH;var FORM;var OFFSET;var COUNT;var HITCOUNT;var RANKS;var FONTSIZE;var ORIGLOC;var AUTHTIME;var ADVTERM;var ADVTYPE;var MRID;var RID;var RTYPE;var SORT;var SORT_DIR;var RLIST;var DEBUG;var CALLNUM;var LITFORM;var ITEMFORM;var ITEMTYPE;var BIBLEVEL;var AUDIENCE;var SEARCHES;var LANGUAGE;var TFORM;var RDEPTH;var AVAIL;var COPYLOCS;var PUBD_BEFORE;var PUBD_AFTER;var PUBD_BETWEEN;var PUBD_DURING;var SBEXTRAS;var SKIN;var COOKIE_SB="sbe";var COOKIE_SES="ses";var COOKIE_FONT="fnt";var COOKIE_SKIN="skin";var COOKIE_RIDS="rids";var COOKIE_SEARCH="sr";var MRESULT="mresult";var RRESULT="rresult";var RDETAIL="rdetail";var MYOPAC="myopac";var ADVANCED="advanced";var HOME="home";var BBAGS="bbags";var REQITEMS="reqitems";var CNBROWSE="cnbrowse";var STYPE_AUTHOR="author";var STYPE_TITLE="title";var STYPE_SUBJECT="subject";var STYPE_SERIES="series";var STYPE_KEYWORD="keyword";var RTYPE_MRID="mrid";var RTYPE_COOKIE="cookie";var RTYPE_AUTHOR=STYPE_AUTHOR;var RTYPE_SUBJECT=STYPE_SUBJECT;var RTYPE_TITLE=STYPE_TITLE;var RTYPE_SERIES=STYPE_SERIES;var RTYPE_KEYWORD=STYPE_KEYWORD;var RTYPE_LIST="list";var RTYPE_MULTI="multi";var RTYPE_MARC="marc";var RTYPE_ISBN="isbn";var RTYPE_ISSN="issn";var RTYPE_TCN="tcn";var SORT_TYPE_REL="rel";var SORT_TYPE_AUTHOR=STYPE_AUTHOR;var SORT_TYPE_TITLE=STYPE_TITLE;var SORT_TYPE_PUBDATE="pubdate";var SORT_DIR_ASC="asc";var SORT_DIR_DESC="desc";var ADVTYPE_MULTI="ml";var ADVTYPE_MARC="ma";var LOGOUT_WARNING_TIME=30;var PREF_HITS_PER="opac.hits_per_page";var PREF_DEF_FONT="opac.default_font";var PREF_HOLD_NOTIFY="opac.hold_notify";var PREF_DEF_LOCATION="opac.default_search_location";var PREF_DEF_DEPTH="opac.default_search_depth";var ENABLE_ADDED_CONTENT_ATTRIB_LINKS=false;var G={};G.user=null;G.ui={};var REGEX_BARCODE=/^\d+/;var REGEX_PHONE=/^\d{3}-\d{3}-\d{4}$/;function loadUIObjects(){for(var a in config.ids){G.ui[a]={};for(var b in config.ids[a]){G.ui[a][b]=getId(config.ids[a][b])}}}function clearUIObjects(){for(var a in config.ids){for(var b in config.ids[a]){if(G.ui[a][b]){G.ui[a][b].onclick=null;G.ui[a][b].onkeydown=null;G.ui[a][b]=null}}G.ui[a]=null}}var config={};config.page={};config.page[HOME]="index.xml";config.page[ADVANCED]="advanced.xml";config.page[MRESULT]="mresult.xml";config.page[RRESULT]="rresult.xml";config.page[MYOPAC]="myopac.xml";config.page[RDETAIL]="rdetail.xml";config.page[BBAGS]="bbags.xml";config.page[REQITEMS]="reqitems.xml";config.page[CNBROWSE]="cnbrowse.xml";config.themes={};config.images={};config.images.logo="main_logo.jpg";config.ids={};config.ids.result={};config.ids.mresult={};config.ids.advanced={};config.ids.rresult={};config.ids.myopac={};config.ids.rdetail={};config.css={};config.css.result={};config.css.mresult={};config.css.advanced={};config.css.rresult={};config.css.myopac={};config.css.rdetail={};config.names={};config.names.result={};config.names.mresult={};config.names.advanced={};config.names.rresult={};config.names.myopac={};config.names.rdetail={};config.ids.common={};config.ids.common.loading="loading_div";config.ids.common.canvas="canvas";config.ids.common.canvas_main="canvas_main";config.ids.common.org_tree="org_tree";config.ids.common.org_container="org_container";config.ids.xul={};config.css.hide_me="hide_me";config.css.dim="dim";config.css.dim2="dim2";config.ids.altcanvas={};var SEARCH_MRS="open-ils.search:open-ils.search.metabib.multiclass:1";var SEARCH_RS="open-ils.search:open-ils.search.biblio.multiclass:1";var SEARCH_MRS_QUERY="open-ils.search:open-ils.search.metabib.multiclass.query:1";var SEARCH_RS_QUERY="open-ils.search:open-ils.search.biblio.multiclass.query:1";var FETCH_SEARCH_RIDS="open-ils.search:open-ils.search.biblio.record.class.search:1";var CREATE_MFHD_RECORD="open-ils.cat:open-ils.cat.serial.record.xml.create";var DELETE_MFHD_RECORD="open-ils.cat:open-ils.cat.serial.record.delete";var FETCH_MFHD_SUMMARY="open-ils.search:open-ils.search.serial.record.bib.retrieve";var FETCH_MRMODS="open-ils.search:open-ils.search.biblio.metarecord.mods_slim.retrieve";var FETCH_MODS_FROM_COPY="open-ils.search:open-ils.search.biblio.mods_from_copy";var FETCH_MR_COPY_COUNTS="open-ils.search:open-ils.search.biblio.metarecord.copy_count:1";var FETCH_RIDS="open-ils.search:open-ils.search.biblio.metarecord_to_records:1";var FETCH_RMODS="open-ils.search:open-ils.search.biblio.record.mods_slim.retrieve";var FETCH_R_COPY_COUNTS="open-ils.search:open-ils.search.biblio.record.copy_count:1";var FETCH_FLESHED_USER="open-ils.actor:open-ils.actor.user.fleshed.retrieve";var FETCH_SESSION="open-ils.auth:open-ils.auth.session.retrieve";var LOGIN_INIT="open-ils.auth:open-ils.auth.authenticate.init";var LOGIN_COMPLETE="open-ils.auth:open-ils.auth.authenticate.complete";var LOGIN_DELETE="open-ils.auth:open-ils.auth.session.delete";var FETCH_USER_PREFS="open-ils.actor:open-ils.actor.patron.settings.retrieve";var UPDATE_USER_PREFS="open-ils.actor:open-ils.actor.patron.settings.update";var FETCH_COPY_STATUSES="open-ils.search:open-ils.search.config.copy_status.retrieve.all";var FETCH_COPY_LOCATION_COUNTS_SUMMARY="open-ils.search:open-ils.search.biblio.copy_location_counts.summary.retrieve";var FETCH_COPY_COUNTS_SUMMARY="open-ils.search:open-ils.search.biblio.copy_counts.summary.retrieve";var FETCH_MARC_HTML="open-ils.search:open-ils.search.biblio.record.html";var FETCH_CHECKED_OUT_SUM="open-ils.actor:open-ils.actor.user.checked_out";var FETCH_HOLDS="open-ils.circ:open-ils.circ.holds.retrieve";var FETCH_FINES_SUMMARY="open-ils.actor:open-ils.actor.user.fines.summary";var FETCH_TRANSACTIONS="open-ils.actor:open-ils.actor.user.transactions.have_charge.fleshed";var FETCH_MONEY_BILLING="open-ils.circ:open-ils.circ.money.billing.retrieve.all";var FETCH_CROSSREF="open-ils.search:open-ils.search.authority.crossref";var FETCH_CROSSREF_BATCH="open-ils.search:open-ils.search.authority.crossref.batch";var CREATE_HOLD="open-ils.circ:open-ils.circ.holds.create";var CREATE_HOLD_OVERRIDE="open-ils.circ:open-ils.circ.holds.create.override";var CANCEL_HOLD="open-ils.circ:open-ils.circ.hold.cancel";var UPDATE_USERNAME="open-ils.actor:open-ils.actor.user.username.update";var UPDATE_PASSWORD="open-ils.actor:open-ils.actor.user.password.update";var UPDATE_EMAIL="open-ils.actor:open-ils.actor.user.email.update";var RENEW_CIRC="open-ils.circ:open-ils.circ.renew";var CHECK_SPELL="open-ils.search:open-ils.search.spellcheck";var FETCH_REVIEWS="open-ils.search:open-ils.search.added_content.review.retrieve.all";var FETCH_TOC="open-ils.search:open-ils.search.added_content.toc.retrieve";var FETCH_ACONT_SUMMARY="open-ils.search:open-ils.search.added_content.summary.retrieve";var FETCH_USER_BYBARCODE="open-ils.actor:open-ils.actor.user.fleshed.retrieve_by_barcode";var FETCH_ADV_MARC_MRIDS="open-ils.search:open-ils.search.biblio.marc:1";var FETCH_ADV_ISBN_RIDS="open-ils.search:open-ils.search.biblio.isbn";var FETCH_ADV_ISSN_RIDS="open-ils.search:open-ils.search.biblio.issn";var FETCH_ADV_TCN_RIDS="open-ils.search:open-ils.search.biblio.tcn";var FETCH_CNBROWSE="open-ils.search:open-ils.search.callnumber.browse";var FETCH_CONTAINERS="open-ils.actor:open-ils.actor.container.retrieve_by_class";var FETCH_CONTAINERS="open-ils.actor:open-ils.actor.container.retrieve_by_class";var CREATE_CONTAINER="open-ils.actor:open-ils.actor.container.create";var DELETE_CONTAINER="open-ils.actor:open-ils.actor.container.full_delete";var CREATE_CONTAINER_ITEM="open-ils.actor:open-ils.actor.container.item.create";var DELETE_CONTAINER_ITEM="open-ils.actor:open-ils.actor.container.item.delete";var FLESH_CONTAINER="open-ils.actor:open-ils.actor.container.flesh";var FLESH_PUBLIC_CONTAINER="open-ils.actor:open-ils.actor.container.public.flesh";var UPDATE_CONTAINER="open-ils.actor:open-ils.actor.container.update";var FETCH_COPY="open-ils.search:open-ils.search.asset.copy.retrieve";var FETCH_FLESHED_COPY="open-ils.search:open-ils.search.asset.copy.fleshed2.retrieve";var CHECK_HOLD_POSSIBLE="open-ils.circ:open-ils.circ.title_hold.is_possible";var UPDATE_HOLD="open-ils.circ:open-ils.circ.hold.update";var FETCH_COPIES_FROM_VOLUME="open-ils.search:open-ils.search.asset.copy.retrieve_by_cn_label:1";var FETCH_VOLUME_BY_INFO="open-ils.search:open-ils.search.call_number.retrieve_by_info";var FETCH_VOLUME="open-ils.search:open-ils.search.asset.call_number.retrieve";var FETCH_ISSUANCE="open-ils.serial:open-ils.serial.issuance.pub_fleshed.batch.retrieve";var FETCH_COPY_LOCATIONS="open-ils.circ:open-ils.circ.copy_location.retrieve.all";var FETCH_COPY_NOTES="open-ils.circ:open-ils.circ.copy_note.retrieve.all";var FETCH_COPY_STAT_CATS="open-ils.circ:open-ils.circ.asset.stat_cat_entries.fleshed.retrieve_by_copy";var FETCH_LIT_FORMS="open-ils.search:open-ils.search.biblio.lit_form_map.retrieve.all";var FETCH_ITEM_FORMS="open-ils.search:open-ils.search.biblio.item_form_map.retrieve.all";var FETCH_ITEM_TYPES="open-ils.search:open-ils.search.biblio.item_type_map.retrieve.all";var FETCH_BIB_LEVELS="open-ils.search:open-ils.search.biblio.bib_level_map.retrieve.all";var FETCH_AUDIENCES="open-ils.search:open-ils.search.biblio.audience_map.retrieve.all";var FETCH_HOLD_STATUS="open-ils.circ:open-ils.circ.hold.queue_stats.retrieve";var FETCH_NON_CAT_CIRCS="open-ils.circ:open-ils.circ.open_non_cataloged_circulation.user";var FETCH_NON_CAT_CIRC="open-ils.circ:open-ils.circ.non_cataloged_circulation.retrieve";var FETCH_NON_CAT_TYPES="open-ils.circ:open-ils.circ.non_cat_types.retrieve.all";var FETCH_BRE="open-ils.search:open-ils.search.biblio.record_entry.slim.retrieve";var CHECK_USERNAME="open-ils.actor:open-ils.actor.username.exists";var FETCH_CIRC_BY_ID="open-ils.circ:open-ils.circ.retrieve";var FETCH_MR_DESCRIPTORS="open-ils.search:open-ils.search.metabib.record_to_descriptors";var FETCH_HIGHEST_PERM_ORG="open-ils.actor:open-ils.actor.user.perm.highest_org.batch";var FETCH_USER_NOTES="open-ils.actor:open-ils.actor.note.retrieve.all";var FETCH_ORG_BY_SHORTNAME="open-ils.actor:open-ils.actor.org_unit.retrieve_by_shortname";var FETCH_BIB_ID_BY_BARCODE="open-ils.search:open-ils.search.bib_id.by_barcode";var FETCH_ORG_SETTING="open-ils.actor:open-ils.actor.ou_setting.ancestor_default";G.evt={};function runEvt(t,h,q,p,o,n,m,l,k){var s=G.evt[t][h];for(var j in s){s[j](q,p,o,n,m,l,k)}}function createEvt(b,a){if(!G.evt[b]){G.evt[b]={}}if(G.evt[b][a]==null){G.evt[b][a]=[]}}function attachEvt(b,a,c){createEvt(b,a);G.evt[b][a].push(c)}function detachAllEvt(b,a){G.evt[b][a]=[]}createEvt("common","init");createEvt("common","pageRendered");createEvt("common","unload");createEvt("common","locationChanged");createEvt("common","locationUpdated");createEvt("common","run");createEvt("result","idsReceived");createEvt("rresult","recordDrawn");createEvt("result","preCollectRecords");createEvt("result","hitCountReceived");createEvt("result","recordReceived");createEvt("result","recordDrawn");createEvt("result","copyCountsReceived");createEvt("result","allRecordsReceived");createEvt("rdetail","recordDrawn");createEvt("common","loggedIn");createEvt("result","zeroHits");createEvt("result","lowHits");createEvt("rdetail","recordRetrieved");createEvt("common","depthChanged");createEvt("common","holdUpdated");createEvt("common","holdUpdateCanceled");createEvt("rdetail","nextPrevDrawn");function CGI(){this._keys=new Array();this.data=new Object();var b=location.search.replace(/^\?/,"");this.server_name=location.href.replace(/^https?:\/\/([^\/]+).+$/,"$1");var d="";var g="";var f=true;var h=false;for(var a=0;a!=b.length;a++){var j=b.charAt(a);if(j=="="){h=true;f=false;continue}if(j=="&"||j==";"){f=1;h=0;if(!this.data[d]){this.data[d]=[]}this.data[d].push(decodeURIComponent(g));this._keys.push(d);d="";g="";continue}if(f){d+=j}else{if(h){g+=j}}}if(!this.data[d]){this.data[d]=[]}this.data[d].push(decodeURIComponent(g));this._keys.push(d)}CGI.prototype.param=function(a){if(this.data[a]==null){return null}if(this.data[a].length==1){return this.data[a][0]}return this.data[a]};CGI.prototype.keys=function(){return this._keys};CGI.prototype.toString=function(){var b="";var c=this.keys();for(var a in c){b+=c[a]+" : ";var f=this.param(c[a]);for(var d in f){b+=f[d]+" "}b+="\n"}return b};var hexcase=0;var b64pad="";var chrsz=8;function hex_md5(a){return binl2hex(core_md5(str2binl(a),a.length*chrsz))}function b64_md5(a){return binl2b64(core_md5(str2binl(a),a.length*chrsz))}function str_md5(a){return binl2str(core_md5(str2binl(a),a.length*chrsz))}function hex_hmac_md5(a,b){return binl2hex(core_hmac_md5(a,b))}function b64_hmac_md5(a,b){return binl2b64(core_hmac_md5(a,b))}function str_hmac_md5(a,b){return binl2str(core_hmac_md5(a,b))}function md5_vm_test(){return hex_md5("abc")=="900150983cd24fb0d6963f7d28e17f72"}function core_md5(q,l){q[l>>5]|=128<<((l)%32);q[(((l+64)>>>9)<<4)+14]=l;var p=1732584193;var o=-271733879;var n=-1732584194;var m=271733878;for(var h=0;h<q.length;h+=16){var k=p;var j=o;var g=n;var f=m;p=md5_ff(p,o,n,m,q[h+0],7,-680876936);m=md5_ff(m,p,o,n,q[h+1],12,-389564586);n=md5_ff(n,m,p,o,q[h+2],17,606105819);o=md5_ff(o,n,m,p,q[h+3],22,-1044525330);p=md5_ff(p,o,n,m,q[h+4],7,-176418897);m=md5_ff(m,p,o,n,q[h+5],12,1200080426);n=md5_ff(n,m,p,o,q[h+6],17,-1473231341);o=md5_ff(o,n,m,p,q[h+7],22,-45705983);p=md5_ff(p,o,n,m,q[h+8],7,1770035416);m=md5_ff(m,p,o,n,q[h+9],12,-1958414417);n=md5_ff(n,m,p,o,q[h+10],17,-42063);o=md5_ff(o,n,m,p,q[h+11],22,-1990404162);p=md5_ff(p,o,n,m,q[h+12],7,1804603682);m=md5_ff(m,p,o,n,q[h+13],12,-40341101);n=md5_ff(n,m,p,o,q[h+14],17,-1502002290);o=md5_ff(o,n,m,p,q[h+15],22,1236535329);p=md5_gg(p,o,n,m,q[h+1],5,-165796510);m=md5_gg(m,p,o,n,q[h+6],9,-1069501632);n=md5_gg(n,m,p,o,q[h+11],14,643717713);o=md5_gg(o,n,m,p,q[h+0],20,-373897302);p=md5_gg(p,o,n,m,q[h+5],5,-701558691);m=md5_gg(m,p,o,n,q[h+10],9,38016083);n=md5_gg(n,m,p,o,q[h+15],14,-660478335);o=md5_gg(o,n,m,p,q[h+4],20,-405537848);p=md5_gg(p,o,n,m,q[h+9],5,568446438);m=md5_gg(m,p,o,n,q[h+14],9,-1019803690);n=md5_gg(n,m,p,o,q[h+3],14,-187363961);o=md5_gg(o,n,m,p,q[h+8],20,1163531501);p=md5_gg(p,o,n,m,q[h+13],5,-1444681467);m=md5_gg(m,p,o,n,q[h+2],9,-51403784);n=md5_gg(n,m,p,o,q[h+7],14,1735328473);o=md5_gg(o,n,m,p,q[h+12],20,-1926607734);p=md5_hh(p,o,n,m,q[h+5],4,-378558);m=md5_hh(m,p,o,n,q[h+8],11,-2022574463);n=md5_hh(n,m,p,o,q[h+11],16,1839030562);o=md5_hh(o,n,m,p,q[h+14],23,-35309556);p=md5_hh(p,o,n,m,q[h+1],4,-1530992060);m=md5_hh(m,p,o,n,q[h+4],11,1272893353);n=md5_hh(n,m,p,o,q[h+7],16,-155497632);o=md5_hh(o,n,m,p,q[h+10],23,-1094730640);p=md5_hh(p,o,n,m,q[h+13],4,681279174);m=md5_hh(m,p,o,n,q[h+0],11,-358537222);n=md5_hh(n,m,p,o,q[h+3],16,-722521979);o=md5_hh(o,n,m,p,q[h+6],23,76029189);p=md5_hh(p,o,n,m,q[h+9],4,-640364487);m=md5_hh(m,p,o,n,q[h+12],11,-421815835);n=md5_hh(n,m,p,o,q[h+15],16,530742520);o=md5_hh(o,n,m,p,q[h+2],23,-995338651);p=md5_ii(p,o,n,m,q[h+0],6,-198630844);m=md5_ii(m,p,o,n,q[h+7],10,1126891415);n=md5_ii(n,m,p,o,q[h+14],15,-1416354905);o=md5_ii(o,n,m,p,q[h+5],21,-57434055);p=md5_ii(p,o,n,m,q[h+12],6,1700485571);m=md5_ii(m,p,o,n,q[h+3],10,-1894986606);n=md5_ii(n,m,p,o,q[h+10],15,-1051523);o=md5_ii(o,n,m,p,q[h+1],21,-2054922799);p=md5_ii(p,o,n,m,q[h+8],6,1873313359);m=md5_ii(m,p,o,n,q[h+15],10,-30611744);n=md5_ii(n,m,p,o,q[h+6],15,-1560198380);o=md5_ii(o,n,m,p,q[h+13],21,1309151649);p=md5_ii(p,o,n,m,q[h+4],6,-145523070);m=md5_ii(m,p,o,n,q[h+11],10,-1120210379);n=md5_ii(n,m,p,o,q[h+2],15,718787259);o=md5_ii(o,n,m,p,q[h+9],21,-343485551);p=safe_add(p,k);o=safe_add(o,j);n=safe_add(n,g);m=safe_add(m,f)}return Array(p,o,n,m)}function md5_cmn(j,f,d,c,h,g){return safe_add(bit_rol(safe_add(safe_add(f,j),safe_add(c,g)),h),d)}function md5_ff(h,g,m,l,f,k,j){return md5_cmn((g&m)|((~g)&l),h,g,f,k,j)}function md5_gg(h,g,m,l,f,k,j){return md5_cmn((g&l)|(m&(~l)),h,g,f,k,j)}function md5_hh(h,g,m,l,f,k,j){return md5_cmn(g^m^l,h,g,f,k,j)}function md5_ii(h,g,m,l,f,k,j){return md5_cmn(m^(g|(~l)),h,g,f,k,j)}function core_hmac_md5(c,g){var f=str2binl(c);if(f.length>16){f=core_md5(f,c.length*chrsz)}var a=Array(16),d=Array(16);for(var b=0;b<16;b++){a[b]=f[b]^909522486;d[b]=f[b]^1549556828}var h=core_md5(a.concat(str2binl(g)),512+g.length*chrsz);return core_md5(d.concat(h),512+128)}function safe_add(a,d){var c=(a&65535)+(d&65535);var b=(a>>16)+(d>>16)+(c>>16);return(b<<16)|(c&65535)}function bit_rol(a,b){return(a<<b)|(a>>>(32-b))}function str2binl(d){var c=Array();var a=(1<<chrsz)-1;for(var b=0;b<d.length*chrsz;b+=chrsz){c[b>>5]|=(d.charCodeAt(b/chrsz)&a)<<(b%32)}return c}function binl2str(c){var d="";var a=(1<<chrsz)-1;for(var b=0;b<c.length*32;b+=chrsz){d+=String.fromCharCode((c[b>>5]>>>(b%32))&a)}return d}function binl2hex(c){var b=hexcase?"0123456789ABCDEF":"0123456789abcdef";var d="";for(var a=0;a<c.length*4;a++){d+=b.charAt((c[a>>2]>>((a%4)*8+4))&15)+b.charAt((c[a>>2]>>((a%4)*8))&15)}return d}function binl2b64(d){var c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var g="";for(var b=0;b<d.length*4;b+=3){var f=(((d[b>>2]>>8*(b%4))&255)<<16)|(((d[b+1>>2]>>8*((b+1)%4))&255)<<8)|((d[b+2>>2]>>8*((b+2)%4))&255);for(var a=0;a<4;a++){if(b*8+a*6>d.length*32){g+=b64pad}else{g+=c.charAt((f>>6*(3-a))&63)}}}return g}var stpicopen="../../../../images/slimtree/folder2.gif";var stpicclose="../../../../images/slimtree/folderopen2.gif";var stpicblank="../../../../images/slimtree/page.gif";var stpicline="../../../../images/slimtree/line.gif";var stpicjoin="../../../../images/slimtree/join.gif";var stpicjoinb="../../../../images/slimtree/joinbottom.gif";var stimgopen;var stimgclose;var stimgblank;var stimgline;var stimgjoin;function _apc(a,b){a.appendChild(b)}function SlimTree(a,c,b){if(!stimgopen){stimgopen=elem("img",{src:stpicopen,border:0,style:"height:13px;width:31px;"});stimgclose=elem("img",{src:stpicclose,border:0,style:"height:13px;width:31px;"});stimgblank=elem("img",{src:stpicblank,border:0,style:"height:18px;width:18px;"});stimgline=elem("img",{src:stpicline,border:0,style:"height:18px;width:18px;"});stimgjoin=elem("img",{src:stpicjoin,border:0,style:"display:inline;height:18px;width:18px;"})}this.context=a;this.handle=c;this.cache=new Object();if(b){this.rootimg=elem("img",{src:b,border:0,style:"padding-right: 4px;"})}}SlimTree.prototype.addCachedChildren=function(a){var b;while(b=this.cache[a].shift()){this.addNode(b.id,b.pid,b.name,b.action,b.title)}this.cache[a]=null};SlimTree.prototype.addNode=function(d,h,c,g,l,m){if(h!=-1&&!$(h)){if(!this.cache[h]){this.cache[h]=new Array()}this.cache[h].push({id:d,pid:h,name:c,action:g,title:l});return}if(!g){g="javascript:"+this.handle+'.toggle("'+d+'");'}var f;if(typeof g=="string"){f=elem("a",{href:g},c)}else{f=elem("a",{href:"javascript:void(0);"},c);f.onclick=g}var b=elem("div",{id:d});var k=elem("div",{style:"vertical-align:middle"});var j=elem("a",{id:"stlink_"+d});var a=elem("div",{id:"stcont_"+d});if(m){addCSSClass(f,m)}if(l){f.setAttribute("title",l)}else{f.setAttribute("title",c)}_apc(k,j);_apc(k,f);_apc(b,k);_apc(b,a);if(h==-1){this.rootid=d;_apc(this.context,b);if(this.rootimg){_apc(j,this.rootimg.cloneNode(true))}else{_apc(j,stimgblank.cloneNode(true))}}else{if(h==this.rootid){this.open(h)}else{this.close(h)}$(h).setAttribute("haschild","1");_apc(j,stimgblank.cloneNode(true));b.style.paddingLeft="18px";b.style.backgroundImage="url("+stpicjoinb+")";b.style.backgroundRepeat="no-repeat";_apc($("stcont_"+h),b);if(b.previousSibling){stMakePaths(b)}}if(this.cache[d]){this.addCachedChildren(d)}};function stMakePaths(a){_apc(a.previousSibling.firstChild,stimgjoin.cloneNode(true));_apc(a.previousSibling.firstChild,a.previousSibling.firstChild.firstChild);_apc(a.previousSibling.firstChild,a.previousSibling.firstChild.firstChild);a.previousSibling.firstChild.firstChild.style.marginLeft="-18px";a.previousSibling.style.backgroundImage="url("+stpicline+")";a.previousSibling.style.backgroundRepeat="repeat-y"}SlimTree.prototype.expandAll=function(){this.flex(this.rootid,"open")};SlimTree.prototype.closeAll=function(){this.flex(this.rootid,"close")};SlimTree.prototype.flex=function(g,b){if(b=="open"){this.open(g)}else{if(g!=this.rootid){this.close(g)}}var f=$("stcont_"+g);for(var d=0;d!=f.childNodes.length;d++){var a=f.childNodes[d];if(a.nodeName.toLowerCase()=="div"){if($(a.id).getAttribute("haschild")=="1"){this.flex(a.id,b)}}}};SlimTree.prototype.toggle=function(a){if($(a).getAttribute("ostate")=="1"){this.open(a)}else{if($(a).getAttribute("ostate")=="2"){this.close(a)}}};SlimTree.prototype.open=function(b){if($(b).getAttribute("ostate")=="2"){return}var a=$("stlink_"+b);if(!a){return}if(b!=this.rootid||!this.rootimg){removeChildren(a);_apc(a,stimgclose.cloneNode(true))}a.setAttribute("href","javascript:"+this.handle+'.close("'+b+'");');unHideMe($("stcont_"+b));$(b).setAttribute("ostate","2")};SlimTree.prototype.close=function(b){var a=$("stlink_"+b);if(!a){return}if(b!=this.rootid||!this.rootimg){removeChildren(a);_apc(a,stimgopen.cloneNode(true))}a.setAttribute("href","javascript:"+this.handle+'.open("'+b+'");');hideMe($("stcont_"+b));$(b).setAttribute("ostate","1")};function isXUL(){try{if(IAMXUL){return true}}catch(a){return false}}var __ilsEvent;var DEBUGSLIM;function Request(f){var d=f.split(":");if(d[2]=="1"&&isXUL()){d[1]+=".staff"}this.request=new RemoteRequest(d[0],d[1]);var g=[];if(isXUL()){if(!location.href.match(/^https:/)){this.request.setSecure(false)}}else{if(G.user&&G.user.session){var b=getAuthtime();if(b){new AuthTimer(b).run()}}}for(var a=1;a!=arguments.length;a++){g.push(arguments[a]);this.request.addParam(arguments[a])}if(getDebug()){var h="";for(var c=0;c!=g.length;c++){if(c>0){h+=", "}h+=js2JSON(g[c])}_debug("request "+d[0]+" "+d[1]+" "+h)}else{if(DEBUGSLIM){_debug("request "+d[1])}}}Request.prototype.callback=function(a){this.request.setCompleteCallback(a)};Request.prototype.send=function(a){this.request.send(a)};Request.prototype.result=function(){return this.request.getResultObject()};function showCanvas(){for(var a in G.ui.altcanvas){hideMe(G.ui.altcanvas[a])}hideMe(G.ui.common.loading);unHideMe(G.ui.common.canvas_main);try{G.ui.searchbar.text.focus()}catch(b){}}function swapCanvas(b){for(var a in G.ui.altcanvas){hideMe(G.ui.altcanvas[a])}hideMe(G.ui.common.loading);hideMe(G.ui.common.canvas_main);unHideMe(b)}var currentPage=null;function findCurrentPage(){if(currentPage){return currentPage}var a=[];for(var d in config.page){a.push(config.page[d])}a=a.sort(function(g,f){return -(g.length-f.length)});var c=location.pathname;if(!c.match(/.*\.xml$/)){c+="index.xml"}var b=null;for(var d=0;d<a.length;d++){if(c.indexOf(a[d])!=-1){b=a[d]}}for(var d in config.page){if(config.page[d]==b){currentPage=d;return d}}return null}function initParams(){var a=new CGI();var d;var c=a.param(PARAM_LOCATION);var b=a.param(PARAM_LASSO);if(b){b=findOrgLasso(b);LASSO=b?b.id():null}if(c){d=findOrgUnit(c);LOCATION=d?d.id():null;if(!LOCATION){d=findOrgUnit(c);LOCATION=d?d.id():null}}d=null;c=a.param(PARAM_ORIGLOC);if(c){d=findOrgUnit(c);if(!d){d=findOrgUnitSN(c)}}ORIGLOC=(d)?d.id():null;DEPTH=parseInt(a.param(PARAM_DEPTH));if(isNaN(DEPTH)){DEPTH=null}FACET=a.param(PARAM_FACET);TERM=a.param(PARAM_TERM);STYPE=a.param(PARAM_STYPE);FORM=a.param(PARAM_FORM);OFFSET=parseInt(a.param(PARAM_OFFSET));COUNT=parseInt(a.param(PARAM_COUNT));HITCOUNT=parseInt(a.param(PARAM_HITCOUNT));MRID=parseInt(a.param(PARAM_MRID));RID=parseInt(a.param(PARAM_RID));AUTHTIME=parseInt(a.param(PARAM_AUTHTIME));ADVTERM=a.param(PARAM_ADVTERM);ADVTYPE=a.param(PARAM_ADVTYPE);RTYPE=a.param(PARAM_RTYPE);SORT=a.param(PARAM_SORT);SORT_DIR=a.param(PARAM_SORT_DIR);DEBUG=a.param(PARAM_DEBUG);CALLNUM=a.param(PARAM_CN);LITFORM=a.param(PARAM_LITFORM);ITEMFORM=a.param(PARAM_ITEMFORM);ITEMTYPE=a.param(PARAM_ITEMTYPE);BIBLEVEL=a.param(PARAM_BIBLEVEL);AUDIENCE=a.param(PARAM_AUDIENCE);SEARCHES=a.param(PARAM_SEARCHES);LANGUAGE=a.param(PARAM_LANGUAGE);TFORM=a.param(PARAM_TFORM);RDEPTH=a.param(PARAM_RDEPTH);AVAIL=a.param(PARAM_AVAIL);COPYLOCS=a.param(PARAM_COPYLOCS);PUBD_BEFORE=a.param(PARAM_PUBD_BEFORE);PUBD_AFTER=a.param(PARAM_PUBD_AFTER);PUBD_BETWEEN=a.param(PARAM_PUBD_BETWEEN);PUBD_DURING=a.param(PARAM_PUBD_DURING);if(isNaN(RDEPTH)){RDEPTH=0}if(isNaN(OFFSET)){OFFSET=0}if(isNaN(COUNT)){COUNT=10}if(isNaN(HITCOUNT)){HITCOUNT=0}if(isNaN(MRID)){MRID=0}if(isNaN(RID)){RID=0}if(isNaN(ORIGLOC)){ORIGLOC=0}if(isNaN(AUTHTIME)){AUTHTIME=0}if(ADVTERM==null){ADVTERM=""}if(isNaN(AVAIL)){AVAIL=0}}function clearSearchParams(){TERM=null;STYPE=null;FORM=null;OFFSET=0;HITCOUNT=0;ADVTERM=null;ADVTYPE=null;MRID=null;RID=null;RTYPE=null;SORT=null;SORT_DIR=null;RLIST=null;CALLNUM=null;LITFORM=null;ITEMFORM=null;ITEMTYPE=null;BIBLEVEL=null;AUDIENCE=null;SEARCHES=null;LANGUAGE=null;RDEPTH=null;AVAIL=null;COPYLOCS=null;PUBD_BEFORE=null;PUBD_AFTER=null;PUBD_BETWEEN=null;PUBD_DURING=null}function initCookies(){dojo.require("dojo.cookie");FONTSIZE="regular";var a=dojo.cookie(COOKIE_FONT);scaleFonts(a);if(a){FONTSIZE=a}SKIN=dojo.cookie(COOKIE_SKIN);if(findCurrentPage()==HOME){dojo.cookie(COOKIE_SEARCH,null,{expires:-1})}}function getTerm(){return TERM}function getFacet(){return FACET}function getStype(){return STYPE}function getLocation(){return LOCATION}function getLasso(){return LASSO}function getDepth(){return DEPTH}function getForm(){return FORM}function getTform(){return TFORM}function getOffset(){return OFFSET}function getDisplayCount(){return COUNT}function getHitCount(){return HITCOUNT}function getMrid(){return MRID}function getRid(){return RID}function getOrigLocation(){return ORIGLOC}function getAuthtime(){return AUTHTIME}function getSearchBarExtras(){return SBEXTRAS}function getFontSize(){return FONTSIZE}function getSkin(){return SKIN}function getAdvTerm(){return ADVTERM}function getAdvType(){return ADVTYPE}function getRtype(){return RTYPE}function getSort(){return SORT}function getSortDir(){return SORT_DIR}function getDebug(){return DEBUG}function getCallnumber(){return CALLNUM}function getLitForm(){return LITFORM}function getItemForm(){return ITEMFORM}function getItemType(){return ITEMTYPE}function getBibLevel(){return BIBLEVEL}function getAudience(){return AUDIENCE}function getSearches(){return SEARCHES}function getLanguage(){return LANGUAGE}function getRdepth(){return RDEPTH}function getAvail(){return AVAIL}function getCopyLocs(){return COPYLOCS}function getPubdBefore(){return PUBD_BEFORE}function getPubdAfter(){return PUBD_AFTER}function getPubdBetween(){return PUBD_BETWEEN}function getPubdDuring(){return PUBD_DURING}function findBasePath(){var b=location.pathname;if(!b.match(/.*\.xml$/)){b+="index.xml"}var a=b.indexOf(config.page[findCurrentPage()]);return b.substring(0,a)}function findBaseURL(a){var d=findBasePath();var c=(a)?"https:":"http:";var b=location.host.replace(/:.*/,"");return c+"//"+b+d}function buildImageLink(b,a){return findBaseURL(a)+"../../../../images/"+b}function buildExtrasLink(b,a){return findBaseURL(a)+"../../../../extras/"+b}var consoleService;function _debug(b){try{dump("dbg: "+b+"\n")}catch(a){}}var forceLoginSSL;function buildOPACLink(f,h,c){if(!f){f={}}var d="";if(c==undefined&&(location.protocol=="https:"||(forceLoginSSL&&G.user&&G.user.session))){c=true}if(!h){d=findBaseURL(c);if(f.page){d+=config.page[f.page]}else{d+=config.page[findCurrentPage()]}}d+="?";for(var a in f){var b=f[a];if(a=="page"||b==null||b==undefined||b+""=="NaN"){continue}if(a==PARAM_OFFSET&&b==0){continue}if(a==PARAM_COUNT&&b==10){continue}if(a==PARAM_FORM&&b=="all"){continue}if(instanceOf(b,Array)&&b.length){for(var g=0;g<b.length;g++){d+="&"+a+"="+encodeURIComponent(b[g])}}else{d+="&"+a+"="+encodeURIComponent(b)}}if(getDebug()){d+=_appendParam(DEBUG,PARAM_DEBUG,f,getDebug,d)}if(getOrigLocation()!=1){d+=_appendParam(ORIGLOC,PARAM_ORIGLOC,f,getOrigLocation,d)}if(getTerm()){d+=_appendParam(TERM,PARAM_TERM,f,getTerm,d)}if(getFacet()){d+=_appendParam(FACET,PARAM_FACET,f,getFacet,d)}if(getStype()){d+=_appendParam(STYPE,PARAM_STYPE,f,getStype,d)}if(getLocation()!=1){d+=_appendParam(LOCATION,PARAM_LOCATION,f,getLocation,d)}if(getLasso()!=null){d+=_appendParam(LASSO,PARAM_LASSO,f,getLasso,d)}if(getDepth()!=null){d+=_appendParam(DEPTH,PARAM_DEPTH,f,getDepth,d)}if(getForm()&&(getForm()!="all")){d+=_appendParam(FORM,PARAM_FORM,f,getForm,d)}if(getTform()&&(getTform()!="all")){d+=_appendParam(TFORM,PARAM_TFORM,f,getTform,d)}if(getOffset()!=0){d+=_appendParam(OFFSET,PARAM_OFFSET,f,getOffset,d)}if(getDisplayCount()!=10){d+=_appendParam(COUNT,PARAM_COUNT,f,getDisplayCount,d)}if(getHitCount()){d+=_appendParam(HITCOUNT,PARAM_HITCOUNT,f,getHitCount,d)}if(getMrid()){d+=_appendParam(MRID,PARAM_MRID,f,getMrid,d)}if(getRid()){d+=_appendParam(RID,PARAM_RID,f,getRid,d)}if(getAuthtime()){d+=_appendParam(AUTHTIME,PARAM_AUTHTIME,f,getAuthtime,d)}if(getAdvTerm()){d+=_appendParam(ADVTERM,PARAM_ADVTERM,f,getAdvTerm,d)}if(getAdvType()){d+=_appendParam(ADVTYPE,PARAM_ADVTYPE,f,getAdvType,d)}if(getRtype()){d+=_appendParam(RTYPE,PARAM_RTYPE,f,getRtype,d)}if(getItemForm()){d+=_appendParam(ITEMFORM,PARAM_ITEMFORM,f,getItemForm,d)}if(getItemType()){d+=_appendParam(ITEMTYPE,PARAM_ITEMTYPE,f,getItemType,d)}if(getBibLevel()){d+=_appendParam(BIBLEVEL,PARAM_BIBLEVEL,f,getBibLevel,d)}if(getLitForm()){d+=_appendParam(LITFORM,PARAM_LITFORM,f,getLitForm,d)}if(getAudience()){d+=_appendParam(AUDIENCE,PARAM_AUDIENCE,f,getAudience,d)}if(getSearches()){d+=_appendParam(SEARCHES,PARAM_SEARCHES,f,getSearches,d)}if(getLanguage()){d+=_appendParam(LANGUAGE,PARAM_LANGUAGE,f,getLanguage,d)}if(getRdepth()!=null){d+=_appendParam(RDEPTH,PARAM_RDEPTH,f,getRdepth,d)}if(getSort()!=null){d+=_appendParam(SORT,PARAM_SORT,f,getSort,d)}if(getSortDir()!=null){d+=_appendParam(SORT_DIR,PARAM_SORT_DIR,f,getSortDir,d)}if(getAvail()){d+=_appendParam(AVAIL,PARAM_AVAIL,f,getAvail,d)}if(getCopyLocs()){d+=_appendParam(COPYLOCS,PARAM_COPYLOCS,f,getCopyLocs,d)}if(getPubdBefore()){d+=_appendParam(PUBD_BEFORE,PARAM_PUBD_BEFORE,f,getPubdBefore,d)}if(getPubdAfter()){d+=_appendParam(PUBD_AFTER,PARAM_PUBD_AFTER,f,getPubdAfter,d)}if(getPubdBetween()){d+=_appendParam(PUBD_BETWEEN,PARAM_PUBD_BETWEEN,f,getPubdBetween,d)}if(getPubdDuring()){d+=_appendParam(PUBD_DURING,PARAM_PUBD_DURING,f,getPubdDuring,d)}return d.replace(/\&$/,"").replace(/\?\&/,"?")}var xx=1;function _appendParam(b,g,a,f,d){var c="";if(b!=null&&(b+""!="NaN")&&a[g]==null&&f()!=null&&f()+""!=""){c="&"+g+"="+encodeURIComponent(f())}return c}function cleanISBN(b){if(b){b=b.toString().replace(/^\s+/,"");var a=b.indexOf(" ");if(a>-1){b=b.substring(0,a)}}else{b=""}return b}function buildTitleLink(d,c){if(!d){return}c.appendChild(text(normalize(truncate(d.title(),65))));var a={};a.page=RRESULT;a[PARAM_OFFSET]=0;a[PARAM_MRID]=d.doc_id();a[PARAM_RTYPE]=RTYPE_MRID;var b=c.innerHTML;c.setAttribute("href",buildOPACLink(a));c.innerHTML=b}function buildTitleDetailLink(d,c){if(!d){return}c.appendChild(text(normalize(truncate(d.title(),65))));var a={};a.page=RDETAIL;a[PARAM_RID]=d.doc_id();var b=c.innerHTML;c.setAttribute("href",buildOPACLink(a));c.innerHTML=b}function buildSearchLink(d,b,c,f){if(!f){f=65}var a={};if(SHOW_MR_DEFAULT||findCurrentPage()==MRESULT){a.page=MRESULT}else{a.page=RRESULT;a[PARAM_RTYPE]=d}a[PARAM_OFFSET]=0;a[PARAM_TERM]=b;a[PARAM_STYPE]=d;c.appendChild(text(normalize(truncate(b,f))));c.setAttribute("href",buildOPACLink(a))}function setSessionCookie(a){dojo.cookie(COOKIE_SES,a)}function grabUser(b,f){_debug("grabUser auth token = "+b);if(!b&&isXUL()){stash=fetchXULStash();b=stash.session.key;_debug("stash auth token = "+b)}if(!b){b=dojo.cookie(COOKIE_SES);_debug("cookie auth token = "+b)}if(!b){return false}if(!f){if(G.user&&G.user.session==b){return G.user}}var d=new Request(FETCH_SESSION,b,1);d.request.alertEvent=false;d.send(true);var c=d.result();if(!c||c.textcode=="NO_SESSION"){if(isXUL()){dojo.require("openils.XUL");dump("getNewSession in opac_utils.js\n");openils.XUL.getNewSession(function(j,h){if(j){b=h;var g=new Request(FETCH_SESSION,b,1);g.request.alertEvent=false;g.send(true);c=g.result()}})}if(!c||c.textcode=="NO_SESSION"){doLogout();return false}}if(!(typeof c=="object"&&c._isfieldmapper)){doLogout();return false}G.user=c;G.user.fleshed=false;G.user.session=b;setSessionCookie(b);grabUserPrefs();if(G.user.prefs["opac.hits_per_page"]){COUNT=parseInt(G.user.prefs["opac.hits_per_page"])}if(G.user.prefs[PREF_DEF_FONT]){setFontSize(G.user.prefs[PREF_DEF_FONT])}var a=getAuthtime();if(a&&!isXUL()){new AuthTimer(a).run()}return G.user}function grabUserPrefs(a,c){if(a==null){a=G.user}if(!c&&a.prefs){return a.prefs}var b=new Request(FETCH_USER_PREFS,G.user.session,a.id());b.send(true);a.prefs=b.result();return a.prefs}function grabFleshedUser(){if(!G.user||!G.user.session){grabUser();if(!G.user||!G.user.session){return null}}if(G.user.fleshed){return G.user}var a=new Request(FETCH_FLESHED_USER,G.user.session);a.send(true);G.user=a.result();if(!G.user||G.user.length==0){dojo.cookie(COOKIE_SES,null,{expires:-1});G.user=null;return false}G.user.session=ses;G.user.fleshed=true;setSessionCookie(ses);return G.user}function checkUserSkin(b){return;var c=getSkin();var a=grabSkinFromURL();if(b){c=b}if(!c){if(grabUser()){if(grabUserPrefs()){c=G.user.prefs["opac.skin"];dojo.cookie(COOKIE_SKIN,c,{expires:365})}}}if(!c){return}if(a!=c){var d=buildOPACLink();goTo(d.replace(a,c))}}function updateUserSetting(d,g,c){if(c==null){c=G.user}var b={};b[d]=g;var f=new Request(UPDATE_USER_PREFS,c.session,b);f.send(true);return f.result()}function commitUserPrefs(){var a=new Request(UPDATE_USER_PREFS,G.user.session,null,G.user.prefs);a.send(true);return a.result()}function grabSkinFromURL(){var f=findBasePath();f=f.replace("/xml/","");var d="";for(var a=f.length-1;a>=0;a--){var b=f.charAt(a);if(b=="/"){break}d+=b}var c="";for(a=d.length-1;a>=0;a--){c+=d.charAt(a)}return c}function doLogin(k){abortAllRequests();var j=G.ui.login.username.value;var a=G.ui.login.password.value;var g=new Request(LOGIN_INIT,j);g.send(true);var c=g.result();if(!c||c=="0"){alert("Error Communicating with Authentication Server");return null}var d={password:hex_md5(c+hex_md5(a)),type:"opac",org:getOrigLocation()};r=fetchOrgSettingDefault(globalOrgTree.id(),"opac.barcode_regex");if(r){REGEX_BARCODE=new RegExp(r)}if(j.match(REGEX_BARCODE)){d.barcode=j}else{d.username=j}var b=new Request(LOGIN_COMPLETE,d);b.request.alertEvent=false;b.send(true);var f=b.result();if(!f){alertId("patron_login_failed");return null}if(checkILSEvent(f)){if(f.textcode=="PATRON_INACTIVE"){alertId("patron_inactive_alert");return}if(f.textcode=="PATRON_CARD_INACTIVE"){alertId("patron_card_inactive_alert");return}if(f.textcode=="LOGIN_FAILED"||f.textcode=="PERM_FAILURE"){alertId("patron_login_failed");return}}AUTHTIME=parseInt(f.payload.authtime);var h=grabUser(f.payload.authtoken,true);if(h&&!k){runEvt("common","locationChanged",h.ws_ou(),findOrgDepth(h.ws_ou()))}checkUserSkin();return h}function doLogout(){abortAllRequests();if(G.user&&G.user.session){var c=new Request(LOGIN_DELETE,G.user.session);c.send(true);try{c.result()}catch(d){}}G.user=null;dojo.require("dojo.cookie");dojo.cookie(COOKIE_SES,null,{expires:-1});dojo.cookie(COOKIE_RIDS,null,{expires:-1});dojo.cookie(COOKIE_SKIN,null,{expires:-1});dojo.cookie(COOKIE_SEARCH,null,{expires:-1});checkUserSkin("default");COUNT=10;var a={};a[PARAM_TERM]="";a[PARAM_LOCATION]=getOrigLocation();a[PARAM_DEPTH]=findOrgDepth(getOrigLocation());if(a[PARAM_DEPTH]==-1){a[PARAM_DEPTH]=0}a.page="home";var b=false;try{if(isFrontPage){b=true}}catch(f){b=false}if(!b){goTo(buildOPACLink(a,false,false))}}function hideMe(a){addCSSClass(a,config.css.hide_me)}function unHideMe(a){removeCSSClass(a,config.css.hide_me)}function drawOrgTree(){setTimeout("buildOrgSelector(G.ui.common.org_tree, orgTreeSelector);",1)}var checkOrgHiding_cached=false;var checkOrgHiding_cached_context_org;var checkOrgHiding_cached_depth;function checkOrgHiding(){if(isXUL()){return false}var b=getOrigLocation()||globalOrgTree.id();var a;if(checkOrgHiding_cached){if(checkOrgHiding_cached_context_org!=b){checkOrgHiding_cached_context_org=b;checkOrgHiding_cached_depth=undefined;checkOrgHiding_cached=false}else{a=checkOrgHiding_cached_depth}}else{a=fetchOrgSettingDefault(b,"opac.org_unit_hiding.depth");checkOrgHiding_cached_depth=a;checkOrgHiding_cached_context_org=b;checkOrgHiding_cached=true}if(findOrgDepth(b)<a){return false}return{org:findOrgUnit(b),depth:a}}var orgTreeSelector;function buildOrgSelector(d){var a=new SlimTree(d,"orgTreeSelector");orgTreeSelector=a;var c=checkOrgHiding();for(var b in orgArraySearcher){var d=orgArraySearcher[b];if(d==null){continue}if(!isXUL()&&!isTrue(d.opac_visible())){continue}if(c){if(!orgIsMine(c.org,d,c.depth)){continue}}if(d.parent_ou()==null){a.addNode(d.id(),-1,d.name(),"javascript:orgSelect("+d.id()+");",d.name())}else{if(c&&c.depth==findOrgDepth(d)){a.addNode(d.id(),-1,d.name(),"javascript:orgSelect("+d.id()+");",d.name())}else{a.addNode(d.id(),d.parent_ou(),d.name(),"javascript:orgSelect("+d.id()+");",d.name())}}}hideMe($("org_loading_div"));unHideMe($("org_selector_tip"));return a}function orgSelect(b){showCanvas();runEvt("common","locationChanged",b,findOrgDepth(b));var a=findOrgLasso(getLasso());if(!a){a=findOrgUnit(b)}removeChildren(G.ui.common.now_searching);G.ui.common.now_searching.appendChild(text(a.name()))}function setFontSize(a){scaleFonts(a);dojo.cookie(COOKIE_FONT,a,{expires:365})}var resourceFormats=["text","moving image","sound recording","software, multimedia","still image","cartographic","mixed material","notated music","three dimensional object"];function modsFormatToMARC(a){switch(a){case"text":return"at";case"moving image":return"g";case"sound recording":return"ij";case"sound recording-nonmusical":return"i";case"sound recording-musical":return"j";case"software, multimedia":return"m";case"still image":return"k";case"cartographic":return"ef";case"mixed material":return"op";case"notated music":return"cd";case"three dimensional object":return"r"}return"at"}function MARCFormatToMods(a){switch(a){case"a":case"t":return"text";case"g":return"moving image";case"i":return"sound recording-nonmusical";case"j":return"sound recording-musical";case"m":return"software, multimedia";case"k":return"still image";case"e":case"f":return"cartographic";case"o":case"p":return"mixed material";case"c":case"d":return"notated music";case"r":return"three dimensional object"}return"text"}function MARCTypeToFriendly(b){var c=$("format_words");switch(b){case"a":case"t":return $n(c,"at").innerHTML;default:var a=$n(c,b);if(a){return a.innerHTML}}return""}function setResourcePic(a,b){a.setAttribute("src","../../../../images/tor/"+b+".jpg");a.title=b}function msg(b){try{alert(b)}catch(a){}}function findRecord(j,d){try{for(var c=0;c!=recordsCache.length;c++){var h=recordsCache[c];if(h&&h.doc_id()==j){return h}}}catch(g){}var a=FETCH_RMODS;if(d=="M"){a=FETCH_MRMODS}var f=new Request(a,j);f.request.alertEvent=false;f.send(true);var b=f.result();if(checkILSEvent(b)){return null}return b}function Timer(a,b){this.name=a;this.count=1;this.node=b}Timer.prototype.start=function(){_timerRun(this.name)};Timer.prototype.stop=function(){this.done=true};function _timerRun(tname){var _t;eval("_t="+tname);if(_t.done){return}if(_t.count>100){return}var str=" . ";if((_t.count%5)==0){str=_t.count/5}_t.node.appendChild(text(str));setTimeout("_timerRun('"+tname+"');",200);_t.count++}function checkILSEvent(a){if(a&&a.ilsevent!=null&&a.ilsevent!=0){return parseInt(a.ilsevent)}return null}function alertILSEvent(a,b){if(!b){b=""}if(b){alert(b+"\n"+a.textcode+"\n"+a.desc)}else{alert(a.textcode+"\n"+a.desc)}}var __authTimer;function AuthTimer(b){this.time=(b-LOGOUT_WARNING_TIME)*1000;if(__authTimer){try{clearTimeout(__authTimer.id)}catch(a){}}__authTimer=this}AuthTimer.prototype.run=function(){this.id=setTimeout("_authTimerAlert()",this.time)};function _authTimerAlert(){alert($("auth_session_expiring").innerHTML);if(!grabUser(null,true)){doLogout()}}function grabUserByBarcode(c,a){var b=new Request(FETCH_USER_BYBARCODE,c,a);b.send(true);return b.result()}function goHome(){goTo(buildOPACLink({page:HOME}))}function buildOrgSel(a,h,f,d){if(!d){d="name"}if(!isXUL()&&!isTrue(h.opac_visible())){return}insertSelectorVal(a,-1,h[d](),h.id(),null,findOrgDepth(h)-f);var b=h.children();if(b){for(var g=0;g<b.length;g++){buildOrgSel(a,b[g],f,d)}}}function buildMergedOrgSel(a,g,h,f){if(!f){f="name"}for(var d=0;d<g.length;d++){var k=findOrgUnit(g[d]);insertSelectorVal(a,-1,k[f](),k.id(),null,findOrgDepth(k)-h);var b=k.children();if(b){for(var j=0;j<b.length;j++){buildOrgSel(a,b[j],h,f)}}}}function parseForm(g){if(!g){return{}}var d=g.replace(/-\w+$/,"");var f=null;var b;var a;if(g.match(/-/)){f=g.replace(/^\w+-/,"")}if(d){a=[];for(var c=0;c<d.length;c++){a.push(d.charAt(c))}}if(f){b=[];for(var c=0;c<f.length;c++){b.push(f.charAt(c))}}return{item_type:a,item_form:b}}function isTrue(a){return(a&&a!="0"&&!(a+"").match(/^f$/i))}function fetchPermOrgs(){var c=[];for(var d=0;d<arguments.length;d++){c.push(arguments[d])}var b=new Request(FETCH_HIGHEST_PERM_ORG,G.user.session,G.user.id(),c);b.send(true);return b.result()}function print_tabs(b){var c="";for(var a=0;a<b;a++){c=c+"  "}return c}function formatJSON(c){var d="";var b=0;for(var a in c){if(c[a]=="{"||c[a]=="["){d=d+c[a]+"\n"+print_tabs(++b)}else{if(c[a]=="}"||c[a]=="]"){b--;d=d+"\n"+print_tabs(b)+c[a]}else{if(c[a]==","){d=d+c[a]+"\n"+print_tabs(b)}else{d=d+c[a]}}}}return d}function fetchOrgSettingDefault(a,b){var d=new Request(FETCH_ORG_SETTING,a,b);d.send(true);var c=d.result();return(c)?c.value:null}function fetchBatchOrgSetting(a,d,c){var b=new Request("open-ils.actor:open-ils.actor.ou_setting.ancestor_default.batch",a,d);if(c){b.callback(function(f){c(f.getResultObject())});b.send()}else{b.send(true);return b.result()}}function findOrgDepth(a){var c=findOrgUnit(a);if(!c){return -1}var b=findOrgType(c.ou_type());if(b){return b.depth()}return -1}function findOrgTypeFromDepth(c){if(c==null){return null}for(var b=0;b<globalOrgTypes.length;b++){var a=globalOrgTypes[b];if(a.depth()==c){return a}}}function findOrgType(c){if(typeof c=="object"){return c}for(var b=0;b<globalOrgTypes.length;b++){var a=globalOrgTypes[b];if(a.id()==c||a.id()==parseInt(c)){return a}}return null}function findOrgUnit(a){return(typeof a=="object")?a:orgArraySearcher[a]}function findOrgLasso(b){if(typeof b=="object"){return b}for(var a=0;a<_lasso.length;a++){if(_lasso[a].id()==b){return _lasso[a]}}return null}var orgArraySearcherSN={};function findOrgUnitSN(a){if(typeof a=="object"){return a}if(orgArraySearcherSN[a]){return orgArraySearcherSN[a]}_debug("fetching org by shortname "+a);var b=new Request(FETCH_ORG_BY_SHORTNAME,a);b.request.alertEvent=false;b.send(true);return b.result()}function orgNodeTrail(b){var a=new Array();while(b){a.push(b);b=findOrgUnit(b.parent_ou())}return a.reverse()}function findSiblingOrgs(a){return findOrgUnit(a.parent_ou()).children()}function orgIsMine(c,f,d){if(!c||!f){return false}if(c.id()==f.id()){return true}if(d){while(d<findOrgDepth(c)){c=findOrgUnit(c.parent_ou())}if(c.id()==f.id()){return true}}var a=c.children();for(var b=0;a&&b<a.length;b++){if(orgIsMine(a[b],f,false)){return true}}return false}function orgIsMineFromSet(b,c){c=findOrgUnit(c);for(var a=0;a<b.length;a++){if(orgIsMine(findOrgUnit(b[a]),c)){return true}}return false}var orgArraySearcher={};var globalOrgTree;for(var i=0;i<_l.length;i++){var x=new aou();x.id(_l[i][0]);x.ou_type(_l[i][1]);x.parent_ou(_l[i][2]);x.name(_l[i][3]);x.opac_visible(_l[i][4]);x.shortname(_l[i][5]);orgArraySearcher[x.id()]=x}for(var i in orgArraySearcher){var x=orgArraySearcher[i];if(x.parent_ou()==null||x.parent_ou()==""){globalOrgTree=x;continue}var par=findOrgUnit(x.parent_ou());if(!par.children()){par.children(new Array())}par.children().push(x)}function _tree_killer(){for(var a in orgArraySearcher){x=orgArraySearcher[a];x.children(null);x.parent_ou(null);orgArraySearcher[a]=null}globalOrgTree=null;orgArraySearcher=null;globalOrgTypes=null}var XML_HTTP_GATEWAY="osrf-gateway-v1";var XML_HTTP_SERVER="";function NetworkFailure(b,a){this._status=b;this._url=a}NetworkFailure.prototype.status=function(){return this._status};NetworkFailure.prototype.url=function(){return this._url};NetworkFailure.prototype.toString=function(){return"Network Failure: status = "+this.status()+"\n"+this.url()};function isXUL(){try{if(IAMXUL){return true}}catch(a){return false}}var _allrequests={};function cleanRemoteRequests(){for(var a in _allrequests){destroyRequest(_allrequests[a])}}function abortAllRequests(){for(var a in _allrequests){var b=_allrequests[a];if(b){b.abort();destroyRequest(b)}}}function destroyRequest(a){if(a==null){return}if(a.xmlhttp){a.xmlhttp.onreadystatechange=function(){};a.xmlhttp=null}a.callback=null;a.userdata=null;_allrequests[a.id]=null}var rrId=0;function RemoteRequest(a,f){try{this.locale=OpenSRF.locale}catch(d){this.locale=null}this.service=a;this.method=f;this.xmlhttp=false;this.name=null;this.alertEvent=true;this.type="POST";this.id=rrId++;this.cancelled=false;this.setSecure(false);if(isXUL()){this.setSecure(true)}_allrequests[this.id]=this;var c=2;this.params="";while(c<arguments.length){var b=js2JSON(arguments[c++]);this.params+="&param="+encodeURIComponent(b)}if(!this.params){this.params=""}this.param_string="service="+a+"&method="+f+this.params;if(this.locale!=null){this.param_string=this.param_string+"&locale="+this.locale}if(this.buildXMLRequest()==null){alert("Browser is not supported!")}}RemoteRequest.prototype.timeout=function(a){a*=1000;var b=this;b.timeoutFunc=setTimeout(function(){if(b&&b.xmlhttp){b.cancelled=true;b.abort();if(b.abtCallback){b.abtCallback(b)}}},a)};RemoteRequest.prototype.abortCallback=function(a){this.abtCallback=a};RemoteRequest.prototype.event=function(a){if(arguments.length>0){this.evt=a}return this.evt};RemoteRequest.prototype.abort=function(){if(this.xmlhttp){this.xmlhttp.onreadystatechange=function(){};this.xmlhttp.abort()}};RemoteRequest.prototype.buildXMLRequest=function(){this.xmlhttp=buildXMLRequest();return true};function buildXMLRequest(){try{return new XMLHttpRequest()}catch(c){try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(b){try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(a){alert("NEEDS NEWER JAVASCRIPT for XMLHTTPRequest()");return null}}}}function _remoteRequestCallback(d){var b=_allrequests[d];if(b.cancelled){return}if(b.xmlhttp.readyState==4){try{b.duration=new Date().getTime()-b.sendTime;dump("request "+b.id+": duration = "+b.duration+" ms\n")}catch(a){}try{b.callback(b)}catch(c){console.log(c);throw c}finally{destroyRequest(b);b=null}}}RemoteRequest.prototype.setCompleteCallback=function(b){if(this.cancelled){return}this.callback=b;var a=this.id;this.xmlhttp.onreadystatechange=function(){_remoteRequestCallback(a)}};RemoteRequest.prototype.setSecure=function(a){this.secure=a};RemoteRequest.prototype.send=function(h){if(this.cancelled){return}var b=location.protocol+"//"+location.host+"/"+XML_HTTP_GATEWAY;if(isXUL()){if(XML_HTTP_SERVER){b="http://"+XML_HTTP_SERVER+"/"+XML_HTTP_GATEWAY}if(b.match(/^http:/)&&(this.secure||location.href.match(/^https:/))){netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");b=b.replace(/^http:/,"https:")}}var g=null;if(this.type=="GET"){b+="?"+this.param_string}this.url=b;try{if(h){this.xmlhttp.open(this.type,b,false)}else{this.xmlhttp.open(this.type,b,true)}}catch(f){alert("Fatal error opening XMLHTTPRequest for URL:\n"+b+"\n"+f);return}if(this.type=="POST"){g=this.param_string;this.xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}try{var d;try{dojo.require("dojo.cookie");d=dojo.cookie(COOKIE_SES)}catch(a){}if(isXUL()){d=fetchXULStash().session.key}if(d){this.xmlhttp.setRequestHeader("X-OILS-Authtoken",d)}}catch(j){}if(g&&g.match(/param=undefined/)){try{dump("!+! UNDEFINED PARAM IN QUERY: "+this.service+" : "+this.method+"\n")}catch(c){}g=g.replace(/param=undefined/g,"param=null")}this.sendTime=new Date().getTime();try{this.xmlhttp.send(g)}catch(j){}return this};RemoteRequest.prototype.getText=function(){return this.xmlhttp.responseText};RemoteRequest.prototype.isReady=function(){return this.xmlhttp.readyState==4};RemoteRequest.prototype.getResultObject=function(){if(this.cancelled){return null}if(!this.xmlhttp){return null}var b=false;var a=null;this.event(null);try{a=this.xmlhttp.status;if(a!=200){b=true}}catch(g){b=true}if(b){if(!a){a="<unknown>"}try{dump("! NETWORK FAILURE.  HTTP STATUS = "+a+"\n"+this.param_string+"\n")}catch(g){}if(isXUL()){throw new NetworkFailure(a,this.param_string)}else{return null}}var j=this.xmlhttp.responseText;if(j==""||j==" "||j==null){try{dump("dbg: Request returned no text!\n")}catch(c){}if(isXUL()){throw new NetworkFailure(a,this.param_string)}return null}var f=JSON2js(j);if(!f){return null}if(f.status!=200){var h="A server error occurred. Debug information follows: \ncode = "+f.status+"\ndebug: "+f.debug+"\npayload: "+js2JSON(f.payload);if(isXUL()){dump(h);throw f}else{_debug(h);throw h}}var d=f.payload;if(!d||d.length==0){return null}d=(d.length==1)?d[0]:d;if(!isXUL()){if(checkILSEvent(d)){this.event(d);if(this.alertEvent){alertILSEvent(d);return null}}}return d};RemoteRequest.prototype.addParam=function(b){var a=encodeURIComponent(js2JSON(b));this.param_string+="&param="+a};function fetchXULStash(){if(isXUL()){try{netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");var b=new Components.Constructor("@mozilla.org/openils_data_cache;1","nsIOpenILS");var a=new b();return a.wrappedJSObject.OpenILS.prototype.data}catch(c){_debug("Error in OpenILS.data._debug_stash(): "+js2JSON(c))}}return{}}window.onunload=windowUnload;attachEvt("common","init",loadUIObjects);attachEvt("common","init",initCookies);attachEvt("common","unload",_tree_killer);try{attachEvt("common","unload",cleanRemoteRequests)}catch(e){}function init(){initParams();if(getLocation()==null&&getOrigLocation()!=null){LOCATION=getOrigLocation()}if(getLocation()==null&&getOrigLocation()==null){LOCATION=globalOrgTree.id()}if(findCurrentPage()==HOME&&getOrigLocation()!=null){LOCATION=getOrigLocation()}if(getDepth()==null){DEPTH=findOrgDepth(getLocation())}runEvt("common","init");var a=new CGI();if(grabUser()){if(a.param(PARAM_LOCATION)==null){var d=G.user.prefs[PREF_DEF_LOCATION];var c=G.user.prefs[PREF_DEF_DEPTH];if(d==null){d=G.user.ws_ou()}if(c==null){c=findOrgDepth(d)}LOCATION=d;DEPTH=c}}runEvt("common","run");var b=findOrgLasso(getLasso());if(!b){b=findOrgUnit(getLocation())}if(getLasso()){G.ui.common.now_searching.appendChild(text("Search group: "))}G.ui.common.now_searching.appendChild(text(b.name()))}function windowUnload(){runEvt("common","unload")}function buildISBNSrc(a,b){b=(b)?b:"small";var c=(OILS_OPAC_STATIC_PROTOCOL)?OILS_OPAC_STATIC_PROTOCOL+":":location.protocol;if(OILS_OPAC_IMAGES_HOST){return c+"//"+OILS_OPAC_IMAGES_HOST+b+"/"+a}return"../../../../extras/ac/jacket/"+b+"/"+a}function acMakeURL(b,a){return"../../../../extras/ac/"+b+"/html/"+a}function acCollectData(b,c){var a={key:b,callback:c,data:{}};acCollectItem(a,"summary");acCollectItem(a,"reviews");acCollectItem(a,"toc");acCollectItem(a,"excerpt");acCollectItem(a,"anotes")}function acCheckDone(a){if(a.data.reviews&&a.data.reviews.done&&a.data.toc&&a.data.toc.done&&a.data.excerpt&&a.data.excerpt.done&&a.data.anotes&&a.data.anotes.done){if(a.callback){a.callback(a.data)}}}function acCollectItem(a,b){var c=buildXMLRequest();c.open("GET",acMakeURL(b,a.key),true);c.onreadystatechange=function(){if(c.readyState==4){a.data[b]={done:true};if(IE){if(!c.responseText.match(/The requested URL.*was not found on this server/)){a.data[b].html=c.responseText}}else{if(c.status!=404){a.data[b].html=c.responseText}}acCheckDone(a)}};c.send(null)}Date.prototype.dateFormat=function(f){var b="";var a=["January","February","March","April","May","June","July","August","September","October","November","December"];var k=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];var j=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var c=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];switch(f){case"short":f="m/d/yy";break;case"medium":f="mmm d, yyyy";break;case"long":f="mmmm d, yyyy";break;case"full":f="dddd, mmmm d, yyyy";break}f+=" ";var h;var g="";for(var d=0;d<f.length;d++){h=f.charAt(d);if((h!="d")&&(h!="m")&&(h!="y")){if(g!=""){switch(g){case"d":b+=this.getDate();break;case"dd":b+=("0"+this.getDate()).slice(-2);break;case"ddd":b+=c[this.getDay()];break;case"dddd":b+=j[this.getDay()];break;case"m":b+=this.getMonth()+1;break;case"mm":b+=("0"+(this.getMonth()+1)).slice(-2);break;case"mmm":b+=k[this.getMonth()];break;case"mmmm":b+=a[this.getMonth()];break;case"yy":b+=("0"+this.getFullYear()).slice(-2);break;case"yyyy":b+=("000"+this.getFullYear()).slice(-4);break}g=""}b+=h}else{g+=h}}b=b.substring(0,b.length-1);return b};Date.prototype.timeFormat=function(g){var d="";switch(g){case"short":g="h:mm tt";break;case"medium":g="h:mm:ss tt";break;case"long":g="h:mm:ss.l tt";break;case"full":g="h:mm:ss.l tt";break}g+=" ";var b;var c="";for(var a=0;a<g.length;a++){b=g.charAt(a);if((b!="h")&&(b!="H")&&(b!="m")&&(b!="s")&&(b!="l")&&(b!="t")&&(b!="T")){if(c!=""){switch(c){case"h":var f=this.getHours();if(f>12){f=f-12}d+=f;break;case"hh":var f=this.getHours();if(f>12){f=f-12}d+=("0"+f).slice(-2);break;case"H":d+=("0"+this.getHours()).slice(-2);break;case"HH":d+=("0"+this.getHours()).slice(-2);break;case"m":d+=this.getMinutes();break;case"mm":d+=("0"+this.getMinutes()).slice(-2);break;case"s":d+=this.getSeconds();break;case"ss":d+=("0"+this.getSeconds()).slice(-2);break;case"l":d+=("00"+this.getMilliseconds()).slice(-3);break;case"t":if(this.getHours()>12){d+="p"}else{d+="a"}break;case"tt":if(this.getHours()>12){d+="pm"}else{d+="am"}break;case"T":if(this.getHours()>12){d+="P"}else{d+="A"}break;case"TT":if(this.getHours()>12){d+="PM"}else{d+="AM"}break}c=""}d+=b}else{c+=b}}d=d.substring(0,d.length-1);return d};Date.prototype.iso8601Format=function(a,b,f,h){var d="";switch(a){case"Y":d+=this.dateFormat("yyyy");break;case"YM":d+=this.dateFormat("yyyy-mm");break;case"YMD":d+=this.dateFormat("yyyy-mm-dd");break;case"YMDHM":d+=this.dateFormat("yyyy-mm-dd")+((h)?" ":"T")+this.timeFormat("HH:mm");break;case"YMDHMS":d+=this.dateFormat("yyyy-mm-dd")+((h)?" ":"T")+this.timeFormat("HH:mm:ss");break;case"YMDHMSM":d+=this.dateFormat("yyyy-mm-dd")+((h)?" ":"T")+this.timeFormat("HH:mm:ss.l");break}if(!f&&(a=="YMDHM"||a=="YMDHMS"||a=="YMDHMSM")){if(b){d+="Z"}else{var g=this.getTimezoneOffset();var c=(g>=0?"-":"+")+("0"+(Math.floor(Math.abs(g)/60))).slice(-2)+":"+("00"+(Math.abs(g)%60)).slice(-2);d+=c}}return d};if(!HTTP){var HTTP={}}HTTP.Cookies=function(){this.JAR=""};HTTP.Cookies.VERSION="1.01";HTTP.Cookies.Date=function(){this.format={s:1,m:60,h:60*60,d:60*60*24,M:60*60*24*30,y:60*60*24*365}};HTTP.Cookies.Date.prototype.parse=function(a){if(!a||a=="now"){return 0}var b=a.match(/^(.+?)(\w)$/i);var c=0;return(this.is_num(b[1])&&(c=this.is_date(b[1],b[2])))?c:0};HTTP.Cookies.Date.prototype.is_date=function(c,a){if(!a||a.length!=1){return 0}var b=[];return(b=a.match(/^(s|m|h|d|w|M|y)$/))?c*1000*this.format[b[0]]:0};HTTP.Cookies.Date.prototype.is_num=function(a){if(a.length==0){return}var c=1;for(var b=0;b<a.length;b++){if("0123456789.-+".indexOf(a.charAt(b))==-1){c--;break}}return c};HTTP.Cookies.prototype.date=new HTTP.Cookies.Date;HTTP.Cookies.prototype.read=function(b){var d="";if(!this.JAR){this.JAR={};var g=document.cookie.split(";");for(var a=0;a<g.length;a++){var f=g[a].split("=");if(f[0].substring(0,1)==" "){f[0]=f[0].substring(1,f[0].length)}if(f[0]==b){d=f[1]}this.JAR[f[0]]=f[1]}}else{for(var c in this.JAR){if(c==b){d=this.JAR[c]}}}return d?unescape(d):""};HTTP.Cookies.prototype.write=function(c,f,b,h,d,g){var a="";if(!b){b=""}if(b=="_epoch"){b=new Date(0)}else{if(b!=-1){var j=new Date;j.setTime(j.getTime()+this.date.parse(b));b=j.toGMTString()}}if(b!=-1&&b){a+="; expires="+b}if(h){a+="; path="+h}if(d){a+="; domain="+d}if(g){a+="; secure="+g}document.cookie=c+"="+escape(f)+a};HTTP.Cookies.prototype.remove=function(a,d,b,c){this.write(a,"","_epoch",d,b,c)};console.log("end cookie.js");
\ No newline at end of file
diff --git a/Open-ILS/web/opac/skin/kcls/js/container.js b/Open-ILS/web/opac/skin/kcls/js/container.js
new file mode 100644 (file)
index 0000000..152bb1f
--- /dev/null
@@ -0,0 +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
diff --git a/Open-ILS/web/opac/skin/kcls/js/contentslider.js b/Open-ILS/web/opac/skin/kcls/js/contentslider.js
new file mode 100644 (file)
index 0000000..f583697
--- /dev/null
@@ -0,0 +1,235 @@
+//** 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
+}
\ No newline at end of file
diff --git a/Open-ILS/web/opac/skin/kcls/js/copy_details.js b/Open-ILS/web/opac/skin/kcls/js/copy_details.js
new file mode 100644 (file)
index 0000000..762b13e
--- /dev/null
@@ -0,0 +1,352 @@
+var cpdTemplate;
+var cpdCounter = 0;
+var cpdNodes = {};
+
+function cpdBuild( contextTbody, contextRow, record, callnumber, orgid, depth, copy_location ) {
+var i = cpdCheckExisting(contextRow);
+       if(i) return i;
+
+       var counter = cpdCounter++;
+
+       /* yank out all of the template rows */
+       if(!cpdTemplate) cpdTemplate = $('rdetail_volume_details_row');
+       var templateRow = cpdTemplate.cloneNode(true);
+       templateRow.id = 'cpd_row_' + counter;
+
+       /* shove a dummy a tag in before the context previous sibling */
+       /*
+       contextTbody.insertBefore( 
+               elem('a',{name:'slot_'+templateRow.id}), contextRow.previousSibling);
+       goTo('#slot_'+templateRow.id);
+       */
+
+       if(isXUL()) {
+               /* unhide before we unhide/clone the parent */
+               unHideMe($n(templateRow, 'age_protect_label'));
+               unHideMe($n(templateRow, 'create_date_label'));
+               unHideMe($n(templateRow, 'holdable_label'));
+               unHideMe($n(templateRow, 'due_date_label'));
+       }
+
+       unHideMe(templateRow);
+
+       var print = $n(templateRow,'print');
+       print.onclick = function() { cpdBuildPrintPane(
+               contextRow, record, callnumber, orgid, depth) };
+
+       var mainTbody = $n(templateRow, 'copies_tbody');
+       var extrasRow = mainTbody.removeChild($n(mainTbody, 'copy_extras_row'));
+
+       var req = new Request(FETCH_COPIES_FROM_VOLUME, record.doc_id(), callnumber, orgid);
+       req.callback(cpdDrawCopies);
+
+       req.request.args = { 
+               contextTbody    : contextTbody, /* tbody that holds the contextrow */
+               contextRow              : contextRow, /* the row our new row will be inserted after */
+               record                  : record,
+               callnumber              : callnumber, 
+               orgid                           : orgid,
+               depth                           : depth,
+               templateRow             : templateRow, /* contains everything */
+               copy_location           : copy_location,
+               mainTbody               : mainTbody, /* holds the copy rows */
+               extrasRow               : extrasRow, /* wrapper row for all extras */
+               counter                 : counter
+       };
+
+       if( contextRow.nextSibling ) 
+               contextTbody.insertBefore( templateRow, contextRow.nextSibling );
+       else
+               contextTbody.appendChild( templateRow );
+
+       req.send();
+       _debug('creating new details row with id ' + templateRow.id);
+       cpdNodes[templateRow.id] = { templateRow : templateRow };
+       return templateRow.id;
+}
+
+
+function cpdBuildPrintWindow(record, orgid) {
+       var div = $('rdetail_print_details').cloneNode(true);
+       div.id = "";
+
+       $n(div, 'lib').appendChild(text(findOrgUnit(orgid).name()));
+       $n(div, 'title').appendChild(text(record.title()));
+       $n(div, 'author').appendChild(text(record.author()));
+       $n(div, 'edition').appendChild(text(record.edition()));
+       $n(div, 'pubdate').appendChild(text(record.pubdate()));
+       $n(div, 'publisher').appendChild(text(record.publisher()));
+       $n(div, 'phys').appendChild(text(record.physical_description()));
+
+       return div;
+}
+
+function cpdStylePopupWindow(div) {
+       var tds = div.getElementsByTagName('td');
+       for( var i = 0; i < tds.length ; i++ ) {
+               var td = tds[i];
+               var sty = td.getAttribute('style');
+               if(!sty) sty = "";
+               td.setAttribute('style', sty + 'padding: 2px; border: 1px solid #F0F0E0;');
+               if( td.className && td.className.match(/hide_me/) ) 
+                       td.parentNode.removeChild(td);
+       }
+}
+
+
+/* builds a friendly print window for this CNs data */
+function cpdBuildPrintPane(contextRow, record, callnumber, orgid, depth) {
+
+       var div = cpdBuildPrintWindow( record, orgid);
+
+       $n(div, 'cn').appendChild(text(callnumber));
+
+       unHideMe($n(div, 'copy_header'));
+
+       var subtbody = $n(contextRow.nextSibling, 'copies_tbody');
+       var rows = subtbody.getElementsByTagName('tr');
+
+       for( var r = 0; r < rows.length; r++ ) {
+               var row = rows[r];
+               if(!row) continue;
+               var name = row.getAttribute('name');
+               if( name.match(/extras_row/) ) continue; /* hide the copy notes, stat-cats */
+               var clone = row.cloneNode(true);
+               var links = clone.getElementsByTagName('a');
+               for( var i = 0; i < links.length; i++ ) 
+                       links[i].style.display = 'none';
+
+               $n(div, 'tbody').appendChild(clone);
+       }
+
+       cpdStylePopupWindow(div);
+       openWindow( div.innerHTML);
+}
+
+
+
+/* hide any open tables and if we've already 
+       fleshed this cn, just unhide it */
+function cpdCheckExisting( contextRow ) {
+
+       var existingid;
+       var next = contextRow.nextSibling;
+
+       if( next && next.getAttribute('templateRow') ) {
+               var obj = cpdNodes[next.id];
+               if(obj.templateRow.className.match(/hide_me/)) 
+                       unHideMe(obj.templateRow);
+               else hideMe(obj.templateRow);
+               existingid = next.id;
+       }
+
+       if(existingid) _debug('row exists with id ' + existingid);
+
+       for( var o in cpdNodes ) {
+               var node = cpdNodes[o];
+               if( existingid && o == existingid ) continue;
+               hideMe(node.templateRow);
+               removeCSSClass(node.templateRow.previousSibling, 'rdetail_context_row');
+       }
+
+       addCSSClass(contextRow, 'rdetail_context_row');
+       if(existingid) return existingid;
+       return null;
+}
+
+/*
+function cpdFetchCopies(r) {
+       var args = r.args;
+       args.cn = r.getResultObject();
+       var req = new Request(FETCH_COPIES_FROM_VOLUME, args.cn.id());
+       req.request.args = args;
+       req.callback(cpdDrawCopies);
+       req.send();
+}
+*/
+
+function cpdDrawCopies(r) {
+
+       var copies              = r.getResultObject();
+       var args                        = r.args;
+       var copytbody   = $n(args.templateRow, 'copies_tbody');
+       var copyrow             = copytbody.removeChild($n(copytbody, 'copies_row'));
+
+       if(isXUL()) {
+               /* unhide before we unhide/clone the parent */
+               unHideMe($n(copyrow, 'age_protect_value'));
+               unHideMe($n(copyrow, 'create_date_value'));
+               unHideMe($n(copyrow, 'copy_holdable_td'));
+               unHideMe($n(copyrow, 'copy_due_date_td'));
+       }
+
+       for( var i = 0; i < copies.length; i++ ) {
+               var row = copyrow.cloneNode(true);
+               var copyid = copies[i];
+               var req = new Request(FETCH_FLESHED_COPY, copies[i]);
+               req.callback(cpdDrawCopy);
+               req.request.args = r.args;
+               req.request.row = row;
+               req.send();
+               copytbody.appendChild(row);
+       }
+}
+
+function cpdDrawCopy(r) {
+       var copy = r.getResultObject();
+       var row  = r.row;
+
+    if (r.args.copy_location && copy.location().name() != r.args.copy_location) {
+        hideMe(row);
+        return;
+    }
+
+       $n(row, 'barcode').appendChild(text(copy.barcode()));
+       $n(row, 'location').appendChild(text(copy.location().name()));
+       $n(row, 'status').appendChild(text(copy.status().name()));
+
+       if(isXUL()) {
+               /* show the hold link */
+               var l = $n(row, 'copy_hold_link');
+               unHideMe(l);
+               l.onclick = function() {
+                       holdsDrawEditor( 
+                               { 
+                                       type                    : 'C',
+                                       copyObject      : copy,
+                                       onComplete      : function(){}
+                               }
+                       );
+               }
+
+               if( copy.age_protect() ) 
+                       appendClear($n(row, 'age_protect_value'), text(copy.age_protect().name()));
+
+               var cd = copy.create_date();
+               cd = cd.replace(/T.*/, '');
+               $n(row, 'create_date_value').appendChild(text(cd));
+
+               var yes = $('rdetail.yes').innerHTML;
+               var no = $('rdetail.no').innerHTML;
+
+               if( isTrue(copy.holdable()) &&
+                               isTrue(copy.location().holdable()) &&
+                               isTrue(copy.status().holdable()) ) {
+                       $n(row, 'copy_is_holdable').appendChild(text(yes));     
+               } else {
+                       $n(row, 'copy_is_holdable').appendChild(text(no));      
+               }
+
+               var circ;
+               if( copy.circulations() ) {
+                       circ = copy.circulations()[0];
+                       if( circ ) {
+                               $n(row, 'copy_due_date').appendChild(text(circ.due_date().replace(/[T ].*/,'')));
+                       }
+               }
+
+       }
+
+       r.args.copy = copy;
+       r.args.copyrow = row;
+       cpdShowNotes(copy, r.args)
+       cpdShowStats(copy, r.args);
+
+}
+
+function _cpdExtrasInit(args) {
+
+       var newrid      = 'extras_row_' + args.copy.barcode();
+       var newrow      = $(newrid);
+       if(!newrow) newrow = args.extrasRow.cloneNode(true);
+       var tbody       = $n(newrow, 'extras_tbody');
+       var rowt                = $n(tbody, 'extras_row');
+       newrow.id       = newrid;
+
+       var cr = args.copyrow;
+       var nr = cr.nextSibling;
+       var np = args.mainTbody;
+
+       /* insert the extras row into the main table */
+       if(nr) np.insertBefore( newrow, nr );
+       else np.appendChild(newrow);
+
+       var link = $n(args.copyrow, 'details_link');
+       var link2 = $n(args.copyrow, 'less_details_link');
+       var id = newrow.id;
+       link.id = id + '_morelink';
+       link2.id = id + '_lesslink';
+       unHideMe(link);
+       hideMe(link2);
+
+       link.setAttribute('href', 
+                       'javascript:unHideMe($("'+link2.id+'")); hideMe($("'+link.id+'"));unHideMe($("'+newrow.id+'"));');
+
+       link2.setAttribute('href', 
+                       'javascript:unHideMe($("'+link.id+'")); hideMe($("'+link2.id+'"));hideMe($("'+newrow.id+'"));');
+
+       return [ tbody, rowt ];
+}
+
+function cpdShowNotes(copy, args) {
+       var notes = copy.notes();
+       if(!notes || notes.length == 0) return;
+
+       var a = _cpdExtrasInit(args);
+       var tbody = a[0];
+       var rowt = a[1];
+
+       for( var n in notes ) {
+               var note = notes[n];
+               if(!isTrue(note.pub())) continue;
+               var row = rowt.cloneNode(true);
+               $n(row, 'key').appendChild(text(note.title()));
+               $n(row, 'value').appendChild(text(note.value()));
+               unHideMe($n(row, 'note'));
+               unHideMe(row);
+               tbody.appendChild(row);
+       }
+}
+
+
+function cpdShowStats(copy, args) {
+       var entries = copy.stat_cat_entry_copy_maps();
+       if(!entries || entries.length == 0) return;
+
+       var visibleStatCat = false;
+
+       /*
+               check all copy stat cats; if we find one that's OPAC visible,
+               set the flag and break the loop. If we've found one, or we're
+               in the staff client, build the table. if not, we return doing
+               nothing, as though the stat_cat_entry_copy_map was empty or null
+       */
+
+       for( var n in entries )
+       {
+                       var entry = entries[n];
+                       if(isTrue(entry.stat_cat().opac_visible()))
+                       {
+                               visibleStatCat = true;
+                               break;
+                       }
+       }
+
+       if(!(isXUL() || visibleStatCat)) return;
+
+       var a = _cpdExtrasInit(args);
+       var tbody = a[0];
+       var rowt = a[1];
+
+       for( var n in entries ) {
+               var entry = entries[n];
+               if(!(isXUL() || isTrue(entry.stat_cat().opac_visible()))) continue;
+               var row = rowt.cloneNode(true);
+               $n(row, 'key').appendChild(text(entry.stat_cat().name()));
+               $n(row, 'value').appendChild(text(entry.stat_cat_entry().value()));
+               unHideMe($n(row, 'cat'));
+               unHideMe(row);
+               tbody.appendChild(row);
+       }
+}
+
diff --git a/Open-ILS/web/opac/skin/kcls/js/depth_selector.js b/Open-ILS/web/opac/skin/kcls/js/depth_selector.js
new file mode 100644 (file)
index 0000000..326aead
--- /dev/null
@@ -0,0 +1,112 @@
+\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
diff --git a/Open-ILS/web/opac/skin/kcls/js/fgi-search_bar.js b/Open-ILS/web/opac/skin/kcls/js/fgi-search_bar.js
new file mode 100644 (file)
index 0000000..2846700
--- /dev/null
@@ -0,0 +1,103 @@
+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
diff --git a/Open-ILS/web/opac/skin/kcls/js/holds.js b/Open-ILS/web/opac/skin/kcls/js/holds.js
new file mode 100644 (file)
index 0000000..9e284cb
--- /dev/null
@@ -0,0 +1,1061 @@
+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
diff --git a/Open-ILS/web/opac/skin/kcls/js/miker-search_bar.js b/Open-ILS/web/opac/skin/kcls/js/miker-search_bar.js
new file mode 100644 (file)
index 0000000..a6a1c50
--- /dev/null
@@ -0,0 +1,113 @@
+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
diff --git a/Open-ILS/web/opac/skin/kcls/js/misc.js b/Open-ILS/web/opac/skin/kcls/js/misc.js
new file mode 100644 (file)
index 0000000..079438f
--- /dev/null
@@ -0,0 +1,590 @@
+var anonListCache;\r
+var webCacheKey;\r
+var userVitalStats;\r
+\r
+/****************** Marc object prototype ****************************/\r
+MarcRecord.prototype.getAGRdata = function(field) {\r
+  var str = "";\r
+  var val = parseInt(field.split("-")[1]);\r
+  field = this.marcObj["880"][--val];\r
+  str += field;\r
+  return str;\r
+};\r
+\r
+MarcRecord.prototype.marcObjToStr = function() {\r
+  var str = "";\r
+  var str2 = "";\r
+  for(var i in this.codes) {\r
+       var c = this.codes[i];\r
+       if(c=="6" && this[c][0].indexOf("880")>=0) str2+=this.master.getAGRdata(this[c][0]);\r
+       if(c=="0" || c=="2" || c=="3" || c=="4" || c=="6" || c=="8") continue;\r
+       str+=this[c].join(this.master.delimiter);\r
+       str+=this.master.delimiter;\r
+  }\r
+  if(str2) str2 = "\n" + str2;\r
+  return str+str2;\r
+};\r
+\r
+MarcRecord.prototype.marcObjToStr2 = function() {\r
+  var str = "";\r
+  for(var i in this) {\r
+       if(i=="toString" || i=="master") continue;\r
+       str+=this[i].join(this.master.delimiter) + this.master.delimiter;\r
+  }\r
+  return str;\r
+};\r
+\r
+MarcRecord.prototype.XML2js = function(parent) {\r
+  var marc = {};\r
+  var nodes = parent.childNodes || [];\r
+  marc.toString = this.marcObjToStr2;\r
+  marc.master = this;\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":[]};\r
+               subfields.toString = this.marcObjToStr;\r
+               subfields.master = this;\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
+                       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
+\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.delimiter = " ";\r
+       this.xml = xml;\r
+       this.marcObj = this.XML2js(this.xml);\r
+}\r
+\r
+/******************** End marc object prototype ************************/\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
+       hideMe($('your-acct-login'));\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
+       $('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
+       $('dash_fines').innerHTML = parseFloat(stats.fines.balance_owed).toFixed(2);\r
+  }\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 getMarcXML(docid) { //record id\r
+\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) {\r
+         case "a": img="media_book.jpg"; break;\r
+         case "b": img="media_magazines.jpg"; break;\r
+         case "c": img="media_printedmusic.jpg"; break;\r
+         case "d": img="media_microform.jpg"; break;\r
+         case "e": img="media_equipment.jpg"; break;\r
+         case "f": img="media_films.jpg"; break;\r
+         case "g": img=""; break;\r
+         case "h": img="media_dvd.jpg"; break;\r
+         case "i": img="media_bookoncassette.jpg"; break;\r
+         case "j": img="media_musiccd.jpg"; 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.jpg"; 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.jpg"; break;\r
+         case "w": img="media_eaudio.jpg"; break;\r
+         case "x": img="media_downloadmusic.jpg"; break;\r
+         case "y": img="media_downloadvideo.jpg"; break;\r
+         case "z": img="media_map.jpg"; break;\r
+         case "2": img="media_cassettewithbook.jpg"; break;\r
+         case "5": img="media_cdwithbook.jpg"; break;\r
+       }\r
+       \r
+       if(img) {\r
+               imgEl.title = img;\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
diff --git a/Open-ILS/web/opac/skin/kcls/js/mresult.js b/Open-ILS/web/opac/skin/kcls/js/mresult.js
new file mode 100644 (file)
index 0000000..cb131d6
--- /dev/null
@@ -0,0 +1,135 @@
+//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
diff --git a/Open-ILS/web/opac/skin/kcls/js/myopac.js b/Open-ILS/web/opac/skin/kcls/js/myopac.js
new file mode 100644 (file)
index 0000000..12746e5
--- /dev/null
@@ -0,0 +1,2148 @@
+\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
+\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
+    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.usrname(email);\r
+               hideMe($('myopac_update_email_row'));\r
+               userShown = false;\r
+               alertId('myopac_email_success');\r
+               myOPACShowUser(true);\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
+               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
+               G.user.usrname(username);\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(FETCH_TRANSACTIONS, G.user.session, G.user.id() );\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
+       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
+function myopacShowGenericTransaction( trans ) {\r
+       var tbody = $('myopac_trans_tbody');\r
+\r
+       var row = myopacGenericTransTemplate.cloneNode(true);\r
+       $n(row,'myopac_trans_start').appendChild(text(_trimSeconds(trans.xact_start())));\r
+       $n(row,'myopac_trans_last_payment').appendChild(text(_trimSeconds(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(_trimTime(trans.xact_start())));\r
+\r
+    var due = _trimTime(circ.due_date());\r
+       var checkin = _trimTime(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
+function showPaymentForm() {\r
+       unHideMe($('pay_fines_now'));\r
+       hideMe($('acct_sum'));\r
+       drawPayFinesPage(\r
+               G.user,\r
+               getSelectedFinesTotal(),\r
+               getSelectedFineTransactions(),\r
+               function(resp) {\r
+                       if(resp.textcode) {\r
+                               var message = resp.textcode+'\n'+resp.desc + '';\r
+                               if(resp.textcode == 'CREDIT_PROCESSOR_DECLINED_TRANSACTION' && resp.payload)\r
+                                       message += '\n' + resp.payload.error_message;\r
+                               alert(message);\r
+                               return;\r
+                       }\r
+                       G.user.last_xact_id(resp.last_xact_id); // update to match latest from server\r
+                       alert('Payment Successful\nTRANSACTION ID: '+resp.last_xact_id);\r
+                       printPaymentReceipt(resp);\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
+    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
+                         //alert(transCache[xacts[0][0]].transaction.xact_type());\r
+                       if(!confirm("Are you sure?")) return;\r
+            if (typeof(progressDialog) != "undefined") progressDialog.show(true);\r
+            sendCCPayment(patron, xacts, onPaymentSubmit);\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
+    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
+    var win = window.open('', '', 'resizable,width=350,height=250,scrollbars=1'); \r
+    win.document.body.innerHTML = data;\r
+    win.print();\r
+\r
+    var sleepTime = 1000;\r
+    if(numItems > 0) \r
+        sleepTime += (numItems / 2) * 1000;\r
+\r
+    setTimeout(\r
+        function() { \r
+            win.close(); // close the print window\r
+            if(callback) callback(); // fire optional post-print callback\r
+        },\r
+        sleepTime \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.payments],\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
diff --git a/Open-ILS/web/opac/skin/kcls/js/password_reset.js b/Open-ILS/web/opac/skin/kcls/js/password_reset.js
new file mode 100644 (file)
index 0000000..ba54469
--- /dev/null
@@ -0,0 +1,107 @@
+dojo.require('dojo.parser');
+dojo.require('dijit.Dialog');
+dojo.require('dijit.form.Button');
+dojo.require('dijit.form.TextBox');
+
+dojo.requireLocalization("openils.opac", "opac");
+opac_strings = dojo.i18n.getLocalization("openils.opac", "opac");
+
+dojo.addOnLoad(function() {
+
+    // Create the password reset dialog
+    var pwResetFormDlg = createResetDialog();
+    dojo.parser.parse();
+
+    // Connect the buttons to submit / cancel events that override
+    // the default actions associated with the buttons to do
+    // pleasing Ajax things
+    dojo.connect(dijit.byId("cancelButton"), "onClick", function(event) {
+        event.preventDefault();
+        event.stopPropagation();
+        pwResetFormDlg.hide();
+    });
+    dojo.connect(dijit.byId("submitButton"), "onClick", function(event) {
+        event.preventDefault();
+        event.stopPropagation();
+        var xhrArgs = {
+            form: dojo.byId("requestReset"),
+            handleAs: "text",
+            load: function(data) {
+                pwResetFormDlg.hide();
+                passwordSubmission(opac_strings.PWD_RESET_SUBMIT_SUCCESS);
+            },
+            error: function(error) {
+                pwResetFormDlg.hide();
+                passwordSubmission(opac_strings.PWD_RESET_SUBMIT_ERROR);
+            }
+        }
+        var deferred = dojo.xhrPost(xhrArgs);
+    });
+    dojo.place("<tr><td colspan='2' align='center'><a class='classic_link' id='pwResetLink' onClick='dijit.byId(\"pwResetFormDlg\").show();'</a></td></tr>", "login_tbody");
+    dojo.query("#pwResetLink").attr("innerHTML", opac_strings.PWD_RESET_FORGOT_PROMPT);
+
+});
+
+function passwordSubmission( msg ) {
+    var responseDialog = new dijit.Dialog({
+        title: opac_strings.PWD_RESET_RESPONSE_TITLE,
+        style: "width: 35em"
+    });
+    responseDialog.startup();
+    var requestStatusDiv = dojo.create("div", { style: "width: 30em" });
+    var requestStatusMsg = dojo.create("div", { innerHTML: msg }, requestStatusDiv);
+    var okButton = new dijit.form.Button({
+        id: "okButton",
+        type: "submit",
+        label: opac_strings.OK
+    }).placeAt(requestStatusDiv);
+    responseDialog.attr("content", requestStatusDiv);
+    responseDialog.show();
+    dojo.connect(dijit.byId("okButton"), "onClick", responseDialog, "hide");
+}
+
+function createResetDialog() {
+    var pwResetFormDlg = new dijit.Dialog({
+        id: "pwResetFormDlg",
+        title: opac_strings.PWD_RESET_FORM_TITLE,
+        style: "width: 35em"
+    });
+    pwResetFormDlg.startup();
+
+    // Instantiate the form
+    var pwResetFormDiv = dojo.create("form", { id: "requestReset", style: "width: 30em", method: "post", action: "/opac/password/en-US" });
+    dojo.create("p", { innerHTML: opac_strings.PWD_RESET_SUBMIT_PROMPT }, pwResetFormDiv);
+    var pwResetFormTable = dojo.create("table", null, pwResetFormDiv);
+    var pwResetFormTbody = dojo.create("tbody", null, pwResetFormTable);
+    var pwResetFormRow = dojo.create("tr", null, pwResetFormTbody);
+    var pwResetFormCell = dojo.create("td", null, pwResetFormRow);
+    var pwResetFormLabel = dojo.create("label", null, pwResetFormCell);
+    dojo.attr(pwResetFormCell, { innerHTML: opac_strings.BARCODE_PROMPT });
+    pwResetFormCell = dojo.create("td", null, pwResetFormRow);
+    var barcodeText = new dijit.form.TextBox({
+        name: "barcode"
+    }).placeAt(pwResetFormCell);
+    pwResetFormRow = dojo.create("tr", {}, pwResetFormTbody);
+    pwResetFormCell = dojo.create("td", {}, pwResetFormRow);
+    dojo.attr(pwResetFormCell, { innerHTML: opac_strings.USERNAME_PROMPT });
+    pwResetFormCell = dojo.create("td", {}, pwResetFormRow);
+    var usernameText = new dijit.form.TextBox({
+        name: "username"
+    }).placeAt(pwResetFormCell);
+    dojo.create("br", null, pwResetFormDiv);
+    var submitButton = new dijit.form.Button({
+        id: "submitButton",
+        type: "submit",
+        label: opac_strings.SUBMIT_BUTTON_LABEL
+    }).placeAt(pwResetFormDiv);
+    var cancelButton = new dijit.form.Button({
+        id: "cancelButton",
+        type: "cancel",
+        label: opac_strings.CANCEL_BUTTON_LABEL
+    }).placeAt(pwResetFormDiv);
+
+    // Set the content of the Dialog to the pwResetForm
+    pwResetFormDlg.attr("content", pwResetFormDiv);
+    return pwResetFormDlg;
+}
+
diff --git a/Open-ILS/web/opac/skin/kcls/js/rdetail.js b/Open-ILS/web/opac/skin/kcls/js/rdetail.js
new file mode 100644 (file)
index 0000000..064522e
--- /dev/null
@@ -0,0 +1,1501 @@
+/* */\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 marcXML = null;\r
+var marcObj = 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
+\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 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
+       if(getLocation() == globalOrgTree.id())\r
+               hideMe(G.ui.rdetail.cp_info_all);\r
+\r
+    if(getRid()) {\r
+                  //marcXML = getMarcXML(getRid());\r
+                  //marcObj = XML2js(marcXML);\r
+                  marcObj2 = new MarcRecord(getRid());\r
+                  marcObj = marcObj2.marcObj;\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 = new Request(FETCH_ADV_ISBN_RIDS, getAdvTerm());\r
+                  req.callback(\r
+                          function(r) {\r
+                                  var blob = r.getResultObject();\r
+                                  if(blob && blob.count > 0) RID = blob.ids[0];\r
+                                  //marcXML = getMarcXML(getRid());\r
+                                  //marcObj = XML2js(marcXML);\r
+                                  marcObj2 = new MarcRecord(getRid());\r
+                                  marcObj = marcObj2.marcObj;\r
+                                  drawMarcData();\r
+                                  //var req2 = new Request(FETCH_RMODS, getRid());\r
+                                  //req2.callback(_rdetailDraw);\r
+                                  //req2.send();\r
+                          }\r
+                  );\r
+                  req.send();\r
+          }\r
+   }\r
+\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 rdetailGetPageIds() {\r
+       attachEvt("result", "idsReceived", rdetailSetPaging );\r
+       resultFetchAllRecords = true;\r
+       rresultCollectIds(true);\r
+}\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 drawMarcData() {\r
+  drawMarcSubjects();\r
+  drawMarcAuthors();\r
+  drawMarcSeries();\r
+  \r
+  genericDrawMarc("520", ["a", "b"], "rdetail_summary_link", "rdetail_summary_container"); // summary box\r
+  genericDrawMarc("505", ["a", "t"], "rdetail_content_link", "rdetail_content_div_inner"); // content box\r
+  \r
+  if(marcObj["586"] || marcObj["697"]) { // awards\r
+       unHideMe($('rdetail_awards_link'));\r
+       var awardsCont = $('rdetail_awards_cont');\r
+       awardsCont.innerHTML="";\r
+       if(marcObj["586"] && marcObj["586"][0]["a"]) {\r
+         awardsCont.innerHTML = marcObj["586"][0]["a"].join(" ");\r
+         if(marcObj["697"]) awardsCont.innerHTML+=", ";\r
+       }\r
+       if(marcObj["697"] && marcObj["697"][0]["a"]) awardsCont.innerHTML+=marcObj["697"][0]["a"].join(" ");\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
+  if(marcObj["245"]) {\r
+       var txt = marcObj["245"].join("\n");\r
+       txt = txt.replace("\n", "<br />");\r
+       $('rdetail_title').innerHTML = txt;\r
+  }\r
+  \r
+  if(marcObj["260"]) {\r
+       var pubdate = $('rdetail_pubdate');\r
+       pubdate.appendChild(text(marcObj["260"][0]["c"]));\r
+  }\r
+  \r
+  if(marcObj["092"]) {\r
+       var cn = $('rdetail_callnum');\r
+       cn.appendChild(text(marcObj["092"][0]["a"].join(" ")+" "));\r
+  }\r
+  if(marcObj["099"]) {\r
+       var cn = $('rdetail_callnum');\r
+       cn.appendChild(text(marcObj["099"][0]["a"].join(" ")));\r
+  }\r
+  \r
+  if(marcObj["300"]) {\r
+       var phys = $('rdetail_physical_desc');\r
+       phys.appendChild(text(marcObj["300"]));\r
+  }\r
+}\r
+\r
+function genericDrawMarc(marc, subs, link, cont) {\r
+  if(!marc || !subs || typeof(subs)!="object") return;\r
+  if(marcObj[marc]) {\r
+       link = $(link);\r
+       if(!link) return;\r
+       unHideMe(link);\r
+       cont = $(cont);\r
+       if(!cont) return;\r
+       var str = "";\r
+       \r
+       for(var i in marcObj[marc]) {\r
+         var obj = marcObj[marc][i];\r
+         for(var n in subs) if(obj[subs[n]]) str += obj[subs[n]].join("<br />")+"<br />";\r
+       }\r
+       cont.innerHTML = str;\r
+  }\r
+}\r
+\r
+function drawMarcSeries() {\r
+  var seriesMarcs = ['440','490','800','810','811','830','694'];\r
+  var link = $('rdetail_series_link');\r
+  var container = $('rdetail_series_container');\r
+  \r
+  for(var i in seriesMarcs) {\r
+       var field = marcObj[seriesMarcs[i]];\r
+       if(!field) continue;\r
+       unHideMe(link);\r
+       \r
+       for(var n in field) {\r
+         var obj = field[n];\r
+         \r
+         for(var t in obj.codes) {\r
+               var c = obj.codes[t];\r
+               if(c=='0' || c=='6' || c=='8') continue;\r
+           var alink = elem('a');\r
+           buildSearchLink(STYPE_SERIES, obj[c].join(" "), alink, 1000);\r
+           container.appendChild(alink);\r
+           container.appendChild(elem('span',null,'  '));\r
+         }\r
+         container.appendChild(elem("br"));\r
+       }\r
+  }\r
+}\r
+\r
+function drawMarcAuthors() {\r
+  var authorMarcs = {'100':'rdetail_authors_inner','110':'rdetail_authors_inner','111':'rdetail_authors_inner','700':'rdetail_moar_authors','710':'rdetail_moar_authors','711':'rdetail_moar_authors','508':'rdetail_credits','511':'rdetail_cast'};\r
+  var link = $('rdetail_authors_link');\r
+  var link2 = $('rdetail_author');\r
+  \r
+  for(var i in authorMarcs) {\r
+       var cont = $(authorMarcs[i]);\r
+       var field = marcObj[i];\r
+       if(!field) continue;\r
+       unHideMe(link);\r
+       \r
+       if(i=="100" || i=="110" || i=="111") buildSearchLink(STYPE_AUTHOR, field[0]["a"], link2, 1000);\r
+       \r
+       for(var n in field) {\r
+         var obj = field[n];\r
+         var list = [];\r
+         var alink = elem('a');\r
+         \r
+         for(var t in obj.codes) {\r
+               var c = obj.codes[t];\r
+               if(c=='0' || c=='6' || c=='8') continue;\r
+               list.push(obj[c].join(" "));\r
+         }\r
+         \r
+         buildSearchLink(STYPE_AUTHOR, list[0], alink, 1000);\r
+         alink.innerHTML = list.join(" ");\r
+         cont.appendChild(alink);\r
+         cont.appendChild(elem('br'));\r
+       }\r
+  }\r
+}\r
+\r
+function drawMarcSubjects() {\r
+  var subjectMarcs = {'600':'rdetail_subject_container','610':'rdetail_subject_container','611':'rdetail_subject_container','630':'rdetail_subject_container','650':'rdetail_subject_container','651':'rdetail_subject_container','655':'rdetail_genre_cont','695':'rdetail_genre_cont','690':'rdetail_topic_cont','691':'rdetail_geo_cont','692':'rdetail_bio_cont','693':'rdetail_attrib_cont','698':'rdetail_setting_cont','699':'rdetail_time_cont'};\r
+  var link = $('rdetail_subject_link');\r
+  \r
+  for(var i in subjectMarcs) {\r
+       var cont = $(subjectMarcs[i]);\r
+       var field = marcObj[i];\r
+       if(!field) continue;\r
+       unHideMe(link);\r
+       \r
+       for(var n in field) {\r
+         var obj = field[n];\r
+         \r
+         for(var t in obj.codes) {\r
+               var c = obj.codes[t];\r
+               if(c=='2' || c=='3' || c=='4' || c=='6' || c=='8') continue;\r
+               if(t>0) cont.appendChild(elem('span',null,' -- '));\r
+               var alink = elem('a');\r
+               buildSearchLink(STYPE_SUBJECT, obj[c].join(" "), alink, 1000);\r
+               cont.appendChild(alink);\r
+         }\r
+         cont.appendChild(elem('br'));\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
+    $('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
+       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
+           // ChiliFresh\r
+    if (chilifresh && chilifresh != '(none)' && currentISBN) {\r
+        $('chilifreshReviewLink').setAttribute('id','isbn_'+currentISBN);\r
+        $('chilifreshReviewResult').setAttribute('id','chili_review_'+currentISBN);\r
+        unHideMe($('rdetail_awards_link'));\r
+        unHideMe($('rdetail_chilifresh_reviews'));\r
+        try {\r
+            chili_init();\r
+        } catch(E) {\r
+            alert(E + '\n');\r
+            hideMe($('rdetail_awards_link'));\r
+            hideMe($('rdetail_chilifresh_reviews'));\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
+    // Novelist\r
+    if (novelist && currentISBN) {\r
+        unHideMe($('rdetail_awards_link'));\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
+               if(bool) unHideMe($(this.getAttribute("rel"))); else hideMe($(this.getAttribute("rel")));\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
+       if(jQuery(node).css('display')=='block') hideMe(node); else unHideMe(node);\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, record.doc_id(), 1, 0)\r
+       else\r
+               req = new Request(method, record.doc_id());\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
+       var showLibCount = 5;\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
+       // sort by name - desc\r
+       if(getOrigLocation()) summary.sort(function(a,b){\r
+               if(a[0]==getOrigLocation()) return -1;\r
+               if(b[0]==getOrigLocation()) return 1;\r
+               return findOrgUnit(a[0]).name()>=findOrgUnit(b[0]).name()?1:-1;\r
+       }); else summary.sort(function(a,b){\r
+               return findOrgUnit(a[0]).name()>=findOrgUnit(b[0]).name()?1:-1;\r
+       });     \r
+\r
+       var found = false;\r
+       if(summary.length>showLibCount) unHideMe($('lib_info_more'));\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
+               var tehTR = $('rdetails_status_head');\r
+               \r
+               if(tehTR) {\r
+                       var par = i<showLibCount?tehTR.parentNode:$('rdetails_status2');\r
+                       var newRow = elem('tr');\r
+                       var lib_td = elem('td',{nowrap:"nowrap"});\r
+                       var stat = statuses[0]?"Available":"Checked Out";\r
+                       var url = mapLibUrl(arr[0]);\r
+                       var libLink = elem('a',{href:url},'View Library Info');\r
+                       if(!url) hideMe(libLink);\r
+                       stat = statuses[6]?"Due":stat;\r
+                       lib_td.appendChild(libLink);\r
+                       \r
+                       newRow.appendChild(elem('td',{nowrap:"nowrap"},thisOrg.name()));\r
+                       newRow.appendChild(elem('td',{nowrap:"nowrap"},cl));\r
+                       newRow.appendChild(lib_td);\r
+                       newRow.appendChild(elem('td',{nowrap:"nowrap"},stat));\r
+                       newRow.appendChild(elem('td',{nowrap:"nowrap"},arr[1]));\r
+                       par.appendChild(newRow);\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
+}
\ No newline at end of file
diff --git a/Open-ILS/web/opac/skin/kcls/js/result_common.js b/Open-ILS/web/opac/skin/kcls/js/result_common.js
new file mode 100644 (file)
index 0000000..8ba76d5
--- /dev/null
@@ -0,0 +1,812 @@
+\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
diff --git a/Open-ILS/web/opac/skin/kcls/js/rresult.js b/Open-ILS/web/opac/skin/kcls/js/rresult.js
new file mode 100644 (file)
index 0000000..545106c
--- /dev/null
@@ -0,0 +1,339 @@
+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
diff --git a/Open-ILS/web/opac/skin/kcls/js/search_bar.js b/Open-ILS/web/opac/skin/kcls/js/search_bar.js
new file mode 100644 (file)
index 0000000..ae63f13
--- /dev/null
@@ -0,0 +1,105 @@
+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
+       _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
+               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
+    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
diff --git a/Open-ILS/web/opac/skin/kcls/js/sidebar.js b/Open-ILS/web/opac/skin/kcls/js/sidebar.js
new file mode 100644 (file)
index 0000000..1c93a8a
--- /dev/null
@@ -0,0 +1,228 @@
+/* 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
diff --git a/Open-ILS/web/opac/skin/kcls/js/sidebar_extras.js b/Open-ILS/web/opac/skin/kcls/js/sidebar_extras.js
new file mode 100644 (file)
index 0000000..9cd2672
--- /dev/null
@@ -0,0 +1,244 @@
+\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
diff --git a/Open-ILS/web/opac/skin/kcls/js/tips.js b/Open-ILS/web/opac/skin/kcls/js/tips.js
new file mode 100644 (file)
index 0000000..2387dd3
--- /dev/null
@@ -0,0 +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
diff --git a/Open-ILS/web/opac/skin/kcls/xml/advanced.xml b/Open-ILS/web/opac/skin/kcls/xml/advanced.xml
new file mode 100644 (file)
index 0000000..f3e84e5
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- Loads the environment -->
+<!--#include virtual="setenv.xml"-->
+
+<!DOCTYPE html PUBLIC 
+       "-//W3C//DTD XHTML 1.0 Transitional//EN" 
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
+       <!--#include virtual="/opac/locale/${locale}/opac.dtd"-->
+]>
+
+
+<html xmlns='http://www.w3.org/1999/xhtml'>
+       <!--#include virtual="header.xml"-->
+       <!--#if expr="$OILS_PAGE='index.xml'"-->
+               <!--#include virtual="home/index_body.xml"-->
+       <!--#else-->
+               <!--#include virtual="body.xml"-->
+       <!--#endif-->
+</html>
+
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
new file mode 100644 (file)
index 0000000..6f41466
--- /dev/null
@@ -0,0 +1,39 @@
+<!--\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
diff --git a/Open-ILS/web/opac/skin/kcls/xml/advanced/adv_global_row.xml b/Open-ILS/web/opac/skin/kcls/xml/advanced/adv_global_row.xml
new file mode 100644 (file)
index 0000000..99ae064
--- /dev/null
@@ -0,0 +1,39 @@
+<!--
+<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' style='margin-right: 3px;' />
+       
+               <!-- Remove this row -->
+        <button 
+                       onclick='
+                               var row = this.parentNode.parentNode;
+                               var tbody = row.parentNode;
+                               if( tbody.getElementsByTagName("tr").length > 2 )
+                                       row.parentNode.removeChild(row);'>X</button>
+
+       </td>
+</tr>
+<![CDATA[<!-- ****************** end: adv_global_row.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/advanced/advanced_global.xml b/Open-ILS/web/opac/skin/kcls/xml/advanced/advanced_global.xml
new file mode 100644 (file)
index 0000000..e4f4210
--- /dev/null
@@ -0,0 +1,382 @@
+
+<![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>
+
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/adv_global.js'> </script>
+
+       <tr style='border-bottom: none;'>
+
+               <!-- Contains the user-addable(?) rows to define search class, containment and text -->
+               <td valign='top' width='65%' 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='center'>
+               &advanced.search.library;<br /><br />
+                       <!--#include virtual='../common/libselect.xml'-->
+                       <br /><br />
+                       <span>&result.limit2avail;</span>
+                       <input type='checkbox' id='opac.result.limit2avail'/>
+               </td>
+       </tr>
+       
+       
+       <tr>
+               <td colspan="2">
+                       <table width='100%'>
+                               <thead>
+                                       <tr><td colspan='2' align='center'>&advanced.search.filters;</td></tr>
+                               </thead>
+                               <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'>
+                                                       <span>&advanced.item.type;</span><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>-->
+                                               </td>
+
+                                               <td align='left'>
+                                                       <select multiple='multiple' size='3' id='adv_global_item_type' class='hide_me'>
+                                                       </select>       
+                                                       <select multiple='multiple' size='3' 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 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'>
+                                                       <span>&advanced.language;</span>
+                                               </td>
+
+                                               <td align='left'>
+                                                       <select multiple='multiple' size='3' id='adv_global_lang'>
+                                                               <!--#include virtual="../../../../../common/xml/item_lang_options.xml"-->
+                                                       </select>
+                                               </td>
+
+                                               <td align='right' class="hide_me">
+                                                       <span>&advanced.audience;</span>
+
+                                                       <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 align='left' class="hide_me">
+                                                       <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='e '>&advanced.adult;</option>
+                                                               <option value='abcdj'>&advanced.juvenile;</option>
+                                                               <option value='fg '>&advanced.general;</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 align='right'>
+                                                       <span>&advanced.filter.pubyear;</span>
+                                               </td>
+                                               <td align='left'>
+                                                       <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'>
+
+                       <table style='border: none; width: 100%;'>
+                               <tr>
+                                       <td align='center' width='100%'>
+                                               <table class='' width='100%'>
+                       
+                                                       <thead>
+                                                               <tr>
+                                                                       <td align='center' width='50%'>&advanced.sort.criteria;</td>
+                                                                       <td align='center'></td>
+                                                               </tr>
+                                                       </thead>
+                       
+                                                       <tbody>
+                                                               <tr>
+
+                           <script language='javascript' type='text/javascript'>
+                              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;
+                              }
+                           </script>
+
+                                                                       <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 -->
+                           <script language='javascript' type='text/javascript'>__setsortsel();</script>
+                                                               </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>
+
+       <tr class='border_4_2'>
+               <td align="left" colspan='2'>
+               <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 ***************************** -->]]>
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/advanced/advanced_marc.xml b/Open-ILS/web/opac/skin/kcls/xml/advanced/advanced_marc.xml
new file mode 100644 (file)
index 0000000..8773a83
--- /dev/null
@@ -0,0 +1,47 @@
+<!--
+XXX Deprecate me
+-->
+<![CDATA[<!-- ****************** advanced_marc.xml ***************************** -->]]>
+<table class='data_grid' width='100%'>
+       <thead>
+               <tr>
+                       <td colspan='6'>&opac.advanced.marc.title;</td>
+               </tr>
+       </thead>
+       <tbody id='advanced.marc.tbody'>
+               <tr id='advanced.marc.template'>
+                       <td>
+                               <span>&opac.advanced.marc.tag;: </span>
+                               <input name='advanced.marc.tag' maxlength='3' size='3' />
+                       </td>
+                       <td>
+                               <span>&opac.advanced.marc.subfield;: </span>
+                               <input name='advanced.marc.subfield' maxlength='1' size='1' />
+                       </td>
+                       <td>
+                               <span>&opac.advanced.marc.value;: </span>
+                               <input name='advanced.marc.value' size='36' />
+                       </td>
+
+                       <td>
+                               <input type='submit' value='X' onclick='
+                                       var row = this.parentNode.parentNode;
+                                       var tbody = row.parentNode;
+                                       if(tbody.getElementsByTagName("tr").length > 2)
+                                               tbody.removeChild(row);
+                                       ' />
+                       </td>
+               </tr>
+               <tr id='advanced.marc.submit.row'>
+                       <td colspan='4' align='center'>
+
+                               <input name='advanced.marc.addrow' type='submit' onclick='advAddMARC();'
+                                       value='&opac.advanced.marc.addrow;' />
+
+                               <input style='margin-left: 10px;' 
+                                       onclick='advMARCRun();' type='submit' value='&common.submit;' />
+                       </td>
+               </tr>
+       </tbody>
+</table>
+<![CDATA[<!-- ****************** end: advanced_marc.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/advanced/advanced_quick.xml b/Open-ILS/web/opac/skin/kcls/xml/advanced/advanced_quick.xml
new file mode 100644 (file)
index 0000000..8f640a1
--- /dev/null
@@ -0,0 +1,31 @@
+<!--
+XXX Deprecate me
+-->
+<![CDATA[<!-- ****************** advanced_quick.xml ***************************** -->]]>
+<table class='data_grid' width='95%'>
+       <thead>
+               <tr>
+                       <td colspan='6'>&opac.advanced.quick.title;</td>
+               </tr>
+       </thead>
+       <tbody>
+               <tr>
+                       <td>
+                               <span style='padding-right: 0px;'>&common.call.number.label;</span>
+                               <input id='opac.advanced.quick.cn' style='margin: 2px;' type='text' size='12' />
+                               <input type='submit' onclick='advCNRun();' value='&advanced.go;' />
+                       </td>
+                       <td>
+                               <span style='padding-right: 0px;'>&common.isbn.label;</span>
+                               <input id='opac.advanced.quick.isbn' style='margin: 2px;' type='text' size='13' maxlength='13' />
+                               <input type='submit' onclick='advISBNRun();' value='&advanced.go;' />
+                       </td>
+                       <td>
+                               <span style='padding-right: 0px;'>&common.issn.label;</span>
+                               <input id='opac.advanced.quick.issn' style='margin: 2px;' type='text' size='9' maxlength='9' />
+                               <input type='submit' onclick='advISSNRun();' value='&advanced.go;' />
+                       </td>
+               </tr>
+       </tbody>
+</table>
+<![CDATA[<!-- ****************** end: advanced_quick.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/body.xml b/Open-ILS/web/opac/skin/kcls/xml/body.xml
new file mode 100644 (file)
index 0000000..f2c0630
--- /dev/null
@@ -0,0 +1,248 @@
+
+<body class="tundra">
+<script language='javascript' type='text/javascript'>
+//central config space
+
+       config.ids.login = {};
+       config.ids.searchbar = {};
+       config.ids.sidebar = {};
+       config.css.login = {};
+       config.css.searchbar = {};
+       config.css.sidebar = {};
+       config.css.sidebar.item = {};
+       config.names.sidebar = {};
+       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.ids.common.top_logo = "top_left_logo";
+       config.ids.altcanvas.myopac_reload = 'myopac_reloading';
+       config.ids.altcanvas.org_tree           = config.ids.common.org_container;
+       config.ids.altcanvas.holds                      = 'holds_box';
+       config.ids.altcanvas.check_holds        = 'check_holds_box';
+       config.ids.altcanvas.xulholds           = 'xulholds_box';
+       config.ids.altcanvas.loading            = 'loading_alt';
+       config.ids.altcanvas.cnbrowse           = 'cn_browse';
+       config.ids.sidebar.login                        = 'login_link';
+       config.ids.sidebar.logout                       = 'logout_link';
+       config.ids.sidebar.logoutbox            = 'logout_link_div';
+       config.ids.sidebar.loginbox             = 'login_link_div';
+       config.ids.sidebar.home                         = 'home_link_div';
+       config.ids.sidebar.advanced             = 'advanced_link_div';
+       config.ids.sidebar.myopac                       = 'myopac_link_div';
+       config.ids.sidebar.prefs                        = 'prefs_link_div';
+       config.ids.sidebar.mresult                      = 'mresult_link_div';
+       config.ids.sidebar.rresult                      = 'result_link_div';
+       config.ids.sidebar.rdetail                      = "rdetail_link_div"; 
+       config.ids.sidebar.logged_in_as = 'logged_in_as_div';
+       config.ids.sidebar.username_dest        = 'username_dest';
+       config.ids.sidebar.subject                      = 'subject_sidebar';
+       config.ids.sidebar.subject_item = 'subject_item';
+       config.ids.sidebar.author                       = 'author_sidebar';
+       config.ids.sidebar.author_item  = 'author_item';
+       config.ids.sidebar.series                       = 'series_sidebar';
+       config.ids.sidebar.series_item  = 'series_item';
+       config.ids.sidebar.home_link            = 'home_link'
+       config.ids.sidebar.advanced_link        = 'advanced_link'
+       config.ids.sidebar.myopac_link  = 'myopac_link'
+       config.names.sidebar.subject_item       = 'subject_item';
+       config.names.sidebar.author_item                = 'author_item';
+       config.names.sidebar.series_item                = 'series_item';
+       config.css.encircled                            = 'encircled';
+       config.ids.searchbar.text                               = 'search_box'; 
+       config.ids.searchbar.facets                             = 'facet_box';
+       config.ids.searchbar.submit                     = 'search_submit';      
+       config.ids.searchbar.type_selector      = 'search_type_selector';
+       config.ids.searchbar.depth_selector     = 'depth_selector';
+       config.ids.searchbar.form_selector      = 'form_selector';
+       config.ids.searchbar.depth_sel_span     = 'depth_selector_span';
+       config.ids.login.box            = "login_box";
+       config.ids.login.username       = "login_username";
+       config.ids.login.password       = "login_password";
+       config.ids.login.button         = "login_button";
+       config.ids.login.cancel         = "login_cancel_button";
+       config.ids.altcanvas.login      = config.ids.login.box;
+       config.ids.searchbar.extra_row          = 'searchbar_extra';
+       config.ids.searchbar.main_row                   = 'searchbar_main_row';
+       config.ids.searchbar.table                              = 'searchbar_table';
+       config.ids.searchbar.location_tag       = 'search_location_tag_link';
+       config.ids.searchbar.lib_sel_span       = 'lib_selector_span';
+       config.ids.searchbar.lib_sel_link       = 'lib_selector_link';
+       config.ids.common.now_searching = 'now_searching_location';
+</script>
+
+<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">
+<![CDATA[
+<script type="text/javascript">
+if(grabUser()) {
+       var str = '<div style="float:right;width:214px;">';
+       str += '<div style="position:absolute;"><div style="position:relative;top:-81px;">\n';
+       str += '<div id="quick-links">\n';
+       str += '</div></div></div></div>';
+       document.write(str);
+}
+</script>
+]]>
+       </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.limit2avai2" onclick='searchBarSubmit(true, this);' style="float:left;position:relative;top:2px;left:-2px;margin-right:4px;" /><label for="opac.result.limit2avai2" 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>
+<script language="javascript" type='text/javascript'>
+<![CDATA[
+try { 
+  document.getElementById('toptable').style.display = 'table'; 
+} catch(e) {
+  try {
+       document.getElementById('toptable').style.display = ''; 
+  } catch(ee) {}
+}
+]]>
+</script>
+</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>
+<script type="text/javascript">
+attachEvt("common", "unload", function(){
+       if(typeof(G)!="undefined") destroyObj(G);
+       if(typeof(HTTP)!="undefined") destroyObj(HTTP);
+       if(typeof(_c)!="undefined") destroyObj(_c);
+       if(typeof(_l)!="undefined") destroyObj(_l);
+       if(typeof(config)!="undefined") destroyObj(config);
+       if(typeof(facet_list)!="undefined") destroyObj(facet_list);
+       if(typeof(globalOrgTree)!="undefined") destroyObj(globalOrgTree);
+       if(typeof(globalOrgTypes)!="undefined") destroyObj(globalOrgTypes);
+       if(typeof(google)!="undefined") destroyObj(google);
+       if(typeof(orgArraySearcher)!="undefined") destroyObj(orgArraySearcher);
+       if(typeof(recordsCache)!="undefined") destroyObj(recordsCache);
+       if(typeof(search_list)!="undefined") destroyObj(search_list);
+       if(typeof(subjectCache)!="undefined") destroyObj(subjectCache);
+       if(typeof(xrefCacheIndex)!="undefined") destroyObj(xrefCacheIndex);
+       if(typeof(x)!="undefined") destroyObj(x);
+       if(typeof(string)!="undefined") string = "";
+       //removeChildren(document);
+       //alert(errCounter+'\n'+errCounter2);
+});
+</script>
+<div dojoType='openils.widget.ProgressDialog' jsId='progressDialog' style="width:300px;"></div>
+<![CDATA[
+        <script language='javascript' type='text/javascript'>
+                dojo.addOnLoad(init);
+                dojo.require("dijit._Calendar");
+                dojo.require("dijit.form.DateTextBox");
+                dojo.require("dijit.form.FilteringSelect");
+                dojo.require("dojo.date.locale");
+                dojo.require("dojo.date.stamp");
+                dojo.require("dojo.parser");
+                dojo.require("openils.widget.FacetSidebar"); // pulls in Searcher and I18N
+                dojo.require("dijit.form.NumberSpinner");
+                dojo.require("dijit.form.CheckBox");
+                dojo.require("openils.widget.ProgressDialog");
+                dojo.require('openils.BibTemplate');
+                dojo.addOnLoad(opac_init);
+        </script>
+]]>
+</body>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/cnbrowse.xml b/Open-ILS/web/opac/skin/kcls/xml/cnbrowse.xml
new file mode 100644 (file)
index 0000000..f3e84e5
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- Loads the environment -->
+<!--#include virtual="setenv.xml"-->
+
+<!DOCTYPE html PUBLIC 
+       "-//W3C//DTD XHTML 1.0 Transitional//EN" 
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
+       <!--#include virtual="/opac/locale/${locale}/opac.dtd"-->
+]>
+
+
+<html xmlns='http://www.w3.org/1999/xhtml'>
+       <!--#include virtual="header.xml"-->
+       <!--#if expr="$OILS_PAGE='index.xml'"-->
+               <!--#include virtual="home/index_body.xml"-->
+       <!--#else-->
+               <!--#include virtual="body.xml"-->
+       <!--#endif-->
+</html>
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/altcanvas.xml b/Open-ILS/web/opac/skin/kcls/xml/common/altcanvas.xml
new file mode 100644 (file)
index 0000000..05af76c
--- /dev/null
@@ -0,0 +1,16 @@
+
+<!-- These are the UI components that may be needed on any given page.  The must be set to class += 'hide_me' by default -->
+<![CDATA[<!-- ****************** altcanvas.xml ***************************** -->]]>
+<div id='not_the_canvas' xmlns:xi="http://www.w3.org/2001/XInclude">
+       <!--#if expr="$FRONT_PAGE!='true'"--><!--#include virtual="login.xml"--><!--#endif-->
+       <!--#include virtual="orgtree.xml"-->
+       <!--#if expr="$FRONT_PAGE!='true'"--><!--#include virtual="holds.xml"--><!--#if expr="$OILS_PAGE!='myopac.xml'"--><!--#include virtual="mylist.xml"--><!--#endif--><!-- #include virtual="cn_browse.xml"--><!--#endif-->
+
+       <div id='loading_alt' class='hide_me canvas' style='margin-top: 6px;'>
+               <div style='margin-top: 30px; margin-bottom: 30px; text-align: center; font-weight: 700;' class='color_3'>
+                       <img src='../../../../images/progressbar_green.gif' style='margin: 5px;' />
+               </div>
+       </div>
+
+</div>
+<![CDATA[<!-- ****************** end: altcanvas.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/cn_browse.xml b/Open-ILS/web/opac/skin/kcls/xml/common/cn_browse.xml
new file mode 100644 (file)
index 0000000..8938496
--- /dev/null
@@ -0,0 +1,37 @@
+
+<![CDATA[<!-- ****************** cn_browse.xml ***************************** -->]]>
+<div id='cn_browse' class='hide_me cn_browser' 
+       style='width: 95%; text-align: center; padding: 15px;'>
+       <div id='cn_browse_loading'  class='cn_browse_loading hide_me'>&common.cn.loading;</div>
+       <div id='cn_browse_div'> 
+
+
+               <div style='width: 90%; text-align: center; margin: 10px;' class='color_4'>
+                       <span>&common.cn.browsing;</span><b style='margin-left: 6px;' id='cn_browse_where'> </b>
+               </div>
+               <table class='data_grid bookshelf' width='100%'>
+                       <thead>
+                               <tr>
+                                       <td><a id='cn_browse_next' class='classic_link' 
+                                               href='javascript:cnBrowsePrev();'><b>&common.cn.previous;</b></a></td>
+                                       <td colspan='1' align='center'>&common.cn.shelf;</td>
+                                       <td><a id='cn_browse_prev' class='classic_link' 
+                                               href='javascript:cnBrowseNext();'><b>&common.cn.next;</b></a></td>
+                               </tr>
+                       </thead>
+                       <tbody id='cn_tbody'>
+                               <tr id='cn_browse_row'>
+                                       <td id='cn_browse_td' class='cn_browse_item' width='25%' valign='top'>
+                                               <a><img height='60' width='50' 
+                                                       class='cn_browse_info' name='cn_browse_pic' border='0' /></a>
+                                               <div style='font-weight: bold;' class='cn_browse_info' name='cn_browse_cn'>  </div>
+                                               <div class='cn_browse_info'><a name='cn_browse_title' class='classic_link'> </a></div>
+                                               <div class='cn_browse_info'><a name='cn_browse_author' class='classic_link'>  </a></div>
+                                               <div class='cn_browse_info' name='cn_browse_lib'>  </div>
+                                       </td>
+                               </tr>
+                       </tbody>
+               </table>
+       </div>
+</div>
+<![CDATA[<!-- ****************** end: cn_browse.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/css_common.xml b/Open-ILS/web/opac/skin/kcls/xml/common/css_common.xml
new file mode 100644 (file)
index 0000000..eb788bc
--- /dev/null
@@ -0,0 +1,24 @@
+<!-- CSS shared across pages goes here --> 
+
+<link type='text/css' rel='stylesheet' href="<!--#echo var='OILS_SKIN_BASE'-->/default/css/layout.css"/>
+
+<!-- Our font CSS's -->
+<link type='text/css' rel='stylesheet' href='<!--#echo var="OILS_CSS_BASE"-->/mediumfont.css' />
+
+<!-- Our colors -->
+<link type='text/css' rel="stylesheet" href="<!--#echo var='OILS_THEME_BASE'-->/default/css/colors.css" />
+
+<!-- An alternate stylesheet -->
+<link type='text/css' rel="alternate stylesheet" title='&opac.style.reddish;' href="<!--#echo var='OILS_THEME_BASE'-->/reddish/css/colors.css" />
+
+<!-- OpenSearch auto discovery -->
+<link type="application/opensearchdescription+xml"
+       rel='search' title="Evergreen"
+       href="http://<!--#echo var='SERVER_NAME'-->/opac/extras/opensearch/1.1/-/osd.xml" />
+
+<!-- enable Dojo date picker -->
+<style type="text/css">
+       @import '/js/dojo/dojo/resources/dojo.css';
+       @import '/js/dojo/dijit/themes/tundra/tundra.css';
+</style>
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/fonts.xml b/Open-ILS/web/opac/skin/kcls/xml/common/fonts.xml
new file mode 100644 (file)
index 0000000..8b3ce40
--- /dev/null
@@ -0,0 +1,25 @@
+<div id='fonts_div'>
+
+       <div id='text_size_div' style='position:absolute; top: 2px; right: 6px;'>
+               <span style='vertical-align: top;'>&common.textsize.title;</span>
+               <span style='vertical-align: top;'><a href="javascript:void(0);" onclick="setFontSize('regular');"> &common.textsize.regular; </a></span>
+               <span style='vertical-align: top;'> &common.textsize.separator; </span>
+               <span style='vertical-align: top;'><a href="javascript:void(0);" onclick="setFontSize('large');"> &common.textsize.large; </a></span>
+               <span style='vertical-align: top;'>&nbsp;<span style="font-weight:bold;">|</span>&nbsp;</span>
+               <span style='vertical-align: top;'>&common.language;</span>
+               <span id='translation_switch' dojoType="dijit.form.FilteringSelect" store="openils.I18N.localeStore"
+            searchAttr="label" required="false" jsId='opacLocaleSelector'>
+            <script>
+                dojo.addOnLoad(function() {
+                    opacLocaleSelector.setValue(locale);
+                    dojo.connect(opacLocaleSelector, 'onChange', 
+                        function () {
+                            location.href = location.href.replace(/opac\/[^\/]+\/skin/, 'opac/' + this.getValue() + '/skin');
+                        }
+                    );
+                });
+            </script>
+               </span>
+       </div>
+       
+</div>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/format_selector.xml b/Open-ILS/web/opac/skin/kcls/xml/common/format_selector.xml
new file mode 100644 (file)
index 0000000..aff0281
--- /dev/null
@@ -0,0 +1,43 @@
+
+<![CDATA[<!-- ****************** format_selector.xml ***************************** -->]]>
+<select id='<!--#echo var="FORM_SEL_ID"-->'>
+       <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>   
+<!--
+       <option value='at'>&opac.search.books;</option>
+       <option value='at-d'>&opac.search.largePrint;</option>
+       <option value='i'>&opac.search.audioBooks;</option>
+       <option value='g'>&opac.search.videoRecordings;</option>
+       <option value='j'>&opac.search.music;</option>
+       <option value='m'>&opac.search.electronic;</option>
+-->
+</select>
+<![CDATA[<!-- ****************** end: format_selector.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/holds.xml b/Open-ILS/web/opac/skin/kcls/xml/common/holds.xml
new file mode 100644 (file)
index 0000000..80f895d
--- /dev/null
@@ -0,0 +1,251 @@
+
+<![CDATA[<!-- ****************** holds.xml ***************************** -->]]>
+<div>
+       <div id='xulholds_box' class='hide_me canvas' style='margin-top: 6px;'>
+               <center>
+                       <table class='data_grid' style='margin-top: 20px;'>
+                               <tbody>
+                                       <tr>
+                                               <td>&opac.holds.xulRecipient;:</td>
+                                               <td><input type='text' id='xul_recipient_barcode' /></td>
+                                               <td><input type='submit' value='&common.submit;' id='xul_recipient_barcode_submit' /></td>
+                                               <td><input type='submit' value='&common.cancel;' onclick='showCanvas();' /></td>
+                                               <td><input type='submit' value='&common.hold.place;' id='xul_recipient_me' /></td>
+                                       </tr>
+                               </tbody>
+                       </table>
+               </center>
+       </div>
+
+       <div id='check_holds_box' class='hide_me canvas' 
+               style='margin-top: 6px; width: 100%; text-align: center'>
+               <br/><br/><br/>
+               <b>&common.hold.check;</b>
+       </div>
+
+       <div id='holds_box' class='hide_me canvas' style='margin-top: 6px;'>
+               <br/>
+               <h1>Place Hold</h1>
+               <p>You would like to place a hold on <strong>&quot;<span id="holds_title"></span>&quot;</strong> to be picked up at <strong>&quot;<span id="holds_pickup_lib"></span>&quot;</strong>. <br />If this is correct, press <strong>SUBMIT</strong>.</p>
+               <p>If you would like to change the library pick up location, select from the <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]> <select style="width:200px;" id="holds_org_selector"></select><br />Location dropdown menu.</p>
+<P>If you use the Traveling Library Center (TLC) and ABC Express services, please select "Outreach" to have the item delivered during your scheduled visit.</P>                
+<a href="javascript:;" id="holds_submit"><img alt="Submit" src="/opac/skin/kcls/graphics/btnSubmit.png" /></a> <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]> <a href="javascript:;" id="holds_cancel"><img alt="Cancel" src="/opac/skin/kcls/graphics/btnCancel.png" /></a><br /><br />
+               <p>* If you need your item today, and it is checked in at your library, please place your hold and then call your library to set it aside. Placing a hold without calling the library will increase your wait time.<br /><a href="javascript:;">Library phone numbers.</a></p>
+               <p>* For best possible service, we recommend keeping a printed copy of your most recent holds list.</p>
+               
+               <table width='90%' border="1" class="hide_me">
+                       <tbody>
+                               <tr>
+                                       <td class='holds_cell color_1' 
+                                               align='center' colspan='2'>&common.hold.create;</td>
+                               </tr>
+                               <tr>
+                                       <td class='holds_cell'>&opac.holds.recipient;:</td>
+                                       <td class='holds_cell' id='holds_recipient'> </td>
+                               </tr>
+                               <tr>
+                                       <td class='holds_cell'>&common.title.label;</td>
+                                       <!-- <td class='holds_cell' id='holds_title'> </td> -->
+                               </tr>
+                               <tr>
+                                       <td class='holds_cell'>&common.author;</td>
+                                       <td class='holds_cell' id='holds_author'> </td>
+                               </tr>
+                               <tr>
+                                       <td class='holds_cell'>&common.format;</td>
+                                       <td class='holds_cell' id='holds_format'> </td>
+                               </tr>
+                               <tr id='hold_physical_desc_row'>
+                                       <td class='holds_cell'>&common.physical.label;</td>
+                                       <td class='holds_cell' id='holds_physical_desc'> </td>
+                               </tr>
+
+                               <tr class='hide_me' id='holds_cn_row'>
+                                       <td class='holds_cell'>&common.call.number.label;</td>
+                                       <td class='holds_cell'><b id='holds_cn'/> </td>
+                               </tr>
+
+                               <tr class='hide_me' id='holds_copy_row'>
+                                       <td class='holds_cell'>&common.copy.barcode.label;</td>
+                                       <td class='holds_cell'><b id='holds_copy'/> </td>
+                               </tr>
+
+                               <tr class='hide_me' id='holds_type_row'>
+                                       <td class='holds_cell'>&common.hold.type.label;</td>
+                                       <td class='holds_cell hide_me' id='holds_is_cn'><b>&common.hold.volume;</b></td>
+                                       <td class='holds_cell hide_me' id='holds_is_copy'><b>&common.hold.copy;</b></td>
+                               </tr>
+
+                               <tr>
+                                       <td class='holds_cell'>&opac.holds.contactPhone;:</td>
+                                       <td class='holds_cell'>
+                                               <input id='holds_phone' size='13' maxlength='12'/>
+                                               <span style='margin-left: 4px; font-size: 7pt;'>&common.phone.format;</span>
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td class='holds_cell'>&common.phone.enable;</td>
+                                       <td class='holds_cell'>
+                                               <input type='checkbox' id='holds_enable_phone'  checked='checked' onchange='if (this.checked) $("holds_phone").disabled=false; else $("holds_phone").disabled = true;'/>
+                                       </td>
+                               </tr>
+
+                               <tr>
+                                       <td class='holds_cell'>&opac.holds.contactEmail;:</td>
+                                       <td class='holds_cell' id='holds_email'> 
+                        <span class='hide_me' id='holds.no_email'>
+                           &common.email.none;<br/>
+                           &common.email.set;
+                        </span>
+                        <span class='hide_me' id='holds.no_email.xul'>
+                           &common.email.none; 
+                        </span>
+
+                    </td>
+                               </tr>
+                               <tr>
+                                       <td class='holds_cell'>&common.email.enable;</td>
+                                       <td class='holds_cell'>
+                                               <input type='checkbox' id='holds_enable_email' checked='checked'/>
+                                       </td>
+                               </tr>
+                               <!--
+                               <tr id='holds_depth_selector_row' class='hide_me'>
+                                       <td class='holds_cell'>Hold Range</td>
+                                       <td class='holds_cell'>
+                                               <select id='holds_depth_selector'></select>
+                                       </td>
+                               </tr>
+                               -->
+                               <tr>
+                                       <td class='holds_cell'>&opac.holds.pickupLocation;</td>
+                                       <td class='holds_cell'>
+                                               <!-- <select id='holds_org_selector'> </select> -->
+                                       </td>
+                               </tr>
+
+                               <tr>
+                                       <td class='holds_cell'>&opac.holds.expire_time;</td>
+                                       <td class='holds_cell'>
+                        <input dojoType="dijit.form.DateTextBox" size='10' maxlength='10' id='holds_expire_time' />
+                                       </td>
+                               </tr>
+
+                <tr>
+                    <td class='holds_cell'>
+                        &opac.holds.freeze;
+                        <a class='classic_link' href='javascript:alert("&opac.holds.freeze.help;");'>&common.help;</a>
+                        </td>
+                    <td class='holds_cell'>
+                        <input type='checkbox' id='holds_frozen_chkbox' onchange='if($("holds_frozen_chkbox").checked) unHideMe($("hold_frozen_thaw_row")); else hideMe($("hold_frozen_thaw_row"));' /> 
+                    </td>
+                </tr>
+
+                <tr id='hold_frozen_thaw_row' class='hide_me'>
+                    <td class='holds_cell'>
+                        <script language='javascript' type='text/javascript'> if($('holds_frozen_chkbox').checked) unHideMe($("hold_frozen_thaw_row"));</script>
+                        &opac.holds.freeze.thaw_date;
+                    </td>
+                    <td class='holds_cell'>
+                        <input dojoType="dijit.form.DateTextBox" size='10' maxlength='10' id='holds_frozen_thaw_input' />
+                    </td>
+                </tr>
+
+                               <tr id='holds_alt_formats_row_extras' class='hide_me'>
+                                       <td colspan='2' align='center'>
+                                               <div style='padding: 8px;'>
+                                                       <a class='classic_link' href='javascript:void(0);' style='padding: 5px;'
+                                                               onclick='unHideMe($("holds_alt_formats_row"));'>&common.hold.advanced;</a>
+                                               </div>
+                                       </td>
+                               </tr>
+
+                               <tr id='holds_alt_formats_row' class='hide_me'>
+
+                                       <td class='holds_cell'>
+                                               <div style='margin-bottom: 5px;'>
+                                                       <span>&common.format.alternatives; </span>
+                                                       <span> <a class='classic_link' style='color:red;' href='javascript:void(0);' 
+                                                               onclick='alert($("holds_explain_adv").innerHTML)'>&common.help;</a></span>
+                                               </div>
+                                               <div>&common.control.click;</div>
+                                       </td>
+
+                                       <td class='holds_cell'>
+                                               <select id='hold_alt_form_selector' multiple='multiple' style='width: 14em;'>
+                                                       <option value='at'      class='hide_me'>&opac.search.books;</option>
+                                                       <option value='at-d' class='hide_me'>&opac.search.largePrint;</option>
+                                                       <option value='i'               class='hide_me'>&opac.search.audioBooks;</option>
+                                                       <option value='g'               class='hide_me'>&opac.search.videoRecordings;</option>
+                                                       <option value='j'               class='hide_me'>&opac.search.music;</option>
+                                               </select>
+                                       </td>
+                               </tr>
+
+                               <tr>
+                                       <td class='holds_cell' align='center' colspan='2'>
+                                               <!-- <button id='holds_submit'>&opac.holds.placeHold;</button> -->
+                                               <button class='hide_me' id='holds_update'>&common.hold.update;</button>
+                                               <span style='padding: 20px;'> </span>
+                                               <!-- <button id='holds_cancel'>&common.cancel;</button> -->
+                                       </td>
+                               </tr>
+                       </tbody>
+               </table>
+       
+               <div class='hide_me' id='holds_success'>&opac.holds.success;</div>
+               <div class='hide_me' id='holds_failure'>&opac.holds.failure;</div>
+               <span class='hide_me' id='holds_bad_phone'>
+                       &common.phone.format.help;
+               </span>
+
+               <span class='hide_me' id='hold_not_allowed'>
+                       &common.hold.failed;
+               </span>
+       </div>
+       
+       <div id="anonListTable" class="hide_me" style="margin-top: 6px;">
+       <select id="holdsCacheSel" class="hide_me"></select><br />
+       <a href="javascript:;" onclick="placeHoldOnCache();">Place hold on selected</a><br />
+       <a href="javascript:;" onclick="delSelCache();">Remove selected</a>
+       
+       <table id="temp_list_holds" cellpadding='0' cellspacing='0' border='0' style="margin-top:10px;"><tr>
+         <td width="1%" style="padding-left:10px;"><input type='checkbox' title='Select All' id='anon_selector' onclick="checkAll($('anonListParent'),this.id)" /></td>
+         <td width="1%"></td>
+         <td width="98%" style="padding-left:40px;"><strong>Title</strong></td>
+       </tr></table>
+       
+       <table width='100%' style="margin-left:7px;margin-bottom:10px;">
+               <thead>
+                       <tr><td width='20'></td><td width='30'></td><td></td></tr>
+               </thead>
+               <tbody id="anonListParent">
+                       <tr id="anonListTemp">
+                         <td><input type='checkbox' name='anon_selector' /></td>
+                         <td name="curr_row"></td>
+                         <td name="title"></td>
+                       </tr>
+               </tbody>
+       </table>
+       <a href="javascript:;" onclick="try { hideResultsPage(); } catch(e) {} hideMe($('anonListTable'));">Back to search results</a>
+       </div>
+
+       <span class='hide_me' id='format_words'>
+               <span name='at'>&opac.search.books;</span>
+               <span name='at-d'>&opac.search.largePrint;</span>
+               <span name='i'>&opac.search.audioBooks;</span>
+               <span name='g'>&opac.search.videoRecordings;</span>
+               <span name='j'>&opac.search.music;</span>
+               <span name='m'>&opac.search.electronic;</span>
+       </span>
+
+       <span class='hide_me' id='holds_explain_adv'>&holds.advanced_options;</span>
+       <span class='hide_me' id='holds_pick_good_org'>&common.hold.delivery;</span>
+       <span class='hide_me' id='hold_dup_exists'>&common.hold.exists;</span>
+       <span class='hide_me' id='hold_dup_exists_override'>&common.hold.exists.override;</span>
+       <span id='hold_failed_patron_barred' class='hide_me'>&common.hold.barred;</span>
+       <span id='invalid_hold' class='hide_me'>&common.hold.item.invalid;</span>
+       <span id='holds_invalid_recipient' class='hide_me'>&common.hold.patron.invalid;</span>
+
+</div>
+<![CDATA[<!-- ****************** end: holds.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/ilsevents.xml b/Open-ILS/web/opac/skin/kcls/xml/common/ilsevents.xml
new file mode 100644 (file)
index 0000000..914bbe4
--- /dev/null
@@ -0,0 +1,16 @@
+
+<![CDATA[<!-- ****************** ilsevents.xml ***************************** -->]]>
+<span class='hide_me'>
+       <span id='ilsevent.1000'>&ilsevent.1000;</span>
+       <span id='ilsevent.1001'>&ilsevent.1001;</span>
+       <span id='ilsevent.1002'>&ilsevent.1002;</span>
+       <span id='ilsevent.1200'>&ilsevent.1200;</span>
+       <span id='ilsevent.5000'>&ilsevent.5000;</span>
+       <span id='ilsperm.CREATE_HOLD'>&ilsperm.CREATE_HOLD;</span>
+
+       <!-- Local OPAC Specific strings/events -->
+       <span id='auth_session_expiring'>&opac.session_expiring;</span>
+       <span id='auth_session_expired'>&opac.session_expired;</span>
+       <span id='user_not_found'>&common.user_not_found;</span>
+</span>
+<![CDATA[<!-- ****************** end: ilsevents.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/js_common.xml b/Open-ILS/web/opac/skin/kcls/xml/common/js_common.xml
new file mode 100644 (file)
index 0000000..aa2956f
--- /dev/null
@@ -0,0 +1,84 @@
+
+    <script language='javascript'  
+        src='/IDL2js?mvr,bre,aou,aout,pgt,lasso,cmf,cmc,cmsa,cam,cifm,clfm,citm,cblvl,accs,au,ahr,ahrn,acn,actscecm,cbreb,cbreb,cbrebi,acp,cust,ac,aua,mous,circ,mbts,mb,ausp,csp'
+        type='text/javascript'></script>
+
+       <script src='<!--#echo var="OILS_JS_BASE"-->/utils.js' type='text/javascript'></script>
+       <script src='<!--#echo var="OILS_JS_BASE"-->/config.js' type='text/javascript'></script>
+       <script src='<!--#echo var="OILS_JS_BASE"-->/CGI.js' type='text/javascript'></script>
+       <script src='<!--#echo var="OILS_JS_BASE"-->/Cookies.js' type='text/javascript'></script>
+       <script src='<!--#echo var="OILS_JS_BASE"-->/md5.js' type='text/javascript'></script>
+       <script src='<!--#echo var="OILS_JS_BASE"-->/slimtree.js' type='text/javascript'></script>
+       <script src='<!--#echo var="OILS_JS_BASE"-->/JSON_v1.js' type='text/javascript'></script>
+
+<script type="text/javascript">
+        var cookieManager = new HTTP.Cookies(); 
+       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'
+               }
+    }, lang, bidi;
+       
+       
+               
+               /*config.css.color_1 = "";
+               config.css.color_2 = "";
+               config.css.color_3 = "";*/
+               <!-- set up some global JS config variables, read from the Apache config -->
+               var OILS_OPAC_IMAGES_HOST = null;<!--#if expr="$OILS_OPAC_IMAGES_HOST"-->
+                       OILS_OPAC_IMAGES_HOST = '<!--#echo var="OILS_OPAC_IMAGES_HOST"-->extras/ac/jacket/';<!--#endif -->
+               var OILS_OPAC_STATIC_PROTOCOL = null;<!--#if expr="$OILS_OPAC_STATIC_PROTOCOL"-->
+               OILS_OPAC_STATIC_PROTOCOL = '<!--#echo var="OILS_OPAC_STATIC_PROTOCOL"-->';<!--#endif -->
+       
+       <!--#if expr="$OILS_OPAC_FORCE_LOGIN_SSL"-->
+               forceLoginSSL = true;
+       <!--#endif -->
+</script>
+
+       <script src='/js/dojo/dojo/dojo.js' type="text/javascript"></script>
+       <script src='/js/dojo/dojo/openils_dojo.js' type="text/javascript"></script>
+       <script src='/js/dojo/opensrf/opensrf.js' type="text/javascript"></script>
+       <script type="text/javascript">
+       //dojo.config.AutoIDL = ["mvr","bre","aou","aout","pgt","lasso","cmf","cmc","cmsa","cam","cifm","clfm","citm","cblvl","accs","au","ahr","ahrn","acn","actscecm","cbreb","cbreb","cbrebi","acp","cust","ac","aua","mous","circ","mbts","mb","ausp","csp"];
+       </script>
+       <script src='/js/dojo/fieldmapper/AutoIDL.js' type="text/javascript"></script>
+       
+       <script src='<!--#echo var="OILS_JS_BASE"-->/opac_utils.js' type='text/javascript'></script>
+       <script src='<!--#echo var="OILS_JS_BASE"-->/<!--#echo var="locale"-->/OrgTree.js' type='text/javascript'></script>
+       <script src='<!--#echo var="OILS_JS_BASE"-->/<!--#echo var="locale"-->/FacetDefs.js' type='text/javascript'></script>
+       <script src='<!--#echo var="OILS_JS_BASE"-->/OrgLasso.js' type='text/javascript'></script>
+       <script src='<!--#echo var="OILS_JS_BASE"-->/org_utils.js' type='text/javascript'></script>
+    <script>dojo.require('dojo.cookie')</script>
+       <script>
+       //<![CDATA[
+               var localSuppressedOrgs = {1500:true, 1501:true, 1558:true};  /* change to suit */   /* changed from array to object - IE fix */
+               for (var i in orgArraySearcher) {
+                  var org = orgArraySearcher[i];
+                   if(localSuppressedOrgs[i]) {        /* removed indexOf() - isn't supported on <= IE8 */
+                       org.opac_visible('f');
+                   }
+               }
+       //]]>
+       </script>
+       <script src='<!--#echo var="OILS_JS_BASE"-->/RemoteRequest.js' type='text/javascript'></script>
+       <script src='<!--#echo var="OILS_JS_BASE"-->/init.js' type='text/javascript'></script>
+       <script src='<!--#echo var="OILS_JS_BASE"-->/added_content.js' type='text/javascript'></script>
+       
+       <script src="<!--#echo var='OILS_SKIN_BASE'-->/kcls/js/depth_selector.js" type='text/javascript'> </script>
+       <!--#if expr="$OILS_PAGE!='advanced.xml'"--><script src="<!--#echo var='OILS_SKIN_BASE'-->/kcls/js/search_bar.js" type='text/javascript'> </script><!--#endif -->
+       <!--#if expr="$OILS_PAGE='rresult.xml' || $OILS_PAGE='myopac.xml'"--><script src="<!--#echo var='OILS_SKIN_BASE'-->/kcls/js/sidebar.js" type='text/javascript'></script><!--#endif-->
+       <script src="<!--#echo var='OILS_SKIN_BASE'-->/kcls/js/misc.js" type='text/javascript'></script>
+       <!-- myopac.js-->
+       <script src="<!--#echo var='OILS_OPAC_JS_HOST'-->common/js/DP_DateExtensions.js" type='text/javascript'></script>
+       <script src="<!--#echo var='OILS_SKIN_BASE'-->/kcls/js/contentslider.js" type='text/javascript'> </script>
+<!-- TESTING NO ANALYTICS
+       <script src='https://www.google.com/jsapi' type='text/javascript' language='javascript'></script>
+-->
+       
+
+       
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/js_common.xml.2010_11_12_bill b/Open-ILS/web/opac/skin/kcls/xml/common/js_common.xml.2010_11_12_bill
new file mode 100644 (file)
index 0000000..54d4e7a
--- /dev/null
@@ -0,0 +1,73 @@
+\r
+       <script src='<!--#echo var="OILS_JS_BASE"-->/utils.js' type='text/javascript'></script>\r
+       <script src='<!--#echo var="OILS_JS_BASE"-->/config.js' type='text/javascript'></script>\r
+       <script src='<!--#echo var="OILS_JS_BASE"-->/CGI.js' type='text/javascript'></script>\r
+       <script src='<!--#echo var="OILS_JS_BASE"-->/Cookies.js' type='text/javascript'></script>\r
+       <script src='<!--#echo var="OILS_JS_BASE"-->/md5.js' type='text/javascript'></script>\r
+       <script src='<!--#echo var="OILS_JS_BASE"-->/slimtree.js' type='text/javascript'></script>\r
+       <script src='<!--#echo var="OILS_JS_BASE"-->/JSON_v1.js' type='text/javascript'></script>\r
+\r
+<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
+               AutoIDL: ['cblvl', 'cam', 'citm', 'clfm', 'cifm', 'accs', 'au', 'aou', 'aout', 'pgt', 'lasso', 'mvr', 'ahr', 'cbreb', 'cbrebi', 'acp', 'acn', 'cust', 'ac', 'aua', 'mous', 'circ', 'mbts', 'mb', 'ausp', 'csp'],  \r
+               parseOnLoad: true,  \r
+               isDebug: false,\r
+               modulePaths: {\r
+                       "fieldmapper": '/js/dojo/fieldmapper'\r
+               }\r
+    }, lang, bidi;\r
+               \r
+               /*config.css.color_1 = "";\r
+               config.css.color_2 = "";\r
+               config.css.color_3 = "";*/\r
+               <!-- set up some global JS config variables, read from the Apache config -->\r
+               var OILS_OPAC_IMAGES_HOST = null;<!--#if expr="$OILS_OPAC_IMAGES_HOST"-->\r
+                       OILS_OPAC_IMAGES_HOST = '<!--#echo var="OILS_OPAC_IMAGES_HOST"-->extras/ac/jacket/';<!--#endif -->\r
+               var OILS_OPAC_STATIC_PROTOCOL = null;<!--#if expr="$OILS_OPAC_STATIC_PROTOCOL"-->\r
+               OILS_OPAC_STATIC_PROTOCOL = '<!--#echo var="OILS_OPAC_STATIC_PROTOCOL"-->';<!--#endif -->\r
+       \r
+       <!--#if expr="$OILS_OPAC_FORCE_LOGIN_SSL"-->\r
+               forceLoginSSL = true;\r
+       <!--#endif -->\r
+</script>\r
+\r
+       <script src='/js/dojo/dojo/dojo.js' type="text/javascript"></script>\r
+       <script src='/js/dojo/dojo/openils_dojo.js' type="text/javascript"></script>\r
+       <script src='/js/dojo/opensrf/opensrf.js' type="text/javascript"></script>\r
+       <script src='/js/dojo/fieldmapper/AutoIDL.js' type="text/javascript"></script>\r
+       \r
+       <script src='<!--#echo var="OILS_JS_BASE"-->/opac_utils.js' type='text/javascript'></script>\r
+       <script src='<!--#echo var="OILS_JS_BASE"-->/<!--#echo var="locale"-->/OrgTree.js' type='text/javascript'></script>\r
+       <script src='<!--#echo var="OILS_JS_BASE"-->/<!--#echo var="locale"-->/FacetDefs.js' type='text/javascript'></script>\r
+       <script src='<!--#echo var="OILS_JS_BASE"-->/OrgLasso.js' type='text/javascript'></script>\r
+       <script src='<!--#echo var="OILS_JS_BASE"-->/org_utils.js' type='text/javascript'></script>\r
+       <script>\r
+       //<![CDATA[\r
+               var localSuppressedOrgs = {1500:true, 1501:true, 1558:true};  /* change to suit */   /* changed from array to object - IE fix */\r
+               for (var i in orgArraySearcher) {\r
+                  var org = orgArraySearcher[i];\r
+                   if(localSuppressedOrgs[i]) {        /* removed indexOf() - isn't supported on <= IE8 */\r
+                       org.opac_visible('f');\r
+                   }\r
+               }\r
+       //]]>\r
+       </script>\r
+       <script src='<!--#echo var="OILS_JS_BASE"-->/RemoteRequest.js' type='text/javascript'></script>\r
+       <script src='<!--#echo var="OILS_JS_BASE"-->/init.js' type='text/javascript'></script>\r
+       <script src='<!--#echo var="OILS_JS_BASE"-->/added_content.js' type='text/javascript'></script>\r
+       \r
+       <script src="<!--#echo var='OILS_SKIN_BASE'-->/kcls/js/depth_selector.js" type='text/javascript'> </script>\r
+       <!--#if expr="$OILS_PAGE!='advanced.xml'"--><script src="<!--#echo var='OILS_SKIN_BASE'-->/kcls/js/search_bar.js" type='text/javascript'> </script><!--#endif -->\r
+       <!--#if expr="$OILS_PAGE='rresult.xml' || $OILS_PAGE='myopac.xml'"--><script src="<!--#echo var='OILS_SKIN_BASE'-->/kcls/js/sidebar.js" type='text/javascript'></script><!--#endif-->\r
+       <script src="<!--#echo var='OILS_SKIN_BASE'-->/kcls/js/misc.js" type='text/javascript'></script>\r
+       <!-- myopac.js-->\r
+       <script src="<!--#echo var='OILS_OPAC_JS_HOST'-->common/js/DP_DateExtensions.js" type='text/javascript'></script>\r
+<!-- TESTING NO ANALYTICS\r
+       <script src='https://www.google.com/jsapi' type='text/javascript' language='javascript'></script>\r
+-->\r
+       \r
+\r
+       \r
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/js_common_postbody.xml b/Open-ILS/web/opac/skin/kcls/xml/common/js_common_postbody.xml
new file mode 100644 (file)
index 0000000..074a048
--- /dev/null
@@ -0,0 +1,94 @@
+<script type="text/javascript"><![CDATA[
+    dojo.require('openils.Util');
+
+    // set up some global JS config variables, read from the Apache config
+
+    openils.Util.requireLegacy('/js/dojo/dojo/openils_dojo.js');
+    openils.Util.requireLegacy('/js/dojo/fieldmapper/AutoIDL.js');
+    openils.Util.requireLegacy('<!--#echo var="OILS_JS_BASE"-->/<!--#echo var="locale"-->/OrgTree.js');
+    openils.Util.requireLegacy('<!--#echo var="OILS_JS_BASE"-->/<!--#echo var="locale"-->/FacetDefs.js');
+
+    <!--#if expr="$OILS_OPAC_COMBINED_JS"-->
+    openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/combined.js')
+    <!--#else -->
+    /* See js_common.xml for which files are actually combined/compressed by autogen */
+    openils.Util.requireLegacy('<!--#echo var="OILS_JS_BASE"-->/OrgLasso.js');
+    openils.Util.requireLegacy('<!--#echo var="OILS_JS_BASE"-->/utils.js');
+    openils.Util.requireLegacy('<!--#echo var="OILS_JS_BASE"-->/config.js');
+    openils.Util.requireLegacy('<!--#echo var="OILS_JS_BASE"-->/CGI.js');
+    openils.Util.requireLegacy('<!--#echo var="OILS_JS_BASE"-->/md5.js');
+    openils.Util.requireLegacy('<!--#echo var="OILS_JS_BASE"-->/slimtree.js');
+    openils.Util.requireLegacy('<!--#echo var="OILS_JS_BASE"-->/opac_utils.js');
+    openils.Util.requireLegacy('<!--#echo var="OILS_JS_BASE"-->/org_utils.js');
+    openils.Util.requireLegacy('<!--#echo var="OILS_JS_BASE"-->/RemoteRequest.js');
+    openils.Util.requireLegacy('<!--#echo var="OILS_JS_BASE"-->/init.js');
+    openils.Util.requireLegacy('<!--#echo var="OILS_JS_BASE"-->/added_content.js');
+    openils.Util.requireLegacy('<!--#echo var="OILS_JS_BASE"-->/DP_DateExtensions.js');
+    openils.Util.requireLegacy('<!--#echo var="OILS_JS_BASE"-->/Cookies.js');
+    <!--#endif -->
+
+    <!--#include virtual="js_shared.xml"-->
+
+    function skin_init() {
+        openils.Util.requireLegacy('/opac/skin/kcls/js/depth_selector.js');
+        openils.Util.requireLegacy('/opac/skin/kcls/js/misc.js');
+
+        <!--#if expr="$OILS_PAGE!='advanced.xml'"-->
+        openils.Util.requireLegacy('/opac/skin/kcls/js/search_bar.js');
+        <!--#endif -->
+
+        <!--#if expr="$OILS_PAGE='rresult.xml'"-->
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/sidebar_extras.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/rresult.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/result_common.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/tips.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/holds.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/sidebar.js');
+        <!--#endif-->
+
+        <!--#if expr="$OILS_PAGE='rdetail.xml'"-->
+
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/sidebar.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/sidebar_extras.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/result_common.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/rresult.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/rdetail.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/cn_browse.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/holds.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/container.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/copy_details.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/common/js/Date.W3CDTF.js');
+
+        <!--#endif--> /* if rdetail.xml */
+
+        <!--#if expr="$OILS_PAGE='myopac.xml'"-->
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/myopac.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/container.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/holds.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/sidebar.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/common/js/Date.W3CDTF.js');
+
+        <!--#endif-->
+
+        <!--#if expr="$OILS_PAGE='mresult.xml'"-->
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/sidebar_extras.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/mresult.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/result_common.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/tips.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/holds.js');
+        <!--#endif-->
+
+        <!--#if expr="$OILS_PAGE='cnbrowse.xml'"-->
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/cn_browse.js');
+        <!--#endif-->
+
+        <!--#if expr="$OILS_PAGE='advanced.xml'"-->
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/advanced.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/adv_global.js');
+        openils.Util.requireLegacy('<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/kcls/js/sidebar.js');
+        <!--#endif-->
+    }
+
+    dojo.addOnLoad( function() { skin_init(); init(); opac_init(); });
+
+]]></script>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/js_shared.xml b/Open-ILS/web/opac/skin/kcls/xml/common/js_shared.xml
new file mode 100644 (file)
index 0000000..1796235
--- /dev/null
@@ -0,0 +1,199 @@
+<!--#if expr="$OILS_PAGE='index.xml'"-->
+isFrontPage = true;
+<!--#endif-->
+
+config.ids.searchbar = {};
+config.css.searchbar = {};
+config.ids.searchbar.text = 'search_box';
+config.ids.searchbar.facets = 'facet_box';
+config.ids.searchbar.submit = 'search_submit';
+config.ids.searchbar.type_selector = 'search_type_selector';
+config.ids.searchbar.depth_selector = 'depth_selector';
+config.ids.searchbar.form_selector = 'form_selector';
+config.ids.searchbar.extra_row = 'searchbar_extra';
+config.ids.searchbar.main_row            = 'searchbar_main_row';
+config.ids.searchbar.table                = 'searchbar_table';
+config.ids.searchbar.location_tag    = 'search_location_tag_link';
+config.ids.searchbar.lib_sel_span    = 'lib_selector_span';
+config.ids.searchbar.lib_sel_link    = 'lib_selector_link';
+config.ids.searchbar.depth_sel_span    = 'depth_selector_span';
+config.ids.common.top_logo = "top_left_logo";
+config.ids.sidebar = {};
+config.css.sidebar = {};
+config.names.sidebar = {};
+config.css.sidebar.item = {};
+config.ids.sidebar.home                = 'home_link_div';
+config.ids.sidebar.advanced        = 'advanced_link_div';
+config.ids.sidebar.myopac            = 'myopac_link_div';
+config.ids.sidebar.prefs            = 'prefs_link_div';
+config.ids.sidebar.mresult            = 'mresult_link_div';
+config.ids.sidebar.rresult            = 'result_link_div';
+config.ids.sidebar.rdetail            = "rdetail_link_div";
+config.ids.sidebar.login            = 'login_link';
+config.ids.sidebar.logout            = 'logout_link';
+config.ids.sidebar.logoutbox        = 'logout_link_div';
+config.ids.sidebar.loginbox        = 'login_link_div';
+config.ids.sidebar.logged_in_as    = 'logged_in_as_div';
+config.ids.sidebar.username_dest    = 'username_dest';
+
+config.ids.sidebar.home_link        = 'home_link'
+config.ids.sidebar.advanced_link    = 'advanced_link'
+config.ids.sidebar.myopac_link    = 'myopac_link'
+
+config.css.encircled                = 'encircled';
+
+config.ids.login = {};
+config.css.login = {};
+config.ids.login.form            = "login_form";
+config.ids.login.box            = "login_box";
+config.ids.login.tbody            = "login_tbody";
+config.ids.login.username    = "login_username";
+config.ids.login.password    = "login_password";
+config.ids.login.button        = "login_button";
+config.ids.login.cancel        = "login_cancel_button";
+config.ids.altcanvas.login            = config.ids.login.box;
+
+config.ids.altcanvas.myopac_reload = 'myopac_reloading';
+config.ids.myopac = {};
+config.css.myopac = {};
+config.names.myopac = {};
+
+config.ids.altcanvas.org_tree       = config.ids.common.org_container;
+config.ids.altcanvas.holds          = 'holds_box';
+config.ids.altcanvas.check_holds    = 'check_holds_box';
+config.ids.altcanvas.xulholds       = 'xulholds_box';
+config.ids.altcanvas.loading        = 'loading_alt';
+
+<!--#if expr="$OILS_PAGE='rdetail.xml'"-->
+config.ids.rdetail              = {};
+config.ids.rdetail.view_marc    = "rdetail_view_marc";
+config.ids.rdetail.details_body = 'rdetail_details_body';
+config.ids.rdetail.title        = 'rdetail_title';
+config.ids.rdetail.author       = 'rdetail_author';
+config.ids.rdetail.isbn         = 'rdetail_isbn';
+config.ids.rdetail.edition      = 'rdetail_edition';
+config.ids.rdetail.pubdate      = 'rdetail_pubdate';
+config.ids.rdetail.publisher    = 'rdetail_publisher';
+config.ids.rdetail.tor          = 'rdetail_tor';
+config.ids.rdetail.abstr        = 'rdetail_abstract';
+config.ids.rdetail.image        = 'rdetail_image';
+config.ids.rdetail.tor_pic      = 'rdetail_tor_pic';
+
+config.ids.rdetail.cp_status        = "rdetail_copy_info_status";
+config.ids.rdetail.cp_info_row      = "rdetail_copy_info_row";
+config.ids.rdetail.cp_info_loading  = "rdetail_copy_info_loading";
+config.ids.rdetail.cp_info_local    = "copy_info_local_link";
+config.ids.rdetail.cp_info_all      = "copy_info_all_link";
+config.ids.rdetail.cp_info_none     = "rdetail_copy_info_none";
+config.names.rdetail.lib_cell       = "rdetail_library_cell";
+config.names.rdetail.cn_cell        = "rdetail_callnumber_cell";
+config.names.rdetail.cp_count_cell  = "rdetail_copy_count_cell";
+config.names.rdetail.cp_status      = 'rdetail_status_cell';
+
+<!--#endif-->
+
+var OILS_OPAC_IMAGES_HOST = null;
+<!--#if expr="$OILS_OPAC_IMAGES_HOST"-->
+    OILS_OPAC_IMAGES_HOST = '<!--#echo var="OILS_OPAC_IMAGES_HOST"-->extras/ac/jacket/';
+<!--#endif -->
+var OILS_OPAC_STATIC_PROTOCOL = null;
+<!--#if expr="$OILS_OPAC_STATIC_PROTOCOL"-->
+    OILS_OPAC_STATIC_PROTOCOL = '<!--#echo var="OILS_OPAC_STATIC_PROTOCOL"-->';
+<!--#endif -->
+
+var chilifresh = '<!--#echo var="OILS_CHILIFRESH_ACCOUNT"-->';
+if (chilifresh == '(none)') { chilifresh = false; }
+var novelist = '<!--#echo var="OILS_NOVELIST_URL"-->';
+if (novelist == '(none)') { novelist = false; }
+
+
+var cookieManager = new HTTP.Cookies();  
+
+/*  -----------------------------------------------------------------------
+    KCLS suppressed orgs 
+    ----------------------------------------------------------------------- */
+var localSuppressedOrgs = {1500:true, 1501:true, 1558:true};  /* change to suit */
+for (var i in orgArraySearcher) {
+    var org = orgArraySearcher[i];
+    if(localSuppressedOrgs[i]) {
+        org.opac_visible('f');
+    }
+}
+/* ----------------------------------------------------------------------- */ 
+
+<!--#if expr="$OILS_OPAC_FORCE_LOGIN_SSL"-->
+    forceLoginSSL = true;
+<!--#endif -->
+
+
+/* I'm not sure how to test for the situation where this block is
+   needed, but this won't hurt. */
+try {
+    if ($('holds_frozen_chkbox').checked)
+        unHideMe($("hold_frozen_thaw_row"));
+} catch (E) {
+    void(0);
+}
+
+dojo.require('dojo.cookie');
+dojo.require("dijit._Calendar");
+dojo.require("dijit.form.DateTextBox");
+dojo.require("dijit.form.FilteringSelect");
+dojo.require("dojo.date.locale");
+dojo.require("dojo.date.stamp");
+dojo.require("dojo.parser");
+dojo.require("openils.widget.FacetSidebar"); // pulls in Searcher and I18N
+dojo.require("dijit.form.CheckBox");
+dojo.require("openils.widget.ProgressDialog");
+
+
+dojo.addOnLoad(
+    function() {
+        setTimeout(
+            function() {
+                attachEvt("common", "unload", function(){
+                    if(typeof(G)!="undefined") destroyObj(G);
+                    if(typeof(HTTP)!="undefined") destroyObj(HTTP);
+                    if(typeof(_c)!="undefined") destroyObj(_c);
+                    if(typeof(_l)!="undefined") destroyObj(_l);
+                    if(typeof(config)!="undefined") destroyObj(config);
+                    if(typeof(facet_list)!="undefined") destroyObj(facet_list);
+                    if(typeof(globalOrgTree)!="undefined") destroyObj(globalOrgTree);
+                    if(typeof(globalOrgTypes)!="undefined") destroyObj(globalOrgTypes);
+                    if(typeof(google)!="undefined") destroyObj(google);
+                    if(typeof(orgArraySearcher)!="undefined") destroyObj(orgArraySearcher);
+                    if(typeof(recordsCache)!="undefined") destroyObj(recordsCache);
+                    if(typeof(search_list)!="undefined") destroyObj(search_list);
+                    if(typeof(subjectCache)!="undefined") destroyObj(subjectCache);
+                    if(typeof(xrefCacheIndex)!="undefined") destroyObj(xrefCacheIndex);
+                    if(typeof(x)!="undefined") destroyObj(x);
+                    if(typeof(string)!="undefined") string = "";
+                    //removeChildren(document);
+                    //alert(errCounter+'\n'+errCounter2);
+                });
+            }, 0
+        )
+    }
+);
+
+
+/* google analytics ------------------------------------------ */
+var _gaq = _gaq || [];
+_gaq.push(['_setAccount', 'UA-3018520-10']);
+_gaq.push(['_trackPageview']);
+
+(function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+})();
+/* google analytics ------------------------------------------ */
+
+try { 
+    document.getElementById('toptable').style.display = 'table'; 
+} catch(e) {
+    try {
+        document.getElementById('toptable').style.display = ''; 
+    } catch(ee) {}
+}
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/libselect.xml b/Open-ILS/web/opac/skin/kcls/xml/common/libselect.xml
new file mode 100644 (file)
index 0000000..845fbd0
--- /dev/null
@@ -0,0 +1,14 @@
+
+<![CDATA[<!-- ****************** libselect.xml ***************************** -->]]>
+       <span id='depth_selector_span'>
+               <!--#if expr="$SHOW_DEPTHSEL_TEXT='true'"-->
+               <span>&library.select; </span>
+               <!--#endif-->
+               <select id='depth_selector'>
+                       
+               </select>
+       </span>
+       <span style="display:none" id='lib_selector_span'>
+               <a id='lib_selector_link' class='classic_link' href='javascript:void(0)'>&library.select.help;</a>
+       </span>
+<![CDATA[<!-- ****************** end: libselect.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/login.xml b/Open-ILS/web/opac/skin/kcls/xml/common/login.xml
new file mode 100644 (file)
index 0000000..150b548
--- /dev/null
@@ -0,0 +1,90 @@
+
+<![CDATA[<!-- ****************** login.xml ***************************** -->]]>
+<div class="hide_me">
+       <div class='login_text color_1' style='padding: 4px; text-align: center;'>
+               <span>&opac.login.login;</span>
+       </div>
+       <br/>
+</div>
+<div class="hide_me" id="forget_pw">
+<h1>Password Reset</h1>
+       Username or Barcode<br />
+       <input type="text" id="forget_pw_user" /><br /><br />
+       Email Address on account<br />
+       <input type="text" id="forget_pw_email" /><br />
+       <a href="javascript:;" onclick="iForgotMyPassword($('forget_pw_user').value,$('forget_pw_email').value);">Submit</a><![CDATA[&nbsp;&nbsp;&nbsp;]]><a href="javascript:;" onclick="unHideMe($('login_box'));hideMe($('forget_pw'));">Cancel</a>
+</div>
+       <table id='change_pw_table' class='data_grid hide_me' style='margin-left: 20px;' width='95%'>
+               <thead>
+                       <tr><td colspan='2' align='center'><b>&login.password;</b></td></tr>
+               </thead>
+               <tbody>
+                       <tr>
+                               <td colspan='2' style='padding:10px;'>
+                                       &login.first.time;
+                                       &common.password_criteria;
+                               </td>
+                       </tr>
+                       <tr>
+                               <td>&login.password.current.enter;</td>
+                               <td><input type='password' id='change_pw_current'/></td>
+                       </tr>
+                       <tr>
+                               <td>&login.password.new.enter;</td>
+                               <td><input type='password' id='change_pw_1'/></td>
+                       </tr>
+                       <tr>
+                               <td>&login.password.new.reenter;</td>
+                               <td><input type='password' id='change_pw_2'/></td>
+                       </tr>
+                       <tr><td><br/></td><td/></tr>
+                       <tr class='color_1'>
+                               <td colspan='2' align='center'>
+                                       <span class='login_text' style='margin-right: 20px;'>
+                                               <input type='submit' value='&login.password.update;'  id='change_pw_button'/>
+                                       </span>
+                               </td>
+                       </tr>
+               </tbody>
+       </table>
+
+       <span id='pw_no_match' class='hide_me'>&login.password.nomatch;</span>
+       <span id='pw_update_successful' class='hide_me'>&login.password.success;</span>
+       <span id='pw_not_strong' class='hide_me'>
+               &login.password.strength;
+               &common.password_criteria;
+       </span>
+       <span id='patron_card_inactive_alert' class='hide_me'>&login.barcode.inactive;</span>
+       <span id='patron_inactive_alert' class='hide_me'>&login.account.inactive;</span>
+       <span id='patron_login_failed' class='hide_me'>&login.failed;</span>
+
+<div id="login_box" class="hide_me">
+ <div style="height:20px;"></div>
+ <form id='login_form' method='POST' action='javascript:loginDance();'>
+  <table cellpadding="0" cellspacing="0" border="0"><tr><td valign="top" width="676" class="login_boxes left_brain">
+       <table cellpadding="0" cellspacing="0" border="0" width="100%"><tr>
+         <td colspan="2" style="padding-bottom: 10px;">
+         <h1>Log in to Your Account</h1>Please enter the following information:<br /><br /></td>
+         </tr><tr>
+         <td width="42%" class="lbl1">Library Card Number or Username<br /><span class="lbl2">Please include leading zeros and no spaces.<br /> Example: 0026626051</span><br /><br /></td>
+         <td width="58%" valign="top"><div class="input_bg"><input type="text" name="opacUser" id="login_username" /></div></td></tr>
+         <tr><td colspan="2"><div style="height:15px;"></div></td></tr>
+         <tr><td valign="top" class="lbl1">PIN Number or Password<br /><span class="lbl2">If this is your first time logging in, please enter<br /> the last 4 digits of your phone number.<br />Example: 0926</span></td>
+         <td valign="top"><div class="input_bg"><input name="opacPass" type="password" id="login_password" /></div>
+         <div style="padding-top:7px;"><input class="hide_me" type="checkbox" id="remember_me" name="remember_me" /> <label class="hide_me" style="position:relative;top:-2px;" for="remember_me">Remember Me?</label></div>
+         <div style="padding-top:14px;"><a href="javascript:;" id="login_button"><img alt="Log in" src="/opac/skin/kcls/graphics/login-btn2.png" /></a> <input class="hide_me" id="login_form_submit" type="submit" /> <a href="javascript:;" onclick="hideMe($('login_box'));unHideMe($('forget_pw'));" style="position:relative;top:-13px;left:2px;font-size:10px;">Forgot your PIN?</a></div>
+         </td>
+       </tr></table><br /><br /></td>
+       <td><div style="width:10px;"></div></td>
+       <td class="login_boxes right_brain" align="center" valign="top" width="291">
+         <a href="http://www.kcls.org/about/contact/"><img src="/opac/skin/kcls/graphics/questions.png" alt="Questions?" style="margin-top:29px;" /></a>
+         <div style="width:182px;color:black;padding:5px 25px;">
+           Visit our FAQs section for answers to common questions about how to use your account.
+         </div>
+         <a href="http://www.kcls.org/usingthelibrary/catalog_help/index.cfm#FAQs"><img alt="FAQs" src="/opac/skin/kcls/graphics/faqs-btn.png" style="margin-top:13px;" /></a>
+       </td>
+  </tr></table>
+  </form>
+  <div style="clear:both"></div>
+</div>
+<![CDATA[<!-- ****************** end: login.xml ***************************** -->]]>
\ No newline at end of file
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/logo.xml b/Open-ILS/web/opac/skin/kcls/xml/common/logo.xml
new file mode 100644 (file)
index 0000000..49118d2
--- /dev/null
@@ -0,0 +1,3 @@
+<div id='logo_div'>
+       <img alt="Logo" style='margin-right: 4px;' src='<!--#echo var="OILS_BASE"-->/images/small_logo.jpg' id='top_left_logo' border='0' class='logo' />
+</div>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/mylist.xml b/Open-ILS/web/opac/skin/kcls/xml/common/mylist.xml
new file mode 100644 (file)
index 0000000..6415144
--- /dev/null
@@ -0,0 +1,23 @@
+<![CDATA[<!-- ****************** mylist.xml ***************************** -->]]>
+<div style="margin-top: 6px;margin-left:400px;width:250px;" id="mylist_div" class="hide_me">
+  <![CDATA[<strong>&quot;<span id="myListLabel"></span>&quot;</strong>]]>
+  <div style="" id="myListSelect">
+       <h2 style="font-weight:normal;">Add to Existing list</h2>
+       <select id="mylist_selector" style="width:200px;s">
+       </select><br /><br />
+       <h1>OR</h1><br />
+  </div>
+  <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?<br /><a href="javascript:;">What's this?</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(saveMyList())hideMe($('mylist_div'));"><img alt="Submit" src="/opac/skin/kcls/graphics/btnSubmit.png" /></a> <![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]]>
+  <a href="javascript:;" onclick="hideResultsPage(false);hideMe($('mylist_div'));"><img alt="Cancel" src="/opac/skin/kcls/graphics/btnCancel.png" /></a>
+</div>
+
+<![CDATA[<!-- ****************** end: mylist.xml ***************************** -->]]>
\ No newline at end of file
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/orgtree.xml b/Open-ILS/web/opac/skin/kcls/xml/common/orgtree.xml
new file mode 100644 (file)
index 0000000..7c0438d
--- /dev/null
@@ -0,0 +1,28 @@
+
+<![CDATA[<!-- ****************** orgtree.xml ***************************** -->]]>
+<div id='org_container' class='hide_me canvas'>
+
+       <div id='org_link_container' class='color_1'>
+               <span class='org_link'>
+                       <a onclick='orgTreeSelector.expandAll();' 
+                               href='javascript:void(0);'>&common.org.openAll;</a>
+               </span>
+               <span class='org_link'>
+                       <a onclick='orgTreeSelector.closeAll();' 
+                               href='javascript:void(0);'>&common.org.closeAll;</a>
+               </span>
+               <span class='org_link'>
+                       <a onclick='showCanvas();' href='javascript:void(0);'>&common.org.cancel;</a>
+               </span>
+       </div>
+
+       <div id='org_loading_div'><br/><span>&common.org.loading;</span></div>
+       <br/>
+       <div id='org_selector_tip' class='tips hide_me'><b>&common.org.note;</b>
+               <span>&common.org.notetext;</span>
+       </div>
+       <br/>
+       <div id='org_tree' class='org_tree'> </div>
+       <br/>
+</div>
+<![CDATA[<!-- ****************** end: orgtree.xml ***************************** -->]]>
\ No newline at end of file
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/searchbar.xml b/Open-ILS/web/opac/skin/kcls/xml/common/searchbar.xml
new file mode 100644 (file)
index 0000000..76c51a5
--- /dev/null
@@ -0,0 +1,24 @@
+
+<![CDATA[<!-- ****************** searchbar.xml ***************************** -->]]>
+  <div id="search-box">    
+       <table cellpadding="0" cellspacing="10" border="0" style="position:relative;left:-10px;"><tr>
+         <td colspan="3"><span class="search_catalog_lbl">Search the Catalog</span> <a href="javascript:;" id="home_adv_search_link" style="position:relative;top:-1px;left:10px;"><span class="adv_search_font">Advanced Search</span></a></td>
+         </tr><tr><td><!--#include virtual="stypes_selector.xml"--></td> <!-- onkeyup='dojo.byId("facet_box").value = "";' -->
+         <td><div id="search_box_wrapper"><input type="text" id="search_box" style="width:162px;" value="Search Keyword" onfocus="if (this.value=='Search Keyword'){this.value='';this.style.color='#000';}" onblur="if (this.value==''){this.value='Search Keyword';this.style.color='#999';}" /><input id='facet_box' type='hidden' /></div></td>
+         <td valign="top"><div style="position:absolute;"><div style="position:relative;top:-3px;"><input type="button" id="search_submit" value="GO" class="hide_me" /><a href="javascript:;" id="search_submit_alt" onclick="$('search_submit').click()"><img alt="Search" src="<!--#echo var='OILS_BASE'-->skin/kcls/graphics/go-btn.png" onmouseover="this.src='<!--#echo var='OILS_BASE'-->skin/kcls/graphics/go-btn-hover.png';" onmouseout="this.src='<!--#echo var='OILS_BASE'-->skin/kcls/graphics/go-btn.png';" /></a></div></div></td>
+         </tr><tr><td><!--#set var='FORM_SEL_ID' value='form_selector'--><!--#include virtual="format_selector.xml"--></td>
+         <td><!--#include virtual="libselect.xml"--></td>
+       </tr></table>
+  
+      <div class="hide_me">
+               <input type="checkbox" id="opac.result.limit2avail" /> <label style="position:relative;top:-3px;" for="opac.result.limit2avail"><span style="font-size:10px;">Limit to available items</span></label>
+      </div>
+      
+    <div id="breadcrumb">
+         <![CDATA[   <a href="index.xml">Catalog Home</a> &gt;   ]]>
+    </div>
+    <!-- <div id="search-within"><a href="javascript:;"><span style="font-size:10px;">Search within Results</span></a></div> -->
+    <div style="clear:both"></div>
+  </div>
+<![CDATA[<!-- ****************** end: searchbar.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/sidebar.xml b/Open-ILS/web/opac/skin/kcls/xml/common/sidebar.xml
new file mode 100644 (file)
index 0000000..eeee865
--- /dev/null
@@ -0,0 +1,187 @@
+
+<!-- Navigation bar -->
+<![CDATA[<!-- ****************** sidebar.xml ***************************** -->]]>
+<script src="<!--#echo var='OILS_SKIN_BASE'-->/kcls/js/sidebar.js" type='text/javascript'></script>
+<div id="sidebar_div" class="sidebar_div" xmlns:xi="http://www.w3.org/2001/XInclude">
+       <div class='sidebar_chunk hide_me'>
+<!--
+               <div title="&navigate.home.title;" 
+                       id='home_link_div' class="side_bar_item ">
+                       <a id='home_link' href='index.xml'>&navigate.home;</a>
+               </div>
+       
+               <div title="&opac.navigate.advanced.title;"
+                       id='advanced_link_div' class="side_bar_item ">
+                       <a id='advanced_link' href='advanced.xml'>&opac.navigate.advanced;</a>
+               </div>
+
+               <div title="&navigate.myopac.title;"
+                       id='myopac_link_div' class="side_bar_item ">
+                       <a  id='myopac_link' href='myopac/myopac.xml'>&navigate.myopac;</a>
+               </div>
+
+               <div title="&navigate.login.title;"
+                       id='login_link_div' class="side_bar_item ">
+                       <a id='login_link' href='javascript:void(0);'>&navigate.login;</a>
+               </div>
+
+               <div title="&navigate.logout.title;"
+                       id='logout_link_div' class="side_bar_item hide_me ">
+                       <a id='logout_link' href='javascript:void(0);'>&navigate.logout;</a>
+               </div>
+-->
+
+               <!-- Informational sidebar components -->
+<!--
+               <div id='logged_in_as_div' title="&navigate.loggedinas.title;" class="side_bar_item hide_me">
+                       <span>&navigate.loggedinas;<b id='username_dest'> </b></span>
+               </div>
+-->
+               <div id='sidebar_results_wrapper' class='hide_me border_1'>
+                       <div title="&navigate.titleGroupResults;" 
+                               id='mresult_link_div' class="side_bar_item hide_me">
+                               <a id='sidebar_title_group_results'>&navigate.titleGroupResults;</a>
+                       </div>
+               
+                       <div title="&navigate.titleResults;"
+                               id='result_link_div' class="side_bar_item hide_me">
+                               <a id='sidebar_title_results'>&navigate.titleResults;</a>
+                       </div>
+       
+                       <div title="&navigate.record.details;"
+                               id='rdetail_link_div' class="side_bar_item hide_me">
+                               <span>&navigate.title.details;</span>
+                       </div>
+               </div>
+       </div>
+
+
+
+       <div id='facetSidebarContainer' class='hide_me'>
+
+        <div class="side_bar_item" style="font-weight: bold;text-transform:uppercase;">
+      <span>&navigate.facetRefine;</span>
+       </div>
+
+     <div dojoType='openils.widget.FacetSidebar' searchBox='facet_box' searchSubmit='search_submit' maxValuesPerFacet='3' facetLimit='3' classOrder='["author","subject","series","title","keyword"]'>
+            <script type='dojo/method' event='populate'><![CDATA[
+                var fblob = this;
+                attachEvt("result", "allRecordsReceived", function () {
+                    if(!resultFacetKey) return;                                        
+                    if (fblob.facetCacheKey) return; // already rendered it
+                                       
+                    dojo.removeClass('facetSidebarContainer','hide_me');
+
+                    fblob.facetCacheKey = resultFacetKey;
+                    fblob.render();
+                });
+            ]]></script>
+        </div>
+       </div>
+
+<!--
+       <div id='subject_tree_sidebar' class='sidebar_chunk hide_me' style='margin-top: 12px;'> 
+               <div id='subject_sidebar_tree_div'> </div>
+               <script language='javascript' type='text/javascript'>
+                       removeChildren($('subject_sidebar_tree_div'));
+                       var subjectSidebarTree = new SlimTree(
+                               document.getElementById('subject_sidebar_tree_div'),
+                               'subjectSidebarTree', '/opac/skin/kcls/graphics/arrow-down.gif');
+                       subjectSidebarTree.addNode( 'subjectSidebarTreeRoot', -1, 
+                               "&sidebar.relevantSubjects.headerLabel;", 
+                               'javascript:subjectSidebarTree.toggle(' +
+                                       '"subjectSidebarTreeRoot");');
+               </script>
+       </div>
+
+       <div id='author_tree_sidebar' class='sidebar_chunk hide_me'> 
+               <div id='author_sidebar_tree_div'> </div>
+               <script language='javascript' type='text/javascript'>
+                       removeChildren($('author_sidebar_tree_div'));
+                       var authorSidebarTree = new SlimTree(
+                               document.getElementById('author_sidebar_tree_div'),
+                               'authorSidebarTree','/opac/skin/kcls/graphics/arrow-down.gif');
+                       authorSidebarTree.addNode( 'authorSidebarTreeRoot', -1, 
+                               "&sidebar.relevantAuthors.headerLabel;", 
+                               'javascript:authorSidebarTree.toggle(' +
+                                       '"authorSidebarTreeRoot");');
+               </script>
+       </div>
+
+       <div id='series_tree_sidebar' class='sidebar_chunk hide_me'> 
+               <div id='series_sidebar_tree_div'> </div>
+               <script language='javascript' type='text/javascript'>
+                       removeChildren($('series_sidebar_tree_div'));
+                       var seriesSidebarTree = new SlimTree(
+                               document.getElementById('series_sidebar_tree_div'),
+                               'seriesSidebarTree',
+                               '/opac/skin/kcls/graphics/arrow-down.gif');
+                       seriesSidebarTree.addNode( 'seriesSidebarTreeRoot', -1, 
+                               "&sidebar.relevantSeries.headerLabel;", 
+                               'javascript:seriesSidebarTree.toggle(' +
+                                       '"seriesSidebarTreeRoot");');
+               </script>
+       </div>
+-->
+       <div id='adv_quick_search_sidebar' class='sidebar_chunk hide_me' style='text-align:center; margin-top: 20px;'> 
+               <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' style='width: 6em;'>
+                                                       <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'>
+                               <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='text-align:center; 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>&search.marc.tag;</td>
+                                       <td><input name='advanced.marc.tag' maxlength='3' size='3' /></td>
+                                       <td>&search.marc.subfield;</td>
+                                       <td><input name='advanced.marc.subfield' maxlength='1' size='1' /></td>
+                               </tr>
+                               <tr>
+                                       <td>&search.marc.value;</td>
+                                       <td colspan='3'><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;' 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>
+               </div>
+       </div>
+</div>
+<![CDATA[<!-- ****************** end: sidebar.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/statusbar.xml b/Open-ILS/web/opac/skin/kcls/xml/common/statusbar.xml
new file mode 100644 (file)
index 0000000..32cd7e8
--- /dev/null
@@ -0,0 +1,16 @@
+
+<![CDATA[<!-- ****************** statusbar.xml ***************************** -->]]>
+<div id='statusbar' style='margin-bottom: 6px;'<!--#if expr="$OILS_PAGE=='rdetail.xml'"--> class="hide_me"<!--#endif-->>
+       <table width='100%'>
+               <tbody>
+                       <tr>
+                               <td align='left'>
+                                       <i id='including_results_for' class='hide_me'>
+                                               <span>&status.results;</span> <b id='including_results_location'> </b>
+                                       </i>
+                               </td>
+                       </tr>
+               </tbody>
+       </table>
+</div>
+<![CDATA[<!-- ****************** end: statusbar.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/stypes_selector.xml b/Open-ILS/web/opac/skin/kcls/xml/common/stypes_selector.xml
new file mode 100644 (file)
index 0000000..33d486c
--- /dev/null
@@ -0,0 +1,11 @@
+
+<![CDATA[<!-- ****************** stypes_selector.xml ***************************** -->]]>
+<select id='search_type_selector'>
+       <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='cn'>Call Number</option>
+</select>
+<![CDATA[<!-- ****************** end: stypes_selector.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/common/tips.xml b/Open-ILS/web/opac/skin/kcls/xml/common/tips.xml
new file mode 100644 (file)
index 0000000..616a9e1
--- /dev/null
@@ -0,0 +1,12 @@
+
+<![CDATA[<!-- ****************** tips.xml ***************************** -->]]>
+<div class="hide_me">
+<div id='tips' class='tips hide_me'>
+       <div class='hide_me'>
+               <span>&common.tips.tip1;</span>
+               <span>&common.tips.tip2;</span>
+       </div>
+       <span style="font-weight: bold;">&tips.label;  </span>
+</div>
+</div>
+<![CDATA[<!-- ****************** end: tips.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/footer.xml b/Open-ILS/web/opac/skin/kcls/xml/footer.xml
new file mode 100644 (file)
index 0000000..53921fb
--- /dev/null
@@ -0,0 +1,22 @@
+
+<![CDATA[<!-- ****************** footer.xml ***************************** -->
+<!--Google Analytics-->
+<script type="text/javascript">
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-3018520-10']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+
+</script>
+<!--End Google Analytics-->
+<div id="footer">
+
+<a href="http://www.kcls.org/usingthelibrary/request/">Request a Purchase</a> &nbsp;|&nbsp; <a href="http://www.kcls.org/usingthelibrary/request/">Interlibrary Loan</a> &nbsp;|&nbsp; <a href="http://www.kcls.org/about/contact/">Contact Us</a> &nbsp;|&nbsp; <a href="http://www.kcls.org/usingthelibrary/catalog_help/">Site Help</a> &nbsp;|&nbsp; <a href="http://www.kcls.org/usingthelibrary/policies/privacy.cfm">Privacy Statement</a> &nbsp;|&nbsp; <a href="http://www.kcls.org/about/support/">Support KCLS</a> &nbsp;|&nbsp; <a href="http://www.kcls.org/employment/">Employment</a> 
+</div>
+<!-- ****************** end: footer.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/header.xml b/Open-ILS/web/opac/skin/kcls/xml/header.xml
new file mode 100644 (file)
index 0000000..a7f6e46
--- /dev/null
@@ -0,0 +1,9 @@
+<head>
+
+<!-- Set the page title -->
+       <link rel="stylesheet" type="text/css" href="<!--#echo var='OILS_SKIN_BASE'-->/kcls/css/style.css" />
+       <link rel="stylesheet" type="text/css" href="<!--#echo var='OILS_SKIN_BASE'-->/kcls/css/contentslider.css" />
+       <title>Catalog- King County Library</title>
+       <link rel="unapi-server" type="application/xml" title="unAPI" href="http://<!--#echo var='HTTP_HOST'-->/opac/extras/unapi"/>
+       <!--#if expr="$slimpac!='true'"--><!--#include virtual="common/js_common.xml"--><!--#endif-->
+</head>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/home/homesearch.xml b/Open-ILS/web/opac/skin/kcls/xml/home/homesearch.xml
new file mode 100644 (file)
index 0000000..c01c873
--- /dev/null
@@ -0,0 +1,119 @@
+\r
+<![CDATA[<!-- ****************** homesearch.xml ***************************** -->]]>\r
+<div id="hp-banner">\r
+  <div id="hp-welcome">\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
+       \r
+    <div id="paginate-homebanner">\r
+      <!-- <a href="#" class="next">next</a>\r
+      <a href="#" class="prev">prev</a> -->\r
+         \r
+         \r
+         \r
+         \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:#decc92;"></a>\r
+         <a class="toc" href="#7" rel="7" style="background:white;"></a>\r
+<!-- **************************************** home page navigator end ******************************************* -->\r
+\r
+\r
+\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
+  \r
+  \r
+  \r
+<!-- ************************************ home page banner start ********************************************** -->\r
+    <div class="contentdiv" style="background:white;">\r
+      <a href="http://www.kcls.org/newcatalog"><img alt="New catalog" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/banner1.jpg" /></a>\r
+    </div>\r
+       <div class="contentdiv" style="background:#ffc331;">\r
+         test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />\r
+         test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />\r
+    </div>\r
+       <div class="contentdiv" style="background:pink;">\r
+         test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />\r
+         test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />\r
+    </div>\r
+       <div class="contentdiv" style="background:#2bb0fd;">\r
+         <br />\r
+         <img src="/opac/skin/kcls/graphics/KCLS_logo_horiz.gif" /><br />\r
+         test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />\r
+         test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />\r
+    </div>\r
+       <div class="contentdiv" style="background:#54987f;">\r
+         <div style="width:700px;height:30px;border:1px solid red;"></div>\r
+         test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />\r
+         test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />\r
+    </div>\r
+       <div class="contentdiv" style="background:#decc92;">\r
+         test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />\r
+         test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />test<br />\r
+    </div>\r
+       <div class="contentdiv" style="background:white;">\r
+         <table cellpadding="0" cellspacing="0" border="0" style="width:100%;height:100%;"><tr><td align="center" style="width:100%;height:100%;border:1px solid black;">\r
+               They call me Box Boy.\r
+         </td></tr></table>\r
+    </div>\r
+<!-- ************************************* home page banner end *********************************************** -->\r
+\r
+\r
+\r
+\r
+\r
+\r
+  </div>\r
+<![CDATA[\r
+<script type="text/javascript">\r
+featuredcontentslider.init({\r
+id: "homebanner",\r
+contentsource: ["inline", ""],\r
+toc: "markup",\r
+nextprev: ["", ""],\r
+enablefade: [true, 0.04],\r
+onChange: function(previndex, curindex){},\r
+\r
+\r
+autorotate: [true, 3000] //pause time (in milliseconds)\r
+})\r
+</script>\r
+]]> \r
+    <div style="position:absolute;z-index:101;"><div style="position:relative;"><a href="http://www.kcls.org/newcatalog" style="display:block;width:675px;height:213px;"></a></div></div>\r
+       <img alt="New catalog" src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/banner1.jpg" />\r
+       \r
+       \r
+       \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
diff --git a/Open-ILS/web/opac/skin/kcls/xml/home/index_body.xml b/Open-ILS/web/opac/skin/kcls/xml/home/index_body.xml
new file mode 100644 (file)
index 0000000..691f56e
--- /dev/null
@@ -0,0 +1 @@
+<!--#include virtual="../body.xml"-->
\ No newline at end of file
diff --git a/Open-ILS/web/opac/skin/kcls/xml/home/slideshow.xml b/Open-ILS/web/opac/skin/kcls/xml/home/slideshow.xml
new file mode 100644 (file)
index 0000000..1d74fb3
--- /dev/null
@@ -0,0 +1,61 @@
+<script>                                                                                 
+<!--
+var SlideShow_MaxSlides = 5; // slide count
+var SlideShow_DisplaySeconds = 5; // slide timing
+var SlideShow_CurrentSlide = 1;
+var SlideShow_Timer;
+var SlideShow_Playing = true;
+SlideShow_Timer = setTimeout(SlideShow_Next, SlideShow_DisplaySeconds * 1000);
+//-->
+</script>
+<div id="SlideShowWidget">
+    <div class="ssw_all_icons">
+        <div id="ssw_icon_1" class='ssw_icon_#IIF(currentSlide eq 1,DE(""),DE("in"))#active' onclick="return SlideShow_Jump(1);"></div>
+        <div id="ssw_icon_2" class='ssw_icon_#IIF(currentSlide eq 2,DE(""),DE("in"))#active' onclick="return SlideShow_Jump(2);"></div>
+        <div id="ssw_icon_3" class='ssw_icon_#IIF(currentSlide eq 3,DE(""),DE("in"))#active' onclick="return SlideShow_Jump(3);"></div>
+        <div id="ssw_icon_4" class='ssw_icon_#IIF(currentSlide eq 4,DE(""),DE("in"))#active' onclick="return SlideShow_Jump(4);"></div>
+        <div id="ssw_icon_5" class='ssw_icon_#IIF(currentSlide eq 5,DE(""),DE("in"))#active' onclick="return SlideShow_Jump(5);"></div>
+    </div>
+    <div class="ssw_play_controls">
+        <a href="#server.globals.rootURL#index.cfm?currentSlide=#IIF(currentSlide eq 1,5,currentSlide-1)#" onclick="return SlideShow_Previous();"><img title="previous" alt="Click to see the previous slide" src="#server.globals.rootURL#images/previous.gif" width="13" height="13" class="noborder" /></a>
+        <a href="#server.globals.rootURL#index.cfm" onclick="return SlideShow_TogglePlay();"><img id="ssw_toggle_control" title="start/stop" alt="Click to start/stop the slideshow" src="#server.globals.rootURL#images/stop.gif" width="13" height="13" class="noborder" /></a>
+        <a href="#server.globals.rootURL#index.cfm?currentSlide=#IIF(currentSlide eq 5,1,currentSlide+1)#" onclick="return SlideShow_Next();"><img title="next" alt="Click to see the next slide" src="#server.globals.rootURL#images/next.gif" width="13" height="13" class="noborder" /></a>
+    </div>
+    <div class="ssw_all_descriptions">
+        <div id="ssw_descript_1" class='ssw_description #IIF(currentSlide eq 1,DE("firstSlide"),DE(""))#'>
+            <div id="ssw_slide_1" class='ssw_slide #IIF(currentSlide eq 1,DE("firstSlide"),DE(""))#'><a href="/teens/rfw/"><img src="/images/featured_article_1.jpg" alt="2010 Read. Flip. Win." width="210" height="185" border="0" /></a></div>
+          <div class="ssw_content">
+            <p>2010 Read. Flip. Win.</p>
+            <p><a href="/teens/rfw/">KCLS proudly presents the winners of our Read, Flip, Win Contest.  </a></p>
+      </div></div>
+        <div id="ssw_descript_2" class='ssw_description #IIF(currentSlide eq 2,DE("firstSlide"),DE(""))#'>
+            <div id="ssw_slide_2" class='ssw_slide #IIF(currentSlide eq 2,DE("firstSlide"),DE(""))#'><a href="/newcatalog/"><img src="/images/featured_article_2.jpg" alt="infoVote 2010" width="210" height="185" border="0" /></a></div>
+          <div class="ssw_content">
+            <p>Coming Soon- New Library Catalog</p>
+            <p><a href="/newcatalog/">Transitioning to a new and improved library catalog.</a></p>
+        </div>
+      </div>
+        <div id="ssw_descript_3" class='ssw_description #IIF(currentSlide eq 3,DE("firstSlide"),DE(""))#'>
+            <div id="ssw_slide_3" class='ssw_slide #IIF(currentSlide eq 3,DE("firstSlide"),DE(""))#'><a href="#server.globals.rootURL#bond"></a><a href="/infobiz/"><img src="/images/featured_article_3.jpg" alt="InfoBiz" width="210" height="185" border="0" /></a></div>
+          <div class="ssw_content">
+            <p>InfoBiz</p>
+            <p> <a href="/infobiz/">The new KCLS resource center for small business owners. </a></p>
+          </div></div>
+        <div id="ssw_descript_4" class='ssw_description #IIF(currentSlide eq 4,DE("firstSlide"),DE(""))#'>
+            <div id="ssw_slide_4" class='ssw_slide #IIF(currentSlide eq 4,DE("firstSlide"),DE(""))#'><a href="/events/opera.cfm"><img src="/images/featured_article_4.jpg" alt="Opera" width="210" height="185" border="0" /></a></div>
+          <div class="ssw_content">
+            <p>Opera Preview: Lucia Di Lammermoor<br />
+            </p>
+            <p><a href="/events/opera.cfm">Exciting new series  presented by Norm Hollingshead.</a></p>
+      </div>
+      </div>
+        <div id="ssw_descript_5" class='ssw_description #IIF(currentSlide eq 5,DE("firstSlide"),DE(""))#'>
+            <div id="ssw_slide_5" class='ssw_slide #IIF(currentSlide eq 5,DE("firstSlide"),DE(""))#'><a href="/events/##NWNoir"><img src="/images/featured_article_5.jpg" alt="Northwest Noir: Mysteries, Legends and Landscapes" width="210" height="185" border="0" /></a></div>
+          <div class="ssw_content">
+            <p>Northwest Noir</p>
+            <p><a href="/events/##NWNoir"> Explore legends, mysteries, and landscapes set in the Northwest.</a></p>
+          </div>
+      </div>
+    </div>
+</div>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/html_xsl.xml b/Open-ILS/web/opac/skin/kcls/xml/html_xsl.xml
new file mode 100644 (file)
index 0000000..f223320
--- /dev/null
@@ -0,0 +1,10 @@
+
+<xsl:stylesheet version="1.0"
+       xmlns:xlink="http://www.w3.org/1999/xlink" 
+       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+       <xsl:output method="html" indent="yes" encoding="utf-8"/>
+       <xsl:template match="/">
+               <xsl:copy-of select='/*[local-name()="html"]'/>
+       </xsl:template>
+</xsl:stylesheet>   
diff --git a/Open-ILS/web/opac/skin/kcls/xml/index.xml b/Open-ILS/web/opac/skin/kcls/xml/index.xml
new file mode 100644 (file)
index 0000000..48cebda
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- Loads the environment -->
+<!--#include virtual="setenv.xml"-->
+
+<!DOCTYPE html PUBLIC 
+       "-//W3C//DTD XHTML 1.0 Transitional//EN" 
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
+       <!--#include virtual="/opac/locale/${locale}/opac.dtd"-->
+]>
+
+
+<html xmlns='http://www.w3.org/1999/xhtml'>
+<!--#include virtual="header.xml"-->
+       <!--#if expr="$OILS_PAGE='index.xml'"-->
+<!--#include virtual="home/index_body.xml"-->
+       <!--#else-->
+               <!--#include virtual="body.xml"-->
+       <!--#endif-->
+</html>
\ No newline at end of file
diff --git a/Open-ILS/web/opac/skin/kcls/xml/mresult.xml b/Open-ILS/web/opac/skin/kcls/xml/mresult.xml
new file mode 100644 (file)
index 0000000..f3e84e5
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- Loads the environment -->
+<!--#include virtual="setenv.xml"-->
+
+<!DOCTYPE html PUBLIC 
+       "-//W3C//DTD XHTML 1.0 Transitional//EN" 
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
+       <!--#include virtual="/opac/locale/${locale}/opac.dtd"-->
+]>
+
+
+<html xmlns='http://www.w3.org/1999/xhtml'>
+       <!--#include virtual="header.xml"-->
+       <!--#if expr="$OILS_PAGE='index.xml'"-->
+               <!--#include virtual="home/index_body.xml"-->
+       <!--#else-->
+               <!--#include virtual="body.xml"-->
+       <!--#endif-->
+</html>
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/myopac.xml b/Open-ILS/web/opac/skin/kcls/xml/myopac.xml
new file mode 100644 (file)
index 0000000..f3e84e5
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- Loads the environment -->
+<!--#include virtual="setenv.xml"-->
+
+<!DOCTYPE html PUBLIC 
+       "-//W3C//DTD XHTML 1.0 Transitional//EN" 
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
+       <!--#include virtual="/opac/locale/${locale}/opac.dtd"-->
+]>
+
+
+<html xmlns='http://www.w3.org/1999/xhtml'>
+       <!--#include virtual="header.xml"-->
+       <!--#if expr="$OILS_PAGE='index.xml'"-->
+               <!--#include virtual="home/index_body.xml"-->
+       <!--#else-->
+               <!--#include virtual="body.xml"-->
+       <!--#endif-->
+</html>
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_bookbags.xml b/Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_bookbags.xml
new file mode 100644 (file)
index 0000000..5b2d511
--- /dev/null
@@ -0,0 +1,181 @@
+\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
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/default/js/container.js'> </script>\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
diff --git a/Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_checked.xml b/Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_checked.xml
new file mode 100644 (file)
index 0000000..bb4862c
--- /dev/null
@@ -0,0 +1,91 @@
+
+<![CDATA[<!-- ****************** myopac_checked.xml ***************************** -->]]>
+<div id='myopac_checked_div' xmlns:xi="http://www.w3.org/2001/XInclude" style="padding:0px;">
+    <!-- <script language='javascript' type='text/javascript' src='<!||#echo var="OILS_JS_BASE"||>/Date.W3CDTF.js'/> -->
+       
+  <div id="acct_checked_tabs" style="padding-bottom: 12px;color:#666;">
+       <div class="align selected" id="checked_label"><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/sub_checked_out_on.jpg" /></div>
+       <div class="align" id="checked_hist_link"><a class="" href="javascript:;" onclick="switchSubPage('checked','hist')"><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/sub_checked_hist_off.jpg" /></a></div>
+       <div class="align hide_me" id="checked_link"><a href="javascript:;" onclick="switchSubPage('checked','main')"><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/sub_checked_out_off.jpg" /></a></div>
+       <div class="align selected hide_me" id="checked_hist_label"><img src="<!--#echo var="OILS_SKIN_BASE"-->/kcls/graphics/sub_checked_hist_on.jpg" /></div> 
+       <div style="clear:both;"></div>
+  </div>
+       
+  <div class="header_middle"><span id="acct_checked_header" style="float:left;">Current Items Checked Out</span> <span style="float:right;"><a class="hide_me" href="javascript:;">Export List</a></span></div>
+  <div style="clear:both;"></div>
+  
+  <div id='checked_main'>
+   <table cellpadding='0' cellspacing='0' border='0' style="padding:8px 0px 6px 0px;"><tr>
+       <td><a href="javascript:;" onclick="myOPACRenewSelected();">Renew Selected Titles</a></td>
+       <td style="padding-left:9px;"><a class="hide_me" href="javascript:;"><img alt="Save" src="/opac/skin/kcls/graphics/save-btn.png" /></a></td>
+       <td style="padding-left:5px;"><a href="javascript:;" onclick="alert('To Renew an individual title, select box and click Renew Selected Titles');"><img alt="Renewing Help" src="/opac/skin/kcls/graphics/question-mark.png" /></a></td>
+   </tr></table>
+   <table id="acct_checked_main_header" cellpadding='0' cellspacing='0' border='0'><tr>
+   <td width="1%" style="padding-left:10px;"><input type="checkbox" id="check_all_checked" onclick="checkAll($('checked_temp_parent'), this.id);" /></td>
+   <td width="40%" style="padding-left:5px;"><span title="Click to sort" onclick="sortChecked('title');" style="cursor:pointer;">Title</span> / <span title="Click to sort" onclick="sortChecked('author');" style="cursor:pointer;">Author</span></td>
+   <td width="8%" style="padding-right:5px;" align="center"><span title="Click to sort" onclick="sortChecked('renews');" style="cursor:pointer;">Renews<br />Left</span></td>
+   <td width="13%" style="padding-left:5px;"><span title="Click to sort" onclick="sortChecked('due');" style="cursor:pointer;">Due Date</span></td>
+   <td width="16%"><span title="Click to sort" onclick="sortChecked('barcode');" style="cursor:pointer;">barcode</span></td>
+   <td width="22%"><span title="Click to sort" onclick="sortChecked('cn');" style="cursor:pointer;">call number</span></td>
+   </tr></table>
+   
+ <div id="checked_temp_parent">
+   <div id="acct_checked_temp">
+       <table cellpadding='0' cellspacing='0' border='0' style="margin-top:5px;"><tr>
+         <td width="1%" style="padding-left:10px;" valign="top"><input type="checkbox" name="check_all_checked" /></td>
+         <td width="40%" style="padding-left:5px;padding-bottom:10px;" name="author"><a href="javascript:;" name="title"></a></td>
+         <td width="8%" name="renewals" align="center"></td>
+         <td width="13%" style="padding-left:5px;" name="due_date"></td>
+         <td width="16%" name="barcode"></td>
+         <td width="22%" name="call_number"></td>
+       </tr></table>
+   </div>
+ </div>
+ </div>
+  
+  <div id='checked_hist' class="hide_me" style="padding-top:8px;">
+   <table id="acct_checked_hist_header" cellpadding='0' cellspacing='0' border='0' width='100%'><tr>
+       <td width="45%" style="padding-left:15px;"><span title="Click to sort" onclick="sortCheckedHist('title');" style="cursor:pointer;">Title</span> / <span title="Click to sort" onclick="sortCheckedHist('author');" style="cursor:pointer;">Author</span></td>
+       <td width="22%" style="white-space:nowrap;padding-left:5px;"><span title="Click to sort" onclick="sortCheckedHist('cn');" style="cursor:pointer;">Call Number</span></td>
+       <td width="11%"><span title="Click to sort" onclick="sortCheckedHist('checkout');" style="cursor:pointer;">Checkout</span></td>
+       <td width="11%"><span title="Click to sort" onclick="sortCheckedHist('due');" style="cursor:pointer;">Due Date</span></td>
+       <td width="11%"><span title="Click to sort" onclick="sortCheckedHist('returned');" style="cursor:pointer;">Returned</span></td>
+   </tr></table>
+   
+       <table cellpadding='0' cellspacing='0' border='0' style="margin-top:5px;" width="100%"><tbody id="acct_checked_hist_parent"><tr id="acct_checked_hist_temp">
+         <td width="45%" style="padding-left:15px;padding-bottom:10px;"><a href="javascript:;" name="title"></a> / <span name="author"></span></td>
+         <td width="22%" style="padding-left:5px;" name="call_number"></td>
+         <td width="11%" name="checkout"></td>
+         <td width="11%" name="due_date"></td>
+         <td width="11%" name="returned" nowrap="nowrap" style="white-space:nowrap;"></td>
+       </tr></tbody></table>
+  </div>
+
+       <div id='non_cat_circs_div' class='hide_me'>
+               <br/>
+               <div style='text-align: center'><b>&myopac.common.other.circ;</b></div>
+               <table class='data_grid' width='100%'>
+                       <thead>
+                               <tr>
+                                       <td>&myopac.checked.circ.lib;</td>
+                                       <td>&myopac.checked.item.type;</td>
+                                       <td>&myopac.checked.circ.time;</td>
+                               </tr>
+                       </thead>
+                       <tbody id='non_cat_circs_tbody'>
+                               <tr id='non_cat_circs_row'>
+                                       <td name='circ_lib'/>
+                                       <td name='item_type'/>
+                                       <td name='circ_time'/>
+                               </tr>
+                       </tbody>
+               </table>
+       </div>
+       
+       <div id='myopac_renew_success' class='hide_me'>&myopac.checked.renew.success;</div>
+       <span class='hide_me' id='myopac_renew_confirm'>&myopac.checked.renew.confirm;</span>
+       <span class='hide_me' id='myopac_renew_fail'>&myopac.checked.renew.fail;</span>
+   <span class='hide_me' id='myopac_renew_fail2'>&myopac.checked.renew.fail2;</span>
+</div>
+<![CDATA[<!-- ****************** end: myopac_checked.xml ***************************** -->]]>
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_fines.xml b/Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_fines.xml
new file mode 100644 (file)
index 0000000..82747bc
--- /dev/null
@@ -0,0 +1,5 @@
+
+<![CDATA[<!-- ****************** myopac_fines.xml ***************************** -->]]>
+
+<![CDATA[<!-- ****************** end: myopac_fines.xml ***************************** -->]]>
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_holds.xml b/Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_holds.xml
new file mode 100644 (file)
index 0000000..b2a390e
--- /dev/null
@@ -0,0 +1,118 @@
+\r
+<![CDATA[<!-- ****************** myopac_holds.xml ***************************** -->]]>\r
+\r
+<div id='myopac_holds_div' xmlns:xi="http://www.w3.org/2001/XInclude">\r
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/holds.js'> </script>\r
+\r
+  <div 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="104">Activate</td>\r
+        <td width="106">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"><div style="width:26px;height:23px;margin-top:6px;margin-bottom:6px;" 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="104"><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="106"><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
diff --git a/Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_prefs.xml b/Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_prefs.xml
new file mode 100644 (file)
index 0000000..3d30388
--- /dev/null
@@ -0,0 +1,486 @@
+
+<![CDATA[<!-- ****************** myopac_prefs.xml ***************************** -->]]>
+<div id='myopac_prefs_div' xmlns:xi="http://www.w3.org/2001/XInclude">
+  <div id="acct_prefs_tabs" style="padding-bottom: 12px;color:#666;">
+   <div style="float:left;">
+       <div class="align selected" id="prefs_info_lbl"><img src="/opac/skin/kcls/graphics/sub_prefs_info_on.jpg" /></div>
+       <div class="align hide_me" id="prefs_info_link"><a href="javascript:;" onclick="switchSubPage('prefs','info')"><img src="/opac/skin/kcls/graphics/sub_prefs_info_off.jpg" /></a></div>
+       <div class="align" id="prefs_notify_link"><a href="javascript:;" onclick="switchSubPage('prefs','notify')"><img src="/opac/skin/kcls/graphics/sub_prefs_notify_off.jpg" /></a></div>
+       <div class="align selected hide_me" id="prefs_notify_lbl"><img src="/opac/skin/kcls/graphics/sub_prefs_notify_on.jpg" /></div>
+       <div class="align" id="prefs_search_link"><a href="javascript:;" onclick="switchSubPage('prefs','search')"><img src="/opac/skin/kcls/graphics/sub_prefs_search_off.jpg" /></a></div>
+       <div class="align selected hide_me" id="prefs_search_lbl"><img src="/opac/skin/kcls/graphics/sub_prefs_search_on.jpg" /></div>  
+   </div>
+    <div style="float:right;width:65px;"><div style="position:absolute"><div style="position:relative;top:75px;"><a id='acct_prefs_save' class='hide_me' href="javascript:;" onclick="myOPACSavePrefs()"><img alt="Save" src="/opac/skin/kcls/graphics/save-btn.png" /></a></div></div></div>
+       <div style="clear:both;"></div>
+  </div>
+       
+  <div class="header_middle"><span id="acct_prefs_header" style="float:left;">Account Information and Preferences</span> <span style="float:right;"><a class="hide_me" href="javascript:;" onclick="fadeOut(this);">Export List</a></span></div>
+  <div style="clear:both;height:10px;"></div>
+
+
+       <table width='100%' class="hide_me" id="acct_search_main">
+               <tbody id='myopac_prefs_tbody'>
+                       <tr id='myopac_prefs_loading'><td colspan='3'><b>&myopac.loading;</b></td></tr>
+                       <tr id='myopac_prefs_row'>
+                               <td width='20%'>&myopac.prefs.hits;</td>
+                               <td>
+                                       <div style="position:absolute"><div style="position:relative;top:0px;left:55px;"><a href="javascript:;" onclick="alert('Number of search results to display per page. For slower connections, choose fewer hits per page');"><img alt="Search Hits Help" src="/opac/skin/kcls/graphics/question-mark.png" /></a></div></div>
+                                       <select id='prefs_hits_per' style="position:relative;z-index:100;">
+                                               <option value='5'>5</option>
+                                               <option value='8'>8</option>
+                                               <option value='10'>10</option>
+                                               <option value='15'>15</option>
+                                               <option value='20'>20</option>
+                                               <option value='25'>25</option>
+                                               <option value='50'>50</option>
+                                       </select>
+                               </td>
+                       </tr>
+                       <tr><td colspan="2">
+                               <label for="circHistStart">Keep history of checked out items?</label> <input type="checkbox" id="circHistStart" />
+                       </td></tr>
+
+                       <!-- FONT size preference -->
+                       <tr class="hide_me">
+                               <td>&myopac.prefs.font;</td>
+                               <td>
+                                       <select id='prefs_def_font'>
+                                               <option value='regular'>&myopac.prefs.font.regular;</option>
+                                               <option value='large'>&myopac.prefs.font.large;</option>
+                                       </select>
+                               </td>
+                       </tr>
+
+                       <tr class="hide_me">
+                               <td>&myopac.prefs.search.location;</td>
+                               <td>
+                                       <div style='margin-bottom: 5px;'>
+                                               <input type='checkbox' id='myopac_pref_home_lib' 
+                                                       onclick='
+                                                               if( this.checked ) $("prefs_def_location").disabled = true;
+                                                               else $("prefs_def_location").disabled = false;
+                                                       ' /> &myopac.prefs.search.home; 
+                                       </div>
+                                       <select id='prefs_def_location'>
+                                       </select>
+                               </td>
+                       </tr>
+
+                       <tr class="hide_me">
+                               <td>&myopac.prefs.search.range;</td>
+                               <td><select id='prefs_def_range'></select></td>
+                       </tr>
+               </tbody>
+       </table>
+
+
+
+
+
+<table class="hide_me" id="acct_notify_main">
+  <tbody>
+       <tr class="hide_me">
+               <td>
+                       <span>&myopac.prefs.holds.notify;</span>
+                       <a class='classic_link' href='javascript:void(0);' 
+                               onclick='alert($("myopac_pref_hold_notify_alert").innerHTML);' >&common.help;</a>
+               </td>
+               <td style="padding-left:15px;">
+                       <select id='prefs_hold_notify'>
+                               <option value='phone:email' selected='selected'>&myopac.prefs.holds.both;</option>
+                               <option value='phone'>&myopac.prefs.holds.phone;</option>
+                               <option value='email'>&myopac.prefs.holds.email;</option>
+                       </select>
+               </td>
+       </tr>
+       <tr>
+         <td style="padding-top:10px;">
+               <strong>Pick Up Notice for Holds</strong><br />
+               <input type="checkbox" id="opac.hold_notify.email" name="opac.hold_notify.email" /> <label for="opac.hold_notify.email">Email</label><br />
+               <input type="checkbox" id="opac.hold_notify.phone" name="opac.hold_notify.phone" /> <label for="opac.hold_notify.phone">Phone</label> <b>(Temporarily phone notification will generate a mailed paper notice.)</b>
+         </td>
+       </tr>
+       <tr>
+         <td style="padding-top:10px;">
+               <strong>Expire Notice for Holds</strong><br />
+               <input type="checkbox" id="notification.hold.expire.email" name="notification.hold.expire.email" /> <label for="notification.hold.expire.email">Email</label>
+         </td>
+       </tr>
+       <tr>
+         <td style="padding-top:10px;">
+               <strong>Cancel Notice for Holds</strong><br />
+               <input type="checkbox" id="notification.hold.cancel.email" name="notification.hold.cancel.email" /> <label for="notification.hold.cancel.email">Email</label>
+         </td>
+       </tr>
+       <tr>
+         <td style="padding-top:10px;">
+               <strong>Overdue First Notice</strong><br />
+               <input type="checkbox" id="notification.overdue.first.email" name="notification.overdue.first.email" /> <label for="notification.overdue.first.email">Email</label><br />
+               <input type="checkbox" id="notification.overdue.first.phone" name="notification.overdue.first.phone" /> <label for="notification.overdue.first.phone">Phone</label> <b>(Temporarily phone notification will generate a mailed paper notice.)</b>
+         </td>
+       </tr>
+       <tr>
+         <td style="padding-top:10px;">
+               <strong>Courtesy Notice</strong><br />
+               <input type="checkbox" id="notification.predue.email" name="notification.predue.email" /> <label for="notification.predue.email">Email</label><br />
+         </td>
+       </tr>
+       
+       <a href="http://www.kcls.org/usingthelibrary/catalog_help/library_elf.cfm"><u>Try Library Elf-to manage library materials!</u></a>
+       
+       
+  </tbody>
+</table>
+
+
+<div id="acct_info_main">
+    <div id='myopac.expired.alert' class='hide_me' style='margin-bottom: 20px;'>
+               <table class='data_grid' width='100%'>
+            <tbody> 
+                <tr>
+                    <td width='100%' style='color:red;'>
+                       &myopac.summary.expired;
+                    </td>
+                </tr>
+            </tbody>
+        </table>
+    </div>
+
+       <div id='myopac.notes.div' class='hide_me'>
+               <table class='data_grid' width='100%'>
+                       <thead>
+                               <tr>
+                                       <td colspan='2'><b> &myopac.summary.notes;</b></td>
+                               </tr>
+                       </thead>
+                       <tbody id='myopac.notes.tbody'>
+                               <tr id='myopac.notes.tr'>
+                                       <td>
+                                               <b name='title'/> : <span name='value'/>
+                                       </td>
+                               </tr>
+                       </tbody>
+               </table>
+               <br/>
+       </div>
+
+       <table width='70%' class='light_border data_grid'>
+               <tbody id='myopac_summary_tbody'>
+                       <tr>
+                               <td width='30%' class='color_4 light_border'>&common.name;</td>
+                               <td class='light_border'>
+                                       <span id='myopac_summary_prefix' style='padding-right: 5px;'> </span> 
+                                       <span id='myopac_summary_first' style='padding-right: 5px;'> </span> 
+                                       <span id='myopac_summary_middle' style='padding-right: 5px;'> </span> 
+                                       <span id='myopac_summary_last' style='padding-right: 5px;'> </span> 
+                                       <span id='myopac_summary_suffix'> </span> 
+                               </td>
+                               <td> </td>
+                       </tr>
+
+                       <tr>
+                               <td class='color_4 light_border'>&myopac.summary.phone.day;</td>
+                               <td class='light_border' id='myopac_summary_dayphone'> </td>
+                               <td class='light_border'><a href='javascript:void(0);' class="hide_me" 
+                                       onclick='unHideMe($("myopac_update_phone1_row"));$("myopac_new_phone1").focus();'
+                                       id='myopac_summary_phone1_change' style='text-decoration: underline;'>&myopac.summary.change;</a></td>
+                       </tr>
+                       <tr id='myopac_update_phone1_row' class='hide_me'>
+                               <td class='myopac_update_cell' colspan='3'>
+                                       <span class='myopac_update_span'>Enter New &myopac.summary.phone.day;: </span>
+                                       <input type='text' size='24' id='myopac_new_phone1'
+                                               onkeydown='if(userPressedEnter(event)) myOPACUpdatePhone("1");' />
+                                       <span class='myopac_update_span'>
+                                               <button onclick='myOPACUpdatePhone("1");'>&common.submit;</button>
+                                       </span>
+                                       <span class='myopac_update_span'>
+                                               <button onclick='hideMe($("myopac_update_phone1_row"));'>&common.cancel;</button>
+                                       </span>
+                               </td>
+                       </tr>
+                       <tr>
+                               <td class='color_4 light_border'>&myopac.summary.phone.evening;</td>
+                               <td class='light_border' id='myopac_summary_eveningphone'> </td>
+                               <td class='light_border'><a href='javascript:void(0);' class="hide_me" 
+                                       onclick='unHideMe($("myopac_update_phone2_row"));$("myopac_new_phone2").focus();'
+                                       id='myopac_summary_phone2_change' style='text-decoration: underline;'>&myopac.summary.change;</a></td>
+                       </tr>
+                       <tr id='myopac_update_phone2_row' class='hide_me'>
+                               <td class='myopac_update_cell' colspan='3'>
+                                       <span class='myopac_update_span'>New &myopac.summary.phone.evening;: </span>
+                                       <input type='text' size='24' id='myopac_new_phone2'
+                                               onkeydown='if(userPressedEnter(event)) myOPACUpdatePhone("2");' />
+                                       <span class='myopac_update_span'>
+                                               <button onclick='myOPACUpdatePhone("2");'>&common.submit;</button>
+                                       </span>
+                                       <span class='myopac_update_span'>
+                                               <button onclick='hideMe($("myopac_update_phone2_row"));'>&common.cancel;</button>
+                                       </span>
+                               </td>
+                       </tr>
+                       <tr>
+                               <td class='color_4 light_border'>&myopac.summary.phone.other;</td>
+                               <td class='light_border' id='myopac_summary_otherphone'> </td>
+                               <td class='light_border'><a href='javascript:void(0);' class="hide_me" 
+                                       onclick='unHideMe($("myopac_update_phone3_row"));$("myopac_new_phone3").focus();'
+                                       id='myopac_summary_phone3_change' style='text-decoration: underline;'>&myopac.summary.change;</a></td>
+                       </tr>
+                       <tr id='myopac_update_phone3_row' class='hide_me'>
+                               <td class='myopac_update_cell' colspan='3'>
+                                       <span class='myopac_update_span'>Enter New &myopac.summary.phone.other;: </span>
+                                       <input type='text' size='24' id='myopac_new_phone3'
+                                               onkeydown='if(userPressedEnter(event)) myOPACUpdatePhone("3");' />
+                                       <span class='myopac_update_span'>
+                                               <button onclick='myOPACUpdatePhone("3");'>&common.submit;</button>
+                                       </span>
+                                       <span class='myopac_update_span'>
+                                               <button onclick='hideMe($("myopac_update_phone3_row"));'>&common.cancel;</button>
+                                       </span>
+                               </td>
+                       </tr>
+                       <tr>
+                               <td class='color_4 light_border'>
+                                       <div style="position:absolute"><div style="position:relative;left:70px;top:-3px;"><a href="javascript:;" onclick="alert('Create a Username as an option to your barcode to log into My Account.\nExamples:  ilovebooks, johndoe1');"><img alt="Username Help" src="/opac/skin/kcls/graphics/question-mark.png" /></a></div></div>
+                                       &common.username;</td>
+                               <td class='light_border' id='myopac_summary_username'> </td>
+                               <td class='light_border'><a href='javascript:void(0);' 
+                                       onclick='unHideMe($("myopac_update_username_row"));$("myopac_new_username").focus();' class="hide_me" 
+                                       id='myopac_summary_username_change' style='text-decoration: underline;'>&myopac.summary.change;</a></td>
+                       </tr>
+
+                       <tr id='myopac_update_username_row' class='hide_me'>
+                               <td class='myopac_update_cell' colspan='3'>
+                                       <span class='myopac_update_span'>&myopac.summary.username.enter; </span>
+                                       <input type='text' size='24' id='myopac_new_username'
+                                               onkeydown='if(userPressedEnter(event)) myOPACUpdateUsername();' />
+                                       <span class='myopac_update_span'>
+                                               <button onclick='myOPACUpdateUsername();'>&common.submit;</button>
+                                       </span>
+                                       <span class='myopac_update_span'>
+                                               <button onclick='hideMe($("myopac_update_username_row"));'>&common.cancel;</button>
+                                       </span>
+                               </td>
+                       </tr>
+
+
+                       <tr>
+                               <td class='color_4 light_border'>&common.password;</td>
+                               <td class='light_border' id='myopac_summary_password'>&myopac.summary.password.text;</td>
+                               <td class='light_border'><a href='javascript:void(0);' class="hide_me" 
+                                       onclick='unHideMe($("myopac_update_password_row"));$("myopac_current_password").focus();'
+                                       id='myopac_summary_password_change' style='text-decoration: underline;'>&myopac.summary.change;</a></td>
+                       </tr>
+
+                       <tr id='myopac_update_password_row' class='hide_me'>
+                               <td class='myopac_update_cell' colspan='3'>
+
+                                       <table><tbody>
+                                               <tr>
+                                                       <td><span class='myopac_update_span'>&myopac.summary.password.current; </span></td>
+                                                       <td><input type='password' size='24' id='myopac_current_password'
+                                                               onkeydown='if(userPressedEnter(event)) myOPACUpdatePassword();' /></td>
+                                               </tr>
+                                               <tr>
+                                                       <td><span class='myopac_update_span'>&myopac.summary.password.new; </span></td>
+                                                       <td><input type='password' size='24' id='myopac_new_password'
+                                                               onkeydown='if(userPressedEnter(event)) myOPACUpdatePassword();' /></td>
+                                               </tr>
+                                               <tr>
+                                                       <td><span class='myopac_update_span'>&myopac.summary.password.reenter; </span></td>
+                                                       <td><input type='password' size='24' id='myopac_new_password2'
+                                                               onkeydown='if(userPressedEnter(event)) myOPACUpdatePassword();' /></td>
+                                               </tr>
+                                       </tbody></table>
+
+                                       <span class='myopac_update_span'>
+                                               <button onclick='myOPACUpdatePassword();'>&common.submit;</button>
+                                       </span>
+                                       <span class='myopac_update_span'>
+                                               <button onclick='hideMe($("myopac_update_password_row"));'>&common.cancel;</button>
+                                       </span>
+                               </td>
+                       </tr>
+
+                       <tr>
+                               <td class='color_4 light_border'>&myopac.summary.email;</td>
+                               <td class='light_border' id='myopac_summary_email'> </td>
+                               <td class='light_border'><a href='javascript:void(0);' class="hide_me" 
+                                       onclick='unHideMe($("myopac_update_email_row"));$("myopac_new_email").focus();'
+                                       id='myopac_summary_email_change' style='text-decoration: underline;'>&myopac.summary.change;</a></td>
+                       </tr>
+
+                       <tr id='myopac_update_email_row' class='hide_me'>
+                               <td class='myopac_update_cell' colspan='3'>
+                                       <span class='myopac_update_span'>&myopac.summary.email.new; </span>
+                                       <input type='text' size='24' id='myopac_new_email'
+                                               onkeydown='if(userPressedEnter(event)) myOPACUpdateEmail();' />
+                                       <span class='myopac_update_span'>
+                                               <button onclick='myOPACUpdateEmail();'>&common.submit;</button>
+                                       </span>
+                                       <span class='myopac_update_span'>
+                                               <button onclick='hideMe($("myopac_update_email_row"));'>&common.cancel;</button>
+                                       </span>
+                               </td>
+                       </tr>
+
+                       <tr class="hide_me">
+                               <td class='color_4 light_border'>&myopac.summary.id.primary;</td>
+                               <td class='light_border' id='myopac_summary_ident1'> </td>
+                               <td> </td>
+                       </tr>
+                       <tr>
+                               <td class='color_4 light_border'>&myopac.summary.barcode;</td>
+                               <td class='light_border' id='myopac_summary_barcode'> </td>
+                               <td> </td>
+                       </tr>
+                       <tr>
+                               <td class='color_4 light_border'>&myopac.summary.home;</td>
+                               <td class='light_border' id='myopac_summary_homelib'> </td>
+                               <td><a href='javascript:void(0);' class="hide_me" 
+                                       onclick='unHideMe($("myopac_update_home_row"));$("myopac_new_home").focus();'
+                                       id='myopac_summary_home_change' style='text-decoration: underline;'>&myopac.summary.change;</a></td>
+                       </tr>
+                       <tr id='myopac_update_home_row' class='hide_me'>
+                               <td class='myopac_update_cell' colspan='3'>
+                                       <span class='myopac_update_span'>New home library: </span>
+                                       <select id='myopac_new_home'></select>
+                                       <span class='myopac_update_span'>
+                                               <button onclick='myOPACUpdateHomeOU();'>&common.submit;</button>
+                                       </span>
+                                       <span class='myopac_update_span'>
+                                               <button onclick='hideMe($("myopac_update_home_row"));'>&common.cancel;</button>
+                                       </span>
+                               </td>
+                       </tr>
+                       <tr class="hide_me">
+                               <td class='color_4 light_border'>&myopac.summary.genesis;</td>
+                               <td class='light_border' id='myopac_summary_create_date'> </td>
+                               <td> </td>
+                       </tr>
+
+               </tbody>
+       </table>
+
+
+       <br/><hr style="border-bottom:none;*height:0px;" color="#dcdbdb" /><br/>
+
+       <table width='100%' class='light_border data_grid'>
+        <thead>
+            <tr>
+                <td>&myopac.summary.addresses;</td>
+                <td id='myopac_pending_addr_td' class='hide_me'><table cellpadding="0" cellspacing="0" border="0"><tr><td>&myopac.summary.addresses.pending;</td>
+                               <td><a href="javascript:;" onclick="alert('Address changes will be authenticated by staff.');"><img alt="Address Help" src="/opac/skin/kcls/graphics/question-mark.png" /></a></td></tr></table></td>
+            </tr>
+        </thead>
+               <tbody id='myopac_addr_tbody'>
+                       <tr id='myopac_addr_row' class='light_border'>
+                <td>
+                    <table>
+                        <tr>
+                            <td>&myopac.summary.address.type;</td>
+                            <td name='myopac_addr_type'> </td>
+                        </tr>
+                        <tr>
+                            <td>&myopac.summary.address.street;</td>
+                            <td name='myopac_addr_street'> </td>
+                        </tr>
+                        <tr>
+                            <td>&myopac.summary.address.street;</td>
+                            <td name='myopac_addr_street2'> </td>
+                        </tr>
+                        <tr>
+                            <td>&myopac.summary.address.city;</td>
+                            <td name='myopac_addr_city'> </td>
+                        </tr>
+                        <tr>
+                            <td>&myopac.summary.address.county;</td>
+                            <td name='myopac_addr_county'> </td>
+                        </tr>
+                        <tr>
+                            <td>&myopac.summary.address.state;</td>
+                            <td name='myopac_addr_state'> </td>
+                        </tr>
+                        <tr>
+                            <td>&myopac.summary.address.country;</td>
+                            <td name='myopac_addr_country'> </td>
+                        </tr>
+                        <tr>
+                            <td>&myopac.summary.address.zip;</td>
+                            <td name='myopac_addr_zip'> </td>
+                        </tr>
+                        <tr>
+                            <td name='myopac_addr_edit_td' colspan='2' class='hide_me'>
+                                <a class='classic_link' name='myopac_addr_edit_link' href='javascript:void(0);'>Edit Address</a>
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+                <td class='hide_me' name='myopac_pending_addr_td'>
+                    <table>
+                        <tr>
+                            <td>&myopac.summary.address.type;</td>
+                            <td><input name='myopac_pending_addr_type'/> </td>
+                        </tr>
+                        <tr>
+                            <td>&myopac.summary.address.street;</td>
+                            <td><input name='myopac_pending_addr_street'/> </td>
+                        </tr>
+                        <tr>
+                            <td>&myopac.summary.address.street;</td>
+                            <td><input name='myopac_pending_addr_street2'/> </td>
+                        </tr>
+                        <tr>
+                            <td>&myopac.summary.address.city;</td>
+                            <td><input name='myopac_pending_addr_city'/> </td>
+                        </tr>
+                        <tr>
+                            <td>&myopac.summary.address.county;</td>
+                            <td><input name='myopac_pending_addr_county'/> </td>
+                        </tr>
+                        <tr>
+                            <td>&myopac.summary.address.state;</td>
+                            <td><input name='myopac_pending_addr_state'/> </td>
+                        </tr>
+                        <tr>
+                            <td>&myopac.summary.address.country;</td>
+                            <td><input name='myopac_pending_addr_country'/> </td>
+                        </tr>
+                        <tr>
+                            <td>&myopac.summary.address.zip;</td>
+                            <td><input name='myopac_pending_addr_zip'/> </td>
+                        </tr>
+                        <tr>
+                            <td name='myopac_addr_edit_td' colspan='2'>
+                                <a class='classic_link' name='myopac_pending_addr_edit_link' href='javascript:void(0);'>Save Changes</a>
+                                <a style='padding-left:10px;' class='classic_link' name='myopac_pending_addr_del_link' href='javascript:void(0);'>Discard Pending Address</a>
+                            </td>
+                        </tr>
+                    </table>
+                </td>
+            </tr>
+               </tbody>
+       </table>
+</div>
+
+
+       <div class='hide_me' id='myopac_username_error'>&myopac.summary.username.error;</div>
+       <div class='hide_me' id='myopac_username_dup'>&myopac.summary.username.dup;</div>
+       <div class='hide_me' id='myopac_username_success'>&myopac.summary.username.success;</div>
+       <div class='hide_me' id='myopac_username_failure'>&myopac.summary.username.failure;</div>
+
+       <div class='hide_me' id='myopac_email_error'>&myopac.summary.email.error;</div>
+       <div class='hide_me' id='myopac_email_success'>&myopac.summary.email.success;</div>
+       <div class='hide_me' id='myopac_email_failure'>&myopac.summary.email.failed;</div>
+
+       <div class='hide_me' id='myopac_password_error'>&myopac.summary.password.error;</div>
+       <div class='hide_me' id='myopac_password_success'>&myopac.summary.password.success;</div>
+       <div class='hide_me' id='myopac_password_failure'>&myopac.summary.password.failure;</div>
+       <span class='hide_me' id='myopac_invalid_username'>&myopac.summary.username.invalid;</span>
+       <span class='hide_me' id='myopac_addr_changes_saved'>Address Saved</span>
+       
+       <div class='hide_me' id='prefs_update_success'>&myopac.prefs.save.success;</div>
+       <div class='hide_me' id='prefs_update_failure'>&myopac.prefs.save.failed;</div>
+       <span class='hide_me' id='myopac_pref_hold_notify_alert'>&myopac.prefs.help;</span>
+
+</div>
+<![CDATA[<!-- ****************** myopac_prefs.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_summary.xml b/Open-ILS/web/opac/skin/kcls/xml/myopac/myopac_summary.xml
new file mode 100644 (file)
index 0000000..98381f7
--- /dev/null
@@ -0,0 +1,254 @@
+\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
+       <!--\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
+\r
+       <!-- Table for circulation transactions only -->\r
+       <div id='myopac_circ_trans_div' class='hide_me'>\r
+               <br/><hr/><br/>\r
+               <table width='100%' class='data_grid data_grid_center' id='myopac_circ_trans_table'>\r
+                       <thead>\r
+                               <!--<tr><td colspan='10' style='padding: 6px'><b>&myopac.fines.overdue;</b></td></tr>-->\r
+                               <tr><td colspan='10' style='padding: 6px'><b>Fines</b></td></tr>\r
+                               <tr>\r
+                                       <td>&common.title;</td>\r
+                                       <td>&common.author;</td>\r
+                                       <td>&myopac.fines.checkout;</td>\r
+                                       <td>&myopac.fines.due;</td>\r
+                                       <td>&myopac.fines.returned;</td>\r
+                                       <td>&myopac.fines.balance;</td>\r
+                                       <td align="center" nowrap="nowrap" style="white-space:nowrap;"><label for="pay_fines_box1">Pay Fines</label><br /><input id="pay_fines_box1" checked="checked" type="checkbox" onclick="checkAll($('myopac_circ_trans_tbody'), this, 'selector');" class="" title="Click to (un)select all fines" /></td>\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="" checked="checked" 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
+               <table width='100%' class='data_grid data_grid_center' id='myopac_trans_table'>\r
+                       <thead>\r
+                               <tr><td colspan='8' style='padding: 6px'><b>&myopac.fines.other;</b></td></tr>\r
+                               <tr>\r
+                                       <td width='16%'>&myopac.fines.time.start;</td>\r
+                                       <td width='16%'>&myopac.fines.time.paid;</td>\r
+                                       <td width='16%'>&myopac.fines.owed.initial;</td>\r
+                                       <td width='16%'>&myopac.fines.paid.amount;</td>\r
+                                       <td width='16%'>&myopac.fines.balance;</td>\r
+                                       <td width='16%'>&myopac.fines.type;</td>\r
+                                       <td width='4%' align="center" nowrap="nowrap" style="white-space:nowrap;"><label for="pay_fines_box2">Pay Fines</label><br /><input id="pay_fines_box2" checked="checked" class="" type="checkbox" onclick="checkAll($('myopac_trans_tbody'), this, 'selector');" title="Click to (un)select all fines" /></td>\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' checked="checked" /></td>\r
+                               </tr>\r
+                       </tbody>\r
+               </table>\r
+       </div>\r
+       <a 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
+<div id="pay_fines_now" 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>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
diff --git a/Open-ILS/web/opac/skin/kcls/xml/page_advanced.xml b/Open-ILS/web/opac/skin/kcls/xml/page_advanced.xml
new file mode 100644 (file)
index 0000000..83436d5
--- /dev/null
@@ -0,0 +1,16 @@
+
+<![CDATA[<!-- ****************** page_advanced.xml ***************************** -->]]>
+<div id='canvas_main' class='canvas' style='clear:both;'>
+
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/advanced.js'></script>
+
+       <style type='text/css'>
+               .advanced_div { padding-top:15px; }
+       </style>
+
+       <div class='advanced_div'>
+               <!--#include virtual="advanced/advanced_global.xml"-->
+       </div>
+</div>
+<![CDATA[<!-- ****************** end: page_advanced.xml ***************************** -->]]>
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/page_cnbrowse.xml b/Open-ILS/web/opac/skin/kcls/xml/page_cnbrowse.xml
new file mode 100644 (file)
index 0000000..896b1e6
--- /dev/null
@@ -0,0 +1,8 @@
+
+<![CDATA[<!-- ****************** page_cnbrowse.xml ***************************** -->]]>
+<div id='canvas_main' class='canvas' style='margin-top: 20px;'>
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/default/js/cn_browse.js'></script>
+       <!--#include virtual="common/cn_browse.xml"-->
+</div>
+<![CDATA[<!-- ****************** end: page_cnbrowse.xml ***************************** -->]]>
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/page_mresult.xml b/Open-ILS/web/opac/skin/kcls/xml/page_mresult.xml
new file mode 100644 (file)
index 0000000..ad833d3
--- /dev/null
@@ -0,0 +1,11 @@
+
+<![CDATA[<!-- ****************** page_mresult.xml ***************************** -->]]>
+<div>
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/default/js/sidebar_extras.js'></script>
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/js/mresult.js'></script>
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/default/js/result_common.js'></script>
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/default/js/tips.js'></script>
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/default/js/holds.js'></script>   
+       <!--#include virtual="result/result_common.xml"-->
+</div>
+<![CDATA[<!-- ****************** end: page_mresult.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/page_myopac.xml b/Open-ILS/web/opac/skin/kcls/xml/page_myopac.xml
new file mode 100644 (file)
index 0000000..a8f749a
--- /dev/null
@@ -0,0 +1,56 @@
+
+<![CDATA[<!-- ****************** page_myopac.xml ***************************** -->]]>
+<div id='canvas_main' class='canvas hide_me'>
+<script src="<!--#echo var='OILS_SKIN_BASE'-->/kcls/js/myopac.js" type='text/javascript'></script>
+       <div id='myopac_main_div'>
+               <!--#include virtual="myopac/myopac_summary.xml"-->
+               <!--#include virtual="myopac/myopac_checked.xml"-->
+               <!--#include virtual="myopac/myopac_holds.xml"-->
+               <!--#include virtual="myopac/myopac_prefs.xml"-->
+               <!--#include virtual="myopac/myopac_bookbags.xml"-->
+               <div style="clear:both;"></div>
+       </div>
+       <div id='myopac_reloading' class='hide_me canvas'> &common.loading; </div>
+
+       <table style='width: 98%; text-align: center;'>
+               <tbody>
+                       <tr id='myopac_nav_row' class="hide_me">
+
+                               <td class='myopac_link border_6' id='myopac_summary_td' >
+                                       <a href='javascript:void(0);' 
+                                               onclick='myOPACChangePage("summary");'>&myopac.account;</a>
+                               </td>
+
+                               <td class='myopac_link border_6' id='myopac_checked_td' >
+                                       <a href='javascript:void(0);' 
+                                               onclick='myOPACChangePage("checked");'>&myopac.checkouts;</a>
+                               </td>
+
+                               <td class='myopac_link border_6' id='myopac_holds_td' >
+                                       <a href='javascript:void(0);' 
+                                               onclick='myOPACChangePage("holds");'>&myopac.holds;</a>
+                               </td>
+
+                               <td class='myopac_link border_6' id='myopac_fines_td' >
+                                       <a href='javascript:void(0);' 
+                                               onclick='myOPACChangePage("fines");'>&myopac.fines;</a>
+                               </td>
+
+                               <td class='myopac_link border_6' id='myopac_prefs_td' >
+                                       <a href='javascript:void(0);' 
+                                               onclick='myOPACChangePage("prefs");'>&myopac.preferences;</a>
+                               </td>
+
+                               <td class='myopac_link border_6' id='myopac_bookbag_td' nowrap='nowrap'>
+                                       <a href='javascript:void(0);' 
+                                               onclick='myOPACChangePage("bookbag");'>&myopac.bookbags;</a>
+                               </td>
+
+                       </tr>
+               </tbody>
+       </table>
+
+</div>
+<div style="height:40px;" class="hide_me"><div class="hide_me" id="myopac_loading">Loading...</div></div>
+<![CDATA[<!-- ****************** end: page_myopac.xml ***************************** -->]]>
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/page_rdetail.xml b/Open-ILS/web/opac/skin/kcls/xml/page_rdetail.xml
new file mode 100644 (file)
index 0000000..bc99a2f
--- /dev/null
@@ -0,0 +1,96 @@
+\r
+<![CDATA[<!-- ****************** page_rdetail.xml ***************************** -->]]> \r
+\r
+<div id='canvas_main' class='canvas'>\r
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/sidebar_extras.js'></script>\r
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/result_common.js'></script>\r
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/rresult.js'></script>\r
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/rdetail.js'></script>\r
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/holds.js'></script>\r
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/cn_browse.js'></script>\r
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/container.js'></script>\r
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/sidebar.js'></script>\r
+\r
+       <script language='javascript' type='text/javascript'>\r
+               config.ids.rdetail = {};\r
+               config.ids.rdetail.view_marc = "rdetail_view_marc";\r
+       </script>\r
+\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
+       <br />\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
diff --git a/Open-ILS/web/opac/skin/kcls/xml/page_rresult.xml b/Open-ILS/web/opac/skin/kcls/xml/page_rresult.xml
new file mode 100644 (file)
index 0000000..8162639
--- /dev/null
@@ -0,0 +1,13 @@
+
+<![CDATA[<!-- ****************** page_rresult.xml ***************************** -->]]>
+<div>
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/sidebar_extras.js'></script>
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/rresult.js'></script>
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/result_common.js'></script>
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/tips.js'></script>
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/holds.js'></script>   
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/rdetail.js'></script>
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_SKIN_BASE"-->/kcls/js/container.js'></script>
+       <!--#include virtual="result/result_common.xml"-->
+</div>
+<![CDATA[<!-- ****************** end: page_rresult.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/rdetail.xml b/Open-ILS/web/opac/skin/kcls/xml/rdetail.xml
new file mode 100644 (file)
index 0000000..f3e84e5
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- Loads the environment -->
+<!--#include virtual="setenv.xml"-->
+
+<!DOCTYPE html PUBLIC 
+       "-//W3C//DTD XHTML 1.0 Transitional//EN" 
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
+       <!--#include virtual="/opac/locale/${locale}/opac.dtd"-->
+]>
+
+
+<html xmlns='http://www.w3.org/1999/xhtml'>
+       <!--#include virtual="header.xml"-->
+       <!--#if expr="$OILS_PAGE='index.xml'"-->
+               <!--#include virtual="home/index_body.xml"-->
+       <!--#else-->
+               <!--#include virtual="body.xml"-->
+       <!--#endif-->
+</html>
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_altcanvas.xml b/Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_altcanvas.xml
new file mode 100644 (file)
index 0000000..ff17d17
--- /dev/null
@@ -0,0 +1,28 @@
+
+<!-- record details alternate canvases -->
+<div class=''>
+
+       <!--
+       <script language='javascript' type='text/javascript'>
+               config.ids.rdetail.view_marc_div = 'view_marc_div';
+               config.ids.altcanvas.view_marc_div = config.ids.rdetail.view_marc_div; 
+               config.ids.rdetail.hide_marc = "rdetail_hide_marc";
+               config.ids.rdetail.view_marc_box = "rdetail_view_marc_box";
+       </script>
+
+       <div class='hide_me canvas' id='view_marc_div'> 
+               <div>
+                       <table width='100%'><tbody><tr>
+                               <td class='color_1' align='left' style='padding-left: 7px;text-decoration: underline;'>
+                                       <a href="javascript:void(0);" id='rdetail_hide_marc'>&rdetail.detailMain.hideMarc;</a>
+                               </td>
+                       </tr></tbody></table>
+               </div>
+               <br/>
+               <div id='rdetail_view_marc_box'> </div>
+               <br/><br/>
+       </div>
+       -->
+       
+</div>
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_cn_details.xml b/Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_cn_details.xml
new file mode 100644 (file)
index 0000000..c606d07
--- /dev/null
@@ -0,0 +1,105 @@
+
+<![CDATA[<!-- ****************** rdetail_cn_details.xml ***************************** -->]]>
+<table class='hide_me'>
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_OPAC_JS_HOST"-->/skin/default/js/copy_details.js'></script>
+       <script language='javascript' type='text/javascript' src='<!--#echo var="OILS_OPAC_JS_HOST"-->/common/js/Date.W3CDTF.js'></script>
+       <tbody>
+               <tr style='border: 3px solid #E0E0E0;' id='rdetail_volume_details_row' templateRow='1'>
+                       <td colspan='10'>
+                               <div style='text-align: center; margin-top: 6px; margin-bottom: 6px'>
+                               
+                                       <a name='print' href='javascript:void(0);' class='classic_link'>&rdetail.print;</a>
+                                       <table class='data_grid data_grid_center' style='width: 100%'>
+                                               <thead>
+                                                       <tr>
+                                                               <td width='33%'>&rdetail.cn.barcode;</td>
+                                                               <td>&common.status;</td>
+                                                               <td>&rdetail.cn.location;</td>
+                                                               <td name='age_protect_label' class='hide_me'>&rdetail.cn.hold.age;</td>
+                                                               <td name='create_date_label' class='hide_me'>&rdetail.cn.genesis;</td>
+                                                               <td name='holdable_label' class='hide_me'>&rdetail.cn.holdable;</td>
+                                                               <td name='due_date_label' class='hide_me'>&rdetail.cn.due;</td>
+                                                       </tr>
+                                               </thead>
+                                               <tbody name='copies_tbody' class='copy_details_table' width='100%'>
+
+                                                       <tr name='copies_row'>
+
+                                                               <td>
+                                                                       <span name='barcode'> </span>
+                                                                       <a class='hide_me classic_link copy_more_info' name='details_link'>&rdetail.cn.more;</a>
+                                                                       <a class='hide_me classic_link copy_more_info' name='less_details_link'>&rdetail.cn.less;</a>
+                                                                       <a class='hide_me classic_link copy_more_info' name='copy_hold_link' 
+                                                                               href='javascript:void(0);'>&rdetail.cn.hold;</a>
+                                                               </td>
+
+                                                               <td name='status'> </td>
+                                                               <td name='location'> </td>
+                                                               <td name='age_protect_value' class='hide_me'>&rdetail.cn.disabled;</td>
+                                                               <td name='create_date_value' class='hide_me'> </td>
+
+                                                               <td name='copy_holdable_td' class='hide_me'>
+                                                                       <span name='copy_is_holdable'> </span>
+                                                               </td>
+
+                                                               <td name='copy_due_date_td' class='hide_me'>
+                                                                       <span name='copy_due_date'> </span>
+                                                               </td>
+
+                                                       </tr>
+
+                                                       <tr name='copy_extras_row' class='hide_me'>
+                                                               <td colspan='10'>
+                                                                       <table width='100%' class='data_grid'>
+                                                                               <tbody name='extras_tbody'>
+                                                                                       <tr name='extras_row' class='hide_me'>
+                                                                                               <td name='type' width='20%'> 
+                                                                                                       <span name='note' class='hide_me'><b>&rdetail.cn.note;</b></span>
+                                                                                                       <span name='cat' class='hide_me'><b>&rdetail.cn.category;</b></span>
+                                                                                               </td>
+                                                                                               <td>
+                                                                                                       <span name='key'> </span> : <span name='value'> </span>
+                                                                                               </td>
+                                                                                       </tr>
+                                                                               </tbody>
+                                                                       </table>
+                                                               </td>
+                                                       </tr>
+
+                                               </tbody>
+                                       </table>
+                               </div>
+                       </td>
+               </tr>
+       </tbody>
+</table>
+
+<span class='hide_me' id='rdetail.yes'>&common.yes;</span>
+<span class='hide_me' id='rdetail.no'>&common.no;</span>
+
+
+<div id='rdetail_print_details' class='hide_me'>
+       <div style='text-align: center; padding: 20px; width: 100%'>
+               <div style='width:100%; border: 2px solid #E0F0E0; margin-bottom: 20px;'>
+                       <input type='submit' value='&rdetail.cn.print;' onclick='window.print();'> </input>
+               </div>
+               <div name='body'> 
+                       <table>
+                               <tbody name='tbody'>
+                                       <tr><td>&common.library;</td><td colspan='2' name='lib'></td></tr>
+                                       <tr><td>&common.title;</td><td colspan='2' name='title'></td></tr>
+                                       <tr><td>&common.author;</td><td colspan='2' name='author'></td></tr>
+                                       <tr><td>&common.edition;</td><td colspan='2' name='edition'></td></tr>
+                                       <tr><td>&common.pubdate;</td><td colspan='2' name='pubdate'></td></tr>
+                                       <tr><td>&common.publisher;</td><td colspan='2' name='publisher'></td></tr>
+                                       <tr><td>&common.physical;</td><td colspan='2' name='phys'></td></tr>
+                                       <tr>
+                                               <td colspan='3' style='background: #E0F0E0;'> </td>
+                                       </tr>
+                                       <tr name='cnrow'><td><b>&common.callnumber;</b></td><td><b colspan='2' name='cn'></b></td></tr>
+                               </tbody>
+                       </table>
+               </div>
+       </div>
+</div>
+<![CDATA[<!-- ****************** end: rdetail_cn_details.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_copyinfo.xml b/Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_copyinfo.xml
new file mode 100644 (file)
index 0000000..12a7a98
--- /dev/null
@@ -0,0 +1,93 @@
+
+<!-- This holds information for copies attached to this record -->
+<![CDATA[<!-- ****************** rdetail_copyinfo.xml ***************************** -->]]>
+<div id='rdetail_copy_info_div' class='rdetail_extras_div hide_me'>
+
+       <div style='width: 100%; text-align: center; padding-bottom: 5px;'>
+               <span>
+                       <a href='javascript:void(0);' id='copy_info_local_link' 
+                               class='rdetail_copy_nav_link hide_me classic_link'><b>&rdetail.copyInfo.local;</b></a>
+               </span>
+               <span width=''>
+                       <a href='javascript:void(0);' id='copy_info_all_link' 
+                               class='rdetail_copy_nav_link classic_link'><b>&rdetail.copyInfo.all;</b></a>
+               </span>
+       </div>
+
+       <style>
+               #rdetail_copy_info_table { font-size: 8pt; }
+               #rdetail_copy_info_table td { padding: 3px; }
+       </style>
+       <table id='rdetail_copy_info_table' class='data_grid'>
+               <thead>
+
+                       <tr>
+                               <td  class='rdetail_copy_info_header_cell'>&rdetail.copyInfo.library;</td>
+                               <td  class='rdetail_copy_info_header_cell'>&rdetail.copyInfo.callnumber;</td>
+                               <td  name='rdetail_copylocation_header' class='rdetail_copy_info_header_cell hide_me'>&rdetail.copyInfo.copylocation;</td>
+                               <td  class='rdetail_copy_info_header_cell'>&rdetail.copyInfo.actions;</td>
+                               <td  nowrap='nowrap' class='rdetail_copy_info_header_cell' id='rdetail_copy_info_status'> 
+                                       <div name='rdetail_status_cell'> </div>
+                               </td>
+                       </tr>
+
+               </thead>
+               <tbody id='rdetail_copy_info_tbody'>
+                       <tr id='rdetail_copy_info_row' class='hide_me'>
+                               <td name='rdetail_library_cell'>
+                                       <a name='lib_print_link' class='hide_me classic_link' style='font-size: 8pt; padding-left: 20px;'>
+                                               &rdetail.copyInfo.print;
+                                       </a>
+                               </td>
+                               <td name='rdetail_callnumber_cell'> </td>
+                               <td class="hide_me" name='rdetail_copylocation_cell'> </td>
+                               <td name='rdetail_actions_cell'> 
+                                       <div style='padding-bottom: 1px;'>
+                                               <a style='font-size: 8pt;'
+                                                       name='details' class='hide_me classic_link'>&rdetail.copyInfo.details;</a>
+                                       </div>
+                                       <div style='margin-top: 2px;'>
+                                               <a name='browse' style='font-size: 8pt;'
+                                                       class='hide_me classic_link'>&rdetail.copyInfo.browse;</a>
+                                       </div>
+                                       <div style='margin-top: 2px;' name='hold_div' class='hide_me'>
+                                               <a name='hold' style='font-size: 8pt;' href='javascript:void(0);'
+                                                       class='classic_link'>&rdetail.copyInfo.hold;</a>
+                                       </div>
+                               </td>
+                               <td nowrap='nowrap' class='rdetail_copy_count_cell vertical' 
+                                       name='rdetail_copy_count_cell'> </td>
+                       </tr>
+
+                       <tr id='rdetail_copy_info_loading'><td>&rdetail.loading;</td></tr>
+
+               </tbody>
+       </table>
+
+       <!--
+       <table class='hide_me'>
+               <tbody>
+               <tr style='border: 3px solid #E0E0E0;' id='rdetail_volume_details_row'><td colspan='10'></td></tr>
+               </tbody>
+       </table>
+       -->
+
+       <br/><br/>
+
+       <div id='rdetail_copy_info_none' class='hide_me'>&rdetail.noneAvailable;</div>
+
+       <script language='javascript' type='text/javascript'>
+               config.ids.rdetail.cp_status                    = "rdetail_copy_info_status";
+               config.ids.rdetail.cp_info_row          = "rdetail_copy_info_row";
+               config.ids.rdetail.cp_info_loading      = "rdetail_copy_info_loading";
+               config.ids.rdetail.cp_info_local                = "copy_info_local_link";
+               config.ids.rdetail.cp_info_all          = "copy_info_all_link";
+               config.ids.rdetail.cp_info_none         = "rdetail_copy_info_none";
+               config.names.rdetail.lib_cell                   = "rdetail_library_cell";
+               config.names.rdetail.cn_cell                    = "rdetail_callnumber_cell";
+               config.names.rdetail.cp_count_cell      = "rdetail_copy_count_cell";
+               config.names.rdetail.cp_status          = 'rdetail_status_cell';
+       </script>
+</div> <!-- copy info -->
+<![CDATA[<!-- ****************** end: rdetail_copyinfo.xml ***************************** -->]]>
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_extras.xml b/Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_extras.xml
new file mode 100644 (file)
index 0000000..fe7277d
--- /dev/null
@@ -0,0 +1,194 @@
+\r
+<![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' \r
+                       style='padding: 10px;'>&common.loading;</div>\r
+\r
+\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="" 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="500" 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="" 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><td width="1" style="padding-right:7px;" valign="top"><strong>Subject: </strong></td><td><div id='rdetail_subject_container'></div></td></tr>\r
+                       <tr><td width="1" style="padding:5px 7px 0px 0px;" valign="top"><strong>Genre: </strong></td><td style="padding-top:5px;"><div id='rdetail_genre_cont'></div></td></tr>\r
+                       <tr><td width="1" style="padding:5px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Topic Heading: </strong></td><td style="padding-top:5px;"><div id='rdetail_topic_cont'></div></td></tr>\r
+                       <tr><td width="1" style="padding:5px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Geographic Setting: </strong></td><td style="padding-top:5px;"><div id='rdetail_geo_cont'></div></td></tr>\r
+                       <tr><td width="1" style="padding:5px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Biographical Subject: </strong></td><td style="padding-top:5px;"><div id='rdetail_bio_cont'></div></td></tr>\r
+                       <tr><td width="1" style="padding:5px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Character Attributes: </strong></td><td style="padding-top:5px;"><div id='rdetail_attrib_cont'></div></td></tr>\r
+                       <tr><td width="1" style="padding:5px 7px 0px 0px;" valign="top"><strong>Setting: </strong></td><td style="padding-top:5px;"><div id='rdetail_setting_cont'></div></td></tr>\r
+                       <tr><td width="1" style="padding:5px 7px 0px 0px;white-space:nowrap;" nowrap="nowrap" valign="top"><strong>Time Period: </strong></td><td style="padding-top:5px;"><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="" 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="" 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
+                 <strong>Authors:</strong><div id="rdetail_authors_inner" style="padding-bottom:10px;"></div>\r
+                 <strong>Added Authors:</strong><div id="rdetail_moar_authors" style="padding-bottom:10px;"></div>\r
+                 <strong>Credits:</strong><div id="rdetail_credits" style="padding-bottom:10px;"></div>\r
+                 <strong>Cast:</strong><div id="rdetail_cast" style="padding-bottom:10px;"></div>\r
+                 <strong>Author Notes:</strong><div id='rdetail_anotes_div' class='rdetail_extras_div'> </div>\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="" 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="" 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
+                       <strong>Awards:</strong> <div id='rdetail_awards_cont' style="margin-bottom:20px;"></div>\r
+                       <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>\r
+                       <strong>Reviews:</strong><div id='rdetail_review_container' style="margin-bottom:20px;"></div>\r
+                       <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>\r
+                       </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="" 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="" 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_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="" 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="" 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="" 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="" 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="" 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
+        <script type="text/javascript" id="EIT" src="<!--#echo var='OILS_NOVELIST_URL'-->"></script>\r
+    <!--endif-->\r
+    <script language='javascript' type='text/javascript'>\r
+        var novelist = '<!--#echo var="OILS_NOVELIST_URL"-->';\r
+        if (novelist == '(none)') { novelist = false; }\r
+    </script>\r
+\r
+<![CDATA[<!-- ****************** end: rdetail_extras.xml ***************************** -->]]>\r
diff --git a/Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_summary.xml b/Open-ILS/web/opac/skin/kcls/xml/rdetail/rdetail_summary.xml
new file mode 100644 (file)
index 0000000..eb41639
--- /dev/null
@@ -0,0 +1,201 @@
+\r
+<![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
+         <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++) if (content = BT.textContent(item_list[i])) break; /* assignment */\r
+                       return {\r
+                               "small": buildISBNSrc(plausible_ident(content)),\r
+                               "large": buildISBNSrc(plausible_ident(content), "large")\r
+                       };\r
+               </span>\r
+               <a id='rdetail_img_link' href='${ident.large}'><img alt="Image of item" style='border: none;' id='rdetail_image' src='${ident.small}' onload='unHideMe($("rdetail_img_link"))' onerror='hideMe($("rdetail.jacket_attrib_div"));hideMe($("rdetail_img_link"));'/></a><br />\r
+         </span>\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><br />\r
+                 <span style="color:#545454;">&common.author;: </span> <em><a title='&rdetail.author.search;' id='rdetail_author'></a></em>\r
+                 <div><table cellpadding="0" cellspacing="0" border="0"><tr><td nowrap="nowrap" style="white-space:nowrap;" valign="top"><strong>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="80%">\r
+                 <tr>\r
+                   <td valign="top" width="50%">\r
+                         <strong>&common.callnumber;:</strong><![CDATA[&nbsp;&nbsp;]]><span id="rdetail_callnum"></span><br />\r
+                         <strong>&common.pubdate;:</strong><![CDATA[&nbsp;&nbsp;]]><span id="rdetail_pubdate"></span>\r
+                       </td>\r
+                       <td valign="top" width="50%">\r
+                         <strong>&common.physical;:</strong><![CDATA[&nbsp;&nbsp;]]><span id="rdetail_physical_desc"></span><br />\r
+                         <strong>&common.publisher;:</strong><![CDATA[&nbsp;&nbsp;]]><span id="rdetail_publisher"></span>\r
+                       </td>\r
+                 </tr>\r
+               </table>\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">\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
+\r
+<div id="rdetail_locs_expand"><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 locations</a></div>\r
+<div id="rdetail_locs_collapse" class="hide_me"><a href="javascript:;" onclick="expandBoxes('locs',false);"><img src="/opac/skin/kcls/graphics/plus_sign.png" /></a> <a style="position:relative;top:-3px;" href="javascript:;" onclick="expandBoxes('locs',false);">Collapse locations</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/plus_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;">\r
+\r
+                               </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;">\r
+\r
+                               </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
+\r
+       <script language='javascript' type='text/javascript'><![CDATA[\r
+\r
+               config.ids.rdetail.details_body         = 'rdetail_details_body'; \r
+               config.ids.rdetail.title                                = 'rdetail_title';\r
+               config.ids.rdetail.author                               = 'rdetail_author';\r
+               config.ids.rdetail.isbn                                 = 'rdetail_isbn';\r
+               config.ids.rdetail.edition                              = 'rdetail_edition';\r
+               config.ids.rdetail.pubdate                              = 'rdetail_pubdate';\r
+               config.ids.rdetail.publisher                    = 'rdetail_publisher';\r
+               config.ids.rdetail.tor                                  = 'rdetail_tor';\r
+               config.ids.rdetail.abstr                                = 'rdetail_abstract';\r
+               config.ids.rdetail.image                                = 'rdetail_image';\r
+               config.ids.rdetail.tor_pic                              = 'rdetail_tor_pic';\r
+\r
+         dojo.addOnLoad(function() {\r
+        setTimeout( function () {\r
+            var here = findOrgUnit(getLocation());\r
+            if (getDepth() > 0 || getDepth === 0 ) {\r
+                while (getDepth() < findOrgDepth(here))\r
+                    here = findOrgUnit( here.parent_ou() );\r
+            }\r
+\r
+            dojo.require('openils.BibTemplate');\r
+            new openils.BibTemplate({ record : new CGI().param('r'), org_unit : here.shortname() }).render();\r
+        },0);\r
+         });\r
+       ]]></script>\r
+\r
+</div> <!-- details_body -->\r
+\r
+    <!-- ChiliFresh setup -->\r
+    <script language='javascript' type='text/javascript'>\r
+        var chilifresh = '<!--#echo var="OILS_CHILIFRESH_ACCOUNT"-->';\r
+        if (chilifresh == '(none)') { chilifresh = false; }\r
+    </script>\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
+<![CDATA[\r
+<script type="text/javascript">\r
+var sslSwitch = (("https:" == document.location.protocol) ? "https://secure." : "http://");\r
+document.write(unescape("%3Cscript src='" + sslSwitch + "chilifresh.com/on-site/js/evergreen.js' type='text/javascript'%3E%3C/script%3E"));\r
+</script>\r
+]]>\r
+    <!--endif-->\r
+<![CDATA[<!-- ****************** end: rdetail_summary.xml ***************************** -->]]>\r
diff --git a/Open-ILS/web/opac/skin/kcls/xml/result/filtersort.xml b/Open-ILS/web/opac/skin/kcls/xml/result/filtersort.xml
new file mode 100644 (file)
index 0000000..7bea8f5
--- /dev/null
@@ -0,0 +1,21 @@
+
+<![CDATA[<!-- ****************** filtersort.xml ***************************** -->]]>
+    <select class="results_header_sel" id='opac.result.sort' onchange='searchBarSubmit(true);' style="width:160px;">
+        <option selected='selected' value=''>&result.sort_by;</option>
+        <optgroup label='&result.sort_by.title;'>
+            <option id='opac.result.title.a2z' label='&common.a2z.titla;' value='title.asc'>&common.a2z.title;</option>
+            <option id='opac.result.title.z2a' label='&common.z2a.titla;' value='title.desc'>&common.z2a.title;</option>
+        </optgroup>
+        <optgroup label='&result.sort_by.author;'>
+            <option id='opac.result.author.a2z' label='&common.a2z.author;' value='author.asc'>&common.a2z.author;</option>
+            <option id='opac.result.author.z2a' label='&common.z2a.author;' value='author.desc'>&common.z2a.author;</option>
+        </optgroup>
+        <optgroup label='&result.sort_by.pubdate;'>
+            <option id='opac.result.pubdate.new2old' label='&common.new2old.pubdate;' 
+                value='pubdate.desc'>&common.new2old.pubdate;</option>
+            <option id='opac.result.pubdate.old2new' label='&common.old2new.pubdate;' 
+                value='pubdate.asc'>&common.old2new.pubdate;</option>
+        </optgroup>
+    </select>
+
+<![CDATA[<!-- ****************** end: filtersort.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/result/result_common.xml b/Open-ILS/web/opac/skin/kcls/xml/result/result_common.xml
new file mode 100644 (file)
index 0000000..858ebb2
--- /dev/null
@@ -0,0 +1,9 @@
+
+<div id='canvas_main' class='canvas' xmlns:xi="http://www.w3.org/2001/XInclude" >
+
+       <!--#include virtual="result_table.xml"-->
+       <!--#include virtual="result_lowhits.xml"-->
+
+</div>
+
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/result/result_header.xml b/Open-ILS/web/opac/skin/kcls/xml/result/result_header.xml
new file mode 100644 (file)
index 0000000..2e0d4ef
--- /dev/null
@@ -0,0 +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
diff --git a/Open-ILS/web/opac/skin/kcls/xml/result/result_info.xml b/Open-ILS/web/opac/skin/kcls/xml/result/result_info.xml
new file mode 100644 (file)
index 0000000..47e8c3d
--- /dev/null
@@ -0,0 +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
diff --git a/Open-ILS/web/opac/skin/kcls/xml/result/result_lowhits.xml b/Open-ILS/web/opac/skin/kcls/xml/result/result_lowhits.xml
new file mode 100644 (file)
index 0000000..b6330a8
--- /dev/null
@@ -0,0 +1,69 @@
+
+<![CDATA[<!-- ****************** result_lowhits.xml ***************************** -->]]>
+<div id='result_low_hits' class='hide_me'>
+
+       <div id="zero_search_hits" class="hide_me">
+         <div style="float:left;width:300px;margin-top:20px;">
+               <p>Sorry, no entries were found for <strong>&quot;<span id="zero_hits_term"></span>&quot;</strong><br /><span id="zero_hits_label1" class="hide_me">Did you mean <strong><a id="spell_check_link" href="javascript:;"></a></strong>?</span></p>
+               <table cellpadding="0" cellspacing="0" border="0"><tr><td valign="top" style="padding-right:10px;"><span id="zero_hits_label2" class="hide_me">Other Possibilities:</span></td>
+               <td id="zero_hits_suggestions"></td>
+               </tr></table>
+         </div>
+         <div style="float:right;width:353px;background:#ccc;padding:10px;margin-top:7px;">
+               <p><strong>Still not finding what you are looking for?</strong><br />
+               Request that KCLS purchase the material you are looking for by making a <a href="javascript:;">Purchase Request</a><br />
+               <strong>Note:</strong> You must be logged in to make a Purchase Request<br /></p>
+               <p><strong>Keyword Search Tips</strong><br />Change to <strong>Advanced Keyword Search.</strong></p>
+               <p>Adjacency Multiple words are not searched together as a phrase. They will be found in various parts of the record. To search for a phrase, enclose your search terms in quotation marks.<br />(example:  <strong>&quot;garcia marquez&quot;</strong>)</p>
+               <p><strong>Truncation</strong><br />
+               Words may be right-hand truncated using an asterisk. Use a single asterisk * to truncate from 1-5 characters. Use a double asterisk ** for open-ended truncation.<br />
+               (example: <strong>environment* agency</strong>)</p>
+               <p><strong>Wildcards</strong><br />
+               You may use a question mark to replace a single character anywhere within a word.<br />example: <strong>wom?</strong>)</p>
+         </div>
+       </div>
+<div class="hide_me">
+       <div style='text-align: center; padding-bottom: 8px;' class="hide_me">
+               <div id='result_low_hits_msg' class='hide_me'>&result.lowhits.few;</div>
+               <div id='result_zero_hits_msg' class='hide_me'>&result.lowhits.zero;</div>
+       </div>
+
+       <!-- spell checker -->
+       <div id='did_you_mean' class='lowhits_div hide_me'>
+               <span>&result.lowhits.did.you.mean; </span>
+               <!-- <a class='classic_link' id='spell_check_link'> </a> -->
+       </div>
+
+       <div id='low_hits_remove_format' class='lowhits_div hide_me'>
+               <span>&result.lowhits.formats; </span>
+               <a id='low_hits_remove_format_link' class='classic_link'>&result.lowhits.formats.search;</a>
+       </div>
+
+       <div id='low_hits_cross_ref' class='lowhits_div hide_me'>
+               <span>&result.lowhits.related;</span>
+               <div style='padding: 5px;'>
+                       <a id='low_hits_xref_link' class='classic_link' style='padding-right: 5px;'> </a>
+               </div>
+       </div>
+
+       <div id='low_hits_expand_range' class='lowhits_div hide_me'>
+               <span>&result.lowhits.expand; </span>
+               <a id='low_hits_expand_link' class='classic_link' style='padding-right: 5px;'> </a>
+       </div>
+
+       <div id='low_hits_search_type' class='lowhits_div hide_me'>
+               <span>&result.lowhits.class;</span>
+               <a id='low_hits_title_search' class='hide_me classic_link' 
+                       style='padding-right: 5px;'>&result.lowhits.title;</a>
+               <a id='low_hits_author_search' class='hide_me classic_link' 
+                       style='padding-right: 5px;'>&result.lowhits.author;</a>
+               <a id='low_hits_subject_search' class='hide_me classic_link' 
+                       style='padding-right: 5px;'>&result.lowhits.subject;</a>
+               <a id='low_hits_series_search' class='hide_me classic_link' 
+                               style='padding-right: 5px;'>&result.lowhits.series;</a>
+               <a id='low_hits_keyword_search' class='hide_me classic_link' 
+                       style='padding-right: 5px;'>&result.lowhits.keyword;</a>
+       </div>
+</div>
+</div>
+<![CDATA[<!-- ****************** end: result_lowhits.xml ***************************** -->]]>
diff --git a/Open-ILS/web/opac/skin/kcls/xml/result/result_table.xml b/Open-ILS/web/opac/skin/kcls/xml/result/result_table.xml
new file mode 100644 (file)
index 0000000..0eea17b
--- /dev/null
@@ -0,0 +1,201 @@
+<!-- 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
+       <script language='javascript' type='text/javascript'>\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
+       </script>\r
+\r
+    <!-- ChiliFresh setup -->\r
+    <script language='javascript' type='text/javascript'>\r
+        var chilifresh = '<!--#echo var="OILS_CHILIFRESH_ACCOUNT"-->';\r
+        if (chilifresh=='(none)') { chilifresh = false; }\r
+    </script>\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
+\r
+<![CDATA[\r
+<script type="text/javascript">\r
+var sslSwitch = (("https:" == document.location.protocol) ? "https://secure." : "http://");\r
+document.write(unescape("%3Cscript src='" + sslSwitch + "chilifresh.com/on-site/js/evergreen.js' type='text/javascript'%3E%3C/script%3E"));\r
+</script>\r
+]]>\r
+    <!--endif-->\r
+</div>\r
+<![CDATA[<!-- ****************** end: result_table.xml ***************************** -->]]>\r
+\r
diff --git a/Open-ILS/web/opac/skin/kcls/xml/rresult.xml b/Open-ILS/web/opac/skin/kcls/xml/rresult.xml
new file mode 100644 (file)
index 0000000..f3e84e5
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- Loads the environment -->
+<!--#include virtual="setenv.xml"-->
+
+<!DOCTYPE html PUBLIC 
+       "-//W3C//DTD XHTML 1.0 Transitional//EN" 
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
+       <!--#include virtual="/opac/locale/${locale}/opac.dtd"-->
+]>
+
+
+<html xmlns='http://www.w3.org/1999/xhtml'>
+       <!--#include virtual="header.xml"-->
+       <!--#if expr="$OILS_PAGE='index.xml'"-->
+               <!--#include virtual="home/index_body.xml"-->
+       <!--#else-->
+               <!--#include virtual="body.xml"-->
+       <!--#endif-->
+</html>
+
diff --git a/Open-ILS/web/opac/skin/kcls/xml/setenv.xml b/Open-ILS/web/opac/skin/kcls/xml/setenv.xml
new file mode 100644 (file)
index 0000000..755663a
--- /dev/null
@@ -0,0 +1,74 @@
+<!-- Sets our environment variables for convenience and determining which page we're on -->
+
+<!--#set var='OILS_PAGE' value="$DOCUMENT_NAME"-->
+
+<!--#if expr="$DOCUMENT_NAME='index.xml'"-->
+       <!--#set var='OILS_TITLE' value='opac.title.home'-->
+       <!--#set var='FRONT_PAGE' value='true'-->
+
+<!--#elif expr="$DOCUMENT_NAME='mresult.xml'"-->
+       <!--#set var='OILS_TITLE' value='opac.title.mresult'-->
+       
+
+<!--#elif expr="$DOCUMENT_NAME='rresult.xml'"-->
+       <!--#set var='OILS_TITLE' value='opac.title.rresult'-->
+
+<!--#elif expr="$DOCUMENT_NAME='rdetail.xml'"-->
+       <!--#set var='OILS_TITLE' value='opac.title.rdetail'-->
+
+<!--#elif expr="$DOCUMENT_NAME='myopac.xml'"-->
+       <!--#set var='OILS_TITLE' value='opac.title.myopac'-->
+
+<!--#elif expr="$DOCUMENT_NAME='advanced.xml'"-->
+       <!--#set var='OILS_TITLE' value='opac.title.advanced'-->
+
+<!--#elif expr="$DOCUMENT_NAME='reqitems.xml'"-->
+       <!--#set var='OILS_TITLE' value='opac.title.reqitems'-->
+
+<!--#elif expr="$DOCUMENT_NAME='cnbrowse.xml'"-->
+       <!--#set var='OILS_TITLE' value='opac.title.cnbrowse'-->
+
+<!--#endif-->
+
+<!--#if expr="$HTTPS"-->
+       <!--#set var="OILS_PROTOCOL" value="https"-->
+       <!--#if expr="$OILS_OPAC_BYPASS_STATIC_FOR_HTTPS=='yes'"-->
+               <!--#set var="OILS_OPAC_CSS_HOST" value=""-->
+               <!--#set var="OILS_OPAC_JS_HOST" value=""-->
+       <!--#endif-->
+<!--#else-->
+       <!--#set var="OILS_PROTOCOL" value="http"-->
+<!--#endif-->
+
+<!--#if expr="$OILS_OPAC_STATIC_PROTOCOL"-->
+
+<!--#else-->
+       <!--#set var="OILS_OPAC_STATIC_PROTOCOL" value="$OILS_PROTOCOL"-->
+<!--#endif-->
+
+<!--#set var="OILS_BASE" value="${OILS_PROTOCOL}://${SERVER_NAME}${OILS_OPAC_BASE}"-->
+<!--#set var="OILS_XML_BASE" value="${OILS_BASE}common/xml"--> 
+
+
+<!-- Javascript host -->
+<!--#if expr="$OILS_OPAC_JS_HOST"-->
+    <!--#set var="OILS_OPAC_JS_HOST" value="${OILS_OPAC_STATIC_PROTOCOL}://${OILS_OPAC_JS_HOST}"-->
+<!--#else -->
+    <!--#set var="OILS_OPAC_JS_HOST" value="$OILS_BASE"-->
+<!--#endif -->
+<!--#set var="OILS_JS_BASE" value="${OILS_OPAC_JS_HOST}common/js"-->
+
+
+<!--#if expr="$OILS_OPAC_CSS_HOST"-->
+    <!--#set var="OILS_OPAC_CSS_HOST" value="${OILS_OPAC_STATIC_PROTOCOL}://${OILS_OPAC_CSS_HOST}"-->
+<!--#else -->
+    <!--#set var="OILS_OPAC_CSS_HOST" value="$OILS_BASE"-->
+<!--#endif -->
+<!--#set var="OILS_THEME_BASE" value="${OILS_OPAC_CSS_HOST}theme"--> 
+<!--#set var="OILS_SKIN_BASE" value="${OILS_OPAC_CSS_HOST}skin"--> 
+<!--#set var="OILS_CSS_BASE" value="${OILS_OPAC_CSS_HOST}common/css"--> 
+
+
+<!--#if expr="!$locale || $locale=''"-->
+       <!--#set var="locale" value="en-US"-->
+<!--#endif-->
diff --git a/Open-ILS/web/opac/skin/kcls/xml/top_nav.xml b/Open-ILS/web/opac/skin/kcls/xml/top_nav.xml
new file mode 100644 (file)
index 0000000..f7915b0
--- /dev/null
@@ -0,0 +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"><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 style="color:#f41d36;">$</span><span id="dash_fines" style="color:#f41d36;">0.00</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
diff --git a/Open-ILS/web/opac/skin/kcls/xml/utils.xml b/Open-ILS/web/opac/skin/kcls/xml/utils.xml
new file mode 100644 (file)
index 0000000..2ef4f31
--- /dev/null
@@ -0,0 +1,21 @@
+<![CDATA[
+<!-- ****************** utils.xml ***************************** -->
+
+<div style="float:right;">
+<div style="position:relative;">
+<img src="/opac/skin/kcls/graphics/utils-corner-left.png" style="float:left;" />
+  <div style="float:left;width:163px;height:30px;background:url('/opac/skin/kcls/graphics/utils-corner-mid.png') repeat-x top;"> 
+  
+       <a href="javascript:history.go(-1)" style="position:relative;top:1px;left:10px;"><img alt="Back" src="/opac/skin/kcls/graphics/tool_back.png" /></a>
+       <a href="index.xml" style="position:relative;top:3px;left:20px;"><img src="/opac/skin/kcls/graphics/tool_home.png" alt="Homepage" /></a>
+       <a href="javascript:window.print();" style="position:relative;top:5px;left:30px;"><img src="/opac/skin/kcls/graphics/tool_print.png" alt="Print Page" /></a>
+       <a href="http://www.kcls.org/usingthelibrary/catalog_help/index.cfm" style="position:relative;top:2px;left:40px;"><img alt="Help" src="/opac/skin/kcls/graphics/tool_help.png" /></a>
+       <a href="javascript:history.go(+1)" style="position:relative;top:2px;left:50px;"><img src="/opac/skin/kcls/graphics/tool_forward.png" alt="Forward" /></a>
+       
+  </div>
+<img src="/opac/skin/kcls/graphics/utils-corner-right.png" style="float:left;" />
+</div>
+</div>
+
+<!-- ****************** end: utils.xml ***************************** -->
+]]>
\ No newline at end of file