Repaired merge conflicts resuling from ttopac-move-templates
authorBill Erickson <berick@esilibrary.com>
Wed, 3 Aug 2011 14:31:06 +0000 (10:31 -0400)
committerBill Erickson <berick@esilibrary.com>
Wed, 3 Aug 2011 14:32:32 +0000 (10:32 -0400)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
39 files changed:
1  2 
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Record.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Search.pm
Open-ILS/src/templates/default/acq/common/li_table.tt2
Open-ILS/src/templates/default/cat/authority/list.tt2
Open-ILS/src/templates/default/conify/global/config/record_attr_definition.tt2
Open-ILS/src/templates/default/opac/advanced.tt2
Open-ILS/src/templates/default/opac/myopac/main.tt2
Open-ILS/src/templates/default/opac/myopac/main_pay.tt2
Open-ILS/src/templates/default/opac/myopac/main_payment_form.tt2
Open-ILS/src/templates/default/opac/myopac/main_payments.tt2
Open-ILS/src/templates/default/opac/myopac/receipt_email.tt2
Open-ILS/src/templates/default/opac/myopac/receipt_print.tt2
Open-ILS/src/templates/default/opac/myopac/update_email.tt2
Open-ILS/src/templates/default/opac/parts/advanced/global_row.tt2
Open-ILS/src/templates/default/opac/parts/advanced/search.tt2
Open-ILS/src/templates/default/opac/parts/chilifresh.tt2
Open-ILS/src/templates/default/opac/parts/header.tt2
Open-ILS/src/templates/default/opac/parts/js.tt2
Open-ILS/src/templates/default/opac/parts/login/form.tt2
Open-ILS/src/templates/default/opac/parts/misc_util.tt2
Open-ILS/src/templates/default/opac/parts/org_selector.tt2
Open-ILS/src/templates/default/opac/parts/place_hold.tt2
Open-ILS/src/templates/default/opac/parts/qtype_selector.tt2
Open-ILS/src/templates/default/opac/parts/record/awards.tt2
Open-ILS/src/templates/default/opac/parts/record/extras.tt2
Open-ILS/src/templates/default/opac/parts/record/summary.tt2
Open-ILS/src/templates/default/opac/parts/result/lowhits.tt2
Open-ILS/src/templates/default/opac/parts/result/lowhits_purchase.tt2
Open-ILS/src/templates/default/opac/parts/searchbar.tt2
Open-ILS/src/templates/default/opac/results.tt2
Open-ILS/src/templates/default/vandelay/inc/attrs.tt2
Open-ILS/src/templates/default/vandelay/inc/matches.tt2
Open-ILS/src/templates/default/vandelay/inc/profiles.tt2
Open-ILS/src/templates/default/vandelay/inc/queue.tt2
Open-ILS/src/templates/default/vandelay/inc/toolbar.tt2
Open-ILS/src/templates/default/vandelay/inc/upload.tt2
Open-ILS/src/templates/default/vandelay/vandelay.tt2
Open-ILS/src/templates_kcls/default/opac/parts/result/lowhits_purchase.tt2
Open-ILS/web/css/skin/default/opac/style.css

@@@ -24,13 -24,11 +24,13 @@@ sub load_record 
  
      # run copy retrieval in parallel to bib retrieval
      # XXX unapi
 -    my $copy_rec = OpenSRF::AppSession->create('open-ils.cstore')->request(
 +    my $cstore = OpenSRF::AppSession->create('open-ils.cstore');
 +    my $copy_rec = $cstore->request(
          'open-ils.cstore.json_query.atomic', 
 -        $self->mk_copy_query($rec_id, $org, $depth, $copy_limit, $copy_offset));
 +        $self->mk_copy_query($rec_id, $org, $depth, $copy_limit, $copy_offset)
 +    );
  
-     my (undef, @rec_data) = $self->get_records_and_facets([$rec_id], undef, {flesh => '{holdings_xml,mra}'});
+     my (undef, @rec_data) = $self->get_records_and_facets([$rec_id], undef, {flesh => '{holdings_xml,mra,acp}'});
      $ctx->{bre_id} = $rec_data[0]->{id};
      $ctx->{marc_xml} = $rec_data[0]->{marc_xml};
  
index 0000000,645a0ae..28ef757
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,469 +1,471 @@@
 -        <h2>Copies</h2>
+ <script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/default/acq/common/base64.js"> </script>
+ <script type="text/javascript" src='[% ctx.media_prefix %]/js/ui/default/acq/common/li_table.js'> </script>
+ <script type="text/javascript" src='[% ctx.media_prefix %]/js/ui/default/acq/financial/claim_voucher.js'> </script>
+ <div id='acq-lit-table-container'>
+     <div id='acq-lit-table-div' class='hidden'>
+         <!-- Lineitem (bib record) list -->
+         <table id='acq-lit-table' class='oils-generic-table'>
+             <thead>
+                 <tr>
+                     <th colspan='0'>
+                         <table style='width:100%;'>
+                             <tr>
+                                 <td>
+                                     <span>
+                                         <select id="acq-lit-li-actions-selector">
+                                             <option mask='*'  value='_'>--Actions--</option>
+                                             <option mask='sr' value='save_picklist'>Save Items To Selection List</option>
+                                             <option mask='pl' value='selector_ready'>Mark Ready for Selector</option>
+                                             <option mask='pl' value='order_ready'>Mark Ready for Order</option>
+                                             <option mask='*'  value='delete_selected'>Delete Selected Items</option>
+                                             <option mask='*'  value='add_brief_record'>Add Brief Record</option>
+                                             <option mask='*'  value='export_attr_list'>Export Single Attribute List</option>
+                                             <option mask='*'  value='batch_apply_funds'>Apply Funds to Selected Items</option>
+                                             <option mask='po' value='' disabled='disabled'>----PO----</option>
+                                             <option mask='sr|pl' value='create_order'>Create Purchase Order</option>
+                                             <option mask='po' value='create_assets'>Load Bibs and Items</option>
+                                             <option mask='po' value='cancel_lineitems'>Cancel Selected Lineitems</option>
+                                             <option mask='po' value='change_claim_policy'>Change Claim Policy</option>
+                                             <option mask='po' value='receive_po'>Mark Purchase Order as Received</option>
+                                             <option mask='po' value='rollback_receive_po'>Un-Receive Purchase Order</option>
+                                             <option mask='po' value='print_po'>Print Purchase Order</option>
+                                             <option mask='po' value='po_history'>View PO History</option>
+                                         </select>
+                                         <span id="acq-lit-export-attr-holder" class="hidden">
+                                             <input dojoType="dijit.form.FilteringSelect" id="acq-lit-export-attr" jsId="acqLitExportAttrSelector" labelAttr="description" searchAttr="description" />
+                                             <span dojoType="dijit.form.Button" jsId="acqLitExportAttrButton">Export List</span>
+                                         </span>
+                                         <span id="acq-lit-cancel-reason" class="hidden">
+                                             <span id="acq-lit-cancel-reason-selector"></span>
+                                             <span dojoType="dijit.form.Button" jsId="acqLitCancelLineitemsButton">Cancel Line Items</span>
+                                         </span>
+                                     </span>
+                                     <span id='acq-lit-generic-progress' class='hidden'>
+                                         <span dojoType="dijit.ProgressBar" style="width:300px" jsId="litGenericProgress"></span>
+                                     </span>
+                                 </td>
+                                 <td>
+                                     <div style='width:100%;text-align:right;'>
+                                         <span style='padding-right:15px;'>
+                                             <a href='javascript:void(0);' id='acq-lit-prev' style='visibility:hidden'>&#171; Previous</a>
+                                             <a href='javascript:void(0);' id='acq-lit-next' style='visibility:hidden'>Next &#187;</a>
+                                         </span>
+                                     </div>
+                                 </td>
+                             </tr>
+                         </table>
+                     </th>
+                 </tr>
+             </thead>
+             <tbody><tr><td colspan='0' style='height:20px;'/></tr></tbody>
+             <tbody style='font-weight:bold;border:1px solid #aaa;'>
+                 <tr>
+                     <td><span><a id='acq-lit-select-toggle' href='javascript:void(0);'>&#x2713</a></span></td>
+                     <td>Line Items</td>
+                     <td>Items</td>
+                     <td>Notes</td>
+                     <td>Actions</td>
+                     <td>Status</td>
+                     <td>Estimated Price</td>
+                 </tr>
+             </tbody>
+             <tbody id='acq-lit-tbody'>
+                 <tr id='acq-lit-row' class='acq-lit-row'>
+                     <td name='selector'><input type='checkbox' name='selectbox'/></td>
+                     <td style='width:75%;'>
+                         <table style='width:100%;'>
+                             <tbody>
+                                 <tr>
+                                     <td rowspan='3' style='width:43px;'><img style='width:40px;height:65px;' name='jacket'></td>
+                                     <td style='width:70%;font-weight:bold;'>
+                                         <span name="bib_origin" class="hidden">
+                                             <img src="/opac/images/book-icon.png" />
+                                         </span><a attr='title' href='javascript:void(0);'></a>
+                                     </td>
+                                     <td rowspan='2' style='text-align:right'>
+                                     </td>
+                                 </tr>
+                                 <tr class='acq-lit-alt-row'>
+                                     <td colspan='0'>
+                                         <span attr='author'></span>
+                                         <span attr='isbn'></span>
+                                         <span attr='issn'></span>
+                                         <span attr='edition'></span>
+                                         <span attr='pubdate'></span>
+                                         <span attr='publisher'></span>
+                                         <span name='source_label'></span>
+                                     </td>
+                                 </tr>
+                                 <tr>
+                                     <td colspan='0'>
+                                         <span name="liid"># </span> 
+                                         <span name="catalog" class='hidden'> | <a title='Show In Catalog' name="catalog_link" href="javascript:void(0);">&#x279F; catalog</a></span> 
+                                         <span name="link_to_catalog" class='hidden'> | <a title='Link To Catalog Record' name="link_to_catalog_link" href="javascript:void(0);">&#x27BE; link to catalog</a></span> 
+                                         <span name="worksheet"> | <a title='Generate Worksheet' name="worksheet_link" href="javascript:void(0);">&#x270D; worksheet</a></span>
+                                         <span name='pl' class='hidden'> | <a title='Select List' name='pl_link' href='javascript:void(0);'>&#x2756; </a></span>
+                                         <span name='po' class='hidden'> | <a title='Purchase Order' name='po_link' href='javascript:void(0);'>&#x2318; </a></span>
+                                     </td>
+                                 </tr>
+                             </tbody>
+                         </table>
+                     </td>
+                     <td><a title='FOOOBAR' name='copieslink' href='javascript:void(0);'>Copies(<span name='count'>0</span>)</a></td>
+                     <td>
+                         <a name='noteslink' href='javascript:void(0);'>Notes(<span name='notes_count'>0</span>)</a><span name="notes_alert_flag"></span>
+                     </td>
+                     <td>
+                         <select name='actions'>
+                             <option name='action_none'>-- Actions --</option>
+                             <option name='action_mark_recv' disabled='disabled'>Mark Received</option>
+                             <option name='action_mark_unrecv' disabled='disabled'>Un-Receive</option>
+                             <option name='action_update_barcodes' disabled='disabled'>Update Barcodes</option>
+                             <option name='action_holdings_maint' disabled='disabled'>Holdings Maint.</option>
+                             <option name='action_new_invoice' disabled='disabled'>New Invoice</option>
+                             <option name='action_link_invoice' disabled='disabled'>Link to Invoice</option>
+                             <option name='action_view_invoice' disabled='disabled'>View Invoice(s)</option>
+                             <option name='action_view_claim_policy'>Apply Claim Policy</option>
+                             <option name='action_manage_claims' disabled='disabled'>Claims</option>
+                             <option name='action_view_history'>View History</option>
+                         </select>
+                     </td>
+                     <td><span name='li_state'></span></td>
+                     <td><input type='text' size='8' name='price'/></td>
+                 </tr>
+             </tbody>
+         </table>
+     </div>
+     <!-- Bib record / Lineitem info table -->
+     [% INCLUDE "default/acq/common/info.tt2" which = "Lit" %]
+     <!-- Lineitem notes table -->
+     [% INCLUDE "default/acq/common/notes.tt2" which = "Lit" %]
+     <!-- Copies table -->
+     <div id='acq-lit-li-details' class='hidden'>
 -                    </td>
 -                    <td class="acq-lit-li-menu-right">
 -                        <span>
++
++        <div id='acq-lit-copies-li-summary'></div>
++
++        <h3>Add/Edit Items</h3>
++        <hr/>
+         <div class='acq-lit-li-menu-bar'>
+             <table style='width:100%'>
+                 <tr>
+                     <td class="acq-lit-li-menu-left">
+                         <div dojoType='dijit.form.Button' id='acq-lit-copies-back-button' scrollOnFocus='false'>&#x2196; Return</div>
+                         <span style='margin-left:10px;padding-left:10px;border-left:2px solid #aaa;'>
+                             Item Count: 
+                             <input dojoType='dijit.form.NumberTextBox' jsId='acqLitCopyCountInput'  
+                                 constraints="{min:0,max:1000,places:0}" style='width:40px' value='0'></input> 
+                             <div dojoType='dijit.form.Button' jsId='acqLitAddCopyCount' scrollOnFocus='false'>Go</div>
+                         </span>
 -            <tbody><tr><td class='acq-lit-table-spacer' colspan='0'/></tr></tbody>
 -
 -            <tbody id='acq-lit-distrib-formula-tbody'>
 -                <tr id='acq-lit-distrib-form-row'>
 -                    <td colspan='0'>
 -                        <span>Distribution Formulas</span>
 -                        <div name='selector'></div>
 -                        <div name='set_button'></div>
 -                        <div name="reset_button"></div>
 -                    </td>
 -                </tr>
 -            </tbody>
 -
 -            <tbody><tr><td class='acq-lit-table-spacer' colspan='0'/></tr></tbody>
 -            <tbody id="acq-lit-distrib-applied-tbody" class="hidden">
 -                <tr>
 -                    <td colspan="5" id="acq-lit-distrib-applied-heading">
 -                        Distribution formulas applied to this lineitem:
 -                    </td>
 -                </tr>
 -                <tr id="acq-lit-distrib-applied-row" class="acq-lit-distrib-applied-row">
 -                    <th></th>
 -                    <td colspan="4"></td>
 -                </tr>
 -            </tbody>
++                        <span style='margin-left:10px;padding-left:10px;border-left:2px solid #aaa;'>
+                             <div dojoType='dijit.form.Button' jsId='acqLitSaveCopies' scrollOnFocus='false'>Save Changes</div>
+                         </span>
+                         <span id='acq-lit-update-copies-progress' class='hidden'>
+                             <span dojoType="dijit.ProgressBar" style="width:300px" jsId="litUpdateCopiesProgress"></span>
+                         </span>
+                     </td>
+                 </tr>
+             </table>
+         </div>
++        <hr/>
++        <table id='acq-lit-distrib-formula-table'>
++            <tbody id='acq-lit-distrib-formula-tbody'>
++                <tr id='acq-lit-distrib-form-row'>
++                    <td colspan='0'>
++                        <span>Distribution Formulas</span>
++                        <div name='selector'></div>
++                        <div name='set_button'></div>
++                        <div name="reset_button"></div>
++                    </td>
++                </tr>
++            </tbody>
++            <tbody id="acq-lit-distrib-applied-tbody" class="hidden">
++                <tr>
++                    <td colspan="5" id="acq-lit-distrib-applied-heading">
++                        Distribution formulas applied to this lineitem:
++                    </td>
++                </tr>
++                <tr id="acq-lit-distrib-applied-row" class="acq-lit-distrib-applied-row">
++                    <th></th>
++                    <td colspan="4"></td>
++                </tr>
++            </tbody>
++        <table>
++
+         <table id='acq-lit-li-details-table'>
+             <tbody><tr><td class='acq-lit-table-spacer' colspan='0'/></tr></tbody>
+             <tbody style='font-weight:bold;'>
+                 <tr>
+                     <td style='margin-top:30px;'>Owning Branch</td>
+                     <td>Shelving Location</td>
+                     <td>Collection Code</td>
+                     <td>Fund</td>
+                     <td>Circ Modifier</td>
+                     <td>Callnumber</td>
+                     <td colspan='0'></td>
+                 </tr>
+             </tbody>
+             <tbody style='background-color:#ddd;'>
+                 <tr id='acq-lit-li-details-batch-row'>
+                     <td><div name='owning_lib'></div></td>
+                     <td><div name='location'></div></td>
+                     <td><div name='collection_code'></div></td>
+                     <td><div name='fund'></div></td>
+                     <td><div name='circ_modifier'></div></td>
+                     <td><div name='cn_label'></div></td>
+                     <td colspan='3' style='text-align:left;'>
+                         <div dojoType='dijit.form.Button' jsId='acqLitBatchUpdateCopies' scrollOnFocus='false'>Batch Update</div>
+                     </td>
+                 </tr>
+             </tbody>
+             <tbody><tr><td class='acq-lit-table-spacer' colspan='0'></td></tr></tbody>
+             <tbody style='font-weight:bold;'>
+                 <tr>
+                     <td style='margin-top:30px;'>Owning Branch</td>
+                     <td>Shelving Location</td>
+                     <td>Collection Code</td>
+                     <td>Fund</td>
+                     <td>Circ Modifier</td>
+                     <td>Callnumber</td>
+                     <td>Barcode</td>
+                     <td>Notes</td>
+                     <td colspan='0'></td>
+                 </tr>
+             </tbody>
+             <tbody id='acq-lit-li-details-tbody' class='oils-generic-table'>
+                 <tr id='acq-lit-li-details-row'>
+                     <td><div name='owning_lib'></div></td>
+                     <td><div name='location'></div></td>
+                     <td><div name='collection_code'></div></td>
+                     <td><div name='fund'></div></td>
+                     <td><div name='circ_modifier'></div></td>
+                     <td><div name='cn_label'></div></td>
+                     <td><div name='barcode'></div></td>
+                     <td><div name='note'></div></td>
+                     <td><a href="javascript:void(0);" name="receive">Mark&nbsp;Received</a><a href="javascript:void(0);" name="unreceive">Un-Receive</a>&nbsp;<a href="javascript:void(0);" name="cancel">Cancel</a><span class="hidden" name="cancel_reason"></span>&nbsp;<a href="javascript:void(0);" name="claim">Claim</a></td>
+                     <td><div name='delete' dojoType='dijit.form.Button' style='color:red;' scrollOnFocus='false'>X</div></td>
+                 </tr>
+             </tbody>
+         </table>
+     </div>
+     <!-- Copies table -->
+     <div id='acq-lit-real-copies-div' class='hidden'>
+         <h2>Copies</h2>
+         <div class='acq-lit-li-menu-bar'>
+             <table style='width:100%'>
+                 <tr>
+                     <td style='text-align:left;'>
+                         <div dojoType='dijit.form.Button' id='acq-lit-real-copies-back-button' scrollOnFocus='false'>&#x2196; Return</div>
+                     </td>
+                     <td style='text-align:right;'>
+                         <span>
+                             <div dojoType='dijit.form.Button' jsId='acqLitSaveRealCopies' scrollOnFocus='false'>Save Changes</div>
+                         </span>
+                     </td>
+                 </tr>
+             </table>
+         </div>
+         <table id='acq-lit-real-copies-table'>
+             <tbody style='font-weight:bold;'>
+                 <tr>
+                     <td style='margin-top:30px;'>Owning Branch</td>
+                     <td>Shelving Location</td>
+                     <td>Circ Modifier</td>
+                     <td>Callnumber</td>
+                     <td>Barcode</td>
+                     <td colspan='0'></td>
+                 </tr>
+             </tbody>
+             <tbody id='acq-lit-real-copies-tbody' class='oils-generic-table'>
+                 <tr id='acq-lit-real-copies-row'>
+                     <td><div name='owning_lib'></div></td>
+                     <td><div name='location'></div></td>
+                     <td><div name='circ_modifier'></div></td>
+                     <td><div name='label'></div></td>
+                     <td><div name='barcode'></div></td>
+                 </tr>
+             </tbody>
+         </table>
+     </div>
+     <div class="hidden">
+         <div jsId="acqLitLinkInvoiceDialog" dojoType="dijit.Dialog">
+             [% INCLUDE "default/acq/common/inv_dialog.tt2" which = "li" %]
+         </div>
+     </div>
+     <div class='hidden' id='acq-lit-progress-numbers'>
+         <table class='oils-generic-table'>
+             <tbody>
+                 <tr>
+                     <td>Lineitems Processed</td>
+                     <td><span id='acq-pl-lit-li-processed'>0</span></td>
+                 </tr>
+                 <tr>
+                     <td>Items Processed</td>
+                     <td><span id='acq-pl-lit-lid-processed'>0</span></td>
+                 </tr>
+                 <tr>
+                     <td>Debits Encumbered</td>
+                     <td><span id='acq-pl-lit-debits-processed'>0</span></td>
+                 </tr>
+                 <tr>
+                     <td>Bib Records Imported</td>
+                     <td><span id='acq-pl-lit-bibs-processed'>0</span></td>
+                 </tr>
+                 <tr>
+                     <td>Bib Records Indexed</td>
+                     <td><span id='acq-pl-lit-indexed-processed'>0</span></td>
+                 </tr>
+                 <tr>
+                     <td>Copies Processed</td>
+                     <td><span id='acq-pl-lit-copies-processed'>0</span></td>
+                 </tr>
+             </tbody>
+         </table>
+     </div>
+     <div class='hidden'>
+         <div dojoType='dijit.Dialog' jsId='acqLitPoCreateDialog'>
+             <table class='oils-generic-table'>
+                 <tr>
+                     <td>Ordering Agency</td>
+                     <td><div name='ordering_agency' id='acq-lit-po-agency'></div></td>
+                 </tr>
+                 <tr>
+                     <td>Provider</td>
+                     <td><div name='provider' id='acq-lit-po-provider'></div></td>
+                 </tr>
+                 <tr>
+                     <td>Prepayment Required</td>
+                     <td><input id="acq-lit-po-prepay" name="prepayment_required" dojoType="dijit.form.CheckBox"/></td>
+                 </tr>
+                 <tr>
+                     <td>All Lineitems</td>
+                     <td><input checked='checked' name='create_from' value='all' dojoType='dijit.form.RadioButton'/></td>
+                 </tr>
+                 <tr>
+                     <td>Selected Lineitems</td>
+                     <td><input name='create_from' value='selected' dojoType='dijit.form.RadioButton'/></td>
+                 </tr>
+                 <tr>
+                     <td>Import Bibs and Create Copies</td>
+                     <td><input name='create_assets' dojoType='dijit.form.CheckBox'/></td>
+                 </tr>
+                 <tr>
+                     <td colspan='2'>
+                         <div dojoType='dijit.form.Button' type='submit' jsId='acqLitCreatePoSubmit'>Submit</div>
+                     </td>
+                 </tr>
+             </table>
+         </div>
+     </div>
+     <div class="hidden">
+         <div dojoType="dijit.Dialog" jsId='acqLitSavePlDialog'>
+             <table class='dijitTooltipTable'>
+                 <tr>
+                     <td colspan='2'>
+                         <input dojoType="dijit.form.RadioButton" name="which" type='radio' checked='checked' value='selected'/>
+                         <label for="name">Save selected</label>
+                         <input dojoType="dijit.form.RadioButton" name="which" type='radio' value='all'/>
+                         <label for="name">Save all</label>
+                     </td>
+                 </tr>
+                 <tr><td colspan='2'><hr/></td></tr>
+                 <tr>
+                     <td><label for="new_name">Save as Selection List: </label></td>
+                     <td><input dojoType="dijit.form.TextBox" name="new_name"/></td>
+                 </tr>
+                 <tr>
+                     <td><label for="existing_pl">Add to Selection List: </label></td>
+                     <td>
+                         <input jsId="acqLitAddExistingSelect" dojoType="openils.widget.PCrudAutocompleteBox" fmclass="acqpl" searchAttr="name" name="existing_pl" />
+                     </td>
+                 </tr>
+                 <tr>
+                     <td colspan='2' align='center'>
+                         <button dojoType='dijit.form.Button' type="submit" jsId='acqLitSavePlButton'>Save</button>
+                     </td>
+                 </tr>
+             </table>
+         </div>
+         <div dojoType="dijit.Dialog" jsId="lidCancelDialog">
+             <label for="acq-lit-lid-cancel-reason">Reason:</label>
+             <span id="acq-lit-lid-cancel-reason"></span>
+             <span dojoType="dijit.form.Button"
+                 jsId="acqLidCancelButton">Cancel Copy</span>
+         </div>
+         <div dojoType="dijit.Dialog" jsId="liClaimPolicyDialog">
+             <label for="acq-lit-li-claim-policy">Claim policy:</label>
+             <span id="acq-lit-li-claim-policy"></span> &nbsp;
+             <span dojoType="dijit.form.Button"
+                 jsId="liClaimPolicySave">Save</span>
+         </div>
+         <div dojoType="dijit.Dialog" jsId="liClaimDialog">
+             [% INCLUDE "default/acq/common/claim_dialog.tt2" %]
+         </div>
+         <div dojoType="dijit.Dialog" jsId="finalClaimDialog">
+             [% INCLUDE "default/acq/common/final_claim_dialog.tt2" %]
+         </div>
+         <div dojoType="dijit.Dialog" jsId="batchFundUpdateDialog" title="Batch Update Funds">
+             <div>
+                 This will update the fund for all copies attached to these lineitems.<br/>
+                 This will also update any existing encumbered or spent debits.
+             </div>
+             <br/>
+             <table class='oils-generic-table'>
+                 <tr>
+                     <td>
+                         <span>Select a new fund:</span>
+                     </td>
+                     <td>
+                         <div id='acq-lit-batch-fund-selector'></div>
+                     </td>
+                 </tr>
+                 <tr>
+                     <td><button dojoType='dijit.form.Button' jsId='batchFundUpdateCancel'>Cancel</button></td>
+                     <td><button dojoType='dijit.form.Button' jsId='batchFundUpdateSubmit'>Submit</button></td>
+                 </tr>
+             </table>
+         </div>
+     </div>
+     <div dojoType="dijit.Dialog" jsId='acqLitChangeLiStateDialog'>
+         <table class='dijitTooltipTable'>
+             <tr>
+                 <td>
+                     <input dojoType="dijit.form.RadioButton" name="which" type='radio' checked='checked' value='selected'/>
+                     <label for="name">Mark selected</label>
+                     <input dojoType="dijit.form.RadioButton" name="which" type='radio' value='all'/>
+                     <label for="name">Mark all</label>
+                 </td>
+             </tr>
+             <tr>
+                 <td colspan='2' align='center'>
+                     <button dojoType='dijit.form.Button' type="submit" jsId='acqLitCancelLiStateButton'>Cancel</button>
+                     <button dojoType='dijit.form.Button' type="submit" jsId='acqLitSaveLiStateButton'>Go</button>
+                 </td>
+             </tr>
+         </table>
+     </div>
+     <div class='hidden'>
+         <div dojoType='openils.widget.ProgressDialog' jsId='progressDialog'></div>
+     </div>
+ </div>
index 0000000,67a1fa7..cfc341f
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,75 +1,82 @@@
 -        <select type="text" name="authAxis" value="" dojoType="dijit.form.FilteringSelect" trim="true" id="authAxis" propercase="false" style="width: 10em;">
 -            <option value="authority.author">Author</option>
 -            <option value="authority.subject">Subject</option>
 -            <option value="authority.title">Title</option>
 -            <option value="authority.topic">Topic</option>
 -        </select>
