diff --git a/themes/bootstrap/js/cart.js b/themes/bootstrap/js/cart.js
index dd21ac7d1154efa3866cd8d3fbdccb35e56a1ee9..65d7ddd754ac94f37a77c336e35b5a6968716d8c 100644
--- a/themes/bootstrap/js/cart.js
+++ b/themes/bootstrap/js/cart.js
@@ -1,270 +1,270 @@
-/*global Cookies, newAccountHandler, path, vufindString, Lightbox, updatePageForLogin */
-
-var _CART_COOKIE = 'vufind_cart';
-var _CART_COOKIE_SOURCES = 'vufind_cart_src';
-var _CART_COOKIE_DELIM = "\t";
-
-var currentId,currentSource;
-
-function getCartItems() {
-  var items = Cookies.getItem(_CART_COOKIE);
-  if(items) {
-    return items.split(_CART_COOKIE_DELIM);
-  }
-  return [];
-}
-function getCartSources() {
-  var items = Cookies.getItem(_CART_COOKIE_SOURCES);
-  if(items) {
-    return items.split(_CART_COOKIE_DELIM);
-  }
-  return [];
-}
-function getFullCartItems() {
-  var items = getCartItems();
-  var sources = getCartSources();
-  var full = [];
-  if(items.length == 0) {
-    return [];
-  }
-  for(var i=items.length;i--;) {
-    full[full.length] = sources[items[i].charCodeAt(0)-65]+'|'+items[i].substr(1);
-  }
-  return full;
-}
-
-function addItemToCart(id,source) {
-  if(!source) {
-    source = 'VuFind';
-  }
-  var cartItems = getCartItems();
-  var cartSources = getCartSources();
-  var sIndex = cartSources.indexOf(source);
-  if(sIndex < 0) {
-    // Add source to source cookie
-    cartItems[cartItems.length] = String.fromCharCode(65+cartSources.length) + id;
-    cartSources[cartSources.length] = source;
-    Cookies.setItem(_CART_COOKIE_SOURCES, cartSources.join(_CART_COOKIE_DELIM), false, '/');
-  } else {
-    cartItems[cartItems.length] = String.fromCharCode(65+sIndex) + id;
-  }
-  Cookies.setItem(_CART_COOKIE, $.unique(cartItems).join(_CART_COOKIE_DELIM), false, '/');
-  $('#cartItems strong').html(parseInt($('#cartItems strong').html(), 10)+1);
-  return true;
-}
-function uniqueArray(op) {
-  var ret = [];
-  for(var i=0;i<op.length;i++) {
-    if(ret.indexOf(op[i]) < 0) {
-      ret.push(op[i]);
-    }
-  }
-  return ret;
-}
-function removeItemFromCart(id,source) {
-  var cartItems = getCartItems();
-  var cartSources = getCartSources();
-  // Find
-  var cartIndex = cartItems.indexOf(String.fromCharCode(65+cartSources.indexOf(source))+id);
-  if(cartIndex > -1) {
-    var sourceIndex = cartItems[cartIndex].charCodeAt(0)-65;
-    var cartItem = cartItems[cartIndex];
-    var saveSource = false;
-    for(var i=cartItems.length;i--;) {
-      if(i==cartIndex) {
-        continue;
-      }
-      // If this source is shared by another, keep it
-      if(cartItems[i].charCodeAt(0)-65 == sourceIndex) {
-        saveSource = true;
-        break;
-      }
-    }
-    cartItems.splice(cartIndex,1);
-    // Remove unused sources
-    if(!saveSource) {
-      var oldSources = cartSources.slice(0);
-      cartSources.splice(sourceIndex,1);
-      // Adjust source index characters
-      for(var j=cartItems.length;j--;) {
-        var si = cartItems[j].charCodeAt(0)-65;
-        var ni = cartSources.indexOf(oldSources[si]);
-        cartItems[j] = String.fromCharCode(65+ni)+cartItems[j].substring(1);
-      }
-    }
-    if(cartItems.length > 0) {
-      Cookies.setItem(_CART_COOKIE, uniqueArray(cartItems).join(_CART_COOKIE_DELIM), false, '/');
-      Cookies.setItem(_CART_COOKIE_SOURCES, uniqueArray(cartSources).join(_CART_COOKIE_DELIM), false, '/');
-    } else {
-      Cookies.removeItem(_CART_COOKIE, '/');
-      Cookies.removeItem(_CART_COOKIE_SOURCES, '/');
-    }
-    $('#cartItems strong').html(parseInt($('#cartItems strong').html(), 10)-1);
-    return true;
-  }
-  return false;
-}
-var cartNotificationTimeout = false;
-function registerUpdateCart($form) {
-  if($form) {
-    $("#updateCart, #bottom_updateCart").unbind('click').click(function(){
-      var elId = this.id;
-      var selectedBoxes = $("input[name='ids[]']:checked", $form);
-      var selected = [];
-      $(selectedBoxes).each(function(i) {
-        selected[i] = this.value;
-      });
-      if (selected.length > 0) {
-        var inCart = 0;
-        var msg = "";
-        var orig = getFullCartItems();
-        $(selected).each(function(i) {
-          for (var x in orig) {
-            if (this == orig[x]) {
-              inCart++;
-              return;
-            }
-          }
-          var data = this.split('|');
-          addItemToCart(data[1], data[0]);
-        });
-        var updated = getFullCartItems();
-        var added = updated.length - orig.length;
-        msg += added + " " + vufindString.itemsAddBag;
-        if (inCart > 0 && orig.length > 0) {
-          msg += "<br/>" + inCart + " " + vufindString.itemsInBag;
-        }
-        if (updated.length >= vufindString.bookbagMax) {
-          msg += "<br/>" + vufindString.bookbagFull;
-        }
-        $('#'+elId).data('popover').options.content = msg;
-        $('#cartItems strong').html(updated.length);
-      } else {
-        $('#'+elId).data('popover').options.content = vufindString.bulk_noitems_advice;
-      }
-      $('#'+elId).popover('toggle');
-      if (cartNotificationTimeout !== false) {
-          clearTimeout(cartNotificationTimeout);
-      }
-      cartNotificationTimeout = setTimeout(function() {
-        $('#'+elId).popover('hide');
-      }, 5000);
-      return false;
-    });
-  }
-}
-
-// Ajax cart submission for the lightbox
-var lastCartSubmit = false;
-function cartSubmit($form) {
-  lastCartSubmit = $form;
-  var submit = $form.find('input[type="submit"][clicked=true]').attr('name');
-  var checks = $form.find('input.checkbox-select-item:checked');
-  if(checks.length == 0 && submit != 'empty') {
-    return Lightbox.displayError(vufindString['bulk_noitems_advice']);
-  }
-  if (submit == 'print') {
-    //redirect page
-    var url = path+'/Records/Home?print=true';
-    for(var i=0;i<checks.length;i++) {
-      url += '&id[]='+checks[i].value;
-    }
-    document.location.href = url;
-  } else if ((submit != 'empty' || confirm(vufindString['confirmEmpty']))
-         && (submit != 'delete' || confirm(vufindString['confirmDelete']))) {
-    Lightbox.submit($form, Lightbox.changeContent);
-  } else {
-    $('#modal').find('.icon-spinner').remove();
-  }
-}
-
-$(document).ready(function() {
-  // Record buttons
-  var cartId = $('#cartId');
-  if(cartId.length > 0) {
-    cartId = cartId.val().split('|');
-    currentId = cartId[1];
-    currentSource = cartId[0];
-    $('#cart-add.correct,#cart-remove.correct').removeClass('correct hidden');
-    $('#cart-add').click(function() {
-      addItemToCart(currentId,currentSource);
-      $('#cart-add,#cart-remove').toggleClass('hidden');
-    });
-    $('#cart-remove').click(function() {
-      removeItemFromCart(currentId,currentSource);
-      $('#cart-add,#cart-remove').toggleClass('hidden');
-    });
-  } else {
-    // Search results
-    var $form = $('form[name="bulkActionForm"]');
-    registerUpdateCart($form);
-  }
-  $("#updateCart, #bottom_updateCart").popover({content:'', html:true, trigger:'manual'});
-
-  // Setup lightbox behavior
-  // Cart lightbox
-  $('#cartItems').click(function() {
-    return Lightbox.get('Cart','Cart');
-  });
-  // Overwrite
-  Lightbox.addFormCallback('accountForm', function(html) {
-    updatePageForLogin();
-    if (lastCartSubmit !== false) {
-      cartSubmit(lastCartSubmit);
-      lastCartSubmit = false;
-    } else {
-      newAccountHandler(html);
-    }
-  });
-  Lightbox.addFormHandler('cartForm', function(evt) {
-    cartSubmit($(evt.target));
-    return false;
-  });
-  Lightbox.addFormCallback('bulkEmail', function(html) {
-    Lightbox.confirm(vufindString['bulk_email_success']);
-  });
-  Lightbox.addFormCallback('bulkSave', function(html) {
-    // After we close the lightbox, redirect to list view
-    Lightbox.addCloseAction(function() {
-      document.location.href = path+'/MyResearch/MyList/'+Lightbox.lastPOST['list'];
-    });
-    Lightbox.confirm(vufindString['bulk_save_success']);
-  });
-  Lightbox.addFormHandler('exportForm', function(evt) {
-    $.ajax({
-      url: path + '/AJAX/JSON?' + $.param({method:'exportFavorites'}),
-      type:'POST',
-      dataType:'json',
-      data:Lightbox.getFormData($(evt.target)),
-      success:function(data) {
-        if(data.data.needs_redirect) {
-          document.location.href = data.data.result_url;
-        } else {
-          Lightbox.changeContent(data.data.result_additional);
-        }
-      },
-      error:function(d,e) {
-        //console.log(d,e); // Error reporting
-      }
-    });
-    return false;
-  });
-  $('#modal').on('hidden', function(e) {
-    // Update cart items (add to cart, remove from cart, cart lightbox interface)
-    var cartCount = $('#cartItems strong');
-    if(cartCount.length > 0) {
-      var cart = getFullCartItems();
-      var id = $('#cartId');
-      if(id.length > 0) {
-        id = id.val();
-        $('#cart-add,#cart-remove').addClass('hidden');
-        if(cart.indexOf(id) > -1) {
-          $('#cart-remove').removeClass('hidden');
-        } else {
-          $('#cart-add').removeClass('hidden');
-        }
-      }
-      cartCount.html(cart.length);
-    }
-  });
-});
+/*global confirm, Cookies, newAccountHandler, path, vufindString, Lightbox, updatePageForLogin */
+
+var _CART_COOKIE = 'vufind_cart';
+var _CART_COOKIE_SOURCES = 'vufind_cart_src';
+var _CART_COOKIE_DELIM = "\t";
+
+var currentId,currentSource;
+
+function getCartItems() {
+  var items = Cookies.getItem(_CART_COOKIE);
+  if(items) {
+    return items.split(_CART_COOKIE_DELIM);
+  }
+  return [];
+}
+function getCartSources() {
+  var items = Cookies.getItem(_CART_COOKIE_SOURCES);
+  if(items) {
+    return items.split(_CART_COOKIE_DELIM);
+  }
+  return [];
+}
+function getFullCartItems() {
+  var items = getCartItems();
+  var sources = getCartSources();
+  var full = [];
+  if(items.length == 0) {
+    return [];
+  }
+  for(var i=items.length;i--;) {
+    full[full.length] = sources[items[i].charCodeAt(0)-65]+'|'+items[i].substr(1);
+  }
+  return full;
+}
+
+function addItemToCart(id,source) {
+  if(!source) {
+    source = 'VuFind';
+  }
+  var cartItems = getCartItems();
+  var cartSources = getCartSources();
+  var sIndex = cartSources.indexOf(source);
+  if(sIndex < 0) {
+    // Add source to source cookie
+    cartItems[cartItems.length] = String.fromCharCode(65+cartSources.length) + id;
+    cartSources[cartSources.length] = source;
+    Cookies.setItem(_CART_COOKIE_SOURCES, cartSources.join(_CART_COOKIE_DELIM), false, '/');
+  } else {
+    cartItems[cartItems.length] = String.fromCharCode(65+sIndex) + id;
+  }
+  Cookies.setItem(_CART_COOKIE, $.unique(cartItems).join(_CART_COOKIE_DELIM), false, '/');
+  $('#cartItems strong').html(parseInt($('#cartItems strong').html(), 10)+1);
+  return true;
+}
+function uniqueArray(op) {
+  var ret = [];
+  for(var i=0;i<op.length;i++) {
+    if(ret.indexOf(op[i]) < 0) {
+      ret.push(op[i]);
+    }
+  }
+  return ret;
+}
+function removeItemFromCart(id,source) {
+  var cartItems = getCartItems();
+  var cartSources = getCartSources();
+  // Find
+  var cartIndex = cartItems.indexOf(String.fromCharCode(65+cartSources.indexOf(source))+id);
+  if(cartIndex > -1) {
+    var sourceIndex = cartItems[cartIndex].charCodeAt(0)-65;
+    var cartItem = cartItems[cartIndex];
+    var saveSource = false;
+    for(var i=cartItems.length;i--;) {
+      if(i==cartIndex) {
+        continue;
+      }
+      // If this source is shared by another, keep it
+      if(cartItems[i].charCodeAt(0)-65 == sourceIndex) {
+        saveSource = true;
+        break;
+      }
+    }
+    cartItems.splice(cartIndex,1);
+    // Remove unused sources
+    if(!saveSource) {
+      var oldSources = cartSources.slice(0);
+      cartSources.splice(sourceIndex,1);
+      // Adjust source index characters
+      for(var j=cartItems.length;j--;) {
+        var si = cartItems[j].charCodeAt(0)-65;
+        var ni = cartSources.indexOf(oldSources[si]);
+        cartItems[j] = String.fromCharCode(65+ni)+cartItems[j].substring(1);
+      }
+    }
+    if(cartItems.length > 0) {
+      Cookies.setItem(_CART_COOKIE, uniqueArray(cartItems).join(_CART_COOKIE_DELIM), false, '/');
+      Cookies.setItem(_CART_COOKIE_SOURCES, uniqueArray(cartSources).join(_CART_COOKIE_DELIM), false, '/');
+    } else {
+      Cookies.removeItem(_CART_COOKIE, '/');
+      Cookies.removeItem(_CART_COOKIE_SOURCES, '/');
+    }
+    $('#cartItems strong').html(parseInt($('#cartItems strong').html(), 10)-1);
+    return true;
+  }
+  return false;
+}
+var cartNotificationTimeout = false;
+function registerUpdateCart($form) {
+  if($form) {
+    $("#updateCart, #bottom_updateCart").unbind('click').click(function(){
+      var elId = this.id;
+      var selectedBoxes = $("input[name='ids[]']:checked", $form);
+      var selected = [];
+      $(selectedBoxes).each(function(i) {
+        selected[i] = this.value;
+      });
+      if (selected.length > 0) {
+        var inCart = 0;
+        var msg = "";
+        var orig = getFullCartItems();
+        $(selected).each(function(i) {
+          for (var x in orig) {
+            if (this == orig[x]) {
+              inCart++;
+              return;
+            }
+          }
+          var data = this.split('|');
+          addItemToCart(data[1], data[0]);
+        });
+        var updated = getFullCartItems();
+        var added = updated.length - orig.length;
+        msg += added + " " + vufindString.itemsAddBag;
+        if (inCart > 0 && orig.length > 0) {
+          msg += "<br/>" + inCart + " " + vufindString.itemsInBag;
+        }
+        if (updated.length >= vufindString.bookbagMax) {
+          msg += "<br/>" + vufindString.bookbagFull;
+        }
+        $('#'+elId).data('popover').options.content = msg;
+        $('#cartItems strong').html(updated.length);
+      } else {
+        $('#'+elId).data('popover').options.content = vufindString.bulk_noitems_advice;
+      }
+      $('#'+elId).popover('toggle');
+      if (cartNotificationTimeout !== false) {
+          clearTimeout(cartNotificationTimeout);
+      }
+      cartNotificationTimeout = setTimeout(function() {
+        $('#'+elId).popover('hide');
+      }, 5000);
+      return false;
+    });
+  }
+}
+
+// Ajax cart submission for the lightbox
+var lastCartSubmit = false;
+function cartSubmit($form) {
+  lastCartSubmit = $form;
+  var submit = $form.find('input[type="submit"][clicked=true]').attr('name');
+  var checks = $form.find('input.checkbox-select-item:checked');
+  if(checks.length == 0 && submit != 'empty') {
+    return Lightbox.displayError(vufindString['bulk_noitems_advice']);
+  }
+  if (submit == 'print') {
+    //redirect page
+    var url = path+'/Records/Home?print=true';
+    for(var i=0;i<checks.length;i++) {
+      url += '&id[]='+checks[i].value;
+    }
+    document.location.href = url;
+  } else if ((submit != 'empty' || confirm(vufindString['confirmEmpty']))
+         && (submit != 'delete' || confirm(vufindString['confirmDelete']))) {
+    Lightbox.submit($form, Lightbox.changeContent);
+  } else {
+    $('#modal').find('.icon-spinner').remove();
+  }
+}
+
+$(document).ready(function() {
+  // Record buttons
+  var cartId = $('#cartId');
+  if(cartId.length > 0) {
+    cartId = cartId.val().split('|');
+    currentId = cartId[1];
+    currentSource = cartId[0];
+    $('#cart-add.correct,#cart-remove.correct').removeClass('correct hidden');
+    $('#cart-add').click(function() {
+      addItemToCart(currentId,currentSource);
+      $('#cart-add,#cart-remove').toggleClass('hidden');
+    });
+    $('#cart-remove').click(function() {
+      removeItemFromCart(currentId,currentSource);
+      $('#cart-add,#cart-remove').toggleClass('hidden');
+    });
+  } else {
+    // Search results
+    var $form = $('form[name="bulkActionForm"]');
+    registerUpdateCart($form);
+  }
+  $("#updateCart, #bottom_updateCart").popover({content:'', html:true, trigger:'manual'});
+
+  // Setup lightbox behavior
+  // Cart lightbox
+  $('#cartItems').click(function() {
+    return Lightbox.get('Cart','Cart');
+  });
+  // Overwrite
+  Lightbox.addFormCallback('accountForm', function(html) {
+    updatePageForLogin();
+    if (lastCartSubmit !== false) {
+      cartSubmit(lastCartSubmit);
+      lastCartSubmit = false;
+    } else {
+      newAccountHandler(html);
+    }
+  });
+  Lightbox.addFormHandler('cartForm', function(evt) {
+    cartSubmit($(evt.target));
+    return false;
+  });
+  Lightbox.addFormCallback('bulkEmail', function(html) {
+    Lightbox.confirm(vufindString['bulk_email_success']);
+  });
+  Lightbox.addFormCallback('bulkSave', function(html) {
+    // After we close the lightbox, redirect to list view
+    Lightbox.addCloseAction(function() {
+      document.location.href = path+'/MyResearch/MyList/'+Lightbox.lastPOST['list'];
+    });
+    Lightbox.confirm(vufindString['bulk_save_success']);
+  });
+  Lightbox.addFormHandler('exportForm', function(evt) {
+    $.ajax({
+      url: path + '/AJAX/JSON?' + $.param({method:'exportFavorites'}),
+      type:'POST',
+      dataType:'json',
+      data:Lightbox.getFormData($(evt.target)),
+      success:function(data) {
+        if(data.data.needs_redirect) {
+          document.location.href = data.data.result_url;
+        } else {
+          Lightbox.changeContent(data.data.result_additional);
+        }
+      },
+      error:function(d,e) {
+        //console.log(d,e); // Error reporting
+      }
+    });
+    return false;
+  });
+  $('#modal').on('hidden', function(e) {
+    // Update cart items (add to cart, remove from cart, cart lightbox interface)
+    var cartCount = $('#cartItems strong');
+    if(cartCount.length > 0) {
+      var cart = getFullCartItems();
+      var id = $('#cartId');
+      if(id.length > 0) {
+        id = id.val();
+        $('#cart-add,#cart-remove').addClass('hidden');
+        if(cart.indexOf(id) > -1) {
+          $('#cart-remove').removeClass('hidden');
+        } else {
+          $('#cart-add').removeClass('hidden');
+        }
+      }
+      cartCount.html(cart.length);
+    }
+  });
+});
diff --git a/themes/bootstrap3/js/cart.js b/themes/bootstrap3/js/cart.js
index 3843c8c3213823261d8c80db925058f59b300f6a..31410581dc1de85d02d5360388f4a684b044adf1 100644
--- a/themes/bootstrap3/js/cart.js
+++ b/themes/bootstrap3/js/cart.js
@@ -1,270 +1,270 @@
-/*global Cookies, newAccountHandler, path, vufindString, Lightbox, updatePageForLogin */
-
-var _CART_COOKIE = 'vufind_cart';
-var _CART_COOKIE_SOURCES = 'vufind_cart_src';
-var _CART_COOKIE_DELIM = "\t";
-
-var currentId,currentSource;
-
-function getCartItems() {
-  var items = Cookies.getItem(_CART_COOKIE);
-  if(items) {
-    return items.split(_CART_COOKIE_DELIM);
-  }
-  return [];
-}
-function getCartSources() {
-  var items = Cookies.getItem(_CART_COOKIE_SOURCES);
-  if(items) {
-    return items.split(_CART_COOKIE_DELIM);
-  }
-  return [];
-}
-function getFullCartItems() {
-  var items = getCartItems();
-  var sources = getCartSources();
-  var full = [];
-  if(items.length == 0) {
-    return [];
-  }
-  for(var i=items.length;i--;) {
-    full[full.length] = sources[items[i].charCodeAt(0)-65]+'|'+items[i].substr(1);
-  }
-  return full;
-}
-
-function addItemToCart(id,source) {
-  if(!source) {
-    source = 'VuFind';
-  }
-  var cartItems = getCartItems();
-  var cartSources = getCartSources();
-  var sIndex = cartSources.indexOf(source);
-  if(sIndex < 0) {
-    // Add source to source cookie
-    cartItems[cartItems.length] = String.fromCharCode(65+cartSources.length) + id;
-    cartSources[cartSources.length] = source;
-    Cookies.setItem(_CART_COOKIE_SOURCES, cartSources.join(_CART_COOKIE_DELIM), false, '/');
-  } else {
-    cartItems[cartItems.length] = String.fromCharCode(65+sIndex) + id;
-  }
-  Cookies.setItem(_CART_COOKIE, $.unique(cartItems).join(_CART_COOKIE_DELIM), false, '/');
-  $('#cartItems strong').html(parseInt($('#cartItems strong').html(), 10)+1);
-  return true;
-}
-function uniqueArray(op) {
-  var ret = [];
-  for(var i=0;i<op.length;i++) {
-    if(ret.indexOf(op[i]) < 0) {
-      ret.push(op[i]);
-    }
-  }
-  return ret;
-}
-function removeItemFromCart(id,source) {
-  var cartItems = getCartItems();
-  var cartSources = getCartSources();
-  // Find
-  var cartIndex = cartItems.indexOf(String.fromCharCode(65+cartSources.indexOf(source))+id);
-  if(cartIndex > -1) {
-    var sourceIndex = cartItems[cartIndex].charCodeAt(0)-65;
-    var cartItem = cartItems[cartIndex];
-    var saveSource = false;
-    for(var i=cartItems.length;i--;) {
-      if(i==cartIndex) {
-        continue;
-      }
-      // If this source is shared by another, keep it
-      if(cartItems[i].charCodeAt(0)-65 == sourceIndex) {
-        saveSource = true;
-        break;
-      }
-    }
-    cartItems.splice(cartIndex,1);
-    // Remove unused sources
-    if(!saveSource) {
-      var oldSources = cartSources.slice(0);
-      cartSources.splice(sourceIndex,1);
-      // Adjust source index characters
-      for(var j=cartItems.length;j--;) {
-        var si = cartItems[j].charCodeAt(0)-65;
-        var ni = cartSources.indexOf(oldSources[si]);
-        cartItems[j] = String.fromCharCode(65+ni)+cartItems[j].substring(1);
-      }
-    }
-    if(cartItems.length > 0) {
-      Cookies.setItem(_CART_COOKIE, uniqueArray(cartItems).join(_CART_COOKIE_DELIM), false, '/');
-      Cookies.setItem(_CART_COOKIE_SOURCES, uniqueArray(cartSources).join(_CART_COOKIE_DELIM), false, '/');
-    } else {
-      Cookies.removeItem(_CART_COOKIE, '/');
-      Cookies.removeItem(_CART_COOKIE_SOURCES, '/');
-    }
-    $('#cartItems strong').html(parseInt($('#cartItems strong').html(), 10)-1);
-    return true;
-  }
-  return false;
-}
-var cartNotificationTimeout = false;
-function registerUpdateCart($form) {
-  if($form) {
-    $("#updateCart, #bottom_updateCart").unbind('click').click(function(){
-      var elId = this.id;
-      var selectedBoxes = $("input[name='ids[]']:checked", $form);
-      var selected = [];
-      $(selectedBoxes).each(function(i) {
-        selected[i] = this.value;
-      });
-      if (selected.length > 0) {
-        var inCart = 0;
-        var msg = "";
-        var orig = getFullCartItems();
-        $(selected).each(function(i) {
-          for (var x in orig) {
-            if (this == orig[x]) {
-              inCart++;
-              return;
-            }
-          }
-          var data = this.split('|');
-          addItemToCart(data[1], data[0]);
-        });
-        var updated = getFullCartItems();
-        var added = updated.length - orig.length;
-        msg += added + " " + vufindString.itemsAddBag;
-        if (inCart > 0 && orig.length > 0) {
-          msg += "<br/>" + inCart + " " + vufindString.itemsInBag;
-        }
-        if (updated.length >= vufindString.bookbagMax) {
-          msg += "<br/>" + vufindString.bookbagFull;
-        }
-        $('#'+elId).data('bs.popover').options.content = msg;
-        $('#cartItems strong').html(updated.length);
-      } else {
-        $('#'+elId).data('bs.popover').options.content = vufindString.bulk_noitems_advice;
-      }
-      $('#'+elId).popover('show');
-      if (cartNotificationTimeout !== false) {
-        clearTimeout(cartNotificationTimeout);
-      }
-      cartNotificationTimeout = setTimeout(function() {
-        $('#'+elId).popover('hide');
-      }, 5000);
-      return false;
-    });
-  }
-}
-
-// Ajax cart submission for the lightbox
-var lastCartSubmit = false;
-function cartSubmit($form) {
-  lastCartSubmit = $form;
-  var submit = $form.find('input[type="submit"][clicked=true]').attr('name');
-  var checks = $form.find('input.checkbox-select-item:checked');
-  if(checks.length == 0 && submit != 'empty') {
-    return Lightbox.displayError(vufindString['bulk_noitems_advice']);
-  }
-  if (submit == 'print') {
-    //redirect page
-    var url = path+'/Records/Home?print=true';
-    for(var i=0;i<checks.length;i++) {
-      url += '&id[]='+checks[i].value;
-    }
-    document.location.href = url;
-  } else if ((submit != 'empty' || confirm(vufindString['confirmEmpty']))
-         && (submit != 'delete' || confirm(vufindString['confirmDelete']))) {
-    Lightbox.submit($form, Lightbox.changeContent);
-  } else {
-    $('#modal').find('.fa.fa-spinner').remove();
-  }
-}
-
-$(document).ready(function() {
-  // Record buttons
-  var cartId = $('#cartId');
-  if(cartId.length > 0) {
-    cartId = cartId.val().split('|');
-    currentId = cartId[1];
-    currentSource = cartId[0];
-    $('#cart-add.correct,#cart-remove.correct').removeClass('correct hidden');
-    $('#cart-add').click(function() {
-      addItemToCart(currentId,currentSource);
-      $('#cart-add,#cart-remove').toggleClass('hidden');
-    });
-    $('#cart-remove').click(function() {
-      removeItemFromCart(currentId,currentSource);
-      $('#cart-add,#cart-remove').toggleClass('hidden');
-    });
-  } else {
-    // Search results
-    var $form = $('form[name="bulkActionForm"]');
-    registerUpdateCart($form);
-  }
-  $("#updateCart, #bottom_updateCart").popover({content:'', html:true, trigger:'manual'});
-
-  // Setup lightbox behavior
-  // Cart lightbox
-  $('#cartItems').click(function() {
-    return Lightbox.get('Cart','Cart');
-  });
-  // Overwrite
-  Lightbox.addFormCallback('accountForm', function(html) {
-    updatePageForLogin();
-    if (lastCartSubmit !== false) {
-      cartSubmit(lastCartSubmit);
-      lastCartSubmit = false;
-    } else {
-      newAccountHandler(html);
-    }
-  });
-  Lightbox.addFormHandler('cartForm', function(evt) {
-    cartSubmit($(evt.target));
-    return false;
-  });
-  Lightbox.addFormCallback('bulkEmail', function(html) {
-    Lightbox.confirm(vufindString['bulk_email_success']);
-  });
-  Lightbox.addFormCallback('bulkSave', function(html) {
-    // After we close the lightbox, redirect to list view
-    Lightbox.addCloseAction(function() {
-      document.location.href = path+'/MyResearch/MyList/'+Lightbox.lastPOST['list'];
-    });
-    Lightbox.confirm(vufindString['bulk_save_success']);
-  });
-  Lightbox.addFormHandler('exportForm', function(evt) {
-    $.ajax({
-      url: path + '/AJAX/JSON?' + $.param({method:'exportFavorites'}),
-      type:'POST',
-      dataType:'json',
-      data:Lightbox.getFormData($(evt.target)),
-      success:function(data) {
-        if(data.data.needs_redirect) {
-          document.location.href = data.data.result_url;
-        } else {
-          Lightbox.changeContent(data.data.result_additional);
-        }
-      },
-      error:function(d,e) {
-        //console.log(d,e); // Error reporting
-      }
-    });
-    return false;
-  });
-  $('#modal').on('hidden.bs.modal', function() {
-    // Update cart items (add to cart, remove from cart, cart lightbox interface)
-    var cartCount = $('#cartItems strong');
-    if(cartCount.length > 0) {
-      var cart = getFullCartItems();
-      var id = $('#cartId');
-      if(id.length > 0) {
-        id = id.val();
-        $('#cart-add,#cart-remove').addClass('hidden');
-        if(cart.indexOf(id) > -1) {
-          $('#cart-remove').removeClass('hidden');
-        } else {
-          $('#cart-add').removeClass('hidden');
-        }
-      }
-      cartCount.html(cart.length);
-    }
-  });
-});
+/*global confirm, Cookies, newAccountHandler, path, vufindString, Lightbox, updatePageForLogin */
+
+var _CART_COOKIE = 'vufind_cart';
+var _CART_COOKIE_SOURCES = 'vufind_cart_src';
+var _CART_COOKIE_DELIM = "\t";
+
+var currentId,currentSource;
+
+function getCartItems() {
+  var items = Cookies.getItem(_CART_COOKIE);
+  if(items) {
+    return items.split(_CART_COOKIE_DELIM);
+  }
+  return [];
+}
+function getCartSources() {
+  var items = Cookies.getItem(_CART_COOKIE_SOURCES);
+  if(items) {
+    return items.split(_CART_COOKIE_DELIM);
+  }
+  return [];
+}
+function getFullCartItems() {
+  var items = getCartItems();
+  var sources = getCartSources();
+  var full = [];
+  if(items.length == 0) {
+    return [];
+  }
+  for(var i=items.length;i--;) {
+    full[full.length] = sources[items[i].charCodeAt(0)-65]+'|'+items[i].substr(1);
+  }
+  return full;
+}
+
+function addItemToCart(id,source) {
+  if(!source) {
+    source = 'VuFind';
+  }
+  var cartItems = getCartItems();
+  var cartSources = getCartSources();
+  var sIndex = cartSources.indexOf(source);
+  if(sIndex < 0) {
+    // Add source to source cookie
+    cartItems[cartItems.length] = String.fromCharCode(65+cartSources.length) + id;
+    cartSources[cartSources.length] = source;
+    Cookies.setItem(_CART_COOKIE_SOURCES, cartSources.join(_CART_COOKIE_DELIM), false, '/');
+  } else {
+    cartItems[cartItems.length] = String.fromCharCode(65+sIndex) + id;
+  }
+  Cookies.setItem(_CART_COOKIE, $.unique(cartItems).join(_CART_COOKIE_DELIM), false, '/');
+  $('#cartItems strong').html(parseInt($('#cartItems strong').html(), 10)+1);
+  return true;
+}
+function uniqueArray(op) {
+  var ret = [];
+  for(var i=0;i<op.length;i++) {
+    if(ret.indexOf(op[i]) < 0) {
+      ret.push(op[i]);
+    }
+  }
+  return ret;
+}
+function removeItemFromCart(id,source) {
+  var cartItems = getCartItems();
+  var cartSources = getCartSources();
+  // Find
+  var cartIndex = cartItems.indexOf(String.fromCharCode(65+cartSources.indexOf(source))+id);
+  if(cartIndex > -1) {
+    var sourceIndex = cartItems[cartIndex].charCodeAt(0)-65;
+    var cartItem = cartItems[cartIndex];
+    var saveSource = false;
+    for(var i=cartItems.length;i--;) {
+      if(i==cartIndex) {
+        continue;
+      }
+      // If this source is shared by another, keep it
+      if(cartItems[i].charCodeAt(0)-65 == sourceIndex) {
+        saveSource = true;
+        break;
+      }
+    }
+    cartItems.splice(cartIndex,1);
+    // Remove unused sources
+    if(!saveSource) {
+      var oldSources = cartSources.slice(0);
+      cartSources.splice(sourceIndex,1);
+      // Adjust source index characters
+      for(var j=cartItems.length;j--;) {
+        var si = cartItems[j].charCodeAt(0)-65;
+        var ni = cartSources.indexOf(oldSources[si]);
+        cartItems[j] = String.fromCharCode(65+ni)+cartItems[j].substring(1);
+      }
+    }
+    if(cartItems.length > 0) {
+      Cookies.setItem(_CART_COOKIE, uniqueArray(cartItems).join(_CART_COOKIE_DELIM), false, '/');
+      Cookies.setItem(_CART_COOKIE_SOURCES, uniqueArray(cartSources).join(_CART_COOKIE_DELIM), false, '/');
+    } else {
+      Cookies.removeItem(_CART_COOKIE, '/');
+      Cookies.removeItem(_CART_COOKIE_SOURCES, '/');
+    }
+    $('#cartItems strong').html(parseInt($('#cartItems strong').html(), 10)-1);
+    return true;
+  }
+  return false;
+}
+var cartNotificationTimeout = false;
+function registerUpdateCart($form) {
+  if($form) {
+    $("#updateCart, #bottom_updateCart").unbind('click').click(function(){
+      var elId = this.id;
+      var selectedBoxes = $("input[name='ids[]']:checked", $form);
+      var selected = [];
+      $(selectedBoxes).each(function(i) {
+        selected[i] = this.value;
+      });
+      if (selected.length > 0) {
+        var inCart = 0;
+        var msg = "";
+        var orig = getFullCartItems();
+        $(selected).each(function(i) {
+          for (var x in orig) {
+            if (this == orig[x]) {
+              inCart++;
+              return;
+            }
+          }
+          var data = this.split('|');
+          addItemToCart(data[1], data[0]);
+        });
+        var updated = getFullCartItems();
+        var added = updated.length - orig.length;
+        msg += added + " " + vufindString.itemsAddBag;
+        if (inCart > 0 && orig.length > 0) {
+          msg += "<br/>" + inCart + " " + vufindString.itemsInBag;
+        }
+        if (updated.length >= vufindString.bookbagMax) {
+          msg += "<br/>" + vufindString.bookbagFull;
+        }
+        $('#'+elId).data('bs.popover').options.content = msg;
+        $('#cartItems strong').html(updated.length);
+      } else {
+        $('#'+elId).data('bs.popover').options.content = vufindString.bulk_noitems_advice;
+      }
+      $('#'+elId).popover('show');
+      if (cartNotificationTimeout !== false) {
+        clearTimeout(cartNotificationTimeout);
+      }
+      cartNotificationTimeout = setTimeout(function() {
+        $('#'+elId).popover('hide');
+      }, 5000);
+      return false;
+    });
+  }
+}
+
+// Ajax cart submission for the lightbox
+var lastCartSubmit = false;
+function cartSubmit($form) {
+  lastCartSubmit = $form;
+  var submit = $form.find('input[type="submit"][clicked=true]').attr('name');
+  var checks = $form.find('input.checkbox-select-item:checked');
+  if(checks.length == 0 && submit != 'empty') {
+    return Lightbox.displayError(vufindString['bulk_noitems_advice']);
+  }
+  if (submit == 'print') {
+    //redirect page
+    var url = path+'/Records/Home?print=true';
+    for(var i=0;i<checks.length;i++) {
+      url += '&id[]='+checks[i].value;
+    }
+    document.location.href = url;
+  } else if ((submit != 'empty' || confirm(vufindString['confirmEmpty']))
+         && (submit != 'delete' || confirm(vufindString['confirmDelete']))) {
+    Lightbox.submit($form, Lightbox.changeContent);
+  } else {
+    $('#modal').find('.fa.fa-spinner').remove();
+  }
+}
+
+$(document).ready(function() {
+  // Record buttons
+  var cartId = $('#cartId');
+  if(cartId.length > 0) {
+    cartId = cartId.val().split('|');
+    currentId = cartId[1];
+    currentSource = cartId[0];
+    $('#cart-add.correct,#cart-remove.correct').removeClass('correct hidden');
+    $('#cart-add').click(function() {
+      addItemToCart(currentId,currentSource);
+      $('#cart-add,#cart-remove').toggleClass('hidden');
+    });
+    $('#cart-remove').click(function() {
+      removeItemFromCart(currentId,currentSource);
+      $('#cart-add,#cart-remove').toggleClass('hidden');
+    });
+  } else {
+    // Search results
+    var $form = $('form[name="bulkActionForm"]');
+    registerUpdateCart($form);
+  }
+  $("#updateCart, #bottom_updateCart").popover({content:'', html:true, trigger:'manual'});
+
+  // Setup lightbox behavior
+  // Cart lightbox
+  $('#cartItems').click(function() {
+    return Lightbox.get('Cart','Cart');
+  });
+  // Overwrite
+  Lightbox.addFormCallback('accountForm', function(html) {
+    updatePageForLogin();
+    if (lastCartSubmit !== false) {
+      cartSubmit(lastCartSubmit);
+      lastCartSubmit = false;
+    } else {
+      newAccountHandler(html);
+    }
+  });
+  Lightbox.addFormHandler('cartForm', function(evt) {
+    cartSubmit($(evt.target));
+    return false;
+  });
+  Lightbox.addFormCallback('bulkEmail', function(html) {
+    Lightbox.confirm(vufindString['bulk_email_success']);
+  });
+  Lightbox.addFormCallback('bulkSave', function(html) {
+    // After we close the lightbox, redirect to list view
+    Lightbox.addCloseAction(function() {
+      document.location.href = path+'/MyResearch/MyList/'+Lightbox.lastPOST['list'];
+    });
+    Lightbox.confirm(vufindString['bulk_save_success']);
+  });
+  Lightbox.addFormHandler('exportForm', function(evt) {
+    $.ajax({
+      url: path + '/AJAX/JSON?' + $.param({method:'exportFavorites'}),
+      type:'POST',
+      dataType:'json',
+      data:Lightbox.getFormData($(evt.target)),
+      success:function(data) {
+        if(data.data.needs_redirect) {
+          document.location.href = data.data.result_url;
+        } else {
+          Lightbox.changeContent(data.data.result_additional);
+        }
+      },
+      error:function(d,e) {
+        //console.log(d,e); // Error reporting
+      }
+    });
+    return false;
+  });
+  $('#modal').on('hidden.bs.modal', function() {
+    // Update cart items (add to cart, remove from cart, cart lightbox interface)
+    var cartCount = $('#cartItems strong');
+    if(cartCount.length > 0) {
+      var cart = getFullCartItems();
+      var id = $('#cartId');
+      if(id.length > 0) {
+        id = id.val();
+        $('#cart-add,#cart-remove').addClass('hidden');
+        if(cart.indexOf(id) > -1) {
+          $('#cart-remove').removeClass('hidden');
+        } else {
+          $('#cart-add').removeClass('hidden');
+        }
+      }
+      cartCount.html(cart.length);
+    }
+  });
+});