[open-ils-commits] r983 - conifer/branches/rel_1_6_1/web/opac/skin/uwin/js (artunit)

svn at svn.open-ils.org svn at svn.open-ils.org
Fri Sep 10 17:02:23 EDT 2010


Author: artunit
Date: 2010-09-10 17:02:17 -0400 (Fri, 10 Sep 2010)
New Revision: 983

Modified:
   conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/adv_global.js
   conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/copy_details.js
   conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/depth_selector.js
   conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/myopac.js
   conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/rdetail.js
   conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/result_common.js
   conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/rresult.js
   conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/search_bar.js
Log:
syncing js files

Modified: conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/adv_global.js
===================================================================
--- conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/adv_global.js	2010-09-10 20:56:39 UTC (rev 982)
+++ conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/adv_global.js	2010-09-10 21:02:17 UTC (rev 983)
@@ -121,6 +121,10 @@
 
     var types = getObjectKeys(search.searches);
 
+    // if we have browser cached data, clear it before populating from cookie
+    if (search.searches[types[0]].term)
+        clearSearchBoxes();
+
     /* pre-add the needed rows */
     while($('adv_global_tbody').getElementsByTagName('tr').length - 1 < types.length)
         advAddGblRow();
@@ -307,7 +311,7 @@
             string = string.replace(/\s*$/,'');
 			//searches[stype].term = string;
             if(searches) searches += ' ';
-            searches += stype + ':'+ string;
+            searches += stype + ': '+ string;
 		}
 	}
 

Modified: conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/copy_details.js
===================================================================
--- conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/copy_details.js	2010-09-10 20:56:39 UTC (rev 982)
+++ conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/copy_details.js	2010-09-10 21:02:17 UTC (rev 983)
@@ -2,8 +2,15 @@
 var cpdCounter = 0;
 var cpdNodes = {};
 
+/* showDueDate will show the due date in the OPAC */
+var showDueDate = false;
+/* showDueTime will show the due time (hours and minutes) in the OPAC;
+   if showDueDate is false, then showDueTime has no effect
+*/
+var showDueTime = false;
+
 function cpdBuild( contextTbody, contextRow, record, callnumber, orgid, depth, copy_location ) {
-var i = cpdCheckExisting(contextRow);
+	var i = cpdCheckExisting(contextRow);
 	if(i) return i;
 
 	var counter = cpdCounter++;
@@ -25,6 +32,9 @@
 		unHideMe($n(templateRow, 'age_protect_label'));
 		unHideMe($n(templateRow, 'create_date_label'));
 		unHideMe($n(templateRow, 'holdable_label'));
+	}
+
+	if (isXUL() || showDueDate) {
 		unHideMe($n(templateRow, 'due_date_label'));
 	}
 
@@ -177,6 +187,9 @@
 		unHideMe($n(copyrow, 'age_protect_value'));
 		unHideMe($n(copyrow, 'create_date_value'));
 		unHideMe($n(copyrow, 'copy_holdable_td'));
+	}
+
+	if(isXUL() || showDueDate) {
 		unHideMe($n(copyrow, 'copy_due_date_td'));
 	}
 
@@ -219,6 +232,30 @@
 			);
 		}
 
+		/* show the book now link */
+		l = $n(row, 'copy_reserve_link');
+		unHideMe(l);
+		l.onclick = function() {
+			// XXX FIXME this duplicates things in cat/util.js
+			// Also needs i18n
+			dojo.require("fieldmapper.Fieldmapper");
+			var r = fieldmapper.standardRequest(
+				["open-ils.booking",
+					"open-ils.booking.resources.create_from_copies"],
+				[G.user.session, [copy.id()]]
+			);
+			if (!r) {
+				alert("No response from server!");
+			} else if (r.ilsevent != undefined) {
+				alert("Error from server:\n" + js2JSON(r));
+			} else {
+				xulG.auth = {"session": {"key": G.user.session}};
+				xulG.bresv_interface_opts = {"booking_results": r};
+				location.href = "/eg/booking/reservation";
+			}
+		}
+
+
 		if( copy.age_protect() ) 
 			appendClear($n(row, 'age_protect_value'), text(copy.age_protect().name()));
 
@@ -236,15 +273,21 @@
 		} else {
 			$n(row, 'copy_is_holdable').appendChild(text(no));	
 		}
+	}
 
+	if (isXUL() || showDueDate) {
 		var circ;
 		if( copy.circulations() ) {
 			circ = copy.circulations()[0];
 			if( circ ) {
-				$n(row, 'copy_due_date').appendChild(text(circ.due_date().replace(/[T ].*/,'')));
+                                var due_time = dojo.date.stamp.fromISOString(circ.due_date().replace(/(T\d\d:\d\d:\d\d)([+-]\d\d)(\d)/, "$1$2:$3"));
+                                if( showDueTime ) {
+                                        $n(row, 'copy_due_date').appendChild(text(dojo.date.locale.format(due_time, {"formatLength": "medium"})));
+                                } else {
+                                        $n(row, 'copy_due_date').appendChild(text(dojo.date.locale.format(due_time, {"selector": "date", "formatLength": "medium"})));
+                                }
 			}
 		}
-
 	}
 
 	r.args.copy = copy;

Modified: conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/depth_selector.js
===================================================================
--- conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/depth_selector.js	2010-09-10 20:56:39 UTC (rev 982)
+++ conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/depth_selector.js	2010-09-10 21:02:17 UTC (rev 983)
@@ -78,6 +78,7 @@
 	var type;
 	if (location) type = findOrgType(location.ou_type());
 
+	var orgHiding = checkOrgHiding();
 	while( type && location ) {
 		var n = node.cloneNode(true);	
 		n.setAttribute("value", type.depth());
@@ -85,8 +86,14 @@
 		n.appendChild(text(type.opac_label()));
 		selector.appendChild(n);
 		location = findOrgUnit(location.parent_ou());
-		if(location) type = findOrgType(location.ou_type());
-		else type = null;
+		if(location) {
+			type = findOrgType(location.ou_type());
+			if (orgHiding && orgHiding.depth > type.depth()) {
+				type = null;
+			}
+		} else {
+			type = null;
+		}
 	}
 
 	selector.appendChild(node);

Modified: conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/myopac.js
===================================================================
--- conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/myopac.js	2010-09-10 20:56:39 UTC (rev 982)
+++ conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/myopac.js	2010-09-10 21:02:17 UTC (rev 983)
@@ -8,7 +8,11 @@
 var holdCache = {};
 var holdStatusCache = {};
 var allowPendingAddr = false;
+var preventRenewOverdue = false;
+var myopacEnableRefWorks = true;
+var myopacRefWorksHost = 'http://refworks.scholarsportal.info';
 
+
 function clearNodes( node, keepArray ) {
 	if(!node) return;
 	for( var n in keepArray ) node.removeChild(keepArray[n]);
@@ -165,19 +169,42 @@
 		return;
 	}
 