+ [% ctx.page_title = 'Authority record list' %]
+ [% WRAPPER default/base.tt2 %]
+ <script type="text/javascript" src='[% ctx.media_prefix %]/js/ui/default/cat/authority/list.js'> </script>
+ <div dojoType="dijit.form.Form" id="myForm" jsId="myForm" encType="multipart/form-data" action="" method="">
+     <span style="white-space: nowrap;">
+         <label for="authTerm">Search term: </label>
+         <input type="text" name="authTerm" value="" dojoType="dijit.form.TextBox" trim="true" id="authTerm" propercase="false"/>
+     </span>
+     <span style="white-space: nowrap;">
+         <label for="authAxis">Authority type: </label>
++        <input
++            id="authAxis"
++            name="authAxis"
++            jsId="authAxis"
++            dojoType="openils.widget.PCrudAutocompleteBox"
++            fmclass="aba"
++            searchAttr="name"
++            fetchProperties="{ sort: [{attribute:'name'}] }"
++            propercase="false"
++            hasDownArrow="true"
++            store_options="{ honor_retrieve_all:true }"
++            trim="true"
++        />
+     </span>
+ <!-- Not currently useful - see authOUListInit() above -->
+ <!--    <label for="authOU">Library: </label><select dojoType="openils.widget.OrgUnitFilteringSelect" id="authOU" name="authOU" searchAttr="shortname" labelAttr="shortname"></select> -->
+     <span style="white-space: nowrap;">
+         <span dojoType="dijit.form.Button" type="button" value="Previous">Previous
+             <script type="dojo/method" event="onClick" args="evt">
+                 displayRecords({"page":"prev"});
+             </script>
+         </span>
+         <label for="authPage">Page: </label>
+         <input dojoType="dijit.form.NumberSpinner" value="0" constraints="{min:-100,max:100,places:0}" smallDelta="1" id="authPage" name="authPage" style="width:5em;" />
+         <span dojoType="dijit.form.Button" type="button" value="Next">Next
+             <script type="dojo/method" event="onClick" args="evt">
+                 displayRecords({"page":"next"});
+             </script>
+         </span>
+     </span>
+     <span style="white-space: nowrap;">
+         <span dojoType="dijit.form.Button" type="button" value="Submit">Submit
+             <script type="dojo/method" event="onClick" args="evt">
+                 displayRecords();
+             </script>
+         </span>
+     </span>
+ </div>
+ <hr />
+ <div id='mergebox-div' class='hidden' style='float:right; border: 4px solid; width: 25%;'>
+     <div style="border-bottom: 4px solid; text-align: center;">
+         <div dojoType="dijit.form.Form" encType="multipart/form-data" action="" method="">
+             <div dojoType="dijit.form.Button" type="button" value="Merge">Merge
+                 <script type="dojo/method" event="onClick" args="evt">
+                     mergeRecords();
+                 </script>
+             </div>
+             <div dojoType="dijit.form.Button" type="button" value="Clear">Clear
+                 <script type="dojo/method" event="onClick" args="evt">
+                     clearMergeRecords();
+                 </script>
+             </div>
+         </div>
+     </div>
+     <table>
+         <tbody id='mergebox-tbody'>
+         </tbody>
+     </table>
+ </div>
+ <div id='authlist-div'></div>
+ [% END %]
index 0000000,627b713..4af3b48
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,31 +1,35 @@@
 -        function() { cradGrid.loadAll({order_by : {crad : 'name'}}) }
+ [% WRAPPER default/base.tt2 %]
+ [% ctx.page_title = 'MARC Record Attribute Definitions' %]
+ <h1>Record Attribute Definitions</h1> <br/>
+ <div dojoType="dijit.layout.ContentPane" layoutAlign="client" class='oils-header-panel'>
+     <div>Record Attribute Definitions</div>
+     <div>
+         <button dojoType='dijit.form.Button' onClick='cradGrid.showCreateDialog()'>New Attr. Definition</button>
+         <button dojoType='dijit.form.Button' onClick='cradGrid.deleteSelected()'>Delete Selected</button>
+     </div>
+ </div>
+ <div dojoType="dijit.layout.ContentPane" layoutAlign="client">
+     <table  jsId="cradGrid"
+             autoHeight='true'
+             dojoType="openils.widget.AutoGrid"
+             fieldOrder="['name', 'label']",
+             query="{name: '*'}"
+             fmClass='crad'
+             showPaginator='true'
+             editOnEnter='true'/>
+  </div>
+ <script type ="text/javascript">
+     dojo.require('openils.widget.AutoGrid');
+     openils.Util.addOnLoad(
++        function() {
++            // avoid loading the entire config.xml_transform object
++            cradGrid.overrideWidgetArgs.format = {searchOptions : {"select":{"cxt":["name"]}}};
++            cradGrid.loadAll({order_by : {crad : 'name'}}) 
++        }
+     );
+ </script>
+ [% END %]
index 0000000,5c953a3..e752636
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,23 +1,30 @@@
 -    ctx.page_title = l("Advanced Search") %]
+ [%  PROCESS "default/opac/parts/header.tt2";
+     WRAPPER "default/opac/parts/base.tt2";
+     INCLUDE "default/opac/parts/topnav.tt2";
 -                <a href="#" alt="[% l('Advanced Search') %]" id="adv_search"></a>
 -<!--                <a href="#" alt="[% l('Numeric Search') %]" id="num_search"></a>
 -                    <a href="#" alt="[% l('Expert Search') %]" id="expert_search"></a> -->
++    ctx.page_title = l("Advanced Search");
++    pane = CGI.param("pane") || "advanced" %]
+     <div id="search-wrapper">
+         [% INCLUDE "default/opac/parts/printnav.tt2" %]
+         <div id="adv_search_parent">
+             <div id="adv_search_tabs">
++                <a href="?pane=advanced" alt="[% l('Advanced Search') %]" [% IF pane == 'advanced' %]class="on" [% END %]id="adv_search"></a>
++                <a href="?pane=numeric" alt="[% l('Numeric Search') %]" [% IF pane == 'numeric' %]class="on" [% END %]id="num_search"></a>
++                <a href="?pane=expert" alt="[% l('Expert Search') %]" [% IF pane == 'expert' %]class="on" [% END %]id="expert_search"></a>
+             </div>
+         </div>
+     </div>
+     <div id="content-wrapper">
+         <div id="main-content">
+             <div class="advanced_div">
++            [% IF pane == 'advanced' %]
+             [% INCLUDE "default/opac/parts/advanced/search.tt2" %]
++            [% ELSIF pane == 'numeric' %]
++            [% INCLUDE "default/opac/parts/advanced/numeric.tt2" %]
++            [% ELSIF pane == 'expert' %]
++            [% INCLUDE "default/opac/parts/advanced/expert.tt2" %]
++            [% END %]
+             </div>
+             <div class="common-full-pad"></div>       
+         </div>
+     </div>
+ [% END %]
index 0000000,674e097..354b5b0
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,167 +1,170 @@@
 -                        <!-- XXX TODO select all js --><input id="pay_fines_box1" checked="checked"
 -                            type="checkbox" title="[% l('Click to (un)select all fines') %]" />
+ [%  PROCESS "default/opac/parts/header.tt2";
+     PROCESS "default/opac/parts/misc_util.tt2";
+     WRAPPER "default/opac/parts/myopac/main_base.tt2";
+     myopac_page = "main";
+     myopac_main_page = "main";
+ %]
+ <form action="[% ctx.opac_root %]/myopac/main_payment_form" method="GET">
+     [% IF ctx.fines.circulation.size > 0 %]
+     <div id='myopac_circ_trans_div'>
+         <table width='100%' class='data_grid'>
+             <thead>
+                 <tr>
+                     <td colspan='10' style='padding: 6px'>
+                         <strong>[% l("Fines") %]</strong>
+                     </td>
+                 </tr>
+                 <tr>
+                     <td>[% l("Title") %]</td>
+                     <td>[% l("Author") %]</td>
+                     <td>[% l("Checkout Date") %]</td>
+                     <td>[% l("Due Date") %]</td>
+                     <td>[% l("Date Returned") %]</td>
+                     <td>[% l("Balance Owed") %]</td>
+                     <td nowrap="nowrap" style="white-space:nowrap;">
 -                            title="[% l('Pay this fine') %]" name="xact" value="[% f.xact.id %]" />
++                        <input id="pay_fines_box1" checked="checked"
++                            type="checkbox" onchange="select_all_checkboxes('xact', this.checked)"
++                            title="[% l('Click to (un)select all fines') %]" />
+                         <label for="pay_fines_box1">[% l('Pay Fines') %]</label>
+                     </td>
+                 </tr>
+             </thead>
+             <tbody id='myopac_circ_trans_tbody'>
+                 [% FOR f IN ctx.fines.circulation;
+                     attrs = {marc_xml => f.marc_xml};
+                     IF f.marc_xml;
+                         PROCESS get_marc_attrs args=attrs;
+                     ELSIF f.xact.reservation;
+                         attrs.title = f.xact.reservation.target_resource_type.name;
+                     END %]
+                 <tr id='myopac_circ_trans_row'>
+                     <td>
+                         [% recid = f.xact.circulation.target_copy.call_number.record.id || f.xact.reservation.target_resource_type.record.id;
+                         IF recid; %]
+                         <a href="[% ctx.opac_root %]/record/[% recid %]">[% attrs.title %]</a>
+                         [% ELSE %]
+                         [% attrs.title %]
+                         [% END %]
+                     </td>
+                     <td>
+                         <a href="[% ctx.opac_root %]/results?qtype=author&amp;query=[% attrs.author | replace('[,\.:;]', '') | url %]">[% attrs.author %]</a>
+                     </td>
+                     <td name='myopac_circ_trans_start'>
+                         [% ts = f.xact.circulation.xact_start || f.xact.reservation.start_time || 0;
+                         IF ts;
+                             date.format(ctx.parse_datetime(ts), DATE_FORMAT);
+                         END %]
+                     </td>
+                     <td name='myopac_circ_trans_due'>
+                         [% ts = f.xact.circulation.due_date || f.xact.reservation.end_time || 0;
+                         IF ts;
+                             date.format(ctx.parse_datetime(ts), DATE_FORMAT);
+                         END %]
+                     </td>
+                     <td name='myopac_circ_trans_finished'>
+                         [%  ts = f.xact.circulation.checkin_time || f.xact.reservation.return_time || 0;
+                             IF ts;
+                                 date.format(ctx.parse_datetime(ts), DATE_FORMAT);
+                             ELSE %]
+                             <!-- XXX TODO fines aren't really accruing
+                                 if circ has hit maxfines. more clarity
+                                 here? -->
+                             <span class="red">[% l('(fines accruing)') %]</span>
+                         [%  END %]
+                     </td>
+                     <td>
+                         <strong class="red">
+                             [% money(f.xact.balance_owed) %]
+                         </strong>
+                     </td>
+                     <td>
+                         <input type="checkbox" checked="checked" 
 -                            type="checkbox"
++                            title="[% l('Pay this fine') %]" name="xact"
++                            value="[% f.xact.id %]" />
+                     </td>
+                 </tr>
+                 [% END %]
+             </tbody>
+         </table>
+     </div>
+     [% END %]
+     [% IF ctx.fines.grocery.size > 0 %]
+     <!-- Table for all non-circulation transactions -->
+     <div id='myopac_trans_div'>
+         <br/>
+         <hr class='opac-auto-013'  color="#dcdbdb" />
+         <br/>
+         <table width='100%' class='data_grid data_grid_center'
+             id='myopac_trans_table'>
+             <thead>
+                 <tr>
+                     <td colspan='8' style='padding: 6px'>
+                         <b>[% l("Other Fees") %]</b>
+                     </td>
+                 </tr>
+                 <tr>
+                     <td width='16%'>[% l("Transaction Start Time") %]</td>
+                     <td width='16%'>[% l("Last Payment Time") %]</td>
+                     <td width='16%'>[% l("Initial Amount Owed") %]</td>
+                     <td width='16%'>[% l("Total Amount Paid") %]</td>
+                     <td width='16%'>[% l("Balance Owed") %]</td>
+                     <td width='16%'>[% l("Billing Type") %]</td>
+                     <td width='4%' align="center" nowrap="nowrap"
+                         style="white-space:nowrap;">
+                         <input id="pay_fines_box2" checked="checked"
 -                            name="xact" value="[% f.xact.id %]" />
++                            type="checkbox" onchange="select_all_checkboxes('xact_misc', this.checked)"
+                             title="[% l('Click to (un)select all fines') %]" />
+                         <label for="pay_fines_box2">[% l("Pay Fines") %]</label>
+                     </td>
+                 </tr>
+             </thead>
+             <tbody id='myopac_trans_tbody'>
+                 [% FOR f IN ctx.fines.grocery %]
+                 <tr id='myopac_trans_row'>
+                     <td>[% date.format(
+                             ctx.parse_datetime(f.xact.xact_start),
+                             DATE_FORMAT
+                     ) %]</td>
+                     <td>
+                         [%  IF f.xact.last_payment_ts;
+                                 date.format(
+                                     ctx.parse_datetime(
+                                         f.xact.last_payment_ts
+                                     ), DATE_FORMAT
+                                 );
+                             END %]
+                     </td>
+                     <td>[% money(f.xact.total_owed) %]</td>
+                     <td>[% money(f.xact.total_paid) %]</td>
+                     <td class="red">
+                         <strong>
+                             [% money(f.xact.balance_owed) %]
+                         </strong>
+                     </td>
+                     <td>[% f.xact.last_billing_type %]</td>
+                     <td>
+                         <input type="checkbox" title='[% l("Pay this fine") %]'
++                            name="xact_misc" value="[% f.xact.id %]"
++                            checked="checked" />
+                     </td>
+                 </tr>
+                 [% END %]
+             </tbody>
+         </table>
+     </div>
+     [% END %]
+     [% UNLESS ctx.fines.grocery.size OR ctx.fines.circulation.size %]
+     <div>[% l('You have no current fines.') %]</div>
+     [% ELSE %]
+     <div class="text-right pad-top-ten">
+         <input type="image"
+             alt="[% l('Pay selected fines') %]"
+             title="[% l('Pay selected fines') %]"
+             onmouseover="this.src='[% ctx.media_prefix %]/images/pay-fines-btn-hover.png';"
+             onmouseout="this.src='[% ctx.media_prefix %]/images/pay-fines-btn.png';"
+             src="[% ctx.media_prefix %]/images/pay-fines-btn.png" />
+     </div>
+     [% END %]
+ </form>
+ [% END %]
index 0000000,1992181..ac68b6e
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,44 +1,47 @@@
 -                [% ctx.payment_response.desc %]
+ [%  PROCESS "default/opac/parts/header.tt2";
+     PROCESS "default/opac/parts/misc_util.tt2";
+     WRAPPER "default/opac/parts/myopac/base.tt2";
+     myopac_page = "main";
+     myopac_main_page = "pay" %]
+ <div id="myopac_summary_div">
+     [% IF ctx.payment_response.textcode %]
+         <div class="payment-error">
+             <span title="[% ctx.payment_response.textcode %]">
++                [% ctx.payment_response.desc || ctx.payment_response.textcode %]
+             </span><br />
++            [% ctx.payment_response.note %]
+             [% ctx.payment_response.payload.error_message %]
+         </div>
+         <p>
+             <a href="[% ctx.opac_root %]/myopac/main"
+                 onclick="history.go(-1); return false;">[% l('Go back') %]</a>
+             [% l('to try again or to cancel this payment attempt.') %]
+         </p>
+     [% ELSE %]
+         <p><big>[% l('Your payment has been approved.') %]</big></p>
+         [% IF ctx.printable_receipt.template_output;
+             print_args = [];
+             FOR p IN ctx.payment_response.payments;
+                 print_args.push('payment=' _ p);
+             END %]
+         <p>[ <a href="[% ctx.opac_root %]/myopac/receipt_print?[% print_args.join('&amp;') %]"
+             target="_egrecpt"
+             onclick="try { print_node('printable-receipt'); } catch (e) { window.print(); } return false;">[% l('Print receipt') %]</a> ]</p>
+         <tt id="printable-receipt">
+             [% ctx.printable_receipt.template_output.data %]
+         </tt>
+         [% ELSE %]
+         <div class="payment-error">
+             [% l(
+                 'Error creating receipt: [_1]',
+                     (ctx.printable_receipt.textcode ? ctx.printable_receipt.textcode _ ' / ' _ ctx.printable_receipt.desc : 0) ||
+                     ctx.printable_receipt.error_output.data ||
+                     l('No receipt data returned from server')
+                 ) %]
+         </div>
+         [% END %]
++        <p>[ <a href="[% ctx.opac_root %]/myopac/main">[%
++            l("Back to Account Summary") %]</a> ]</p>
+     [% END %]
+ </div>
+ [% END %]
index 0000000,c10d5a2..52534d2
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,169 +1,187 @@@
 -    <form action="[% ctx.opac_root %]/myopac/main_pay" method="POST"
 -        onsubmit="return confirm('[% l("Are you sure you are ready to charge [_1] to your credit card?", money(ctx.fines.balance_owed)) %]');">
