Typo in the 'bytarget' fix
[pazpar2-moved-to-github.git] / js / pz2.js
index 7948ea0..7edf35d 100644 (file)
--- a/js/pz2.js
+++ b/js/pz2.js
@@ -79,6 +79,7 @@ var pz2 = function ( paramArray )
 
     // where are we?
     this.currentStart = 0;
+    // currentNum can be overwritten in show 
     this.currentNum = 20;
 
     // last full record retrieved
@@ -91,6 +92,7 @@ var pz2 = function ( paramArray )
     this.currRecOffset = null;
 
     //timers
+    this.pingTimer = null;
     this.statTime = paramArray.stattime || 1000;
     this.statTimer = null;
     this.termTime = paramArray.termtime || 1000;
@@ -158,6 +160,7 @@ pz2.prototype =
             this.sessionID = null;
             this.initStatusOK = false;
             this.pingStatusOK = false;
+            clearTimeout(this.pingTimer);
         }
         this.searchStatusOK = false;
         this.stop();
@@ -196,12 +199,13 @@ pz2.prototype =
                         context.sessionID = 
                             data.getElementsByTagName("session")[0]
                                 .childNodes[0].nodeValue;
-                        setTimeout(
-                            function () {
-                                context.ping();
-                            },
-                            context.keepAlive
-                        );
+                        context.pingTimer =
+                            setTimeout(
+                                function () {
+                                    context.ping();
+                                },
+                                context.keepAlive
+                            );
                         if ( context.initCallback )
                             context.initCallback();
                     }
@@ -224,19 +228,23 @@ pz2.prototype =
             'Pz2.js: Ping not allowed (proxy mode) or session not initialized.'
             );
         var context = this;
+
+        clearTimeout(context.pingTimer);
+
         var request = new pzHttpRequest(this.pz2String, this.errorHandler);
         request.safeGet(
-            { "command": "ping", "session": this.sessionID },
+            { "command": "ping", "session": this.sessionID, "windowid" : window.name },
             function(data) {
                 if ( data.getElementsByTagName("status")[0]
                         .childNodes[0].nodeValue == "OK" ) {
                     context.pingStatusOK = true;
-                    setTimeout(
-                        function () {
-                            context.ping();
-                        }, 
-                        context.keepAlive
-                    );
+                    context.pingTimer =
+                        setTimeout(
+                            function () {
+                                context.ping();
+                            },
+                            context.keepAlive
+                        );
                 }
                 else
                     context.throwError('Ping failed. Malformed WS resonse.',
@@ -271,14 +279,15 @@ pz2.prototype =
         else
             var start = 0;
 
-       var searchParams = { 
-            "command": "search",
-            "query": this.currQuery, 
-            "session": this.sessionID 
+             var searchParams = { 
+          "command": "search",
+          "query": this.currQuery, 
+          "session": this.sessionID,
+          "windowid" : window.name
         };
        
         if (filter !== undefined)
-           searchParams["filter"] = filter;
+               searchParams["filter"] = filter;
 
         // copy additional parmeters, do not overwrite
         if (addParamsArr != undefined) {
@@ -322,7 +331,7 @@ pz2.prototype =
         var context = this;
         var request = new pzHttpRequest(this.pz2String, this.errorHandler);
         request.safeGet(
-            { "command": "stat", "session": this.sessionID },
+            { "command": "stat", "session": this.sessionID, "windowid" : window.name },
             function(data) {
                 if ( data.getElementsByTagName("stat") ) {
                     var activeClients = 
@@ -352,7 +361,7 @@ pz2.prototype =
             }
         );
     },
-    show: function(start, num, sort)
+    show: function(start, num, sort, query_state)
     {
         if( !this.searchStatusOK && this.useSessions )
             throw new Error(
@@ -371,7 +380,7 @@ pz2.prototype =
 
         var context = this;
         var request = new pzHttpRequest(this.pz2String, this.errorHandler);
-        request.safeGet(
+       var requestParameters = 
           {
             "command": "show", 
             "session": this.sessionID, 
@@ -379,8 +388,13 @@ pz2.prototype =
             "num": this.currentNum, 
             "sort": this.currentSort, 
             "block": 1,
-            "type": this.showResponseType
-          },
+            "type": this.showResponseType,
+            "windowid" : window.name
+          };
+        if (query_state)
+          requestParameters["query-state"] = query_state;
+        request.safeGet(
+         requestParameters,
           function(data, type) {
             var show = null;
             var activeClients = 0;
@@ -453,7 +467,8 @@ pz2.prototype =
        var recordParams = { 
             "command": "record", 
             "session": this.sessionID,
-            "id": this.currRecID 
+            "id": this.currRecID,
+            "windowid" : window.name
         };
        
        this.currRecOffset = null;
@@ -541,7 +556,8 @@ pz2.prototype =
             { 
                 "command": "termlist", 
                 "session": this.sessionID, 
-                "name": this.termKeys 
+                "name": this.termKeys,
+                "windowid" : window.name
             },
             function(data) {
                 if ( data.getElementsByTagName("termlist") ) {
@@ -618,7 +634,12 @@ pz2.prototype =
         var context = this;
         var request = new pzHttpRequest(this.pz2String, this.errorHandler);
         request.safeGet(
-            { "command": "bytarget", "session": this.sessionID },
+            { 
+               "command": "bytarget", 
+               "session": this.sessionID, 
+               "block": 1,
+               "windowid" : window.name
+           },
             function(data) {
                 if ( data.getElementsByTagName("status")[0]
                         .childNodes[0].nodeValue == "OK" ) {
@@ -631,12 +652,36 @@ pz2.prototype =
                                 == Node.ELEMENT_NODE ) {
                                 var nodeName = 
                                     targetNodes[i].childNodes[j].nodeName;
-                                var nodeText = 
-                                    targetNodes[i].childNodes[j]
-                                        .firstChild.nodeValue;
-                                bytarget[i][nodeName] = nodeText;
+                               if (targetNodes[i].childNodes[j].firstChild != null) 
+                               {
+                                    var nodeText = targetNodes[i].childNodes[j]
+                                       .firstChild.nodeValue;
+                                    bytarget[i][nodeName] = nodeText;
+                               }
+                               else { 
+                                   bytarget[i][nodeName] = "";  
+                               }
+
+
                             }
                         }
+                        if (bytarget[i]["state"]=="Client_Disconnected") {
+                          bytarget[i]["hits"] = "Error";
+                        } else if (bytarget[i]["state"]=="Client_Error") {
+                          bytarget[i]["hits"] = "Error";                          
+                        } else if (bytarget[i]["state"]=="Client_Working") {
+                          bytarget[i]["hits"] = "...";
+                        }
+                        if (bytarget[i].diagnostic == "1") {
+                          bytarget[i].diagnostic = "Permanent system error";
+                        } else if (bytarget[i].diagnostic == "2") {
+                          bytarget[i].diagnostic = "Temporary system error";
+                        } 
+                        var targetsSuggestions = targetNodes[i].getElementsByTagName("suggestions");
+                        if (targetsSuggestions != undefined && targetsSuggestions.length>0) {
+                          var suggestions = targetsSuggestions[0];
+                          bytarget[i]["suggestions"] = Element_parseChildNodes(suggestions);
+                        }
                     }
                     
                     context.bytargetCounter++;