+    var totalAsync = checked.overdue.length + checked.out.length;
+    var fetchedCircs = [];
+    var collectCircs = function(r) {
+        var circ = r.getResultObject();
+        circ._od = r.od;
+        fetchedCircs.push(circ);
+        if(fetchedCircs.length < totalAsync) return;
+
+        // sort by due date, oldest to newest
+        fetchedCircs = fetchedCircs.sort(
+            function(a, b) {
+                if(a.due_date() > b.due_date()) return 1;
+                return -1;
+            }
+        )
+
+        dojo.forEach(fetchedCircs, 
+            function(circ) { 
+                myOPACDrawCheckedItem(circ, tbody);
+            }
+        );
+    }
+
 	for( var i = 0; i < checked.overdue.length; i++ ) {
 		var req = new Request(FETCH_CIRC_BY_ID, G.user.session, checked.overdue[i]);
-		req.request.tbody = tbody;
+		//req.request.tbody = tbody;
 		req.request.od = true;
-		req.callback(myOPACDrawCheckedItem);
+		req.callback(collectCircs);
 		req.send();
 	}
 
 
 	for( var i = 0; i < checked.out.length; i++ ) {
 		var req = new Request(FETCH_CIRC_BY_ID, G.user.session, checked.out[i]);
-		req.request.tbody = tbody;
-		req.callback(myOPACDrawCheckedItem);
+		//req.request.tbody = tbody;
+		req.callback(collectCircs);
 		req.send();
 	}
 
@@ -193,13 +220,14 @@
 }
 
 