+ [%  PROCESS "default/opac/parts/header.tt2";
+     PROCESS "default/opac/parts/misc_util.tt2";
+     WRAPPER "default/opac/parts/myopac/main_base.tt2";
+     myopac_page = "main";
+     myopac_main_page = "payment_form";
++
++    last_chance = CGI.param("last_chance");
++
+ %]
+ [% IF ctx.fines.balance_owed <= 0 %]
+ <div>
+     [% l("You either have no fines to pay or you have selected fines whose " _
+         "total is non-positive.  We cannot process non-positive amounts.") %]
+ </div>
+ [% ELSE %]
+ <div id="pay_fines_now">
 -                        [% l('Selected fines you are paying for:') %]
 -                        <table cellpadding="0" cellspacing="5" border="0">
++    [% IF last_chance %]
++    <p><big>[% l("Are you sure you are ready to charge [_1] to your credit card?", money(ctx.fines.balance_owed)) %]</big></p>
++    <form action="[% ctx.opac_root %]/myopac/main_pay" method="POST">
++        [% FOR k IN CGI.Vars;
++            NEXT UNLESS k %]
++        <input type="hidden" name="[% k | html %]" value="[% CGI.param(k) | html %]" />
++        [% END %]
++        <input type="submit" value="[% l('Submit Payment') %]" />
++        <input type="reset" value="[% l('Cancel') %]"
++            onclick="history.go(-1);" />
++    [% ELSE %]
++    <form method="POST">
++        <input type="hidden" name="last_chance" value="1" />
+         [% FOR xact IN CGI.param('xact') %]
+         <input type="hidden" name="xact" value="[% xact | html %]" />
+         [% END %]
++        [% FOR xact IN CGI.param('xact_misc') %]
++        <input type="hidden" name="xact_misc" value="[% xact | html %]" />
++        [% END %]
++
+         <table>
+             <tbody>
+                 <tr>
+                     <td colspan='2'><strong>[% l('Billing Information') %]</strong></td>
+                     <td rowspan='13' valign='top'>
 -                                NEXT IF CGI.param('xact').size &&
 -                                    !CGI.param('xact').grep(f.xact.id).size %]
++                        <p>[% l('Selected fines you are paying for:') %]</p>
++                        <table cellpadding="0" cellspacing="0" border="0" class="myopac_payments_table">
+                             <thead>
+                                 <tr>
+                                     <th>[% l('Name') %]</th>
+                                     <th>[% l('Amount') %]</th>
+                                 </tr>
+                             </thead>
+                             <tbody>
+                             [%
+                             FOR f IN ctx.fines.circulation;
+                                 NEXT IF CGI.param('xact').size &&
+                                     !CGI.param('xact').grep(f.xact.id).size;
+                                 attrs = {marc_xml => f.marc_xml};
+                                 IF f.marc_xml;
+                                     PROCESS get_marc_attrs args=attrs;
+                                 ELSIF f.xact.reservation;
+                                     attrs.title = f.xact.reservation.target_resource_type.name;
+                                 END %]
+                                 <tr>
+                                     <td>[% attrs.title %]</td>
+                                     <td class="text-right">[% money(f.xact.balance_owed) %]</td>
+                                 </tr>
+                             [%
+                             END;
+                             FOR f IN ctx.fines.grocery;
 -                    <td>
 -                        <div style="position:absolute;">
 -                            <div style="position:relative;left:80px;">
 -                                <a href="#"><img
 -                                    src="[% ctx.media_prefix %]/images/question-mark.png" /></a>
 -                            </div>
 -                        </div>
 -                        [% l('Security Code') %]
 -                    </td>
++                                NEXT IF CGI.param('xact_misc').size &&
++                                    !CGI.param('xact_misc').grep(f.xact.id).size %]
+                                 <tr>
+                                     <td>[% f.xact.last_billing_type %]</td>
+                                     <td class="text-right">[% money(f.xact.balance_owed) %]</td>
+                                 </tr>
+                             [% END %]
+                             </tbody>
+                         </table>
+                         <br />
+                         <div>
+                             [% l('Total amount to pay:') %]
+                             <strong>[% money(ctx.fines.balance_owed) %]</strong>
+                         </div>
+                         <br />
+                         [% | l('<strong>', '</strong>') %]Click [_1]Cancel[_2] to go back and (un)select other fines.[% END %]
+                     </td>
+                 </tr>
+                 <tr>
+                     <td>[% l('First Name') %]</td>
+                     <td><input type="text" name="billing_first" value="[% ctx.user.first_given_name | html %]" /></td>
+                 </tr>
+                 <tr>
+                     <td>[% l('Last Name') %]</td>
+                     <td><input type="text" name="billing_last" value="[% ctx.user.family_name | html %]" /></td>
+                 </tr>
+                 <tr>
++                    <td>[% l('Email Address') %]</td>
++                    <td>
++                        <input type="text" disabled="disabled" readonly="readonly" value="[% ctx.user.email | html %]" />
++                        <a href="[% ctx.opac_root %]/myopac/update_email?return_to_referer=1">[% l("Update") %]</a>
++                    </td>
++                </tr>
++                <tr>
+                     <td>[% l('Street Address') %]</td>
+                     <td><input type="text" name="billing_address" value="[% ctx.user.billing_address.street1 _ ctx.user.billing_address.street2 | html %]" /></td>
+                 </tr>
+                 <tr>
+                     <td>[% l('City' )%]</td>
+                     <td><input type="text" name="billing_city" value="[% ctx.user.billing_address.city | html %]" /></td>
+                 </tr>
+                 <tr>
+                     <td>[% l('State or Province') %]</td>
+                     <td><input type="text" name="billing_state" value="[% ctx.user.billing_address.state | html %]" /></td>
+                 </tr>
+                 <tr>
+                     <td>[% l('ZIP or Postal Code') %]</td>
+                     <td><input type="text" name="billing_zip" value="[% ctx.user.billing_address.post_code | html %]" /></td>
+                 </tr>
+                 <tr>
+                   <td colspan='2'><strong>[% l('Credit Card Information') %]</strong></td>
+                 </tr>
+                 <!-- Technically not needed since card type is derived from the CC number
+                 <tr>
+                     <td>Type of Card</td>
+                     <td>
+                         <select name="type">
+                             <option value='VISA'>VISA</option>
+                             <option value='MasterCard'>MasterCard</option>
+                             <option value='American Express'>American Express</option>
+                         </select>
+                     </td>
+                 </tr>
+                 -->
+                 <tr>
+                     <td>[% l('Credit Card #') %]</td>
+                     <td><input type="text" name="number" maxlength="16" /></td>
+                 </tr>
+                 <tr>
 -                        <input type="submit" value="[% l('Submit Payment') %]" />
