+mkdru.pz2Record = function (data) {
+ clearTimeout(mkdru.pz2.showTimer);
+ $('.mkdru-results').hide();
+ $('.mkdru-detail').html(Drupal.theme('mkdruDetail', data));
+ $('.mkdru-detail-back').bind('click', function () {$.bbq.removeState('recid');});
+ $('.mkdru-detail').show();
+ clearTimeout(mkdru.pz2.recordTimer);
+};
+
+
+
+// State and URL handling
+
+// populate state from an object and fill in the blanks with defaults
+mkdru.stateFromObject = function (obj) {
+ for (var key in mkdru.defaultState) {
+ if (typeof(obj[key]) != "undefined") {
+ mkdru.state[key] = obj[key];
+ }
+ else {
+ mkdru.state[key] = mkdru.defaultState[key];
+ }
+ }
+};
+
+// populate state from current window's hash string
+mkdru.stateFromHash = function () {
+ mkdru.stateFromObject($.deparam.fragment());
+};
+
+// set current window's hash string from state
+mkdru.hashFromState = function () {
+ // only include non-default settings in the URL
+ var alteredState = {};
+ for (var key in mkdru.defaultState) {
+ if (mkdru.state[key] != mkdru.defaultState[key]) {
+ alteredState[key] = mkdru.state[key];
+ }
+ }
+ $.bbq.pushState(alteredState);
+};
+
+// update mkdru_form theme's ui to match state
+mkdru.uiFromState = function () {
+ for (var key in mkdru.state) {
+ switch(key) {
+ case 'query':
+ $('.mkdru-search input:text').attr('value', mkdru.state[key]);
+ break;
+ case 'perpage':
+ $('.mkdru-perpage').attr('value', mkdru.state[key]);
+ break;
+ case 'sort':
+ $('.mkdru-sort').attr('value', mkdru.state[key]);
+ break;
+ }
+ }
+};
+
+mkdru.hashChange = function () {
+ var hash = $.deparam.fragment();
+ // Request for details
+ if (typeof(hash.recid) !== "undefined") {
+ mkdru.pz2.record(hash.recid);
+ }
+ // Other internal link
+ else {
+ mkdru.stateFromObject($.deparam.fragment());
+ mkdru.pz2.showPage(mkdru.state.page-1);
+ $('.mkdru-detail').hide();
+ $('.mkdru-results').show();
+ }
+};
+