-function myOPACDrawCheckedItem(r) {
+//function myOPACDrawCheckedItem(r) {
+function myOPACDrawCheckedItem(circ, tbody) {
 
-	var circ = r.getResultObject();
-	var tbody = r.tbody;
+	//var circ = r.getResultObject();
+	//var tbody = r.tbody;
 	var row = checkedRowTemplate.cloneNode(true);
 	row.id = 'myopac_checked_row_ ' + circ.id();
-   row.setAttribute('circid', circ.id());
+    row.setAttribute('circid', circ.id());
 
 	var due = _trimTime(circ.due_date());
 
@@ -208,7 +236,7 @@
 	//var rnlink = $n( row, "myopac_checked_renew_link" );
 
 	//if( r.od ) due = elem('b', {style:'color:red;font-size:110%'},due);
-	if( r.od ) {
+	if( circ._od ) {
       due = elem('b', null, due);
       addCSSClass(due, 'overdue');
    } else {
@@ -221,7 +249,8 @@
 	//rnlink.setAttribute('href', 'javascript:myOPACRenewCirc("'+circ.id()+'");');
 	circsCache.push(circ);
 
-	if( circ.renewal_remaining() < 1 ) {
+   // Disable renewals if no renewals left or item already overdue
+   if( circ.renewal_remaining() < 1 || (preventRenewOverdue && circ._od)) {
       $n(row, 'selectme').disabled = true;
       if(!__can_renew_one)
          $('mo_renew_button').disabled = true;
@@ -370,7 +399,7 @@
 
         var exp_date;
         if(h.expire_time()) {
-            exp_date = dojo.date.stamp.fromISOString(h.expire_time());
+            exp_date = dojo.date.stamp.fromISOString(h.expire_time().replace(/(T\d\d:\d\d:\d\d)([+-]\d\d)(\d)/, "$1$2:$3"));
             $n(row, 'myopac_hold_expire_time').appendChild(
                 text(dojo.date.locale.format(exp_date, {selector:'date'})));
         }
@@ -560,6 +589,7 @@
 //function _trimTime(time) { if(!time) return ""; return time.replace(/\ .*/,""); }
 function _trimTime(time) { 
 	if(!time) return ""; 
+    time = time.replace(/(T\d\d:\d\d:\d\d)([+-]\d\d)(\d)/, "$1$2:$3");
     var d = dojo.date.stamp.fromISOString(time);
     if(!d) return ""; /* date parse failed */
     return d.iso8601Format('YMD');
@@ -567,7 +597,7 @@
 
 function _trimSeconds(time) { 
     if(!time) return ""; 
-    var d = dojo.date.stamp.fromISOString(time);
+    var d = dojo.date.stamp.fromISOString(time.replace(/(T\d\d:\d\d:\d\d)([+-]\d\d)(\d)/, "$1$2:$3"));
     if(!d) return ""; /* date parse failed */
     return d.iso8601Format('YMDHM',null,true,true);
 }
@@ -665,8 +695,7 @@
 
 	$n(row,'myopac_circ_trans_start').
 		appendChild(text(_trimTime(trans.xact_start())));
-
-   var due = _trimTime(circ.due_date());
+	var due = _trimTime(circ.due_date());
 	var checkin = _trimTime(circ.stop_fines_time());
 
 	$n(row,'myopac_circ_trans_due').appendChild(text(due))
@@ -1063,7 +1092,7 @@
 	var req = new Request(UPDATE_EMAIL, G.user.session, email );
 	req.send(true);
 	if(req.result()) {
-		G.user.usrname(email);
+		G.user.email(email);
 		hideMe($('myopac_update_email_row'));
 		userShown = false;
 		alertId('myopac_email_success');
@@ -1147,7 +1176,23 @@
 			link = $n(row, 'myopac_bb_make_unpublished');
 			link.setAttribute('href', 'javascript:myOPACMakeBBPublished("'+cont.id()+'", true);');
 			unHideMe(link);
+                        
+			var RW = $n(row, 'myopac_bb_exp_refworks');
+			if (RW && myopacEnableRefWorks) {
+				var here = (findOrgUnit(getLocation())).name();
+				var org_name = here.replace(" ", "+");
+				var cgi = new CGI();
 
+				RW.setAttribute('href',
+				myopacRefWorksHost + '/express/expressimport.asp?vendor='
+					+ org_name
+					+ '&filter=MARC+Format&database=All+MARC+Formats&encoding=65001&url=http%3A%2F%2F'
+					+ cgi.server_name + '/opac/extras/feed/bookbag/marctxt-full/'
+					+ cont.id()
+				);
+				RW.setAttribute('target', 'RefWorksMain');
+				unHideMe($n(row, 'myopac_bb_exp_refworks'));
+			}
 		} else { 
 			unHideMe($n(row, 'myopac_bb_published_no')); 
 			var link = $n(row, 'myopac_bb_make_published');
@@ -1347,7 +1392,7 @@
 	duration = parseInt(duration + '000');
 
 	var dtf = circ.circ_time();
-    var start = dojo.date.stamp.fromISOString(circ.circ_time());
+	var start = dojo.date.stamp.fromISOString(circ.circ_time().replace(/(T\d\d:\d\d:\d\d)([+-]\d\d)(\d)/, "$1$2:$3"));
 	var due = new Date(  start.getTime() + duration );
 	appendClear($n(row, 'circ_time'), text(due.iso8601Format('YMDHM', null, true, true)));
 }
@@ -1391,122 +1436,38 @@
 /* true if 1 renewal succeeded */
 var __success_count = 0;
 
-/*
-	holdBlock - checking for holds before allowing renewals
+/* renews all selected circulations */
+function myOPACRenewSelected() {
+   var rows = myopacGetCheckedOutRows();
+	if(!confirm($('myopac_renew_confirm').innerHTML)) return;
+   __success_count = 0;
 
-*/
-function holdBlock(r) {
-	var rec = r.getResultObject();
-	var circ = r.circ;
-				
-	//this may be inefficient, but go this route to snag needed title id
-	var new_req = new Request( FETCH_BIB_ID_BY_BARCODE, rec.barcode() );
-	new_req.send(true);
-				
-	if (new_req) {
-		var record = new_req.result();
-				
-		if (record){
-			//alert(HOLDSU + ' start for ' + circ.id() + ' - ' + rec.barcode());
-			/*
-			var init_request = new Request( LOGIN_INIT, HOLDSU );
-   			init_request.send(true);
-   			var seed = init_request.result();
+   for( var i = 0; i < rows.length; i++ ) {
 
-        		var args = {
-                		password : hex_md5(seed + hex_md5(HOLDSP)),
-                		type            : "opac",
-                		org             : getOrigLocation(),
-				username : HOLDSU
-        		};
+      var row = rows[i];
+      if( ! $n(row, 'selectme').checked ) continue;
+      var circ_id = row.getAttribute('circid');
 
-			var auth_request = new Request( LOGIN_COMPLETE, args );
+	   var circ;
+	   for( var j = 0; j != circsCache.length; j++ ) 
+		   if(circsCache[j].id() == circ_id)
+			   circ = circsCache[j];
 
-        		auth_request.request.alertEvent = false;
-   			auth_request.send(true);
-   			var auth_result = auth_request.result();
+      __renew_circs.push(circ);
+   }
 
-       			if(!auth_result) {
-                		alertId('problem with renewing');
-                		return null;
-        		}
+    if( __renew_circs.length == 0 ) return;
 
-        		var temp_session = auth_result.payload.authtoken;
-			*/
-				
-			//if you needed a special session for this, would use the above
-			//and pass it in the call, however, this doesn't seem to matter
-			//for this call
-			/*
-			new_req = new Request( "open-ils.circ:open-ils.circ.open_holds.retrieve", 
-				temp_session, record, 'T', getOrigLocation() );
-			*/
+    unHideMe($('my_renewing'));
+    moClearCheckedTable();
 
-			//make the call with user's credentials
-			new_req = new Request( "open-ils.circ:open-ils.circ.open_holds.retrieve", 
-				G.user.session, record, 'T', getOrigLocation() );
-				
-			new_req.send(true);
+    for( var i = 0; i < __renew_circs.length; i++ ) {
+        var circ = __renew_circs[i];
+        moRenewCirc( circ.target_copy(), G.user.id(), circ );
+    }
+}
 
-			//we would clean up session right away if we had created one
-			/*
-			var sess_req = new Request(LOGIN_DELETE, temp_session);
-      			sess_req.send(true);
-                	try { sess_req.result(); } catch(E){}
-			*/
-				
-			if (new_req) {
-				record = new_req.result();
-				if (record.length > 0) {
-					var renewTitle = __circ_titles[circ.id()];
-					if (renewTitle) {
-						alert('Sorry, someone has requested \"' + renewTitle +
-							'\", it can not be renewed, please return this title to the library.');
-					}//if renewTitle
-					return null;
-				} else {
-					//alert('renew for ' + circ.id());
-        				moRenewCirc( circ.target_copy(), G.user.id(), circ );
-				}//if record
-			}//if new_req
-		
-		}//if record
-	}//if new_req
 
-}//holdBlock
-
-
-/* renews all selected circulations */
-function myOPACRenewSelected() {
-
-	var rows = myopacGetCheckedOutRows();
-	if(!confirm($('myopac_renew_confirm').innerHTML)) return;
-	__success_count = 0;
-
-	for( var i = 0; i < rows.length; i++ ) {
-
-		var row = rows[i];
-		if( ! $n(row, 'selectme').checked ) continue;
-		var circ_id = row.getAttribute('circid');
-
-		var circ;
-		for( var j = 0; j != circsCache.length; j++ ) {
-			if(circsCache[j].id() == circ_id) {
-				circ = circsCache[j];
-				var cp =  circ.target_copy();
-				if (cp) {
-					var hold_req = new Request(FETCH_FLESHED_COPY, 
-						circ.target_copy() );
-					hold_req.request.circ = circ;
-					hold_req.callback(holdBlock);
-					hold_req.send();
-				}//if cp
-			}//if circsCache
-		}//for j
-	}//for i
-}//myOPACRenewSelected
-
-
 /* renews a single circulation */
 function moRenewCirc(copy_id, user_id, circ) {
 

Modified: conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/rdetail.js
===================================================================
--- conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/rdetail.js	2010-09-10 20:56:39 UTC (rev 982)
+++ conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/rdetail.js	2010-09-10 21:02:17 UTC (rev 983)
@@ -10,16 +10,12 @@
 var rdetailLocalOnly = true;
 var rdetailShowLocal = true;
 var rdetailShowCopyLocation = true;
-var rdetailGoogleBookPreview = false;
+var rdetailGoogleBookPreview = true;
 var rdetailDisplaySerialHoldings = true;
-var rdetailEnableRefWorks = true;
+var rdetailEnableRefWorks = false;
 var rdetailRefWorksHost = 'http://refworks.scholarsportal.info';
+var enableHoldsOnAvailable = false;
 
-/* threshold for paging */
-var rdetailBreakUpLargeSets = true; //flag for paging support
-var pgThreshold = 15; //the number of items to invoke paging
-var pgDisplay = 10; //number of items to display at a time
-
 /* vars vars vars */
 var record = null;
 var cp_statuses = null;
@@ -49,6 +45,8 @@
 
 /* serials are currently the only use of Dojo strings in the OPAC */
 if (rdetailDisplaySerialHoldings) {
+	dojo.require("dijit.Menu");
+	dojo.require("dijit.form.Button");
 	dojo.requireLocalization("openils.opac", "opac");
 	opac_strings = dojo.i18n.getLocalization("openils.opac", "opac");
 }
@@ -134,6 +132,17 @@
 		var req = new Request(FETCH_MFHD_SUMMARY, getRid());
 		req.callback(_holdingsDraw);
 		req.send();
+		if (isXUL()) {
+			var here = findOrgUnit(getLocation());
+			dojo.place("<div id='mfhd_ad_menu></div>", "rdetail_details_table", "after");
+			var mfhd_add = new dijit.Menu({style:"float: right;"});
+			new dijit.MenuItem({onClick:function(){
+				var req = new Request(CREATE_MFHD_RECORD, G.user.session, 1, here.id(), getRid());
+				var res = req.send();
+				alert(dojo.string.substitute(opac_strings.CREATED_MFHD_RECORD, [here.name()]));
+			}, label:opac_strings.CREATE_MFHD}).placeAt(mfhd_add);
+			mfhd_add.placeAt(mfhd_ad_menu);
+		}
 	}
 
 	detachAllEvt("result", "idsReceived");
@@ -231,9 +240,11 @@
 	if (!holdings) { return null; }
 
 	dojo.forEach(holdings, _holdingsDrawMFHD);
+
 }
 
 function _holdingsDrawMFHD(holdings, entryNum) {
+
         var here = findOrgUnit(getLocation());
         if (getDepth() > 0 || getDepth === 0 ) {
                 while (getDepth() < findOrgDepth(here))
@@ -256,12 +267,22 @@
 
 	if (	hh.length == 0 && hch.length == 0 && hs.length == 0 &&
 		hcs.length == 0 && hi.length == 0 && hci.length == 0 &&
-		ho.length == 0 && hm.length == 0 && hinc.length == 0 && !isXUL()
+		ho.length == 0 && hm.length == 0 && hinc.length == 0
 	) {
-		return null;
+
+		if (isXUL()) {
+			/* 
+			 * If we have a record, but nothing to show for it, then the
+			 * record is likely empty or corrupt. This gives cataloguers a
+			 * chance to add holdings or correct the record
+			 */
+			hh = 'PLACEHOLDER';
+		} else {
+			return null;
+		}
 	}
 
-	dojo.place("<table style='width: 100%;'><caption id='mfhdHoldingsCaption' class='rdetail_header color_1'>" +
+	dojo.place("<table style='width: 100%;'><caption id='mfhdHoldingsCaption" + entryNum + "' class='rdetail_header color_1'>" +
 		dojo.string.substitute(opac_strings.HOLDINGS_TABLE_CAPTION, [hloc]) +
 		"</caption><tbody id='rdetail_holdings_tbody_" + entryNum +
 		"'></tbody></table>", "rdetail_details_table", "after"
@@ -279,10 +300,20 @@
 	if (isXUL()) {
 		dojo.require('openils.Event');
 		dojo.require('openils.PermaCrud');
-		dojo.place("<span> - </span><a class='classic_link' href='javascript:loadMarcEditor(" +
-			holdings.id() + ")'>" + opac_strings.EDIT_LABEL + "</a>", 
-			"mfhdHoldingsCaption", "last"
-		);
+		var mfhd_edit = new dijit.Menu({});
+		new dijit.MenuItem({onClick: function(){loadMarcEditor(holdings.id())}, label:opac_strings.EDIT_MFHD_RECORD}).placeAt(mfhd_edit, "first");
+		new dijit.MenuItem({onClick:function(){
+			var pcrud = new openils.PermaCrud({"authtoken": G.user.session});
+			var mfhd_rec = pcrud.retrieve("sre", holdings.id());
+			if (mfhd_rec) {
+				pcrud.eliminate(mfhd_rec);
+				alert(dojo.string.substitute(opac_strings.DELETED_MFHD_RECORD, [holdings.id()]));
+			}
+		}, label:opac_strings.DELETE_MFHD}).placeAt(mfhd_edit, "last");
+		// new dijit.MenuItem({onClick:function(){alert("Edit properties " + holdings.id());}, label:opac_strings.EDIT_PROPERTIES}).placeAt(mfhd_edit, "last");
+		var mfhd_mb = new dijit.form.DropDownButton({dropDown: mfhd_edit, label:opac_strings.EDIT_MFHD_MENU, style:"float:right"});
+		mfhd_mb.placeAt("mfhdHoldingsCaption" + entryNum, "last");
+		mfhd_edit.startup();
 	}
 }
 
@@ -298,14 +329,7 @@
 
 	G.ui.rdetail.title.appendChild(text(record.title()));
 	buildSearchLink(STYPE_AUTHOR, record.author(), G.ui.rdetail.author);
-//	G.ui.rdetail.isbn.appendChild(text(cleanISBN(record.isbn())));
-	var isbnText= text(cleanISBN(record.isbn()));
-	if (isbnText != null){
-		if (isbnText.length > 0){
-		G.ui.rdetail.isbn.appendChild(isbnText);
-		unHideMe($('rdetail_isbn_row'));		
-		}
-	}
+	G.ui.rdetail.isbn.appendChild(text(cleanISBN(record.isbn())));
 	G.ui.rdetail.edition.appendChild(text(record.edition()));
 	G.ui.rdetail.pubdate.appendChild(text(record.pubdate()));
 	G.ui.rdetail.publisher.appendChild(text(record.publisher()));
@@ -317,6 +341,13 @@
 	}
 	G.ui.rdetail.abstr.appendChild(text(record.synopsis()));
 
+	if (enableHoldsOnAvailable) {
+		unHideMe($('rdetail_place_hold'));	
+	} else {
+		hideMe($('rdetail_place_hold'));	
+		rdetailCheckAvailable();
+	}
+
 	try{
 		if(record.isbn()) {
 			if(ENABLE_ADDED_CONTENT_ATTRIB_LINKS) {
@@ -359,7 +390,10 @@
 					displayLabel = note;
 				}
 			}
-			$('rdetail_online').appendChild(elem('a', {href:href,'class':'classic_link'}, displayLabel));
+            // IE in quirks mode doesn't render CSS styling for links where the class attribute
+            // comes after the href attribute, apparently; we can use Dojo to ensure the class
+            // attribute comes first
+            dojo.place('<a class="search_link" href="' + href + '">' + displayLabel + '</a>', dojo.byId('rdetail_online'));
 			if (note && note != displayLabel) {
 				$('rdetail_online').appendChild(elem('span', {'class':'url_note'}, ' - ' + note));
 			}
@@ -398,6 +432,7 @@
 	       );
 
 		RW.setAttribute('target', 'RefWorksMain');
+
 		unHideMe($('rdetail_exp_refworks_span'));
 	}
 
@@ -410,6 +445,7 @@
 	runEvt("rdetail", "recordDrawn");
 	recordsCache.push(record);
 
+
 	var breq = new Request(FETCH_BRE, [getRid()]);
 	breq.callback( rdetailCheckDeleted );
 	breq.send();
@@ -420,11 +456,32 @@
 
 	// grab added content 
 	acCollectData(cleanISBN(record.isbn()), rdetailhandleAC);
-	
-	rdetailShowCustomizedMARCs ();
 }
 
+function rdetailCheckAvailable() {
+	var loc = getLocation();
+	var rid = getRid();
+	var req = new Request( 'open-ils.search:open-ils.search.biblio.record.copy_count', loc, rid );
+	req.callback(rdetailEnableHold); 
+	req.send();
+}
 
+/*
+ * Display the "Place Hold" link if:
+ *   * the current location holds at least one copy and 
+ *   * none of those copies are available
+ */
+function rdetailEnableHold(r) {
+	var ccDepths = r.getResultObject();
+	if (
+		((ccDepths[(ccDepths.length - 1)].available) > 0) ||
+		((ccDepths[(ccDepths.length - 1)].count) == 0)
+	) {
+		hideMe($('rdetail_place_hold'));
+	} else {
+		unHideMe($('rdetail_place_hold'));
+	}
+}
 
 function rdetailCheckDeleted(r) {
 	var br = r.getResultObject()[0];
@@ -675,58 +732,21 @@
 	}
 }
 
-function sortOutCopies(loc_id, rec_id, form_id) {
-        var copies = 0;
-        var recreq = new Request(FETCH_R_COPY_COUNTS, loc_id, rec_id, form_id);
-        recreq.send(true);
-        if (recreq) {
-                var copy_info =  recreq.result();
-                for (var i in copy_info) {
-                        //alert(loc_id + ' - ' + i + ' - ' + copy_info[i].available);
-                        if (loc_id == copy_info[i].org_unit)
-                                return copy_info[i].available;
-                }//for
-        }//if
-
-        return copies;
-}
-
-
 function rdetailBuildInfoRows() {
 	var req;
 	var method = FETCH_COPY_COUNTS_SUMMARY;
-	var cpCnt = 0;
-
-	//we figure out the number of copies
-	if (rdetailBreakUpLargeSets) 
-		cpCnt = sortOutCopies(getLocation(), getRid(), getForm());
-
-	if (rdetailShowCopyLocation && cpCnt < pgThreshold)
+	if (rdetailShowCopyLocation)
 		method = FETCH_COPY_LOCATION_COUNTS_SUMMARY;
 
 	if( rdetailShowLocal ) 
 		req = new Request(method, record.doc_id(), getLocation(), getDepth())
 	else
 		req = new Request(method, record.doc_id());
-
-	if (rdetailBreakUpLargeSets && cpCnt >= pgThreshold) {
-		rdetailLocalOnly = true;
-		req.request.rec_id = record.doc_id();
-        	req.request.cpCnt = cpCnt;
-		//remove the location options for paged sets
-		try {
-			/*
-			hideMe(G.ui.rdetail.cp_info_local);
-                        hideMe(G.ui.rdetail.cp_info_all);
-			*/
-                } catch(e) { }
-                req.callback(_rdetailBuildInfoPagedRows);
-        } else
-                req.callback(_rdetailBuildInfoRows);
+	req.callback(_rdetailBuildInfoRows);
 	req.send();
 }
 
-function _rdetailRows(node, summaryStart, pgSize, summarySize, tot_copies) {
+function _rdetailRows(node) {
 
 	if( rdetailShowLocal && getLocation() != globalOrgTree.id() ) {
 		var loc = findOrgUnit(getLocation());
@@ -755,7 +775,6 @@
 
 		var row = copyRow.cloneNode(true);
 		row.id = "cp_info_" + node.id();
-		//alert(row.id);
 
 		var libtd = findNodeByName( row, config.names.rdetail.lib_cell );
 		var cntd  = findNodeByName( row, config.names.rdetail.cn_cell );
@@ -764,7 +783,6 @@
 
 		var p = libtd.getElementsByTagName('a')[0];
 		libtd.insertBefore(text(node.name()), p);
-		
 		libtd.setAttribute("style", "padding-left: " + ((findOrgDepth(node) - 1)  * 9) + "px;");
 
 		if(!findOrgType(node.ou_type()).can_have_vols()) {
@@ -777,19 +795,14 @@
 			libtd.setAttribute("colspan", numStatuses + 3 );
 			libtd.colSpan = numStatuses + 3;
 			addCSSClass(row, 'copy_info_region_row');
-			if (summaryStart!= undefined &&  pgSize!=undefined &&
-				summarySize != undefined && tot_copies != undefined) 
-			{
-				fillOutLinks(libtd, summaryStart, pgSize, summarySize, tot_copies);
-			} //if summaryStart
-		}//if 
+		} 
 
 		copyRowParent.appendChild(row);
 
 	} else { node = globalOrgTree; }
 
 	for( var c in node.children() ) 
-		_rdetailRows(node.children()[c], summaryStart, pgSize, summarySize, tot_copies);
+		_rdetailRows(node.children()[c]);
 }
 
 function rdetailCNPrint(orgid, cn) {
@@ -802,216 +815,6 @@
 
 var localCNFound = false;
 var ctr = 0;
-function _rdetailCL(r) {
-        if (!r) return;
-        var cl = r.getResultObject();
-        if (cl) {
-                //alert(r.arrVal + " - " + cl.location().name());
-                rdetailApplyStatuses(r.rowNode, r.cpc_temp, r.statuses);
-
-                var isLocal = false;
-                if( orgIsMine( findOrgUnit(getLocation()), r.thisOrg ) ) {
-                        isLocal = true;
-                        if(!localCNFound) {
-                                localCNFound = true;
-                                defaultCN = r.arrVal;
-                        }
-                }
-
-                //if(isLocal) unHideMe(rowNode);
-                unHideMe(r.rowNode);
-
-                rdetailSetPath( r.thisOrg, isLocal);
-                rdetailBuildBrowseInfo( r.rowNode, r.arrVal, isLocal, r.thisOrg,
-                        cl.location().name());
-        }//cl
-}
-function _rdetailFL(r) {
-        if (!r) return;
-        var fl = r.getResultObject();
-        if (fl) {
-                var cp_request = new Request(FETCH_FLESHED_COPY, fl);
-
-                cp_request.request.rowNode = r.rowNode;
-                cp_request.request.cpc_temp = r.cpc_temp;
-                cp_request.request.statuses = r.statuses;
-                cp_request.request.arrVal = r.arrVal;
-                cp_request.request.thisOrg = r.thisOrg;
-                cp_request.callback(_rdetailCL);
-                cp_request.send();
-        }//fl
-}
-
-/*
-        callsortfn - sorting an array of call numbers
-
-        This probably won't work for every instance, but assumes last
-        number is a year. Anyway, this is how to get into the
-        array values, it could be refined, though a better way
-        will be to set up a special opensrf that can apply
-        postgres goodness to this.
-*/
-function callsortfn(a,b) {
-        var callno1 = a[1];
-        var callno2 = b[1];
-        var callnum1 = 0;
-        var callnum2 = 0;
-
-        var marker = callno1.lastIndexOf(' ');
-        if (marker != -1)
-                callnum1 = parseInt(callno1.substring(marker));
-        marker = callno2.lastIndexOf(' ');
-        if (marker != -1)
-                callnum2 = parseInt(callno2.substring(marker));
-
-        //window.status = 'comparing ' + callnum1 + ' to ' + callnum2;
-
-        if (callnum1 < callnum2) return -1;
-        if (callnum1 > callnum2) return 1;
-        return 0;
-}
-
-function fillOutLinks(node, cpstart, cpsize, ssize, pieces) {
-        if (node) {
-                var theLink = document.location + "";
-                var marker = theLink.indexOf("&cstart");
-                if (marker > 0)
-                        theLink = theLink.substring(0,marker);
-
-                var summaryStmt = '(' + (cpstart + 1) + ' to ' + ssize + ' of ' + pieces;
-                node.appendChild(document.createTextNode(summaryStmt));
-                if ((cpstart + 1) > cpsize) {
-                        node.appendChild(document.createTextNode(' '));
-                        var pglink = document.createElement("a");
-                        pglink.appendChild(document.createTextNode('Start'));
-                        pglink.setAttribute('href',theLink + '&cstart=0' +
-                                '&csize=' + cpsize);
-                        pglink.setAttribute('class','classic_link');
-                        node.appendChild(pglink);
-                        node.appendChild(document.createTextNode(' '));
-                        var pglink = document.createElement("a");
-                        pglink.appendChild(document.createTextNode('<<'));
-                        pglink.setAttribute('href',theLink + '&cstart=' +
-                                (cpstart - cpsize) + '&csize=' + cpsize);
-                        pglink.setAttribute('class','classic_link');
-                        node.appendChild(pglink);
-                        node.appendChild(document.createTextNode(' '));
-                        /*
-                        */
-                }
-                if (ssize < pieces) {
-                        node.appendChild(document.createTextNode(' '));
-                        var pglink = document.createElement("a");
-                        pglink.appendChild(document.createTextNode('>>'));
-                        pglink.setAttribute('href',theLink + '&cstart=' +
-                                ssize + '&csize=' + cpsize);
-                        pglink.setAttribute('class','classic_link');
-                        node.appendChild(pglink);
-                        node.appendChild(document.createTextNode(' '));
-                        var pglink = document.createElement("a");
-                        pglink.appendChild(document.createTextNode('End'));
-                        pglink.setAttribute('href',theLink + '&cstart=' +
-                                (pieces - cpsize) + '&csize=' + cpsize);
-                        pglink.setAttribute('class','classic_link');
-                        node.appendChild(pglink);
-                        /*
-                        */
-                }
-                node.appendChild(document.createTextNode(')'));
-                /*
-                */
-        }//if node
-}
-
-function _rdetailBuildInfoPagedRows(r) {
-
-        //alert(r.getText());
-        if (!r) return;
-        /*
-        */
-        var summary = r.getResultObject();
-        if(!summary) return;
-
-        summary.sort(callsortfn);
-        if (rdetailShowCopyLocation)
-                unHideMe( $n( $('rdetail_copy_info_table'), 'rdetail_copylocation_header' ) );
-
-        removeChildren(copyRowParent);
-
-        var rec_id = r.rec_id;
-        //var tot_copies = r.cpCnt;
-        var tot_copies = summary.length;
-        var cgi = new CGI();
-        var parm = cgi.param("cstart");
-        if (parm == undefined)
-                parm = 0;
-        var summaryStart = parseInt(parm);
-        parm = cgi.param("csize");
-        if (parm == undefined)
-                parm = pgDisplay;
-        var summarySize = parseInt(parm) + summaryStart;
-        if (summarySize > tot_copies)
-                summarySize = tot_copies;
-        var pgSize = parseInt(parm);
-
-        _rdetailRows(null,summaryStart, pgSize, summarySize, tot_copies);
-        var found = false;
-
-        for( var i = summaryStart; i < summary.length && i < summarySize; i++ ) {
-                var arr = summary[i];
-                globalCNCache[arr[1]] = 1;
-                var thisOrg = findOrgUnit(arr[0]);
-                var rowNode = $("cp_info_" + thisOrg.id());
-                if(!rowNode) continue;
-
-                if(rowNode.getAttribute("used")) {
-
-                        if( rowNode.nextSibling ) {
-                                sib = rowNode.nextSibling;
-                                o ='cp_info_'+thisOrg.id()+'_';
-                                /* push the new row on as the last row for this org unit */
-                                while( sib && sib.id.match(o) ) {
-                                        sib = sib.nextSibling;
-                                }
-                                if(sib)
-                                        rowNode = copyRowParent.insertBefore(copyRow.cloneNode(true), sib);
-                                else
-                                        rowNode = copyRowParent.appendChild(copyRow.cloneNode(true));
-                        } else {
-                                rowNode = copyRowParent.appendChild(copyRow.cloneNode(true));
-                        }
-
-                        var n = findNodeByName( rowNode, config.names.rdetail.lib_cell );
-                        n.appendChild(text(thisOrg.name()));
-                        n.setAttribute("style", "padding-left: " + ((findOrgDepth(thisOrg) - 1)  * 9) + "px;");
-                        rowNode.id = "cp_info_" + thisOrg.id() + '_' + (++ctr);
-
-                } else {
-                        rowNode.setAttribute("used", "1");
-                }
-
-                var cpc_temp = rowNode.removeChild(
-                                findNodeByName(rowNode, config.names.rdetail.cp_count_cell));
-
-                var statuses = arr[2];
-                var cl = '';
-
-                var recreq = new Request( FETCH_COPIES_FROM_VOLUME, rec_id, arr[1], arr[0]);
-                recreq.request.rowNode = rowNode;
-                recreq.request.cpc_temp = cpc_temp;
-                recreq.request.statuses = statuses;
-                recreq.request.arrVal = arr[1];
-                recreq.request.thisOrg = thisOrg;
-                recreq.callback(_rdetailFL);
-                recreq.send();
-
-
-                if( i == summary.length - 1 && !defaultCN) defaultCN = arr[1];
-        }
-
-        if(!found) unHideMe(G.ui.rdetail.cp_info_none);
-}
-
 function _rdetailBuildInfoRows(r) {
 
 	if (rdetailShowCopyLocation)
@@ -1023,19 +826,9 @@
 
 	var summary = r.getResultObject();
 	if(!summary) return;
-        var cgi = new CGI();
-        var parm = cgi.param("cstart");
-        if (parm == undefined)
-                parm = 0;
-        var summaryStart = parseInt(parm);
-        parm = cgi.param("csize");
-        if (parm == undefined)
-                parm = 25;
-        var summarySize = parseInt(parm);
 
 	var found = false;
-	//for( var i = 0; i < summary.length; i++ ) {
-        for( var i = summaryStart; i < summary.length && i < summarySize; i++ ) {
+	for( var i = 0; i < summary.length; i++ ) {
 
 		var arr = summary[i];
 		globalCNCache[arr[1]] = 1;
@@ -1126,9 +919,9 @@
 	_debug('setting action clicks for cn ' + cn);
 
 	var dHref = 'javascript:rdetailVolumeDetails('+
-			'{copy_location : "'+cl+'", rowid : "'+row.id+'", cn :"'+cn+'", depth:"'+depth+'", org:"'+orgNode.id()+'", local: '+local+'});';
+			'{copy_location : "'+cl.replace(/\"/g, '\\"')+'", rowid : "'+row.id+'", cn :"'+cn.replace(/\"/g, '\\"')+'", depth:"'+depth+'", org:"'+orgNode.id()+'", local: '+local+'});';
 
-	var bHref = 'javascript:rdetailShowCNBrowse("' + cn + '", '+orgNode.id()+', "'+depth+'");'; 
+	var bHref = 'javascript:rdetailShowCNBrowse("' + cn.replace(/\"/g, '\\"') + '", '+orgNode.id()+', "'+depth+'");'; 
 
 	unHideMe( $n(row, 'details') )
 		$n(row, 'details').setAttribute('href', dHref);
@@ -1154,7 +947,6 @@
 function rdetailSetPath(org, local) {
 	if( findOrgDepth(org) == 0 ) return;
 	var row = $("cp_info_" + org.id());
-	//alert("cp_info_" + org.id() + " - " + row.id + " - " + row.innerHTML);
 	row.setAttribute("hasinfo", "1");
 	unHideMe(row);
 	rdetailSetPath(findOrgUnit(org.parent_ou()), local);
@@ -1275,15 +1067,15 @@
 		}
 
 		// Add a button below the book cover image to load the preview.
-//		GBPBadge = document.createElement( 'img' );
-//		GBPBadge.src = 'http://books.google.com/intl/en/googlebooks/images/gbs_preview_button1.gif';
-//		GBPBadge.title = $('rdetail_preview_badge').innerHTML;
-//		GBPBadge.style.border = 0;
-//		GBPBadgelink = document.createElement( 'a' );
-//		GBPBadgelink.href = 'javascript:rdetailShowExtra("preview");';
-//		GBPBadgelink.appendChild( GBPBadge );
-//		$('rdetail_image_cell').appendChild( GBPBadgelink );
-//		$('rdetail_preview_div').style.height = 600;
+		GBPBadge = document.createElement( 'img' );
+		GBPBadge.src = 'http://books.google.com/intl/en/googlebooks/images/gbs_preview_button1.gif';
+		GBPBadge.title = $('rdetail_preview_badge').innerHTML;
+		GBPBadge.style.border = 0;
+		GBPBadgelink = document.createElement( 'a' );
+		GBPBadgelink.href = 'javascript:rdetailShowExtra("preview");';
+		GBPBadgelink.appendChild( GBPBadge );
+		$('rdetail_image_cell').appendChild( GBPBadgelink );
+		$('rdetail_preview_div').style.height = 600;
 
 		/* Display the "Preview" tab in the Extras section */
 		unHideMe( $('rdetail_preview_link' ) );

Modified: conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/result_common.js
===================================================================
--- conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/result_common.js	2010-09-10 20:56:39 UTC (rev 982)
+++ conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/result_common.js	2010-09-10 21:02:17 UTC (rev 983)
@@ -5,14 +5,36 @@
 var isbnList = '';
 var googleBooksLink = false;
 var enableHoldsOnAvailable = false;
+var enableExtraSearchesLowHits = false;
+var localProxyPrefix = '';
 
+/* an array of the extra services to which we want to direct people, in order of priority:
+Properties:
+  url: will be proxied via localProxyPrefix
+  description: will be used in the OPAC display
+  termTransform: a function name that transforms Evergreen compiled searches to the target search format
+*/
+var externalSearchServices = [
+    {   
+        "url": "http://books.scholarsportal.info/search.html?searchField=All+Fields&limit=full_text&sortBy=relevance&collection=all&searchTerm=",
+        "description": "Search ScholarsPortal ebooks",
+        "termTransform": "allKeywords"
+    },
+    {   
+        "url": "http://scholar.google.com/scholar?q=",
+        "description": "Search Google Scholar",
+        "termTransform": "allKeywords"
+    }
+];
+
 var resultFetchAllRecords = false;
 var resultCompiledSearch = null;
 
 /* set up the event handlers */
 if( findCurrentPage() == MRESULT || findCurrentPage() == RRESULT ) {
 	G.evt.result.hitCountReceived.push(resultSetHitInfo);
-	G.evt.result.recordReceived.push(resultDisplayRecord, resultAddCopyCounts);
+	//G.evt.result.recordReceived.push(resultDisplayRecord, resultAddCopyCounts);
+	G.evt.result.recordReceived.push(resultDisplayRecord);
 	G.evt.result.copyCountsReceived.push(resultDisplayCopyCounts);
 	G.evt.result.allRecordsReceived.push(resultBuildCaches, resultDrawSubjects, 
       resultDrawAuthors, resultDrawSeries, function(){unHideMe($('result_info_2'))},
@@ -211,6 +233,10 @@
 
 	resultSuggestSearchClass();
 
+    if (enableExtraSearchesLowHits) {
+        resultSuggestExtraSearches();
+    }
+
 	if(getTerm()) resultExpandSearch(); /* advanced search */
 }
 
@@ -250,12 +276,15 @@
 	showCanvas();
 	unHideMe($('result_low_hits'));
 	unHideMe($('result_zero_hits_msg'));
+
 	//if(getTerm()) resultExpandSearch(); /* advanced search */
 }
 
 function resultExpandSearch() {
 	var top = findOrgDepth(globalOrgTree);
-	if(getDepth() == top) return;
+
+    /* We don't want to expand the scope to Everywhere in Conifer, that's just confusing */
+	if(getDepth() == top || getDepth() - 1 == top) return;
 	unHideMe($('low_hits_expand_range'));
 	var par = $('low_hits_expand_link').parentNode;
 	var template = par.removeChild($('low_hits_expand_link'));
@@ -272,6 +301,33 @@
 	}
 }
 
+/* Generate links to our extra search services */
+function resultSuggestExtraSearches() {
+    dojo.forEach(externalSearchServices, function(esItem) {
+        var extraSearchStuff = this[esItem.termTransform].apply(this, [esItem.url]);
+        dojo.place("<div style='text-align: center; width: 100%; margin-left: auto; margin-right: auto;'><strong>" +
+            esItem.description + "</strong>: <a class='classic_link' href='" +
+            extraSearchStuff.searchTerms + "'>" + extraSearchStuff.displayTerms + "</a><div>", "result_low_hits", "child"
+        );
+    });
+}
+
+/* Transform everything in the Evergreen search to plain old keywords */
+function allKeywords(esUrl) {
+    var ebook_search = localProxyPrefix + esUrl;
+    var ebook_terms = '';
+    for (var key in resultCompiledSearch.searches) {
+        ebook_search += resultCompiledSearch.searches[key].term + '+';
+        ebook_terms += resultCompiledSearch.searches[key].term + ' ';
+    }
+    ebook_search = ebook_search.replace(/ /g, '+');
+    ebook_search = ebook_search.replace(/\%20/g, '+');
+    ebook_search = ebook_search.replace(/\+$/g, '');
+    ebook_terms = ebook_terms.replace(/ $/g, '');
+    var extraSuggestion = {"displayTerms": ebook_terms, "searchTerms": ebook_search};
+    return extraSuggestion;
+}
+
 function resultSuggestSearchClass() {
 	var stype = getStype();
 	if(stype == STYPE_KEYWORD) return;
@@ -430,6 +486,23 @@
     }
 }
 
+/* riff on buildTitleDetailLink from opac_utils */
+function buildResultTitleDetailLink(rec, link) {
+        if(!rec) return;
+        link.appendChild(text(normalize(truncate(rec.title(), 500))));
+        var args = {};
+        args.page = RDETAIL;
+        args[PARAM_RID] = rec.doc_id();
+    // in IE, if the link text contains a '@', it replaces the innerHTML text
+    // with the value of the href attribute.  Wait, what?  Yes.  Capture the
+    // innerHTML and put it back into place after the href is set
+    var linkText = link.innerHTML; // IE
+        link.setAttribute("href", buildOPACLink(args));
+    link.innerHTML = linkText; // IE
+}
+
+
+
 /* display the record info in the record display table 'pos' is the 
 		zero based position the record should have in the display table */
 function resultDisplayRecord(rec, pos, is_mr) {
@@ -498,19 +571,36 @@
 	} else {
 		buildunAPISpan($n(r,'unapi'), 'biblio-record_entry', rec.doc_id());
 
-		buildTitleDetailLink(rec, title_link); 
+		buildResultTitleDetailLink(rec, title_link); 
 		var args = {};
 		args.page = RDETAIL;
 		args[PARAM_OFFSET] = 0;
 		args[PARAM_RID] = rec.doc_id();
 		pic.parentNode.setAttribute("href", buildOPACLink(args));
 
+		//don't bother with holds at this point
+		/*
 		if (enableHoldsOnAvailable) {
 			unHideMe($n(r,'place_hold_span'));
 		}
 
 		$n(r,'place_hold_link').setAttribute(
 			'href','javascript:holdsDrawEditor({record:"'+rec.doc_id()+'",type:"T"});');
+		*/
+                // Stolen from trunk - (and stolen again from lul :-))
+                var here = findOrgUnit(getLocation());
+                dojo.require('openils.BibTemplate');
+                var l_cn_list = $n(r,'local_callnumber_list');
+                var onlyrec = rec.doc_id();
+
+                dojo.addOnLoad(function () {
+                        new openils.BibTemplate({
+                                root : l_cn_list,
+                                record : '' + onlyrec,
+                                org_unit : here.shortname()
+                        }).render();
+                        unHideMe(l_cn_list);
+                });
 	}
 
 	buildSearchLink(STYPE_AUTHOR, rec.author(), author_link);
@@ -651,7 +741,8 @@
 		ccheadcell =  ccrow.removeChild($n(ccrow, "result_thead_ccell"));
 		var t = ccheadcell.cloneNode(true);
 		lastheadcell = t;
-		t.appendChild(text(type.opac_label()));
+		//t.appendChild(text(type.opac_label()));
+		t.appendChild(text(" "));
 		ccrow.appendChild(t);
 		resultCCHeaderApplied = true;
 	}
@@ -738,8 +829,20 @@
 	while(copy_counts[i] != null) {
 		var cell = $("copy_count_cell_" + i +"_" + pagePosition);
 		var cts = copy_counts[i];
-		cell.appendChild(text(cts.available + " / " + cts.count));
 
+                var availMess = "Available";
+                if (cts.count >= cts.available && cts.available > 1)
+                        availMess = cts.available + " of " + cts.count + " Available";
+                if (cts.count > cts.available && cts.available == 0)
+                        availMess = "Checked Out";
+                if (cts.count == 0 && cts.available == 0)
+                        availMess = "Online";
+
+		//cell.appendChild(text(cts.available + " / " + cts.count));
+		cell.appendChild(text(availMess));
+
+		//don't bother with holds at this point
+		/*
 		if (!enableHoldsOnAvailable && (i == (copy_counts.length - 1))) {
 			var resultTBody = findParentByNodeName(cell, 'TBODY');
 			if (cts.available == 0 && cts.count > 0 && !metarecords) {
@@ -748,12 +851,13 @@
 				dojo.query('[name="place_hold_span"]', resultTBody).addClass('hide_me');
 			}
 		}
+		*/
 
 		if(isXUL()) {
 			/* here we style opac-invisible records for xul */
 
 			if( cts.depth == 0 ) {
-				if(!cts.transcendant && !cts.unshadow) {
+				if(cts.transcendant == null && cts.unshadow == 0) {
 					_debug("found an opac-shadowed record: " + rec.doc_id());
 					var row = cell.parentNode.parentNode.parentNode.parentNode.parentNode; 
 					if( cts.count == 0 ) 
@@ -767,4 +871,3 @@
 	}
 }
 
-

Modified: conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/rresult.js
===================================================================
--- conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/rresult.js	2010-09-10 20:56:39 UTC (rev 982)
+++ conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/rresult.js	2010-09-10 21:02:17 UTC (rev 983)
@@ -30,8 +30,12 @@
 function rresultCollectIds() {
 	var ids;
 
-	switch(getRtype()) {
+    var rtype = getRtype();
+    if (rtype.indexOf('|') > -1)
+        rtype = rtype.substring(0,rtype.indexOf('|'));
 
+	switch(rtype) {
+
 		case RTYPE_COOKIE:
 			ids = JSON2js(cookieManager.read(COOKIE_RIDS));
 			_rresultHandleIds( ids, ids.length );

Modified: conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/search_bar.js
===================================================================
--- conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/search_bar.js	2010-09-10 20:56:39 UTC (rev 982)
+++ conifer/branches/rel_1_6_1/web/opac/skin/uwin/js/search_bar.js	2010-09-10 21:02:17 UTC (rev 983)
@@ -34,6 +34,11 @@
 	setSelector(_ts,	getStype());
 	setSelector(_fs,	getForm());
 
+    /* If searching for journal title, set it to journal title */
+    if (getStype() == 'title' && getBibLevel() == 's') {
+        dojo.byId('jtitle').selected = true;
+    }
+
 	depthSelInit();
 
 
@@ -74,6 +79,12 @@
 	args[PARAM_DEPTH]		= d;
 	args[PARAM_FORM]		= _fs.options[_fs.selectedIndex].value;
 
+    /* Set the bib level to 's' for serials if the magic "Journal title" has ben chosen */
+    if (_ts.options[_ts.selectedIndex].id == 'jtitle') {
+        args[PARAM_BIBLEVEL] = 's';
+    }
+
+
     if($('opac.result.limit2avail')) {
         args[PARAM_AVAIL] = ($('opac.result.limit2avail').checked) ? 1 : '';
         if( (val = getSelectorVal($('opac.result.sort'))) ) {



More information about the open-ils-commits mailing list