+if (!$.isArray) $.isArray = function(obj) {
+ return Object.prototype.toString.call(obj) === "[object Array]";
+};
+
+// BBQ has no handy way to remove params without changing the hash.
+// This takes an object to add and an array of keys to delete.
+mkdru.hashAddDelMany = function (add, del) {
+ var newHash = $.deparam.fragment();
+ if (typeof(add) === 'object')
+ $.extend(newHash, add);
+ if ($.isArray(del))
+ for (var i=0; i < del.length; i++)
+ if (newHash[del[i]] !== 'undefined')
+ delete newHash[del[i]];
+ return $.param.fragment("#", newHash);
+}
+
+// It's sometimes cumbersome that object literals can't take variable keys.
+mkdru.hashAddDelOne = function (key, value, del) {
+ var toAdd;
+ var toDel;
+ if (key && value) {
+ var toAdd = {};
+ toAdd[key] = value;
+ }
+ if (del) {
+ var toDel = [];
+ toDel.push(del);
+ }
+ return mkdru.hashAddDelMany(toAdd, toDel);
+}