++                    <td>[% l('Security Code') %]</td>
+                     <td>
+                         <input type="text" size="4" maxlength="5" name="cvv2" />
+                     </td>
+                 </tr>
+                 <tr>
+                     <td>[% l('Exipration Month') %]</td>
+                     <td>
+                         <select name="expire_month">
+                             <option value="01">[% l("January") %]</option>
+                             <option value="02">[% l("February") %]</option>
+                             <option value="03">[% l("March") %]</option>
+                             <option value="04">[% l("April") %]</option>
+                             <option value="05">[% l("May") %]</option>
+                             <option value="06">[% l("June") %]</option>
+                             <option value="07">[% l("July") %]</option>
+                             <option value="08">[% l("August") %]</option>
+                             <option value="09">[% l("September") %]</option>
+                             <option value="10">[% l("October") %]</option>
+                             <option value="11">[% l("November") %]</option>
+                             <option value="12">[% l("December") %]</option>
+                         </select>
+                     </td>
+                 </tr>
+                 <tr>
+                     <td>[% l('Expiration Year') %]</td>
+                     <td>
+                         <select name="expire_year">
+                         [% year = date.format(date.now, '%Y');
+                         y = year;
+                         WHILE y < year + 10; # show ten years starting now %]
+                             <option value="[% y %]">[% y %]</option>
+                         [% y = y + 1; END %]
+                         </select>
+                     </td>
+                 </tr>
+                 <tr>
+                     <td colspan='2' align="center">
++                        <input type="submit" value="[% l('Next') %]" />
+                         <input type="reset" value="[% l('Cancel') %]"
+                             onclick="history.go(-1);" />
+                     </td>
+                 </tr>
+                 [% INCLUDE "default/opac/parts/myopac/main_refund_policy.tt2" %]
+             </tbody>
+         </table>
++    [% END %]
+     </form>
+ </div>
+ [% END %]
+ [% END %]
index 0000000,83e25f3..0a3b192
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,51 +1,55 @@@
 -    <table id='myopac_payments_table' width='100%' class='data_grid'>
+ [%  PROCESS "default/opac/parts/header.tt2";
+     PROCESS "default/opac/parts/misc_util.tt2";
+     WRAPPER "default/opac/parts/myopac/main_base.tt2";
+     myopac_page = "main";
+     myopac_main_page = "payments";
+     limit = ctx.payment_history_limit;
+     offset = ctx.payment_history_offset;
+ %]
+ <div>
+     <div class="header_middle">
+         <span class="float-left">[% l('Payments History') %]</span>
+         <span class='float-left' style='padding-left: 10px;'>
+             <a href='main_payments?limit=[% limit %]&amp;offset=[% offset - limit %]'
+                 [% IF offset == 0 %] class='invisible' [% END %]><span class="nav_arrow_fix">&#9668;</span>[% l('Previous') %]</a>
+             [%# TODO: get total to prevent paging off then end of the list.. %]
+             <a href='main_payments?limit=[% limit %]&amp;offset=[% offset + limit %]'
+                [% IF ctx.payments.size < limit %] class='invisible' [% END %] >[% l('Next') %]<span class="nav_arrow_fix">&#9658;</span></a>
+         </span>
+     </div>
+     <div class="clear-both"></div>
++    [% IF ctx.payments.size %]
++    <table class='myopac_payments_table data_grid' width='100%'>
+         <thead><tr>
+             <th>[% l('Payment Date') %]</th>
+             <th>[% l('Payment For') %]</th>
+             <th>[% l('Amount') %]</th>
+             <th>[% l('Receipt') %]</th> 
+         </tr></thead>
+         <tbody>
+             [% FOR payment IN ctx.payments %]
+             <tr>
+                 <td>[% date.format(ctx.parse_datetime(payment.mp.payment_ts), DATE_FORMAT) %]</td>
+                 <td>[% (payment.xact_type == 'grocery') ? payment.last_billing_type : payment.title %]</td>
+                 <td>[% money(payment.mp.amount) %]</td>
+                 <td>
+                     <form action="[% ctx.opac_root %]/myopac/receipt_print" method="POST">
+                         <input type="hidden" name="payment" value="[% payment.mp.id %]" />
+                         <input type="submit" value="[% l('Print') %]" />
+                     </form>
+                     <form action="[% ctx.opac_root %]/myopac/receipt_email" method="POST">
+                         <input type="hidden" name="payment" value="[% payment.mp.id %]" />
+                         <input type="submit" value="[% l('Email') %]" />
+                     </form>
+                 </td>
+             </tr>
+             [% END %]
+         </tbody>
+     </table>
++    [% ELSE %]
++    <div>[% l('You have no historical payments to display.') %]</div>
++    [% END %]
+ </div>
+ [% END %]
index 0000000,371f7df..51acccb
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,15 +1,19 @@@
+ [%  PROCESS "default/opac/parts/header.tt2";
+     PROCESS "default/opac/parts/misc_util.tt2";
+     WRAPPER "default/opac/parts/myopac/base.tt2";
+     myopac_page = "prefs"  %]
+     [% IF ctx.email_receipt_result; # result should be undef on success %]
+     <div class="payment-error">
+         [% l('Error preparing receipt:') %]
+         <span title="[% ctx.email_receipt_result.textcode %]">
+             [% ctx.email_receipt_result.desc %]
+         </span>
+     </div>
+     [% ELSE %]
+     <div>[% l('Your receipt will be emailed to [_1]', ctx.user.email) %]</div>
+     [% END %]
++    <p>
++        [ <a href="[% ctx.opac_root %]/myopac/main_payments">[%
++            l("Back to Payments History") %]</a> ]
++    </p>
+ [% END %]
index 0000000,0ee7b12..766f9b5
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,22 +1,25 @@@
+ [%# sic! no wrapper %]
+ <html>
+     <head>
+         <title>[% l('Receipt') %]</title>
+     </head>
+     <body onload="if (document.getElementById('printable-receipt')) window.print();">
+         [% IF ctx.printable_receipt.template_output %]
+         <tt id="printable-receipt">
+             [% ctx.printable_receipt.template_output.data %]
+         </tt>
+         [% ELSE %]
+         <div class="payment-error">
+             [% l(
+                 'Error preparing receipt: [_1]',
+                     (ctx.printable_receipt.textcode ? ctx.printable_receipt.textcode _ ' / ' _ ctx.printable_receipt.desc : 0) ||
+                     ctx.printable_receipt.error_output.data ||
+                     l('No receipt data returned from server')
+                 ) %]
+         </div>
+         [% END %]
++        <hr />
++        <p>[ <a href="[% ctx.opac_root %]/myopac/main_payments">[%
++            l("Back to Payments History") %]</a> ]</p>
+     </body>
+ </html>
index 0000000,2261c29..a6e62ec
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,23 +1,26 @@@
+ [%  PROCESS "default/opac/parts/header.tt2";
+     PROCESS "default/opac/parts/misc_util.tt2";
+     WRAPPER "default/opac/parts/myopac/base.tt2";
+     myopac_page = "prefs"  %]
+ <div id='myopac_summary_div' style="padding:0px;">
+ [% IF ctx.invalid_email %]
+     <div id='account-update-email-error'>
+         [% | l(ctx.invalid_email) %]
+         The email address "<b>[_1]</b>" is invalid.  Please try a different email address.
+         [% END %]
+     </div>
+ [% END %]
+ <form method='POST' id='account-update-email'>
++    [% IF CGI.param("return_to_referer") %]
++    <input type="hidden" name="redirect_to" value="[% ctx.referer | html %]" />
++    [% END %]
+     <table> 
+         <tr><td>[% l('Current Email') %]</td><td>[% ctx.user.email | html %]</td></tr>
+         <tr><td>[% l('New Email') %]</td><td><input type='text' name='email' value='[% ctx.invalid_email | html %]'/></td></tr>
+         <tr><td colspan='2' align='center'><input type='submit'/></td></tr>
+     </table>
+ </form>
+ [% END %]
index 0000000,6325c0a..ddb4260
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,33 +1,44 @@@
 -<tr[% IF loop.first %] id="adv_global_row"[% END %]>
+ [%
+     contains_options = [
+         {value => 'contains', label => l('Contains')},
+         {value => 'nocontains', label => l('Does not contain')},
+         {value => 'phrase', label => l('Contains phrase')},
+         {value => 'exact', label => l('Matches exactly')}
+     ];
+     contains = CGI.param('contains');
+     queries = CGI.param('query');
++    bools = CGI.param('bool') || ['and' x 3];
+     qtypes = CGI.param('qtype') || ['keyword' x 3];
+     FOR qtype IN qtypes;
+         c = contains.shift;
++        b = bools.shift;
+         q = queries.shift; %]
 -            [% FOR o IN contains_options;
 -                |l(o.value, o.label) -%]
 -            <option value="[_1]"[% c == o.value ? ' selected="selected"' : '' %]>[_2]</option>
 -            [% END; END %]
++
++<!-- tag the second row so the bool column won't be hidden -->
++<tr[% IF loop.index == 1 %] id="adv_global_row"[% END %]>
+     <td align='left' width='100%' nowrap='nowrap'>
++
++        <!-- bool selector.  hide for first row.  safe to ignore first bool value in form submission -->
++        <select name='bool' style='width: auto' [% IF loop.first %] class='invisible' [% END %]>
++            <option value='and' [% b == 'and' ? 'selected="selected"' : '' %]>[% l('And') %]</option>
++            <option value='or' [% b == 'or' ? 'selected="selected"' : '' %]>[% l('Or') %]</option>
++        </select>
++
++        <!-- keyword, subject, etc. selector -->
+         <span class="opac-auto-078">
+             [% INCLUDE "default/opac/parts/qtype_selector.tt2"
+                 query_type=qtype %]
+         </span>
++
+         <select name='contains' style='margin-right: 7px;'>
 -            onclick='var row = this.parentNode.parentNode;var tbody = row.parentNode; if( tbody.getElementsByTagName("tr").length > 2 ) row.parentNode.removeChild(row);'><img src="[% ctx.media_prefix %]/images/adv_row_close_btn.png" /></a>
++            [% FOR o IN contains_options; -%]
++            <option value="[% o.value %]" [% c == o.value ? ' selected="selected"' : '' %]>[% o.label %]</option>
++            [% END %]
+         </select>
+         <input type='text' size='18' name='query' value="[% q | html %]" x-webkit-speech />
+         <a href="javascript:;" class="row-remover"
+             title="[% l('Remove row') %]" alt="[% l('Remove row') %]"
 -[%      i = i + 1;
 -    END %]
++            onclick='return killRowIfAtLeast(2, this);'><img src="[% ctx.media_prefix %]/images/adv_row_close_btn.png" /></a>
+     </td>
+ </tr>
++[% END %]
index 0000000,788b571..5762ead
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,204 +1,204 @@@
 -                            <a href="javascript:;" id="myopac_new_global_row" onclick='addSearchRow();'>Add Search Row</a>
+ <form id="adv_search_form" action="[% ctx.opac_root %]/results" method="GET">
+ <table id='adv_global_search' class='data_grid data_grid_center' width='100%'>
+     <tr style='border-bottom: none;'>
+         <!-- Contains the user-addable(?) rows to define search class, containment and text -->
+         <td valign='top' class='opac-auto-012'>
+             <table width='100%' id='adv_global_input_table'>
+                 <thead>
+                     <tr>
+                         <td>
+                             <div style="width:100%;" class="header_middle">
+                                 [% l("Search Input") %]
+                             </div>
+                         </td>
+                     </tr>
+                 </thead>
+                 <tbody id='adv_global_tbody'>
+                     [% INCLUDE "default/opac/parts/advanced/global_row.tt2" %]
+                     <!-- add a new row -->
+                     <tr id='adv_global_addrow'>
+                         <td align='left' style="padding-top:7px;">
 -          <div style="width:100%;" class="header_middle">Search Filters</div>
++                            <a href="javascript:;" id="myopac_new_global_row" onclick='addSearchRow();'>[% l('Add Search Row') %]</a>
+                         </td>
+                     </tr>
+                 </tbody>
+             </table>
+         </td>
+     </tr>
+     <tr>
+         <td align='top'>
++          <div style="width:100%;" class="header_middle">[% l('Search Filters') %]</div>
+           <table cellpadding='10' cellspacing='0' border='0'><tr>
+             <td valign='top'>
+                 <strong>[% l("Item Type") %]</strong><br />
+                 [%  INCLUDE "default/opac/parts/coded_value_selector.tt2"
+                         attr=["mattype", "item_type"] multiple="multiple" size="4"
+                         id="adv_global_item_type_basic" %]
+             </td>
+             <td valign='top'>
+                 <strong>[% l("Language") %]</strong><br />
+                 [%  INCLUDE "default/opac/parts/coded_value_selector.tt2"
+                         attr="item_lang" multiple="multiple" size="4" %]
+             </td>
+             <td valign='top'>
+                 <strong>[% l("Audience") %]</strong><br />
+                     [% INCLUDE "default/opac/parts/coded_value_selector.tt2"
+                         attr="audience" id="adv_global_audience_basic" 
+                         multiple="multiple" size="4" %]
+                 </select>
+                     <!--<a id='adv_global_audience_link_adv' class='classic_link adv_adv_link'
+                         href='javascript:void(0);' onclick='
+                         hideMe($("adv_global_audience_basic"));
+                         unHideMe($("adv_global_audience"));
+                         hideMe(this);
+                         unHideMe($("adv_global_audience_link_basic"));
+                         '>[% l("Advanced") %]</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);'>[% l("Basic") %]</a>-->
+             </td>
+             <td valign='top'>
+             <strong>[% l("Sort Results") %]</strong>
+               <table class='opac-auto-017'>
+                 <tr>
+                     <td align='center' width='100%'>
+                         [% INCLUDE "default/opac/parts/filtersort.tt2"
+                             value=CGI.param('sort') %]
+                     </td>
+                 </tr>
+               </table>
+             </td>
+           </tr></table>
+         </td>
+     </tr>
+     <tr>
+         <td colspan="2">
+             <table cellpadding='10' cellspacing='0' border='0'>
+                 <tbody>
+                     <tr>
+                         <td valign='top'>
+                             <strong>[% l("Search Library") %]</strong><br />
+                             [% PROCESS "default/opac/parts/org_selector.tt2";
+                                 PROCESS build_org_selector name='loc' value=loc %]
+                             <div style="position:relative;top:7px;">
+                                 <input type='checkbox' name="modifier"
+                                 value="available"[% CGI.param('modifier').grep('available').size ? ' checked="checked"' : '' %]
+                                     id='opac.result.limit2avail' />
+                                 <label style="position:relative;top:-2px;"
+                                     for='opac.result.limit2avail'>
+                                     [% l("Limit to Available") %]</label>
+                             </div>
+                         </td>
+                         <td valign='top'>
+                             <strong>[% l("Publication Year") %]</strong><br />
+                             <select id='adv_global_pub_date_type' name='pubdate' onchange='
+                                 if(this.selectedIndex == 3)
+                                     unHideMe($("adv_global_pub_date_2_span"));
+                                 else
+                                     hideMe($("adv_global_pub_date_2_span"));'>
+                                     [%  FOR opt IN [
+                                             {"code" => "is", "label" => l("Is")},
+                                             {"code" => "before", "label" => l("Before")},
+                                             {"code" => "after", "label" => l("After")},
+                                             {"code" => "between", "label" => l("Between")}
+                                         ];
+                                             |l(opt.code, opt.label) %]
+                                         <option value="[_1]"[% CGI.param('pubdate') == opt.code ? ' selected="selected"' : '' %]>[_2]</option>
+                                     [%  END; END %]
+                             </select>    
+                             <div style='margin-top:5px;'>
+                                 <input id='adv_global_pub_date_1' name='date1' type='text' size='4' maxlength='4' value="[% CGI.param('date1') | html %]" />
+                                 <span id='adv_global_pub_date_2_span' class='[% CGI.param("pubdate") == "between" ? "" : "hide_me" %]'>
+                                    [% l("and") %] <input name='date2' id='adv_global_pub_date_2' type='text' size='4' maxlength='4' value="[% CGI.param('date2') | html %]" />
+                                 </span>
+                             </div>
+                         </td>
+                     </tr>
+                     <!-- copy location selector -->
+                     <tr id='adv_copy_location_filter_row' class='hide_me'>
+                         <td align='right'>[% l("Shelving Location") %]</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 class='border_4_2'>
+         <td align="left" colspan='2'>
+             <input type="image" src="[% ctx.media_prefix %]/images/search_btn.gif"
+             alt="[% l('Search') %]" class='pointer' />
+             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+             <a href="javascript:document.getElementById('adv_search_form').reset();"
+                 id="adv_reset">[% l('Reset Form') %]</a>
+         </td>
+     </tr>
+ </table>
+ <input type="hidden" name="_adv" value="1" />
+ </form>
+ <div id='adv_quick_search_sidebar' class='sidebar_chunk hide_me'> 
+     <div id='adv_quick_search'>
+         <div class='adv_quick_search color_4'><b>[% l("Quick Search") %]</b></div>
+         <div style='margin-top: 8px;'>
+             <table><tbody><tr>
+                 <td>
+                     <select id='adv_quick_type'>
+                         <option value='isbn'>[% l("ISBN") %]</option>
+                         <option value='issn'>[% l("ISSN") %]</option>
+                         <option value='cn'>[% l("Call Number") %]</option>
+                         <option value='lccn'>[% l("LCCN") %]</option>
+                         <option value='tcn'>[% l("TCN") %]</option>
+                         <option value='barcode'>[% l("Item Barcode") %]</option>
+                     </select>
+                 </td><td>
+                     <input type='text' id='adv_quick_text' size='16' />
+                 </td>
+             </tr></tbody></table>
+         </div>
+         <div style='margin-top: 8px;' class='adv_quick_search_submit'>
+             <!-- XXX TODO make a real form, and make a real submitter (quick
+             submit, FKA advGenericSearch() -->
+             <img src="[% ctx.media_prefix %]/images/search_btn.gif"
+                 alt="[% l('Search') %]" id="adv_quick_submit" class='pointer' />
+         </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>[% l("MARC Expert Search") %]</b></div>
+     <table style='margin: 3px; width: 100%;' id='adv_sdbar_table'
+         class='border_4_3'>
+         <tbody>
+             <tr>
+                 <td align="right">[% l("Tag:") %]</td>
+                 <td align="left"><input name='advanced.marc.tag' maxlength='3' size='3' /></td>
+                 <td align="right">[% l("Subfield:") %]</td>
+                 <td align="left"><input name='advanced.marc.subfield' maxlength='1' size='1' /></td>
+             </tr>
+             <tr>
+                 <td align="right">[% l("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'>[% l("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();'>[% l("Add Row") %]</a>
+         <!-- XXX TODO make a real form, and make a real submitter (FKA
+         advMARCRun()) -->
+         <img alt="Search" src="[% ctx.media_prefix %]/images/search_btn.gif" class='pointer' />
+     </div>
+ </div>
index 0000000,9c64e55..d58b3f5
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,20 +1,20 @@@
 -    <script>try { chili_init(); } catch(E) {}</script>
+ <!-- Set up the chilifresh account information and load the JS -->
+ [%  IF ENV.OILS_CHILIFRESH_URL AND ENV.OILS_CHILIFRESH_ACCOUNT 
+             AND (ctx.page == 'rresult' OR ctx.page == 'record');
+         chili_url = ENV.OILS_CHILIFRESH_URL;
+         IF CGI.https AND ENV.OILS_CHILIFRESH_HTTPS_URL;
+             chili_url = ENV.OILS_CHILIFRESH_HTTPS_URL;
+         END; 
+ %]
+     <input type="hidden" id="chilifresh_account" name="chilifresh_account" value="[% ENV.OILS_CHILIFRESH_ACCOUNT %]"/>
+     <!--
+     <input type="hidden" id="chilifresh_profile" name="chilifresh_profile" value="[% ENV.OILS_CHILIFRESH_PROFILE %]"/>
+     -->
+     <input type="hidden" id="chilifresh_version" name="chilifresh_version" value="onsite_v1" />
+     <input type="hidden" id="chilifresh_type" name="chilifresh_type" value="search" />
+     <script type="text/javascript" src="[% chili_url %]"></script>
++    <script>try { setTimeout(chili_init, 0); } catch(E) {}</script>
+ [% END %]
index 0000000,114b4c3..f43d115
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,55 +1,23 @@@
 -    USE EGI18N;
+ [%- USE money = format(l('$%.2f'));
+     USE date;
+     USE CGI = CGI_utf8;
 -
 -
 -[%# XXX KCLS Note... Remove me soon...
 -BEGIN;
 -INSERT INTO config.record_attr_definition (name, label, tag, sf_list)
 -    VALUES ('mattype', 'Material Type', '998', 'd');
 -INSERT INTO config.coded_value_map (ctype, code, value)
 -    VALUES
 -        ('mattype', 'a', 'Book'),
 -        ('mattype', 'i', 'Book on cassette'),
 -        ('mattype', 'n', 'Book on CD'),
 -        ('mattype', 'x', 'Download music'),
 -        ('mattype', 'y', 'Download video'),
 -        ('mattype', 'h', 'DVD'),
 -        ('mattype', 'w', 'eBook - Audio'),
 -        ('mattype', 'v', 'eBook - Text'),
 -        ('mattype', 'e', 'Equipment'),
 -        ('mattype', 'f', 'Films'),
 -        ('mattype', 'o', 'Kit'),
 -        ('mattype', 'q', 'Large print'),
 -        ('mattype', 'b', 'Magazine'),
 -        ('mattype', 'd', 'Microform'),
 -        ('mattype', 'k', 'Music cassette'),                                                                                                                                                              ('mattype', 'j', 'Music CD'),
 -        ('mattype', 'l', 'Music LP'),                                                                                                                                                                    ('mattype', 'p', 'Newspaper'),
 -        ('mattype', 't', 'Online'),                                                                                                                                                                      ('mattype', 'u', 'Player'),
 -        ('mattype', 'c', 'Printed music / scores'),                                                                                                                                                      ('mattype', '2', 'Read along with cassette'),
 -        ('mattype', '5', 'Read along with CD'),                                                                                                                                                          ('mattype', 'm', 'Software'),
 -        ('mattype', 'g', 'Video'),                                                                                                                                                                       ('mattype', 'r', '3-D Object'),
 -        ('mattype', 'z', 'Map'),                                                                                                                                                                         ('mattype', 's', 'Slide set');
 -COMMIT;
 -%]
 -
+     USE POSIX;
+     SET DATE_FORMAT = l('%m/%d/%Y');
+     # Don't wrap in l() here; do that where this format string is actually used.
+     SET HUMAN_NAME_FORMAT = '[_1] [_2] [_3] [_4] [_5]';
+     # x and y are artifacts of using <input type="image" /> tags instead of
+     # true submit buttons, and their values are never used. page is used, but
+     # currently none of the use cases for rendering the query_string back
+     # into page output call for propagating the value of the page variable.
+     query_string = CGI.query_string |
+         replace(';x=\d+','') | replace(';y=\d+','') | replace(';page=\d*', '') |
+         replace(';', '&') | replace('&', '&amp;');
+     propagator = '?' _ query_string;
+     is_advanced = CGI.param("_adv").size;
++    is_special = CGI.param("_special").size;
+ %]
index 0000000,4f7771d..b69c90b
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,24 +1,30 @@@
+ <!-- JS imports, etc.  -->
+ <script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/default/opac/simple.js"></script>
+ [% IF ctx.is_staff %]
+ <script type="text/javascript" src="[% ctx.media_prefix %]/js/ui/default/opac/staff.js"></script>
+ [% END %]
++[% IF ENV.OILS_NOVELIST_URL AND ctx.page == 'record';
++    url = ENV.OILS_NOVELIST_URL;
++    IF CGI.https; url = url.replace('^http:', 'https:'); END; %]
++<script type='text/javascript' id='EIT' src='[% url %]'></script>
++[% END %]
++
+ <!-- Google Analytics -->
+ <script type="text/javascript">
+ /* uncomment when ready */ /*
+   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 -->
index 0000000,b30d47f..15814ba
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,156 +1,156 @@@
 -                                    <input type="checkbox" name="persist" /> [% l('Remember Me?') %]
+ <!-- TODO: MOVE INTO SEPARATE FORGOT-PASSWORD PAGE 
+ <div class="hide_me">
+       <div class='login_text color_1' style='padding: 4px; text-align: center;'>
+               <span>[% l("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="#">Submit</a> &nbsp;
+     <a href="#">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>[% l("Password") %]</b></td></tr>
+     </thead>
+     <tbody>
+         <tr>
+             <td colspan='2' style='padding:10px;'>
+                 [% l("This appears to be the first time you have logged in.  You will need to change your password.") %]
+                 [% l("The password must be at least 7 characters in length,
+  contain at least one letter (a-z/A-Z),
+  and contain at least one number.") %]
+             </td>
+         </tr>
+         <tr>
+             <td>[% l("Enter your current password") %]</td>
+             <td><input type='password' id='change_pw_current'/></td>
+         </tr>
+         <tr>
+             <td>[% l("Enter the new password") %]</td>
+             <td><input type='password' id='change_pw_1'/></td>
+         </tr>
+         <tr>
+             <td>[% l("Re-type the new password for verification") %]</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='[% l("Update Password") %]'  id='change_pw_button'/>
+                 </span>
+             </td>
+         </tr>
+     </tbody>
+ </table>
+ <span id='pw_no_match' class='hide_me'>[% l("Passwords do not match") %]</span>
+ <span id='pw_update_successful' class='hide_me'>[% l("Password successfully updated") %]</span>
+ <span id='pw_not_strong' class='hide_me'>
+     [% l("The password provided is not strong enough.") %]
+     [% l("The password must be at least 7 characters in length, contain at least one letter (a-z/A-Z), and contain at least one number.") %]
+ </span>
+  ^== TODO: MOVE INTO SEPARATE FORGOT-PASSWORD PAGE  -->
+ [% IF ctx.login_failed_event %]
+ <div id='login-failed-message'>
+ [%
+     IF ctx.login_failed_event.textcode == 'PATRON_CARD_INACTIVE';
+         l("The barcode used to login is marked as inactive.  Please contact your local library.");
+     ELSIF ctx.login_failed_event.textcode == 'PATRON_INACTIVE';
+         l("This account has been deactivated.  Please contact your local library.");
+     ELSE;
+         l("Login failed. The username or password provided was not valid.  
+             Ensure Caps-Lock is off and try again or contact your local library.");
+     END;
+ %]
+ </div>
+ [% END %]
+ <div>
+     <div style="height:20px;"></div>
+     <form method='POST'>
+         <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>[% l('Log in to Your Account') %]</h1>
+                                 [% l('Please enter the following information:') %]
+                                 <br /><br />
+                             </td>
+                         </tr>
+                         <tr>
+                             <td width="42%" class="lbl1">
+                                 [% l('Library Card Number or Username') %]
+                                 <br />
+                                 <span class="lbl2">
+                                     [% l('Please include leading zeros and no spaces.') %]
+                                     <br/>
+                                     [% l('Example: 0026626051') %]
+                                 </span>
+                                 <br /><br />
+                             </td>
+                             <td width="58%" valign="top">
+                                 <div class="input_bg">
+                                     <input type="text" id="username_field" name="username"/>
+                                 </div>
+                             </td>
+                         </tr>
+                         <tr>
+                             <td colspan="2">
+                                 <div style="height:15px;"></div>
+                             </td>
+                         </tr>
+                         <tr>
+                             <td valign="top" class="lbl1">
+                                 [% l('PIN Number or Password') %]<br />
+                                 [% INCLUDE "default/opac/parts/login/password_hint.tt2" %]
+                             </td>
+                             <td valign="top">
+                                 <div class="input_bg">
+                                     <input name="password" type="password" />
+                                 </div>
+                                 <div style="padding-top:7px;">
+                                     [%
+                                         # If no redirect is offered or it's leading us back to the 
+                                         # login form, redirect the user to My Account
+                                         redirect = CGI.param('redirect_to') || ctx.referer;
+                                         IF !redirect OR redirect.match(ctx.path_info _ '$');
+                                             redirect = CGI.url('-full' => 1) _ '/opac/myopac/main';
+                                         END;
+                                         redirect = redirect  | replace('^http:', 'https:');
+                                     %]
+                                     <input type='hidden' name='redirect_to' value='[% redirect %]'/>
++                                    <input type="checkbox" name="persist" id="login_persist" /><label for="login_persist"> [% l('Stay logged in?') %]</label>
+                                 </div>
+                                 <div style="padding-top:14px;">
+                                     <input type='image' alt="[% l('Log in') %]" src="[% ctx.media_prefix %]/images/login-btn2.png" />
+                                     <!-- TODO
+                                     <a href="reset_password"
+                                         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>
+                 [% INCLUDE "default/opac/parts/login/help.tt2" %]
+             </tr>
+         </table>
+     </form>
+     <div class="clear-both"></div>
+ </div>
index 0000000,3bc2fa8..8bbc57c
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,155 +1,156 @@@
 -            IF node;
+ [% 
+     # Extract MARC fields from XML
+     #   get_marc_attrs( { marc_xml => doc } )
+     BLOCK get_marc_attrs;
+         xml = args.marc_xml;
+         args.isbn = xml.findnodes('//*[@tag="020"]/*[@code="a"]').shift.textContent;
+         args.upc = xml.findnodes('//*[@tag="024"]/*[@code="a"]').textContent;
+         args.issn = xml.findnodes('//*[@tag="022"]/*[@code="a"]').textContent;
+         args.title = xml.findnodes('//*[@tag="245"]/*[@code="a"]').textContent;
+         args.author = xml.findnodes('//*[@tag="100"]/*[@code="a"]').textContent;
+         args.publisher = xml.findnodes('//*[@tag="260"]/*[@code="b"]').textContent;
+         args.pubdate = xml.findnodes('//*[@tag="260"]/*[@code="c"]').textContent;
++        args.summary = xml.findnodes('//*[@tag="520"]/*[@code="a"]').textContent;
+         args.edition = xml.findnodes('//*[@tag="250"]/*[@code="a"]').textContent ||
+             xml.findnodes('//*[@tag="534"]/*[@code="b"]').textContent ||
+             xml.findnodes('//*[@tag="775"]/*[@code="b"]').textContent;
+         phys = xml.findnodes(
+             '//*[@tag="300"]/*[@code="a" or @code="b" or @code="c" or @code="e"]'
+         );
+         phys_content = [];
+         FOR p IN phys; phys_content.push(p.textContent); END;
+         args.phys_desc = phys_content.join("");
+         # MARC Callnumber
+         args.marc_cn = xml.findnodes('//*[@tag="092" or @tag="099"]/*').textContent;
+         # clean up the ISBN
+         args.isbn_clean = args.isbn.replace('\ .*', '');
+         args.holdings = [];
+         args.uris = [];
+         args.issns = [];
+         # we use $9 of ISBN and ISSN as a flag for e-version
+         sfx_isbn = xml.findnodes('//*[@tag="020"]/*[@code="9"]');
+         IF sfx_isbn;
+             IF sfx_isbn.textContent == "SFX";
+                 my_parent = sfx_isbn.parentNode();
+                 sfx_isbn = my_parent.findnodes('./*[@code="a"]');
+                 sfx_isbn.replace('-', '');
+                 args.resolver_isbn = sfx_isbn.replace('\ .*', '');
+             END;
+         END;
+         sfx_issn = xml.findnodes('//*[@tag="022"]/*[@code="9"]');
+         IF sfx_issn;
+             IF sfx_issn.textContent == "SFX";
+                 my_parent = sfx_issn.parentNode();
+                 sfx_issn = my_parent.findnodes('./*[@code="a"]');
+                 args.issns.push(
+                     sfx_issn.textContent.replace('[^\d\-X]', '')
+                 );
+             END;
+         END;
+         # we snag all issns if no SFX available
+         IF args.issns.size == 0;
+             FOR rawissn IN xml.findnodes('//*[@tag="022"]/*[@code="a"]');
+                 args.issns.push(
+                     rawissn.textContent.replace('[^\d\-X]', '')
+                 );
+             END;
+         END;
+         FOR volume IN xml.findnodes('//*[local-name()="volumes"]/*[local-name()="volume"]');
+             # Check volume visibility - could push this into XPath
+             vol.label = volume.getAttribute('label');
+             vol.id = volume.getAttribute('id');
+             NEXT IF volume.getAttribute('opac_visible') == 'false';
+             NEXT IF volume.getAttribute('deleted') == 'true';
+             IF vol.label == '##URI##';
+                 FOR uri IN volume.findnodes('./*[local-name()="uris"]/*[local-name()="uri"]');
+                     res.href = uri.getAttribute('href');
+                     res.link = uri.getAttribute('label');
+                     res.note = uri.getAttribute('use_restriction');
+                     args.uris.push(res);
+                 END;
+                 NEXT;
+             ELSE;
+                 copies = volume.findnodes('./*[local-name()="copies"]/*[local-name()="copy"]');
+                 FOR copy IN copies;
+                     # Check copy visibility
+                     cp.deleted = copy.getAttribute('deleted');    
+                     cp.visible = copy.getAttribute('opac_visible');
+                     NEXT IF (cp.deleted == 'true' OR cp.visible == 'false');
+                     # Iterate through all of the children to determine visibility
+                     FOR node IN cp.childNodes;
+                         NEXT IF cp.visible == 'false';
+                         vis = node.getAttribute('opac_visible');
+                         del = node.getAttribute('deleted');
+                         IF vis == 'false' or del == 'true';
+                             cp.visible = 'false';
+                         END;
+                     END;
+                     NEXT IF cp.visible == 'false';
+                     
+                     loc = copy.findnodes('./*[local-name()="location"]');
+                     circlib = copy.findnodes('./*[local-name()="circlib"]');
+                     status = copy.findnodes('./*[local-name()="status"]');
+                     holding = {
+                         label => vol.label,
+                         location => loc.textContent,
+                         library => circlib.textContent,
+                         status => status.textContent
+                         barcode => copy.getAttribute('barcode')
+                     };
+                     args.holdings.push(holding);
+                 END;
+             END;
+         END;
+         # Extract the copy count summary
+         count_type = (ctx.is_staff) ? 'staff' : 'public';
+         xpath = '//*[local-name()="counts"]/*[local-name()="count"][@type="' _ count_type _ '"]';
+         FOR node IN xml.findnodes(xpath);
+             args.copy_counts = {};
+             FOR attr IN ['count', 'available', 'unshadow', 'transcendant']; 
+                 args.copy_counts.$attr = node.getAttribute(attr);
+             END;
+         END;
+         # "mattype" == "custom marc format specifier"
+         FOR icon_style IN ['mattype', 'item_type']; 
+             node = xml.findnodes(
+                 '//*[local-name()="attributes"]/*[local-name()="field"][@name="' _ icon_style _ '"]');
++            IF node AND node.textContent;
+                 args.format_label = node.getAttribute('coded-value')
+                 args.format_icon = ctx.media_prefix _ '/images/format_icons/' _ icon_style _ '/' _ node.textContent _ '.png';
+                 LAST;
+             END;
+         END;
+     END;
+     BLOCK get_hold_status;
+         IF hold.hold.status == 4;
+             l("Available");
+             IF ahr.shelf_expire_time;
+                 l('<br/>Expires [_1]', 
+                     date.format(ctx.parse_datetime(ahr.shelf_expire_time), DATE_FORMAT));
+             END;
+         ELSIF hold.hold.estimated_wait AND hold.hold.estimated_wait > 0;
+             # estimated wait is delivered as seconds.
+             SET hwait = POSIX.ceil(hold.hold.estimated_wait / 86400);
+             l("Estimated wait: [quant,_1,day,days]", hwait);
+         ELSIF hold.hold.status == 3;
+             l("In Transit");
+         ELSIF hold.hold.status < 3;
+             l("Waiting for copy");
+         END;
+     END;
+ %]
index 0000000,2daf63a..3a203f6
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,23 +1,33 @@@
 -    BLOCK build_org_selector_options; %]
 -        <option value='[% walker.id %]' [% IF walker.id == value %] selected='selected' [% END %]>
+ [%
++    BLOCK build_org_selector_options;
++        disabled = '';
++        selected = '';
++        IF can_have_vols_only;
++            IF walker.ou_type.can_have_vols != 't';
++                disabled = 'disabled="disabled"';
++            ELSIF walker.id == value;
++                selected = 'selected="selected"';
++            END;
++        END;
++%]
++        <option value='[% walker.id %]' [% selected %] [% disabled %]>
+             [%
+                 pad = walker.ou_type.depth * 2;
+                 FOR idx IN [0..pad]; '&nbsp;'; END;
+                 walker.name;
+             %]
+         </option>
+         [%  FOR child IN walker.children;
+             PROCESS build_org_selector_options walker=child value=value;
+         END;
+     END;
+     # XXX TODO probably put this BLOCK somewhere else so it can be used widely.
+     # Org Unit Selector Widget :
+     #   PROCESS build_org_selector id='selector-id' name='selector-name'
+     BLOCK build_org_selector;
+ %]
+     <select [% IF id %] id='[% id %]' [% END %] name='[% name %]'>
+     [% PROCESS build_org_selector_options walker=(org_unit || ctx.aou_tree) value=value %]
+     </select>
+ [%  END %]
index 0000000,8f56aa5..861a987
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,347 +1,370 @@@
 -    <div id='xulholds_box' class='hide_me canvas' style='margin-top: 6px;'>
 -        <!-- XXX TODO staff will need this to work ("advanced" hold placement)
 -        later -->
 -        <center>
 -            <table class='data_grid' style='margin-top: 20px;'>
 -                <tbody>
 -                    <tr>
 -                        <td>[% l("Enter recipient barcode") %]:</td>
 -                        <td>
 -                            <input type='text' id='xul_recipient_barcode' />
 -                        </td>
 -                        <td>
 -                            <input type='submit' value='[% l("Submit") %]'
 -                                id='xul_recipient_barcode_submit' />
 -                        </td>
 -                        <td>
 -                            <input type='submit' value='[% l("Cancel") %]' />
 -                        </td>
 -                        <td>
 -                            <input type='submit'
 -                                value='[% l("Place hold for my account") %]'
 -                                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>[% l("Checking for possibility of hold fulfillment...") %]</b>
 -    </div>
+ [%  PROCESS "default/opac/parts/misc_util.tt2";
+     attrs = {marc_xml => ctx.marc_xml};
+     PROCESS get_marc_attrs args=attrs;
++
++    PROCESS "default/opac/parts/hold_error_messages.tt2";
+ %]
+ <div>
 -            [% IF ctx.hold_failed_event %]
+     <div id='holds_box' class='canvas' style='margin-top: 6px;'>
+         [% IF ctx.hold_success %]
+         <div><big><strong>[% l("Hold was successfully placed"); %]</strong></big></div>
+         [% ELSIF ctx.hold_failed %]
+         <div><big><strong>[% l("Hold was not successfully placed"); %]</strong></big></div>
 -                <em>[% ctx.hold_failed_event.desc ||
++            [% IF ctx.hold_local_block %]
++            <div>[% l("There is already a copy available at your local library.") %]</div>
++            [% ELSIF ctx.hold_failed_event || ctx.hold_local_alert %]
+         <div>
+             <strong>[% l('Problem:') %]</strong>
+             <span title="[% ctx.hold_failed_event.textcode %]">
 -                        ctx.hold_failed_event.textcode %]</em>
++                <em>[%
++                        fail_part_key = ctx.hold_failed_event.payload.fail_part;
++                        event_key = ctx.hold_failed_event.textcode;
++
++                        # display:
++                        l(FAIL_PART_MSG_MAP.$fail_part_key) ||
++                        l(EVENT_MSG_MAP.$event_key) ||
++                        l(ctx.hold_failed_event.desc) ||
+                         ctx.hold_failed_event.payload.fail_part ||
 -                You would like to place a hold on <strong><q>[_1]</q></strong> to be picked up at [_2].
 -                If this is correct, press <strong>SUBMIT</strong>.
++                        ctx.hold_failed_event.textcode ||
++                        (ctx.hold_local_alert ?
++                            l("There is already a copy available at your local library.") :
++                            l("Unknown problem")) %]</em>
+             </span>
++
++            [% IF ctx.hold_copy_available %]<p>
++            [% l('Find a copy in the shelving location, "[_1]."',
++                ctx.hold_copy_available.location) %]
++            </p>[% END %]
++
++            [% IF ctx.could_override || ctx.hold_local_alert %]
++            <p>
++                <big>[% l("You have permission to place this hold anyway.") %]</big>
++                <br />
++                [% l("Click submit below to override the system's objection and place your hold.") %]
++            </p>
++            <form method="POST">
++                <input type="hidden" type="name" name="override" value="1" />
++                [% FOR k IN ctx.orig_params.keys %]
++                <input type="hidden" name="[% k %]" value="[% ctx.orig_params.$k | html %]" />
++                [% END %]
++                <input type="image" name="submit" value="submit" title="[% l('Submit') %]"
++                    alt="[% l('Submit') %]" src="[% ctx.media_prefix %]/images/btnSubmit.png" />
++            </form>
++            [% END %]
+         </div>
+             [% END;
++        ELSIF ctx.hold_local_block;
++            l("There is already a copy available at your local library");
+         ELSE %]
+         <form method="POST">
+             <br/>
+             <input type="hidden" name="hold_target"
+                 value="[% CGI.param('hold_target') | html %]" />
+             <input type="hidden" name="hold_type"
+                 value="[% CGI.param('hold_type') | html %]" />
+             [%
+                 new_redirect_to = ctx.referer;
+                 IF new_redirect_to.match('redirect_to');
+                     new_redirect_to = 'https://' _ ctx.hostname _ ctx.opac_root _ '/home';
+                 ELSE;
+                     new_redirect_to = new_redirect_to | replace('^http:', 'https:');
+                 END;
+             %]
+             <input type="hidden" name="redirect_to"
+                 value="[% new_redirect_to | html %]" />
+             <h1>Place Hold</h1>
++            [% IF ctx.is_staff %]
++            <p class="staff-hold">
++                <input type="radio" id="hold_usr_is_requestor_not"
++                    onchange="staff_hold_usr_input_disabler(this);"
++                    name="hold_usr_is_requestor" value="0"
++                    [% IF ctx.patron_recipient; ' checked="checked"'; END %]
++                    />
++                <label for="hold_usr_is_requestor_not">
++                    [% l("Place hold for patron by barcode:") %]
++                </label>
++                <input type="text" name="hold_usr" id="hold_usr_input" value="[% ctx.patron_recipient.card.barcode %]" /><br />[%# XXX multi-barcode users? %]
++                <span>
++                    <input type="radio" id="hold_usr_is_requestor"
++                        onchange="staff_hold_usr_input_disabler(this);"
++                        name="hold_usr_is_requestor" value="1" />
++                    <label for="hold_usr_is_requestor">
++                        [% l("Place this hold for me ([_1] [_2])",
++                        ctx.user.first_given_name, ctx.user.family_name) %]
++                    </label>
++                </span>
++            </p>
++            [% END %]
+             <p>
+                 [% | l(attrs.title, ctx.get_aou(ctx.default_pickup_lib).name) %]
 -                [% l('If you would like to change the library pick up location, select from the location dropdown menu.') %]
 -                <br class="clear-both" />
++                You would like to place a hold on <strong><q>[_1]</q></strong>.<br />
++                If this is correct, confirm your pickup location and click <strong>SUBMIT</strong>.
+                 [% END %]
+             </p>
+             <p>
 -                    PROCESS build_org_selector name='pickup_lib' value=ctx.default_pickup_lib %]
++                [% l('Pickup location:') %]
+                 [% PROCESS "default/opac/parts/org_selector.tt2";
 -        <div class='hide_me' id='holds_success'>[% l("Hold was successfully placed") %]</div>
 -        <div class='hide_me' id='holds_failure'>[% l("Hold was not successfully placed") %]</div>
++                    PROCESS build_org_selector name='pickup_lib' value=ctx.default_pickup_lib id='pickup_lib' can_have_vols_only=1 %]
+             </p>
+             <p>
+                 [% |l %]If you use the Traveling Library Center (TLC) and ABC Express
+                 services, please select "Outreach" to have the item delivered
+                 during your scheduled visit.[% END %]
+             </p>
+             <input type="image" name="submit" value="submit" title="[% l('Submit') %]"
+                 alt="[% l('Submit') %]" src="[% ctx.media_prefix %]/images/btnSubmit.png" />
+             &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+             <a href="javascript:history.go(-1);" id="holds_cancel"><img
+                 alt="[% l('Cancel') %]" src="[% ctx.media_prefix %]/images/btnCancel.png" /></a>
+         </form>
+         <br /><br />
+         <p>
+             [% |l %]* 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.[% END %]
+             <br /><a href="#">[% l('Library phone numbers.') %]</a>
+         </p>
+         <p>
+             [% |l %]* For best possible service, we recommend keeping 
+             a printed copy of your most recent holds list.[% END %]
+         </p>
+         [% END %] <!-- ctx.hold_success -->
+         <table width='90%' border="1" class="hide_me">
+             <tbody>
+                 <tr>
+                     <td class='holds_cell color_1' 
+                         align='center' colspan='2'>[% l("Create / Edit a Hold") %]</td>
+                 </tr>
+                 <tr>
+                     <td class='holds_cell'>[% l("Recipient") %]:</td>
+                     <td class='holds_cell' id='holds_recipient'> </td>
+                 </tr>
+                 <tr>
+                     <td class='holds_cell'>[% l("Title:") %]</td>
+                     <!-- <td class='holds_cell' id='holds_title'> </td> -->
+                 </tr>
+                 <tr>
+                     <td class='holds_cell'>[% l("Author") %]</td>
+                     <td class='holds_cell' id='holds_author'> </td>
+                 </tr>
+                 <tr>
+                     <td class='holds_cell'>[% l("Format") %]</td>
+                     <td class='holds_cell' id='holds_format'> </td>
+                 </tr>
+                 <tr id='hold_physical_desc_row'>
+                     <td class='holds_cell'>[% l("Physical Description:") %]</td>
+                     <td class='holds_cell' id='holds_physical_desc'> </td>
+                 </tr>
+                 <tr class='hide_me' id='holds_cn_row'>
+                     <td class='holds_cell'>[% l("Call Number:") %]</td>
+                     <td class='holds_cell'><b id='holds_cn'/> </td>
+                 </tr>
+                 <tr class='hide_me' id='holds_copy_row'>
+                     <td class='holds_cell'>[% l("Copy Barcode:") %]</td>
+                     <td class='holds_cell'><b id='holds_copy'/> </td>
+                 </tr>
+                 <tr class='hide_me' id='holds_type_row'>
+                     <td class='holds_cell'>[% l("Hold Type:") %]</td>
+                     <td class='holds_cell hide_me' id='holds_is_cn'>
+                         <b>[% l("Volume Hold") %]</b>
+                     </td>
+                     <td class='holds_cell hide_me' id='holds_is_copy'>
+                         <b>[% l("Copy Hold") %]</b>
+                     </td>
+                 </tr>
+                 <tr>
+                     <td class='holds_cell'>[% l("Contact telephone number") %]:</td>
+                     <td class='holds_cell'>
+                         <input id='holds_phone' size='13' maxlength='12'/>
+                         <span style='margin-left: 4px; font-size: 7pt;'>
+                             [% l("(XXX-YYY-ZZZZ)") %]
+                         </span>
+                     </td>
+                 </tr>
+                 <tr>
+                     <td class='holds_cell'>[% l("Enable phone notifications for this hold?") %]</td>
+                     <td class='holds_cell'>
+                         <input type='checkbox' id='holds_enable_phone'
+                             checked='checked' />
+                     </td>
+                 </tr>
+                 <tr>
+                     <td class='holds_cell'>[% l("Contact email address") %]:</td>
+                     <td class='holds_cell' id='holds_email'> 
+                         <span class='hide_me' id='holds.no_email'>
+                            ([% l("Patron has no configured email address") %])<br/>
+                            ([% l("See") %] <a class='classic_link' id='holds.no_email.my_account'>[% l("My Account") %]</a> [% l("for setting your email address") %])
+                         </span>
+                         <span class='hide_me' id='holds.no_email.xul'>
+                            [% l("(Patron has no configured email address)") %] 
+                         </span>
+                     </td>
+                 </tr>
+                 <tr>
+                     <td class='holds_cell'>[% l("Enable email notifications for this hold?") %]</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'>[% l("Pickup location") %]</td>
+                     <td class='holds_cell'>
+                         <!-- <select id='holds_org_selector'> </select> -->
+                     </td>
+                 </tr>
+                 <tr>
+                     <td class='holds_cell'>[% l("Expiration date") %]</td>
+                     <td class='holds_cell'>
+                         <input size='10' maxlength='10'
+                          id='holds_expire_time' />
+                     </td>
+                 </tr>
+                 <tr>
+                     <td class='holds_cell'>
+                         [% l("Suspend this hold") %]
+                         <a class='classic_link'
+                             href='#'>[% l("(Help)") %]</a>
+                         </td>
+                     <td class='holds_cell'>
+                         <input type='checkbox' id='holds_frozen_chkbox' /> 
+                     </td>
+                 </tr>
+                 <tr id='hold_frozen_thaw_row' class='hide_me'>
+                     <td class='holds_cell'>
+                         <!-- XXX TODO there used to be script here dealing with
+                         frozen holds -->
+                         [% l("Automatically activate hold on:") %]
+                     </td>
+                     <td class='holds_cell'>
+                         <input 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='#'
+                                 style='padding: 5px;'>[% l("Advanced Hold Options") %]</a>
+                         </div>
+                     </td>
+                 </tr>
+                 <tr id='holds_alt_formats_row' class='hide_me'>
+                     <td class='holds_cell'>
+                         <div style='margin-bottom: 5px;'>
+                             <span>[% l("Acceptable Alternative Formats:") %] </span>
+                             <span><a class='classic_link red' href='#'>[% l("(Help)") %]</a></span>
+                         </div>
+                         <div>[% l("(control-click to select multiple formats)") %]</div>
+                     </td>
+                     <td class='holds_cell'>
+                         <select id='hold_alt_form_selector' multiple='multiple' style='width: 14em;'>
+                             <option value='at'    class='hide_me'>[% l("Books") %]</option>
+                             <option value='at-d' class='hide_me'>[% l("Large Print Books") %]</option>
+                             <option value='i'        class='hide_me'>[% l("Audiobooks") %]</option>
+                             <option value='g'        class='hide_me'>[% l("Video Recordings") %]</option>
+                             <option value='j'        class='hide_me'>[% l("Music") %]</option>
+                         </select>
+                     </td>
+                 </tr>
+                 <tr>
+                     <td class='holds_cell' align='center' colspan='2'>
+                         <!-- <button id='holds_submit'>[% l("Place Hold") %]</button> -->
+                         <button class='hide_me' id='holds_update'>[% l("Update Hold") %]</button>
+                         <span style='padding: 20px;'> </span>
+                         <!-- <button id='holds_cancel'>[% l("Cancel") %]</button> -->
+                     </td>
+                 </tr>
+             </tbody>
+         </table>
+         <span class='hide_me' id='holds_bad_phone'>
+             [% l("The phone number does not have the correct format. The expected format is XXX-YYY-ZZZZ") %]
+         </span>
+         <span class='hide_me' id='hold_not_allowed'>
+             [% |l %]No items were found that could fulfill the requested holds.  
+                 It's possible that choosing a different format will result in a successful hold.  
+                 It is also possible that you have exceeded the number of allowable holds.  
+                 For further information, please consult your local librarian.[% END %]
+         </span>
+     </div>
+     <div id="anonListTable" class="hide_me" style="margin-top: 6px;">
+         <select id="holdsCacheSel" class="hide_me"></select><br />
+         <a href="#">Place hold on selected</a><br />
+         <a href="#">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' />
+                 </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="#">Back to search results</a>
+     </div>
+     <span class='hide_me' id='format_words'>
+         <span name='at'>[% l("Books") %]</span>
+         <span name='at-d'>[% l("Large Print Books") %]</span>
+         <span name='i'>[% l("Audiobooks") %]</span>
+         <span name='g'>[% l("Video Recordings") %]</span>
+         <span name='j'>[% l("Music") %]</span>
+         <span name='m'>[% l("Electronic Resources") %]</span>
+     </span>
+     <span class='hide_me' id='holds_explain_adv'>
+         [% |l %]If you wish to broaden the scope of your hold to include other versions of this title, 
+         select the formats that would be acceptable.  The first available copy will be sent to you.[% END %]
+     </span>
+     <span class='hide_me' id='holds_pick_good_org'>[% l("Please select a physical location where your hold can be delivered.") %]</span>
+     <span class='hide_me' id='hold_dup_exists'>[% l("A hold already exists on the requested item.") %]</span>
+     <span class='hide_me' id='hold_dup_exists_override'>[% l("A hold already exists on the requested item. Would you like to create the hold anyway?") %]</span>
+     <span id='hold_failed_patron_barred' class='hide_me'>
+         [% |l %]PATRON BARRED. Please see any notes in the "Staff Notes" section of your 
+         "My Account" page or contact your local library.[% END %]
+     </span>
+     <span id='invalid_hold' class='hide_me'>
+         [% |l %]This hold is no longer valid. It's likely that the target for the hold was 
+         deleted from the system.  Please cancel this hold and place a new one.[% END %]
+     </span>
+     <span id='holds_invalid_recipient' class='hide_me'>[% l("The patron barcode entered as the hold recipient is invalid.") %]</span>
+ </div>
index 0000000,8c31f0d..f79de8a
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,16 +1,16 @@@
 -    {value => "id|bibcn", label => l("Call Number")}
+ [%  query_types = [
+     {value => "keyword", label => l("Keyword")},
+     {value => "title", label => l("Title")},
+     {value => "author", label => l("Author")},
+     {value => "subject", label => l("Subject")},
+     {value => "series", label => l("Series")},
++    {value => "id|bibcn", label => l("Bib Call Number")}
+ ] %]
+ <select name="qtype">
+     [%  query_type = query_type || CGI.param('qtype');
+         FOR qt IN query_types -%]
+     <option value='[% qt.value %]'[%
+         query_type == qt.value ? ' selected="selected"' : ''
+     %]>[% qt.label %]</option>
+     [% END -%]
+ </select>
index 0000000,dda3949..57f1003
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,31 +1,32 @@@
 -        [% IF 0 %] 
+ <div class='rdetail_extras_div'> 
+     <div style="margin-bottom:20px;"></div>
+         <!-- Chilifresh patron reviews -->
+         <strong>[% l('Patron Reviews:') %]</strong>
+         <div style="margin-bottom:20px;">
+             <div class="chili_review" id="isbn_[% attrs.isbn_clean %]"> </div>
+             <div id="chili_review_[% attrs.isbn_clean %]" style="display: none;" align="center" width="100%"></div>
+         </div>
+     
+         <!-- Reviews from added content provider -->
+         [% IF 0 %] 
+         <strong>[% l('Reviews:') %]</strong>
+         <div id='rdetail_review_container' style="margin-bottom:20px;"></div>
+         [% END %]
+         <!-- Novelist suggestions-->
 -        <div id='rdetail_novelist_div' class='rdetail_extras_div'>
 -        <div id="NoveListSelect" class="NoveListSelect">
 -            <div id="NoveListAnchor" class="NoveListSelect"></div>
 -            <div id="novsuggestions"></div>
 -            <div id="nextreads"></div>
 -            <div id="novrelatedauthors"></div>
 -            <div id="novrelateditems"></div>
++        [% IF ENV.OILS_NOVELIST_URL %] 
+         <strong>[% l('Similar Books:') %]</strong>
++        <div class='rdetail_extras_div'>
++            <div id="NoveListSelect" class="NoveListSelect">
++                <div id="NoveListAnchor" class="NoveListSelect"></div>
++                <div id="novsuggestions"></div>
++                <div id="nextreads"></div>
++                <div id="novrelatedauthors"></div>
++                <div id="novrelateditems"></div>
++            </div>
+         </div>
+         [% END %]
+     </div>
+ </div>
index 0000000,66b4917..c53ce31
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,54 +1,75 @@@
 -            {name => 'summary',  label => l('Summaries &amp; More'), hide => 1}, # Content Cafe
+ <div id="rdetail_main_div">
+     <div id='rdetail_extras_div' style='width: 100%;'> 
+         [%  # Hidden extras are not yet implemented.  Some may require JS
++
++        # Let's see if we should hide the content cafe / simple summary content
++        hide_summary = 1;
++        IF attrs.summary; hide_summary = 0; ELSE;
++            # Expose content cafe if it's reasonable to do so.
++            # This approach only works when using embedded content cafe.
++            IF ENV.OILS_CONTENT_CAFE_USER; 
++                ident = attrs.isbn_clean || attrs.upc; 
++                IF ident; hide_summary = 0; END;
++            END;
++        END;
++
+         extras = [
 -            {name => 'awards',   label => l('Series'), hide => 1}, 
++            {name => 'summaryplus',  label => l('Summaries &amp; More'), hide => hide_summary}, 
+             {name => 'content',  label => l('Contents'), hide => 1}, # ToC
+             {name => 'authors',  label => l('Authors')}, 
+             {name => 'series',   label => l('Series'), hide => 1}, 
 -            {name => 'cnbrowse', label => l('Shelf Browser'), hide => 1},
+             {name => 'subjects', label => l('Subject')}, 
+             {name => 'annotation', label => l('Annotation'), hide => 1}, 
+             {name => 'awards',  label => l('Awards, Reviews, & Suggested Reads')}, 
+             {name => 'excerpt',  label => l('Excerpt'), hide => 1},
+             {name => 'issues',   label => l('Issues Held'), hide => !ctx.have_holdings_to_show},
+             {name => 'preview',  label => l('Preview'), hide => 1}, 
 -                [% href = ctx.full_path _ '?expand=' _ name _ '#' _ name; %]
++            {name => 'cnbrowse', label => l('Shelf Browser')},
+             {name => 'copyinfo', label => l('Copy Summary'), hide => 1}, 
+             {name => 'marchtml', label => l('MARC Record')}
+         ];
+         FOREACH extra IN extras;
+             IF extra.hide; NEXT; END; 
+             name = extra.name;
+         %]
+         <div class="rdetail_extras">
+             <div class="rdetail_extras_hr"></div>
+             <div class="rdetail_extras_link">
++                [%  # extras_propagator should be used in place of propagator
++                    # in opac extras interfaces... it just avoids duplicating
++                    # the expands CGI param and parameters that are specific
++                    # to extras.
++                    # XXX move this off into a helper function
++
++                    extras_propagator = propagator.replace('(&amp;)?expand=.+($|&|;)', '$2');
++                    extras_propagator = extras_propagator.replace('(&amp;)?cnoffset=.+($|&|;)', '$2');
++
++
++                    href = ctx.full_path _ extras_propagator _ '&amp;expand=' _ name _ '#' _ name; %]
+                 <a name='[% name %]' href='[% href %]'><img
+                     alt='[% extra.label %]' src="[% ctx.media_prefix %]/images/rdetail_arrow.png" /></a>
+                 <a href='[% href %]' class="rdetail_extras_lbl">[% extra.label %]</a>
+             </div>
+         </div>
+         <div class='rdetail_extras_div'>
+             [%  exp_name = 'expand_' _ name;
+                 IF ctx.$exp_name;
+                     IF name == 'marchtml';
+                         ctx.marchtml;
+                     ELSE;
+                         # Load the template for the selected extra
+                         INCLUDE "default/opac/parts/record/${name}.tt2";
+                     END;
+                 END; 
+             %]
+         </div>
+         [% END %]
+     </div>
+     <!--
+     <div id='rdetail_preview_full_text' class='hide_me'>[% l("Full text") %]</div>
+     <div id='rdetail_preview_title' class='hide_me'>[% l("See the full text of this book.") %]</div>
+     <div id='rdetail_preview_badge' class='hide_me'>[% l("Show a preview of this book from Google Book Search") %]</div>
+     -->
+ </div>
index 0000000,1de1578..52f5fde
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,280 +1,294 @@@
 -            <td>[% l("Holdable") %]</td>
+ [%  PROCESS "default/opac/parts/misc_util.tt2";
+     USE ResolverResolver;
+     ctx.page_title = attrs.title | html_entity
+ %]
+ <!-- ****************** rdetail_summary.xml ***************************** -->
+ <abbr class="unapi-id" title='tag:[% ctx.hostname %],[% date.format(date.now, '%Y') %]:biblio-record_entry/[% ctx.bre_id %]'></abbr>
+ [% IF ctx.refworks.enable == 'true' %]
+     [% INCLUDE 'default/opac/parts/record/refworks.tt2' %]
+ [% END %]
+ <!-- This holds the record summary information -->
+ <table width="100%" border="0" cellpadding="0" cellspacing="0" id="rdetail_details_table">
+     <tbody id="rdetail_details_tbody">
+         <tr>
+             <td width="90" valign="top" id="rdetail_image_cell">
+                 [% ident = attrs.isbn_clean || attrs.upc; IF ident; %]
+                 <a id='rdetail_img_link' href='[% ctx.media_prefix %]/opac/extras/ac/jacket/large/[% ident %]'><img
+                     alt="[% l('Image of item') %]" id='rdetail_image'
+                     src='[% ctx.media_prefix %]/opac/extras/ac/jacket/medium/[% ident %]' /></a>
+                 [% END %]
+                 <br />
+             </td>
+     
+             <td valign="top">
+                 <table border="0" cellpadding="0" cellspacing="0" width="100%">
+                     <tr>
+                         <td valign="top">
+                             <span id='rdetail_title'>[% attrs.title %]</span><br />
+                             [% IF attrs.author %]
+                             <span class='opac-auto-030'>[% l("Author") %]:</span>
+                             <em><a title='[% l("Perform an author search") %]'
+                                     id='rdetail_author'
+                                     href="[% ctx.opac_root %]/results?qtype=author&amp;query=[%-
+                                         attrs.author | replace('[,\.:;]', '') | uri %]&amp;loc=[% CGI.param('loc') | uri %]">[% attrs.author %]</a></em>
+                             [% END %]
+                         </td>
+                         <td align="right" valign="top" nowrap="nowrap" style="white-space:nowrap;">
+                             <div style="width:230px;text-align:left;margin-top:3px;">
+                                 <div style="float:right;">
+                                     <div class="rdetail_aux_utils opac-auto-010">
+                                         <a href="[% ctx.opac_root %]/place_hold[%-
+                                             propagator; propagator.length > 1 ? "&amp;" : ""; %]hold_target=[% ctx.bre_id %]&amp;hold_type=T" id="rdetail_place_hold" class="no-dec"><img
+                                             src="[% ctx.media_prefix %]/images/green_check.png" alt="[% l('place hold') %]" /><span 
+                                                 style="position:relative;top:-3px;left:3px;">[% l('Place Hold') %]</span></a>
+                                     </div>
+                                     <div class="rdetail_aux_utils opac-auto-121">
+                                         [%  
+                                             operation = ctx.mylist.grep(ctx.bre_id).size ? "delete" : "add";
+                                             label = (operation == "add") ? l("Add to my list") : l("Remove from my list"); 
+                                         %]
+                                         <form action="[% ctx.opac_root %]/mylist/[% operation %]" method="POST">
+                                             <input type="hidden" name="record" value="[% ctx.bre_id %]" />
+                                             <div class="pos-abs">
+                                                 <div class="opac-auto-149">
+                                                     <input type="submit" title="[% label %]" value="[% label %]" class="subtle-button" />
+                                                 </div>
+                                             </div>
+                                             <input type="image" alt="[% label %]"
+                                                 src="[% ctx.media_prefix %]/images/clipboard.png" />
+                                         </form>
+                                     </div>
+                                 </div>
+                                 <div style="float:right;margin-right:17px;">
+                                     [% IF attrs.format_icon %]
+                                     <img alt="[% attrs.format_label %]" title="[% attrs.format_label %]" src="[% attrs.format_icon %]" />
+                                     [% END %]
+                                 </div>
+                             </div>
+                         </td>
+                     </tr>
+                 </table>
+                 <div class='opac-auto-018'>
+                     <table border="0" cellpadding="0" width="100%">
+                         <tr>
+                             <td nowrap='nowrap' valign="top">
+                                 [% IF attrs.isbn %]<strong id="rdetail_isbn_lbl">[% l("ISBN") %]</strong>[% END %]
+                             </td>
+                             <td valign="top" id='rdetail_isbn'>[% attrs.isbn %]</td>
+                             <td nowrap='nowrap' valign="top">
+                                 [% IF attrs.phys_desc %]<strong id="rdetail_phys_lbl">[% l("Physical Description") %]</strong>[% END %]
+                             </td>
+                             <td valign="top" id='rdetail_physical_desc'>[% attrs.phys_desc %]</td>
+                         </tr>
+                         [% IF openurl.enabled == 'true';
+                             FOR issn IN args.issns;
+                                 sfx = ResolverResolver.resolve_issn(issn, openurl.baseurl);
+                                 FOR res IN sfx;
+                         %]
+                             <tr name="results_issn_tr">
+                                 <td valign="top">
+                                     <strong><a href="[% res.target_url %]">
+                                         [% res.public_name %]</a></strong>
+                                 </td>
+                                 <td>[% res.target_coverage %]</td>
+                             </tr>
+                                 [% END %]
+                             [% END %]
+                         [% END %]
+                         <tr>
+                             <td nowrap='nowrap' valign="top">
+                                 <strong id="rdetail_ed_lbl">[% IF attrs.edition; l("Edition"); END %]</strong>
+                             </td>
+                             <td valign="top" id='rdetail_edition'>[% attrs.edition %]</td>
+                         </tr>
+                         <tr>
+                             <td nowrap='nowrap' valign="top">
+                                 <strong id="rdetail_pub_lbl">[% IF attrs.publisher; l("Publisher"); END %]</strong>
+                             </td>
+                             <td valign="top" id='rdetail_publisher'>[% attrs.publisher %]</td>
+                             <td nowrap='nowrap' valign="top">
+                                 <strong id="rdetail_pubdate_lbl">[% IF attrs.pubdate; l("Publication Date"); END %]</strong>
+                             </td>
+                             <td valign="top" id='rdetail_pubdate'>[% attrs.pubdate %]</td>
+                         </tr>
+                     </table>
+                     <!-- hold/copy summary -->
+                     <div style="padding-top:15px;">
+                         <div>
+                             [% l("[quant,_1,Hold,Holds] with [quant,_2,total copy,total copies]", 
+                                 ctx.record_hold_count, ctx.copy_summary.0.count) %]
+                         </div>
+                         <div>[% l('[quant,_1,Copy,Copies] available', ctx.copy_summary.0.available) %]</div>
+                     </div>
+                 </div>
+             </td>
+         </tr>
+     </tbody>
+ </table>
+ <br />
+ [% FOR uri IN args.uris %]
+ <div class="rdetail_uri">
+     <a href="[% uri.href %]">[% uri.link %]</a>[% ' - ' _ uri.note IF uri.note %]
+ </div>
+ [% END %]
+ <br />
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" id="rdetails_status">
+     <thead>
+         <tr id="rdetails_status_head">
+             <td>[% l("Location") %]</td>
+             <td>[% l("Call Number") %]</td>
+             <td>[% l("Barcode") %]</td>
+             <td>[% l("Shelving Location") %]</td>
+             [% IF ctx.is_staff %]
+             <td>[% l("Age Hold Protection") %]</td>
+             <td>[% l("Create Date") %]</td>
 -        [% FOR copy_info IN ctx.copies %]
 -        [% NEXT IF copy_info.call_number_label == '##URI##' %]
++            <td>[% l("Holdable?") %]</td>
+             [% END %]
+             <td>[% l("Status") %]</td>
+             <td>[% l("Due Date") %]</td>
+         </tr>
+     </thead>
+     <tbody class="copy_details_table">
 -            <td>[% (copy_info.holdable == 't' AND
 -                    copy_info.location_holdable == 't' AND
 -                    copy_info.status_holdable == 't') ? l('Yes') : l('No') %]</td>
++        [% last_cn = 0;
++        FOR copy_info IN ctx.copies;
++            NEXT IF copy_info.call_number_label == '##URI##' %]
+         <tr>
+             <td>[%
+                 # XXX KCLS-specific kludging
+                 org_name = ctx.get_aou(copy_info.circ_lib).name;
+                 dir = org_name | lower | replace('[^\w]', '') |
+                     replace('.+320th', '320th'); %]
+                 <a href="http://www.kcls.org/[% dir %]/"
+                     class="classic_link">[% org_name %]</a>
+             </td>
+             <td>[% copy_info.call_number_label %]</td>
+             <td>[% copy_info.barcode %]</td>
+             <td>[% copy_info.copy_location %]</td>
+             [% IF ctx.is_staff %]
+             <td>
+                 [% copy_info.age_protect ?
+                     ctx.get_crahp(copy_info.age_protect).name : l('None') %]
+             </td>
+             <td>[% date.format(
+                 ctx.parse_datetime(copy_info.create_date),
+                 DATE_FORMAT
+             ) %]</td>
++            <td>[%  # Show copy/volume hold links to staff (without
++                    # checking whether they have permissions to do those).
++                    overall_holdable = (copy_info.holdable == 't' AND
++                        copy_info.location_holdable == 't' AND
++                        copy_info.status_holdable == 't');
++                    IF overall_holdable;
++                        l("Place on"); %]
++                <a href="[% ctx.opac_root %]/place_hold[% propagator; propagator.length > 1 ? "&amp;" : ""; %]hold_target=[% copy_info.id %]&amp;hold_type=C">[% l("copy") %]</a>
++                [%      IF copy_info.call_number != last_cn;
++                            last_cn = copy_info.call_number;
++                            l(" / "); %]
++                <a href="[% ctx.opac_root %]/place_hold[% propagator; propagator.length > 1 ? "&amp;" : ""; %]hold_target=[% copy_info.call_number %]&amp;hold_type=V">[% l("volume") %]</a>
++                [%      END;
++                    ELSE;
++                        l("No");
++                    END %]</td>
+             [% END %]
+             <td>[% copy_info.copy_status %]</td>
+             <td>[%
+                 IF copy_info.due_date;
+                     date.format(
+                         ctx.parse_datetime(copy_info.due_date),
+                         DATE_FORMAT
+                     );
+                 ELSE;
+                     '-';
+                 END %]</td>
+         </tr>
+         [% END %]
+         <tr>
+         [% IF ctx.copy_offset > 0;
+             new_offset = ctx.copy_offset - ctx.copy_limit;
+             IF new_offset < 0; new_offset = 0; END %]
+             <td>
+                 <a href="[% ctx.opac_root %]/record/[% ctx.bre_id %]?copy_offset=[% new_offset %]&amp;copy_limit=[% ctx.copy_limit %]">&laquo; [%
+                     l('Previous [_1]', ctx.copy_offset - new_offset)
+                 %]</a>
+             </td>
+         [% END %]
+         [% IF ctx.copies.size >= ctx.copy_limit %]
+             <td>
+                 <a href="[% ctx.opac_root %]/record/[% ctx.bre_id %]?copy_offset=[% ctx.copy_offset + ctx.copy_limit %]&amp;copy_limit=[% ctx.copy_limit %]">[%
+                     l('Next [_1]', ctx.copy_limit)
+                 %] &raquo;</a>
+             </td>
+         [% END %]
+         </tr>
+     </tbody>
+ </table>
+ <div id="rdetail_locs_expand" class="hide_me">
+     <a href="#"><img
+         src="[% ctx.media_prefix %]/images/plus_sign.png" /></a>
+     <a style="position:relative;top:-3px;" href="#">[% l('Show more locations') %]</a>
+ </div>
+ <div id="rdetail_locs_collapse" class="hide_me">
+     <a href="#"><img
+         src="[% ctx.media_prefix %]/images/plus_sign.png" /></a>
+     <a style="position:relative;top:-3px;" href="#">[% l('Collapse locations') %]</a>
+ </div>
+ <div id="rdetail_extras_expand" class="hide_me">
+     <a href="#"><img
+         src="[% ctx.media_prefix %]/images/plus_sign.png" /></a>
+     <a style="position:relative;top:-3px;" href="#">[% l('Expand all tabs') %]</a>
+ </div>
+ <div id="rdetail_extras_collapse" class="hide_me">
+     <a href="#"><img src="[% ctx.media_prefix %]/images/plus_sign.png" /></a>
+     <a style="position:relative;top:-3px;" href="#">[% l('Collapse all tabs') %]</a>
+ </div>
+ <div class="hide_me">
+     <table id='' border="0" width="100%">
+         <tbody id='rdetail_details_tbody'>
+             <tr>
+                 <td id='' rowspan='2' valign="top" align="center" style="padding-right:10px;">
+                 </td>
+                 <td class='rdetail_desc' valign="top" colspan="3">
+                     <table border="0" width="100%">
+                         <tr>
+                             <td valign="top">
+                                 <div style="padding-bottom:7px;">
+                                     <strong>[% l("Title") %]:</strong>
+                                 </div>
+                             </td>
+                             <td width="1" valign="top" align="right" style="white-space:nowrap;">
+                                 <a href="[% ctx.opac_root %]/place_hold[% propagator; propagator.length > 1 ? "&amp;" : ""; %]hold_target=[% ctx.bre_id %]&amp;hold_type=T"><img alt="[% l('Place Hold') %]"
+                                     src="[% ctx.media_prefix %]/images/place_hold.gif" /></a>
+                                 <a href="#" id="rd_reviews_and_more" target="_blank"><img
+                                     alt="[% l('Reviews and More') %]" src="[% ctx.media_prefix %]/images/reviews.gif" /></a>
+                                 <a href="#" id=""><img alt="[% l('Add to My List') %]"
+                                     src="[% ctx.media_prefix %]/images/add_mylist.gif" /></a>
+                             </td>
+                         </tr>
+                     </table>
+                 </td>        
+             </tr>
+             <tr>
+                 <td nowrap='nowrap' colspan="3" valign="bottom" style="padding-bottom:16px;">
+                 </td>
+             </tr>
+             <tr>
+                 <td><div style="height:20px;"></div></td>
+             </tr>
+         </tbody>
+     </table>
+ </div> <!-- details_body -->
+ <!-- ****************** end: rdetail_summary.xml ***************************** -->
index 0000000,c66b114..78679fc
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,90 +1,94 @@@
 -                [% IF is_advanced; l('your search'); ELSE %]
+ <div id='result_low_hits'>
+     <div id="zero_search_hits">
+         <div>
+             <p>[% l('Sorry, no entries were found for') %]
 -                Change to <strong>Advanced Keyword Search.</strong>
++                [% IF is_advanced OR is_special; l('your search'); ELSE %]
+                 <q>[% CGI.param('query') | html %]</q>
+                 [% END %]
+                 <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">[% l('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;">
+             [% INCLUDE "default/opac/parts/result/lowhits_purchase.tt2" %]
+             <p>
+                 <strong>Keyword Search Tips</strong><br />
 -                to truncate from 1-5 characters. Use a double asterisk ** for open-ended truncation.<br />
++                Try changing to <strong>Advanced Search</strong>.
+             </p>
+             <p>
+                 <strong>Adjacency</strong><br />
+                 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 *
 -                <strong>Wildcards</strong><br />
 -                You may use a question mark to replace a single character anywhere within a word.<br />
 -                example: <strong>wom?</strong>)
++                to truncate any number of characters.<br />
+                 (example: <strong>environment* agency</strong>)
+             </p>
+             <p>
++                <strong>Anchored Searching</strong><br />
++                You may use ^ and $ to indicate "phrase begins with" and
++                "phrase ends with," respectively, within a search phrase
++                enclosed in quotation marks.<br />
++                (examples: <strong>"^harry"</strong> for phrases that begin with
++                the term <em>harry</em>.
++                <strong>"stone$"</strong> for phrases that end in <em>stone</em>.)
+             </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'>[% l("Few hits were returned for your search.") %]</div>
+             <div id='result_zero_hits_msg' class='hide_me'>[% l("Zero hits were returned for your search.") %]</div>
+         </div>
+         <!-- spell checker -->
+         <div id='did_you_mean' class='lowhits_div hide_me'>
+             <span>[% l("Maybe you meant:") %] </span>
+             <!-- <a class='classic_link' id='spell_check_link'> </a> -->
+         </div>
+         <div id='low_hits_remove_format' class='lowhits_div hide_me'>
+             <span>[% l("You will find more hits when searching all item formats:") %] </span>
+             <a id='low_hits_remove_format_link' class='classic_link'>[% l("Search again with all formats?") %]</a>
+         </div>
+         <div id='low_hits_cross_ref' class='lowhits_div hide_me'>
+             <span>[% l("You may also like to try these related searches:") %]</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>[% l("You may also wish to expand your search range to:") %] </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>[% l("You can try searching the same terms by:") %]</span>
+             <a id='low_hits_title_search' class='hide_me classic_link' 
+                 style='padding-right: 5px;'>[% l("title") %]</a>
+             <a id='low_hits_author_search' class='hide_me classic_link' 
+                 style='padding-right: 5px;'>[% l("author") %]</a>
+             <a id='low_hits_subject_search' class='hide_me classic_link' 
+                 style='padding-right: 5px;'>[% l("subject") %]</a>
+             <a id='low_hits_series_search' class='hide_me classic_link' 
+                     style='padding-right: 5px;'>[% l("series") %]</a>
+             <a id='low_hits_keyword_search' class='hide_me classic_link' 
+                 style='padding-right: 5px;'>[% l("keyword") %]</a>
+         </div>
+     </div>
+ </div>
index 0000000,263269a..ff34338
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,6 +1,6 @@@
 -<p>
++[%# XXX Is this block generally desired? <p>
+     <strong>Still not finding what you are looking for?</strong><br />
+     Request that your library 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> %]
index 0000000,383c1d2..6f4f01f
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,78 +1,78 @@@
 -            [% IF is_advanced %]
+ [% PROCESS "default/opac/parts/org_selector.tt2" %]
+ <div id="search-box">    
+     [% UNLESS took_care_of_form -%]
+     <form action="[% ctx.opac_root %]/results" method="GET">
+     [%- END %]
+     <table cellpadding="0" cellspacing="10" border="0">
+         <tr>
+             <td colspan="3">
+                 <span class="search_catalog_lbl">[% l('Search the Catalog') %]</span>
+                 <a href="[% ctx.opac_root %]/advanced"
+                     id="home_adv_search_link"><span
+                     class="adv_search_font">[% l('Advanced Search') %]</span></a>
+             </td>
+         </tr>
+         <tr>
 -            [% IF ctx.processed_search_query OR NOT is_advanced %]
++            [% IF is_advanced || is_special %]
+             <td colspan="2">
+                 <input type="hidden" name="_adv" value="1" />
+             [% ELSE %]
+             <td>
+             [% INCLUDE "default/opac/parts/qtype_selector.tt2" %]
+             </td>
+             [% END %]
 -        [% UNLESS is_advanced %]
++            [% IF ctx.processed_search_query OR (NOT is_advanced AND NOT is_special) %]
+             <td>
+                 <div id="search_box_wrapper">
+                     <!-- Note: when common browsers support HTML5 placeholder text, we can remove the JS -->
+                     <input type="text" id="search_box" name="query" value="[% is_advanced ? ctx.processed_search_query : CGI.param('query') || l("Search Keyword") | html %]"
+                         [% IF is_advanced %]style="width: 450px"[% END %]
+                         onfocus="if (this.value=='[% l("Search Keyword") %]'){this.value='';this.style.color='#000';}"
+                         onblur="if (this.value==''){this.value='[% l("Search Keyword") %]';this.style.color='#999';}"
+                         x-webkit-speech />
+                 </div>
+                 <input name='page' type='hidden' value="0" />
+             </td>
+             <td valign="top">
+                 <div class="pos-abs">
+                     <div class="opac-auto-143">
+                         <input id='search-submit-go' type="image" alt="[% l('Search') %]" src="[% ctx.media_prefix %]/images/go-btn.png"
+                             onmouseover="this.src='[% ctx.media_prefix %]/images/go-btn-hover.png';"
+                             onmouseout="this.src='[% ctx.media_prefix %]/images/go-btn.png';" 
+                             onclick='setTimeout(function(){$("search-submit-spinner").className=""; $("search-submit-go").className="hidden"}, 2000)'/>
+                         <img id='search-submit-spinner' src='/opac/images/progressbar_green.gif' style='height:16px;width:16px;' class='hidden'/>
+                     </div>
+                 </div>
+             </td>
+             [% END %]
+         </tr>
 -    [% IF is_advanced AND CGI.param('qtype') %]
++        [% UNLESS is_advanced OR is_special %]
+         <tr>
+             <td>
+                 [% INCLUDE "default/opac/parts/coded_value_selector.tt2" attr=["mattype", "item_type"] none_ok=1 %]
+             </td>
+             <td>
+                 <span id='depth_selector_span'>
+                     [% PROCESS build_org_selector name='loc' value=CGI.param('loc') %]
+                 </span>
+                 <span id='lib_selector_span'>
+                     <a id='lib_selector_link' class='classic_link'
+                         href='#'>[% l("Choose a library to search") %]</a>
+                 </span>
+             </td>
+         </tr>
+         [% END %]
+     </table>
+     [% UNLESS took_care_of_form %]</form>[% END %]
++    [% IF (is_advanced AND NOT is_special) AND CGI.param('qtype') %]
+     <div class="opac-auto-102">
+         [ <a href="[% ctx.opac_root %]/advanced?[% query_string %]">[%
+             l('Click to Refine Your Original Search')
+         %]</a> ]
+     </div>
+     [% END %]
+     <div id="breadcrumb">
+         <a href="[% ctx.opac_root %]/home">[% l('Catalog Home') %]</a> &gt;
+     </div>
+     <div class="clear-both"></div>
+ </div>
index 0000000,d0b6d28..9b2d242
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,79 +1,79 @@@
 -    IF is_advanced;
+ [%  PROCESS "default/opac/parts/header.tt2";
+     USE POSIX;
+     WRAPPER "default/opac/parts/base.tt2";
+     INCLUDE "default/opac/parts/topnav.tt2";
 -    page_count = POSIX.ceil(ctx.hit_count / ctx.page_size);
++    IF is_advanced || is_special;
+         ctx.page_title = l("Search Results");
+     ELSE;
+         ctx.page_title = l("Search Results: ") _ CGI.param('query') | html_entity;
+     END;
+     page = CGI.param('page') || 0;
 -                [% UNLESS is_advanced %]
++    page_count = ctx.page_size == 0 ? 1 : POSIX.ceil(ctx.hit_count / ctx.page_size);
+ %]
+     <form action="[% ctx.opac_root %]/results" method="GET">
+     <div id="search-wrapper">
+         [% INCLUDE "default/opac/parts/printnav.tt2" %]
+         [% INCLUDE "default/opac/parts/searchbar.tt2" took_care_of_form=1 %]
+     </div>
+     <div class="almost-content-wrapper">
+         <div id="results_header_bar">
+             <div id="results_header_inner">
+                 <div class="results_header_btns">
+                     <a href="[% ctx.opac_root %]/home"><img alt="[% l('Another Search') %]"
+                         src="[% ctx.media_prefix %]/images/another_search.png"
+                         onmouseover="this.src='[% ctx.media_prefix %]/images/another_search_hover.png';"
+                         onmouseout="this.src='[% ctx.media_prefix %]/images/another_search.png';" /></a>
+                 </div>
+                 <div class="results_header_btns">
+                     <a href="[% ctx.opac_root %]/advanced"><img alt="[% l('Advanced Search') %]"
+                         src="[% ctx.media_prefix %]/images/adv_search.png"
+                         onmouseover="this.src='[% ctx.media_prefix %]/images/adv_search_hover.png';"
+                         onmouseout="this.src='[% ctx.media_prefix %]/images/adv_search.png';" /></a>
+                 </div>
+                 [% IF ctx.mylist.size %]
+                 <div class="results_header_btns cached_list_div">
+                     <a href="[% ctx.opac_root; ctx.user ? '/myopac/lists' : '/mylist' %]"><img
+                         alt="View My List"
+                         src="[% ctx.media_prefix %]/images/view_my_list.png"
+                         onmouseover="this.src='[% ctx.media_prefix %]/images/view_my_list_hover.png';"
+                         onmouseout="this.src='[% ctx.media_prefix %]/images/view_my_list.png';" /></a>
+                 </div>
+                 [% END %]
+                 <div class="results_header_div"></div>
++                [% UNLESS is_advanced || is_special %]
+                     <div class="results_header_lbl">Sort by</div>
+                     [% INCLUDE "default/opac/parts/filtersort.tt2" value=CGI.param('sort') %]
+                     <div class="results_header_div"></div>
+                     <!-- XXX still needed?<div class="results_header_lbl">View</div>
+                     <select class="results_header_sel">
+                         <option>Simple</option>
+                         <option>Detailed</option>
+                     </select>
+                     <div class="results_header_div"></div> -->
+                     <input type="checkbox" id="limit_to_available"
+                         name="modifier" value="available"
+                         [% CGI.param('modifier').grep('available').size
+                             ? ' checked="checked"' : '' %] />
+                     <label for="limit_to_available" class="results_header_lbl">
+                         [% l('Limit to available items') %]
+                     </label>
+                 [% END %]
+                 <div class="clear-both"></div>
+             </div>
+         </div>
+     </div>
+     </form>
+     <div id="content-wrapper">
+         <div id="main-content">
+             <div id="tehResultsPage">
+                 [% path = "default/opac/parts/result/" _
+                     (ctx.records.size ? "table.tt2" : "lowhits.tt2");
+                 INCLUDE $path %]
+             </div>
+             <div class="common-full-pad"></div>    
+         </div>
+     </div>
+ [% END %]
index 0000000,d06b176..1a09b0b
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,102 +1,92 @@@
 -                <td><label for="ident">&vandelay.id.field;: </label></td>
 -                <td>
 -                    <select dojoType="dijit.form.FilteringSelect" name="ident" id="attr-editor-identifier">
 -                        <option value='f' selected='selected'>&vandelay.false;</option>
 -                        <option value='t'>&vandelay.true;</option>
 -                    </select>
 -                </td>
 -            </tr>
 -            <tr>
+ <div style='float: left; margin-top: 8px;'>
+     <input dojoType="dijit.form.RadioButton" name="attrEditorGroup" value="bib" 
+         id="aegB" onclick="setAttrEditorGroup('bib');" checked="checked"/>
+     <label for="aegB" style="margin-right: 1em;">&vandelay.bib.attrs;</label>
+     <input dojoType="dijit.form.RadioButton" name="attrEditorGroup" value="auth" 
+         id="aegA" onclick="setAttrEditorGroup('auth');"/>
+     <label for="aegA" style="margin-right: 1em;">&vandelay.auth.attrs;</label>
+ </div>
+ <div dojoType="dijit.form.DropDownButton" id="vl-create-attr-editor-button">
+     <span name="create">&vandelay.create.attr.def;</span>
+     <div dojoType="dijit.TooltipDialog" execute="vlSaveAttrDefinition(arguments[0]);" id="attr-editor-dialog">
+         <script type='dojo/connect' event='onOpen'>onAttrEditorOpen();</script>
+         <script type='dojo/connect' event='onClose'>onAttrEditorClose();</script>
+         <table class='dijitTooltipTable'>
+             <tr>
+                 <td><label for="code">&vandelay.code;:</label></td>
+                 <td><input id='attr-editor-code' name="code" dojoType="dijit.form.TextBox"/></td>
+             </tr>
+             <tr>
+                 <td><label for="description">&vandelay.descrip;:</label></td>
+                 <td><input id='attr-editor-description' dojoType="dijit.form.TextBox" name="description"> </input></td>
+             </tr>
+             <tr>
+                 <td><label for="amount">&vandelay.tags;:</label></td>
+                 <td><input id="attr-editor-tags" dojoType="dijit.form.TextBox" name="tag"></input>
+                 <div class="hidden" id="attr-editor-tags-tip">
+                 <p>&vandelay.tooltip.tags;</p>
+                 <p>&vandelay.for.example;:<code>120, 220, 300</code> or <code>120 220 330</code></p></div>
+                 </td>
+             </tr>
+             <tr>
+                 <td><label for="amount">&vandelay.subfields;:</label></td>
+                 <td><input dojoType="dijit.form.TextBox" name="subfield" id="attr-editor-subfields"></input>
+                     <div class="hidden" id="attr-editor-subfields-tip">
+                     <p>&vandelay.tooltip.subfields;</p>
+                     <p>&vandelay.for.example;: <code>a, b, j, x</code> or <code>a b j x</code></p></div>
+                 </td>
+             </tr>
+             <tr>
 -                <th field='ident'>&vandelay.identifier;</th>
+                 <td><label for="attr-editor-xpath">&vandelay.xpath.advanced;: </label></td>
+                 <td><input dojoType="dijit.form.TextBox" id="attr-editor-xpath" name="xpath"></input></td>
+             </tr>
+             <tr>
+                 <td><label for="attr-editor-remove">&vandelay.remove.advanced;: </label></td>
+                 <td><input dojoType="dijit.form.TextBox" id="attr-editor-remove" name="remove"></input></td>
+             </tr>
+             <tr id="attr-editor-create-bar">
+                 <td colspan='2' align='center'>
+                     <button dojoType="dijit.form.Button" type="submit" 
+                         id="attr-editor-create-button">&vandelay.create;</button>
+                     <button type="button" dojoType="dijit.form.Button"
+                         onclick="dijit.byId('attr-editor-dialog').onCancel();">&vandelay.cancel;</button>
+                 </td>
+             </tr>
+             <tr id="attr-editor-update-bar">
+                 <td colspan='2' align='center'>
+                     <button dojoType="dijit.form.Button" type="submit" 
+                         id="attr-editor-update-button">&vandelay.update;</button>
+                     <button type="button" dojoType="dijit.form.Button"
+                         onclick="dijit.byId('attr-editor-dialog').onCancel();">&vandelay.cancel;</button>
+                     <button dojoType="dijit.form.Button" 
+                         type="button" 
+                         id="attr-editor-delete-button"
+                         style="padding-left: 2em;"
+                         onclick="if(confirm('&vandelay.sure.to.delete;')) { vlAttrDelete(); }">
+                             &vandelay.delete.record;</button>
+                 </td>
+             </tr>
+         </table>
+     </div>
+ </div>
+ <div dojoType="dijit.layout.ContentPane" layoutAlign="client">
+     <table dojoType='dojox.grid.DataGrid' jsId='attrEditorGrid' query="{id: '*'}" autoHeight='true'> 
+         <thead>
+             <tr>
+                 <th field='id'>&vandelay.id;</th>
+                 <th field='code' width='auto'>&vandelay.code;</th>
+                 <th field='description' width='auto'>&vandelay.descrip;</th>
+                 <th field='tag' get='attrGridGetTag'>&vandelay.tag;</th>
+                 <th field='subfield' get='attrGridGetSubfield'>&vandelay.subfield;</th>
+                 <th field='xpath' width='auto'>&vandelay.xpath;</th>
+                 <th field='remove' width='auto'>&vandelay.remove;</th>
+             </tr>
+         </thead>
+     </table>
+     <div/>
+ </div>
index 0000000,90f3546..2376dbc
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,44 +1,41 @@@
 -                    /*
 -                    value: '&lt;input type="checkbox" name="vl-overlay-target-RECID" '+
 -                        'onclick="vlHandleOverlayTargetSelected(ID, GRIDID);" gridid="GRIDID" match="ID"/>'
 -                        */
+ <script type="text/javascript">
+     var vlMatchGridLayout;
+     function resetVlMatchGridLayout() {
+         vlMatchGridLayout = [{
+             defaultCell: {styles: 'text-align: center;'},
+             cells : [[
+                 {
+                     name: '&vandelay.overlay.target;', 
+                     get: vlGetOverlayTargetSelector,
+                     formatter : vlFormatOverlayTargetSelector,
 -                {name:'&vandelay.source.match.point;', field:'src_matchpoint'},
 -                {name:'&vandelay.dest.match.point;', field:'dest_matchpoint'},
+                 },
+                 {name: '&vandelay.id;', field:'id'},
+                 {   name: '&vandelay.view.marc;', 
+                     get: vlGetViewMARC, 
+                     formatter : vlFormatViewMatchMARC
+                 },
++                {name: 'Match Score', field:'match_score'},
++                {name: 'Queued Record Quality', field:'rec_quality'},
++                {name: 'Matched Record Quality', field:'match_quality'},
+                 {name: '&vandelay.creator;', get: vlGetCreator},
+                 {name: '&vandelay.create.date;', field:'create_date', get: vlGetDateTimeField},
+                 {name: '&vandelay.last.edit.date;', field:'edit_date', get: vlGetDateTimeField},
+                 {name: '&vandelay.source;', field:'source'},
+                 {name: '&vandelay.tcn.source;', field:'tcn_source'},
+                 {name: '&vandelay.tcn.value;', field:'tcn_value'}
+             ]]
+         }];
+     }
+ </script>
+ <h1>&vandelay.import.matches;</h1><br/>
+ <div dojoType="dijit.layout.ContentPane" layoutAlign='client'>
+     <button dojoType='dijit.form.Button' 
+         onclick="displayGlobalDiv('vl-queue-div');">&#x2196; &vandelay.back.to.import.queue;</button>
+ </div>
+ <div dojoType="dijit.layout.ContentPane" layoutAlign='client'>
+     <table dojoType='dojox.grid.DataGrid' jsId='vlMatchGrid' query='{id:"*"}' autoHeight='true'> 
+     </table>
+ </div>
index 0000000,5bd4d4d..0220d6a
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,23 +1,28 @@@
 -            fieldOrder="['name', 'owner', 'preserve_spec', 'replace_spec', 'add_spec', 'strip_spec']"
+ <div dojoType="dijit.layout.ContentPane" layoutAlign="client">
+     <div dojoType="dijit.layout.ContentPane" layoutAlign="top" class='oils-header-panel'>
+         <div>Overlay / Merge Profiles</div>
+         <div>
+             <button dojoType='dijit.form.Button' onClick='pGrid.showCreateDialog()'>New Merge Profile</button>
+             <button dojoType='dijit.form.Button' onClick='pGrid.deleteSelected()'>Delete Selected</button>
+         </div>
+     </div>
+     <div>
+         <span style='padding-right:10px;'>Context Org Unit</span>
+         <select dojoType="openils.widget.OrgUnitFilteringSelect" jsId='profileContextOrgSelector'
+             searchAttr='shortname' labelAttr='shortname'> </select>
+     </div>
+     <table  jsId="pGrid"
+             dojoType="openils.widget.AutoGrid"
 -            defaultCellWidth='"auto"'
++            fieldOrder="['name', 'owner', 'preserve_spec', 'replace_spec', 'add_spec', 'strip_spec', 'lwm_ratio']"
+             query="{id: '*'}"
++            defaultCellWidth='"14%"'
+             fmClass='vmp'
+             showPaginator='true'
+             editOnEnter='true'>
++        <thead>
++            <tr>
++                <th field='owner' get='vlGetOrg'/>
++            </tr>
++        </thead>
+     </table>
+ </div>
index 0000000,e7d6eaf..466ee4f
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,201 +1,247 @@@
 -<div dojoType="dijit.layout.ContentPane" layoutAlign='client'>
 -    <table class='wide'>
 -        <tr>
 -            <td align='left'>
 -                <h1>&vandelay.record.queue; <span style='font-style:italic;' id='vl-queue-summary-name'/></h1><br/>
 -            </td>
 -            <td align='right'>
 -                &vandelay.queue.total; <span style='font-weight:bold;' id='vl-queue-summary-total-count'/>
 -                &vandelay.queue.imported; <span style='font-weight:bold;' id='vl-queue-summary-import-count'/>
 -            </td>
 -        </tr>
 -    </table>
 -</div>
 -
 -<br/>
 -
 -<div jsId='queueItemsImportDialog' dojoType="dijit.Dialog" title="Import Items">
 -    <div dojoType="dijit.layout.ContentPane">
 -        <table class='form_table'>
 -            <tbody>
++<div dojoType="dijit.layout.ContentPane" layoutAlign='client' style='margin-top:10px;'>
++    <fieldset id='vl-queue-filter-fieldset'>
++        <legend>Queue <span style='font-style:italic;' id='vl-queue-summary-name'/></legend>
++        <table width='100%'><tr>
++            <td> <!-- big left td -->
++            <table>
+                 <tr>
 -                    <td>&vandelay.auto.import.noncolliding;</td>
 -                    <td colspan='4'>
 -                        <input jsId='vlUploadQueueAutoImport2' dojoType='dijit.form.CheckBox'/>
++                    <td valign='top'>
++                        <table class='queue-nav-table'>
++                            <thead><tr><th colspan='2' class='queue-nav-table-label'>Queue Actions</th></tr></thead>
++                            <tbody>
++                                <tr><td><a href='javascript:;' onclick='vlHandleQueueItemsAction("import")'>&vandelay.import.selected;</a></td></tr>
++                                <tr><td><a href='javascript:;' onclick='vlHandleQueueItemsAction("import_all")'>&vandelay.import.all;</a></td></tr>
++                                <tr><td><a href='javascript:;' onclick='vlLoadErrorUIAll();'>View Import Items</a></td></tr>
++                                <tr><td><a href='javascript:;' onclick='
++                                    if(confirm("&vandelay.sure.to.delete.queue;")) {
++                                        vlDeleteQueue(currentType, currentQueueId, 
++                                            function() { displayGlobalDiv("vl-marc-upload-div"); });}'>&vandelay.delete.queue;</a></td></tr>
++                            </tbody>
++                        </table>
+                     </td>
 -                </tr>
 -                <tr>
 -                    <td>&vandelay.auto.import.auto_overlay_exact;</td>
 -                    <td colspan='4'>
 -                        <input jsId='vlUploadQueueAutoOverlayExact2' dojoType='dijit.form.CheckBox'/>
 -                    </td>
 -                </tr>
 -                <tr>
 -                    <td>&vandelay.auto.import.auto_overlay_1match;</td>
 -                    <td colspan='4'>
 -                        <input jsId='vlUploadQueueAutoOverlay1Match2' dojoType='dijit.form.CheckBox'/>
 -                    </td>
 -                </tr>
 -                <tr>
 -                    <td>&vandelay.auto.import.merge_profile;</td>
 -                    <td colspan='4'>
 -                        <div jsId='vlUploadMergeProfile2' 
 -                            dojoType='dijit.form.FilteringSelect' required='false' labelAttr='name' searchAttr='name'/>
 -                    </td>
 -                </tr>
 -                <tr>
 -                    <td>
 -                        <button dojoType='dijit.form.Button' jsId='queueItemsImportCancelButton'>Cancel</button>
++
++                    <td valign='top'>
++                        <table  id='vl-queue-summary-table' class='queue-nav-table'>
++                            <thead><tr><th colspan='2' class='queue-nav-table-label'>Queue Summary</th></tr></thead>
++                            <tbody>
++                                <tr><td>&vandelay.queue.total;</td><td> <span style='font-weight:bold;' id='vl-queue-summary-total-count'/></td></tr>
++                                <tr><td>&vandelay.queue.imported;</td><td> <span style='font-weight:bold;' id='vl-queue-summary-import-count'/></td></tr>
++                                <tr><td>Record Import Failures</td><td> <span style='font-weight:bold;' id='vl-queue-summary-rec-error-count'/></td></tr>
++                                <tr><td>Items in Queue</td><td> <span style='font-weight:bold;' id='vl-queue-summary-import-item-count'/></td></tr>
++                                <tr><td>Items Imported</td><td> <span style='font-weight:bold;' id='vl-queue-summary-import-item-imported-count'/></td></tr>
++                                <tr><td>Item Import Failures</td><td> <span style='font-weight:bold;' id='vl-queue-summary-item-error-count'/></td></tr>
++                            </tbody>
++                        </table>
+                     </td>
 -                    <td>
 -                        <button dojoType='dijit.form.Button' jsId='queueItemsImportGoButton'>Import</button>
++
++                    <td valign='top'> <!-- filters -->
++                        <table id='vl-queue-filter-table' class='queue-nav-table'>
++                            <thead><tr><th colspan='2' class='queue-nav-table-label'>Queue Filters</th></tr></thead>
++                            <tbody>
++                                <tr>
++                                    <td>&vandelay.limit.to.collision.matches;</td>
++                                    <td>
++                                        <input dojoType='dijit.form.CheckBox' 
++                                            jsId='vlQueueGridShowMatches' onchange='retrieveQueuedRecords();'/>
++                                    </td>
++                                </tr>
++                                <tr>
++                                    <td>&vandelay.limit.to.non.imported;</td>
++                                    <td>
++                                        <input dojoType='dijit.form.CheckBox' 
++                                            jsId='vlQueueGridShowNonImport' onchange='retrieveQueuedRecords();'/>
++                                    </td>
++                                </tr>
++                                <tr>
++                                    <td>&vandelay.limit.to.import_error;</td>
++                                    <td>
++                                        <input dojoType='dijit.form.CheckBox' 
++                                            jsId='vlQueueGridShowImportErrors' onchange='retrieveQueuedRecords();'/>
++                                    </td>
++                                </tr>
++                            </tbody>
++                        </table>
+                     </td>
+                 </tr>
 -            </tbody>
 -        </table>
 -    </div>
 -</div>
 -
 -<!-- queue grid navigation row -->
 -<div dojoType="dijit.layout.ContentPane" layoutAlign='client'>
 -
 -    <table width='100%' style='margin-bottom:0px;'>
 -        <tr>
 -            <td align='left' valign='bottom'>
 -                <select id='vl-queue-actions-selector'>
 -                    <option selected='selected' disabled='disabled' value='select-actions'>&vandelay.select_actions;</option>
 -                    <option value='import'>&vandelay.import.selected;</option>
 -                    <option value='import_all'>&vandelay.import.all;</option>
 -                    <option value='delete_queue'>&vandelay.delete.queue;</option>
 -                </select>
 -                <script type="text/javascript">
 -                    var sel = dojo.byId('vl-queue-actions-selector');
 -                    sel.onchange = function(evt) {
 -                        switch(openils.Util.selectorValue(evt.target)) {
 -                            case 'import': vlHandleQueueItemsAction('import'); break;;
 -                            case 'import_all': vlHandleQueueItemsAction('import_all'); break;;
 -                            case 'delete_queue': 
 -                                if(confirm('&vandelay.sure.to.delete.queue;')) {
 -                                    vlDeleteQueue(currentType, currentQueueId, 
 -                                        function() { displayGlobalDiv('vl-marc-upload-div'); });
 -                                }
 -                        }
 -                        evt.target.selectedIndex = 0;
 -                    }
 -                </script>
 -            </td>
 -            <td align='middle' valign='bottom'>
 -                <style type="text/css">.filter_span { padding-right: 5px; border-right: 2px solid #e8e1cf; } </style>
 -                <table><tr>
 -                    <td>
 -                        <span>&vandelay.limit.to.collision.matches;</span>
 -                        <span class='filter_span'>
 -                            <input dojoType='dijit.form.CheckBox' jsId='vlQueueGridShowMatches' onchange='retrieveQueuedRecords();'/>
 -                        </span>
 -
 -                        <span>&vandelay.limit.to.non.imported;</span>
 -                        <span class='filter_span'>
 -                            <input dojoType='dijit.form.CheckBox' jsId='vlQueueGridShowNonImport' 
 -                                checked='checked' onchange='retrieveQueuedRecords();'/>
 -                        </span>
++            </table>
++        </td>
 -                        <span>&vandelay.results.per.page;</span>
 -                        <span class='filter_span'>
++        <td align='right' valign='bottom'> <!-- big right td -->
++            <table id='vl-queue-paging-table' class='queue-nav-table'>
++                <tbody>
++                    <tr><td valign='bottom' align='right'>
++                        <select id='vl-queue-export-options' style='margin-right: 10px;'>
++                            <!-- TODO I18N -->
++                            <option value=''>Export Queue As...</option>
++                            <option value='print'>Print</option>
++                            <option value='csv'>CSV</option>
++                            <option value='email'>Email</option>
++                        </select>
++                        <span style='padding-right:5px;'>&vandelay.results.per.page;</span>
++                        <span class='queue-pager-span'>
+                             <select jsId='vlQueueDisplayLimit' id='vl-queue-display-limit-selector'
+                                 value='10' onchange='retrieveQueuedRecords();'>
+                                 <option value='10'>10</option>
+                                 <option value='20'>20</option>
+                                 <option value='50'>50</option>
+                                 <option value='100'>100</option>
+                             </select>
+                         </span>
 -                        <span style='padding-left:5px;'>&vandelay.page;</span>
 -                        <input style='width:36px;' dojoType='dijit.form.TextBox' jsId='vlQueueDisplayPage' value='1'/>
 -                    </td>
 -                </tr></table>
 -            </td>
 -            <td align='right' valign='bottom'>
 -                <span style='padding-right:4px;'>
 -                    <a href='javascript:void(0);' onclick='vlQueueGridPrevPage();'>&vandelay.prev.page;</a>
 -                </span>
 -                <span style='padding-right:10px;'>
 -                    <a href='javascript:void(0);' onclick='vlQueueGridNextPage();'>&vandelay.next.page;</a>
 -                </span>
 -            </td>
 -        </tr>
 -    </table>
 -</div>
++                        <span class='queue-pager-span'>
++                            <span style='padding-left:5px;'>&vandelay.page;</span>
++                            <input style='width:36px;' dojoType='dijit.form.TextBox' jsId='vlQueueDisplayPage' value='1'/>
++                        </span>
++                        <span style='padding-right:8px;'>
++                            <a href='javascript:void(0);' onclick='vlQueueGridPrevPage();'>&vandelay.prev.page;</a>
++                        </span>
++                        <span style='padding-right:10px;'>
++                            <a href='javascript:void(0);' onclick='vlQueueGridNextPage();'>&vandelay.next.page;</a>
++                        </span>
++                    </td></tr>
++                </tbody>
++            </table>
++        </td>
++    </tr></table>
++    </fieldset>
++</div>
+ <!-- Bib Queue Grid -->
+ <div class='' id='vl-bib-queue-grid-wrapper' dojoType='dijit.layout.ContentPane'>
+     <table dojoType='dojox.grid.DataGrid' jsId='vlBibQueueGrid' query="{id:'*'}" autoHeight='true'>
+         <thead>
+             <tr>
+                 <th 
+                     field='+row_selector'
+                     get='vlQueueGridDrawSelectBox'
+                     formatter='vlQueueGridFormatSelectBox'
++                    width='16'
+                     styles='text-align: center;'
+                     nonSelectable='true'>
+                         <input id="vl-queue-grid-row-selector" type="checkbox" onclick="vlToggleQueueGridSelect();"></input>
+                 </th>
+                 <th
+                     field='+view_marc'
+                     get='vlGetViewMARC'
+                     formatter='vlFormatViewMARC' 
+                     styles='text-align: center;'
+                     nonSelectable='true'>&vandelay.view.marc;</th>
+                 <th
+                     field='+get_matches'
+                     get='vlGetViewMatches'
+                     formatter='vlFormatViewMatches'
+                     styles='text-align: center;'
+                     nonSelectable='true'>&vandelay.matches;</th>
+                 <th
++                    field='+get_errors'
++                    get='vlGetViewErrors'
++                    formatter='vlFormatViewErrors'
++                    styles='text-align: center;'
++                    nonSelectable='true'>Import Failures</th>
++                <th
+                     field='import_time'
+                     styles='text-align: center;'
+                     get='vlGetDateTimeField'>&vandelay.import.time;</th>
+             </tr>
+         </thead>
+     </table>
+     <div/>
+ </div>
+ <!-- Auth Queue Grid -->
+ <div class='' id='vl-auth-queue-grid-wrapper' dojoType='dijit.layout.ContentPane'>
+     <table dojoType='dojox.grid.DataGrid' jsId='vlAuthQueueGrid' query="{id:'*'}" autoHeight='true'> 
+         <thead>
+             <tr>
+                 <th 
+                     field='+row_selector'
+                     get='vlQueueGridDrawSelectBox'
+                     formatter='vlQueueGridFormatSelectBox'
+                     styles='text-align: center;'
+                     nonSelectable='true'>
+                         <input id="vl-queue-grid-row-selector" type="checkbox" onclick="vlToggleQueueGridSelect();"></input>
+                 </th>
+                 <th
+                     field='+view_marc'
+                     get='vlGetViewMARC'
+                     formatter='vlFormatViewMARC' 
+                     styles='text-align: center;'
+                     nonSelectable='true'>&vandelay.view.marc;</th>
+                 <th
+                     field='+get_matches'
+                     get='vlGetViewMatches'
+                     formatter='vlFormatViewMatches'
+                     styles='text-align: center;'
+                     nonSelectable='true'>&vandelay.matches;</th>
+                 <th
++                    field='+get_errors'
++                    get='vlGetViewErrors'
++                    formatter='vlFormatViewErrors'
++                    styles='text-align: center;'
++                    nonSelectable='true'>Import Failures</th>
++                <th
+                     field='import_time'
+                     styles='text-align: center;'
+                     get='vlGetDateTimeField'>&vandelay.import.time;</th>
+             </tr>
+         </thead>
+     </table>
+     <div/>
+ </div>
++<div jsId='queueItemsImportDialog' dojoType="dijit.Dialog" title="Import Items">
++    <div dojoType="dijit.layout.ContentPane">
++        <table class='form_table'>
++            <tbody>
++                <tr>
++                    <td>&vandelay.auto.import.merge_profile;</td>
++                    <td colspan='4'>
++                        <div jsId='vlUploadMergeProfile2' 
++                            dojoType='dijit.form.FilteringSelect' required='false' labelAttr='name' searchAttr='name'/>
++                    </td>
++                </tr>
++                <tr>
++                    <td>&vandelay.auto.import.noncolliding;</td>
++                    <td colspan='4'>
++                        <input jsId='vlUploadQueueImportNoMatch2' dojoType='dijit.form.CheckBox'/>
++                    </td>
++                </tr>
++                <tr>
++                    <td>&vandelay.auto.import.auto_overlay_exact;</td>
++                    <td colspan='4'>
++                        <input jsId='vlUploadQueueAutoOverlayExact2' dojoType='dijit.form.CheckBox'/>
++                    </td>
++                </tr>
++                <tr>
++                    <td>&vandelay.auto.import.auto_overlay_1match;</td>
++                    <td colspan='4'>
++                        <input jsId='vlUploadQueueAutoOverlay1Match2' dojoType='dijit.form.CheckBox'/>
++                    </td>
++                </tr>
++                <tr>
++                    <td>&vandelay.auto.import.auto_overlay_best;</td>
++                    <td colspan='4'><input jsId='vlUploadQueueAutoOverlayBestMatch2' dojoType='dijit.form.CheckBox'/></td>
++                </tr>
++                <tr>
++                    <td>&vandelay.auto.import.auto_overlay_best_ratio;</td>
++                    <td colspan='4'>
++                        <input style='width:3em' value='0.0' jsId='vlUploadQueueAutoOverlayBestMatchRatio2' dojoType='dijit.form.TextBox'/>
++                        <span style='padding-left: 10px; font-size:90%'>(&vandelay.auto.import.auto_overlay_best_ratio.desc;)</span>
++                    </td>
++                </tr>
++                <tr>
++                    <td>
++                        <button dojoType='dijit.form.Button' jsId='queueItemsImportCancelButton'>Cancel</button>
++                    </td>
++                    <td>
++                        <button dojoType='dijit.form.Button' jsId='queueItemsImportGoButton'>Import</button>
++                    </td>
++                </tr>
++            </tbody>
++        </table>
++    </div>
++</div>
++
++
index 0000000,69c2190..144cd45
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,14 +1,16 @@@
+ <div dojoType="dijit.Toolbar" id='toolbar'>
+     <div dojoType="dijit.form.Button" iconClass="dijitEditorIcon dijitEditorIconCopy" id='vl-menu-marc-export'
+         onclick="displayGlobalDiv('vl-marc-export-div');" showLabel="true">&vandelay.export.records;</div>
+     <div dojoType="dijit.form.Button" iconClass="dijitEditorIcon dijitEditorIconCopy"  id='vl-menu-marc-upload'
+         onclick="displayGlobalDiv('vl-marc-upload-div');" showLabel="true">&vandelay.import.records;</div>
+     <div dojoType="dijit.form.Button" iconClass="dijitEditorIcon dijitEditorIconCopy"  id='vl-menu-queue-select'
+         onclick="vlShowQueueSelect();" showLabel="true">&vandelay.inspect.queue;</div>
+     <div dojoType="dijit.form.Button" iconClass="dijitEditorIcon dijitEditorIconCopy"  id='vl-menu-attr-editor'
+         onclick="vlShowAttrEditor();" showLabel="true">&vandelay.edit.attributes;</div>
+     <div dojoType="dijit.form.Button" iconClass="dijitEditorIcon dijitEditorIconCopy"  id='vl-menu-profile-editor'
+         onclick="vlShowProfileEditor();" showLabel="true">&vandelay.edit.profiles;</div>
++    <div dojoType="dijit.form.Button" iconClass="dijitEditorIcon dijitEditorIconCopy"  id='vl-menu-match-set-editor'
++        onclick="vlShowMatchSetEditor();" showLabel="true">&vandelay.edit.match_set;</div>
+     <div dojoType="dijit.form.Button" iconClass="dijitEditorIcon dijitEditorIconCopy"  id='vl-menu-import-item-attr-editor'
+         onclick="vlShowImportItemAttrEditor();" showLabel="true">&vandelay.edit.import_item_attrs;</div>
+ </div>
index 0000000,aca6320..b432252
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,79 +1,96 @@@
 -            <td>&vandelay.auto.import.noncolliding;</td>
 -            <td colspan='4'>
 -                <input jsId='vlUploadQueueAutoImport' dojoType='dijit.form.CheckBox'/>
+ <h1>&vandelay.marc.file.upload;</h1><br/>
+ <form id="vl-marc-upload-form" enctype="multipart/form-data">
+     <input type='hidden' name='ses' id='vl-ses-input'/>
+     <table class='form_table'>
+         <tr>
+             <td>&vandelay.record.type;</td>
+             <td colspan='4'>
+                 <select id='vl-record-type' dojoType='dijit.form.FilteringSelect' 
+                         jsId='vlUploadRecordType' onchange='vlShowUploadForm();'>
+                     <option value='bib' selected='selected'>&vandelay.bib.records;</option>
+                     <option value='auth'>&vandelay.auth.records;</option>
+                 </select>
+             </td>
+         </tr>
+         <tr>
+             <td>&vandelay.create.upload.queue;</td>
+             <td>
+                 <input type='text' dojoType='dijit.form.TextBox' id='vl-queue-name' size='32'></input>
+             </td>
+             <td>&vandelay.add.existing.queue;</td>
+             <td>
+                 <select jsId='vlUploadQueueSelector' dojoType='dijit.form.FilteringSelect' required='false'>
+                 </select>
+             </td>
+         </tr>
+         <tr>
 -            <td>&vandelay.auto.import.auto_overlay_exact;</td>
 -            <td colspan='4'>
 -                <input jsId='vlUploadQueueAutoOverlayExact' dojoType='dijit.form.CheckBox'/>
++            <td>Record Match Set</td>
++            <td>
++                <input jsId='vlUploadQueueMatchSet'
++                    dojoType='dijit.form.FilteringSelect' labelAttr='name' searchAttr='name'/>
+             </td>
+         </tr>
+         <tr>
 -            <td>&vandelay.auto.import.auto_overlay_1match;</td>
 -            <td colspan='4'>
 -                <input jsId='vlUploadQueueAutoOverlay1Match' dojoType='dijit.form.CheckBox'/>
++            <td>Holdings Import Profile</td>
++            <td>
++                <input jsId='vlUploadQueueHoldingsImportProfile'
++                    dojoType='dijit.form.FilteringSelect' labelAttr='name' searchAttr='name'/>
+             </td>
+         </tr>
+         <tr>
 -            <td>Holdings Import Profile</td>
 -            <td>
 -                <input jsId='vlUploadQueueHoldingsImportProfile'
 -                    dojoType='dijit.form.FilteringSelect' labelAttr='name' searchAttr='name'/>
++            <td>&vandelay.import.bib_sources;</td>
++            <td>
++                <select name='bib_source' jsId='vlUploadSourceSelector' 
++                    dojoType='dijit.form.FilteringSelect' labelAttr='source' searchAttr='source'/>
+             </td>
+         </tr>
++        <tr><td colspan='2' style='margin-top:10px;border-bottom:1px solid #888;border-top:2px solid #888'>
++            <b>&vandelay.import.actions;</b>
++        </td></tr>
+         <tr>
+             <td>&vandelay.auto.import.merge_profile;</td>
+             <td colspan='4'>
+                 <div jsId='vlUploadMergeProfile' dojoType='dijit.form.FilteringSelect' required='false' labelAttr='name' searchAttr='name'/>
+             </td>
+         </tr>
+         <tr>
 -            <td>&vandelay.import.bib_sources;</td>
 -            <td>
 -                <select name='bib_source' jsId='vlUploadSourceSelector' 
 -                    dojoType='dijit.form.FilteringSelect' labelAttr='source' searchAttr='source'/>
++            <td>&vandelay.auto.import.noncolliding;</td>
++            <td colspan='4'>
++                <input jsId='vlUploadQueueImportNoMatch' dojoType='dijit.form.CheckBox'/>
+             </td>
+         </tr>
+         <tr>
 -            <td>
 -                <span id="vl-file-label">&vandelay.file.to.upload;</span>
++            <td>&vandelay.auto.import.auto_overlay_exact;</td>
++            <td colspan='4'>
++                <input jsId='vlUploadQueueAutoOverlayExact' dojoType='dijit.form.CheckBox'/>
+             </td>
+         </tr>
+         <tr>
 -            <td id='vl-input-td' colspan='4'>
 -                <input size='48' type="file" name="marc_upload"/>
++            <td>&vandelay.auto.import.auto_overlay_1match;</td>
++            <td colspan='4'>
++                <input jsId='vlUploadQueueAutoOverlay1Match' dojoType='dijit.form.CheckBox'/>
+             </td>
 -            <td align='center' colspan='4'>
 -                <button dojoType="dijit.form.Button" onclick="batchUpload()">&vandelay.upload;</button>
++        </tr>
++        <tr>
++            <td>&vandelay.auto.import.auto_overlay_best;</td>
++            <td colspan='4'><input jsId='vlUploadQueueAutoOverlayBestMatch' dojoType='dijit.form.CheckBox'/></td>
++        </tr>
++        <tr>
++            <td>&vandelay.auto.import.auto_overlay_best_ratio;</td>
++            <td colspan='4'>
++                <input style='width:3em' value='0.0' jsId='vlUploadQueueAutoOverlayBestMatchRatio' dojoType='dijit.form.TextBox'/>
++                <span style='padding-left: 10px; font-size:90%'>(&vandelay.auto.import.auto_overlay_best_ratio.desc;)</span>
+             </td>
+         </tr>
++        <tr><td colspan='2' style='border-bottom:2px solid #888;'></td></tr>
++        <tr><td colspan='2' style='padding-bottom: 10px;'></td></tr>
+         <tr>
++            <td colspan='5'>
++                <span id="vl-file-label">&vandelay.file.to.upload;</span>
++                <input size='48' style='border:1px solid #888;' type="file" name="marc_upload"/>
++                <span style='margin-left:10px;'><button dojoType="dijit.form.Button" onclick="batchUpload()">&vandelay.upload;</button></span>
+             </td>
+         </tr>
+     </table>
+ </form>
index 0000000,2e2a2e0..78f23a8
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,45 +1,50 @@@
+ [% WRAPPER 'default/base.tt2' %]
+ [% ctx.page_title = 'MARC Import/Export' %]
+ [% ctx.dtd = '<!DOCTYPE html SYSTEM "'_ ctx.web_dir _'/opac/locale/' _ ctx.locale _ '/vandelay.dtd">' %]
+ <script type="text/javascript" src='[% ctx.media_prefix %]/js/ui/default/vandelay/vandelay.js'> </script>
+ <link rel='stylesheet' type='text/css' href='[% ctx.media_prefix %]/css/skin/[% ctx.skin %]/vandelay.css'/>
+ <link rel='stylesheet' type='text/css' href='[% ctx.media_prefix %]/css/theme/[% ctx.skin %]/vandelay.css'/>
+ <div dojoType="dijit.layout.ContentPane" layoutAlign='top' id="vl-nav-bar" style="visibility: hidden;">
+     [% INCLUDE 'default/vandelay/inc/toolbar.tt2' %]
+ </div>
+ <div dojoType="dijit.layout.ContentPane" layoutAlign='client'>
+     [% INCLUDE 'default/vandelay/inc/progress.tt2' %]
+ </div>
+ <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-marc-export-div' class='hidden content'>
+     [% INCLUDE 'default/vandelay/inc/export.tt2' %]
+ </div>
+ <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-marc-upload-div' class='hidden content'>
+     [% INCLUDE 'default/vandelay/inc/upload.tt2' %]
+ </div>
+ <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-queue-div' class='hidden content'>
+     [% INCLUDE 'default/vandelay/inc/queue.tt2' %]
+ </div>
+ <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-match-div' class='hidden content'>
+     [% INCLUDE 'default/vandelay/inc/matches.tt2' %]
+ </div>
+ <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-marc-html-div' class='hidden content'>
+     [% INCLUDE 'default/vandelay/inc/marchtml.tt2' %]
+ </div>
+ <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-queue-select-div' class='hidden content'>
+     [% INCLUDE 'default/vandelay/inc/queueselect.tt2' %]
+ </div>
+ <div dojoType="dijit.layout.ContentPane" layoutAlign="client"  id="vl-attr-editor-div" 
+         class='hidden attr-editor-detail-content-pane content' title='&vandelay.edit.attrs;'>
+     [% INCLUDE 'default/vandelay/inc/attrs.tt2' %]
+ </div>
+ <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-profile-editor-div' class='hidden content'>
+     [% INCLUDE 'default/vandelay/inc/profiles.tt2' %]
+ </div>
++<div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-match-set-editor-div' class='hidden content'>
++</div>
+ <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-item-attr-editor-div' class='hidden content'>
+     [% INCLUDE 'default/vandelay/inc/item_attrs.tt2' %]
+ </div>
++<div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-import-error-div' class='hidden content'>
++    [% INCLUDE 'default/vandelay/inc/import_errors.tt2' %]
++</div>
+ [% END %]
index 0000000,a41f658..cdfde46
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,6 +1,6 @@@
 -    <a href="javascript:;">Purchase Request</a><br />
+ <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="http://www.kcls.org/usingthelibrary/request/">Purchase Request</a><br />
+     <strong>Note:</strong> You must be logged in to make a Purchase Request<br />
+ </p>