Constructor accepts optional "windowid" parameter, and uses this as
[pazpar2-moved-to-github.git] / js / pz2.js
index a0afe3a..8ef4db8 100644 (file)
--- a/js/pz2.js
+++ b/js/pz2.js
@@ -32,6 +32,7 @@ var pz2 = function ( paramArray )
         throw new Error("Pz2.js: Array with parameters has to be supplied."); 
 
     //supported pazpar2's protocol version
+    this.windowid = paramArray.windowid || window.name;
     this.suppProtoVer = '1';
     if (typeof paramArray.pazpar2path != "undefined")
         this.pz2String = paramArray.pazpar2path;
@@ -240,7 +241,7 @@ pz2.prototype =
 
         var request = new pzHttpRequest(this.pz2String, this.errorHandler);
         request.safeGet(
-            { "command": "ping", "session": this.sessionID, "windowid" : window.name },
+            { "command": "ping", "session": this.sessionID, "windowid" : this.windowid },
             function(data) {
                 if ( data.getElementsByTagName("status")[0]
                         .childNodes[0].nodeValue == "OK" ) {
@@ -290,7 +291,7 @@ pz2.prototype =
           "command": "search",
           "query": this.currQuery, 
           "session": this.sessionID,
-          "windowid" : window.name
+          "windowid" : this.windowid
         };
        
         if( sort !== undefined ) {
@@ -343,7 +344,7 @@ pz2.prototype =
         var context = this;
         var request = new pzHttpRequest(this.pz2String, this.errorHandler);
         request.safeGet(
-            { "command": "stat", "session": this.sessionID, "windowid" : window.name },
+            { "command": "stat", "session": this.sessionID, "windowid" : this.windowid },
             function(data) {
                 if ( data.getElementsByTagName("stat") ) {
                     var activeClients = 
@@ -401,7 +402,7 @@ pz2.prototype =
               "sort": this.currentSort, 
               "block": 1,
               "type": this.showResponseType,
-              "windowid" : window.name
+              "windowid" : this.windowid
           };
         if (query_state)
           requestParameters["query-state"] = query_state;
@@ -490,7 +491,7 @@ pz2.prototype =
             "command": "record", 
             "session": this.sessionID,
             "id": this.currRecID,
-            "windowid" : window.name
+            "windowid" : this.windowid
         };
        
        this.currRecOffset = null;
@@ -579,7 +580,7 @@ pz2.prototype =
                 "command": "termlist", 
                 "session": this.sessionID, 
                 "name": this.termKeys,
-                "windowid" : window.name, 
+                "windowid" : this.windowid, 
                "version" : this.version
        
             },
@@ -672,7 +673,7 @@ pz2.prototype =
                "command": "bytarget", 
                "session": this.sessionID, 
                "block": 1,
-               "windowid" : window.name,
+               "windowid" : this.windowid,
                "version" : this.version
            },
             function(data) {
@@ -775,17 +776,19 @@ var pzHttpRequest = function (url, errorHandler, cookieDomain) {
         this.errorHandler = errorHandler || null;
         this.async = true;
         this.requestHeaders = {};
-        this.isXDomain = false;
+        this.isXDR = false;
         this.domainRegex = /https?:\/\/([^:/]+).*/;
         this.cookieDomain = cookieDomain || null;
 
         var xhr = new XMLHttpRequest();
+        var domain = this._getDomainFromUrl(url);
         if ("withCredentials" in xhr) {
           // XHR for Chrome/Firefox/Opera/Safari.
-        } else if (typeof XDomainRequest != "undefined") {
-          // XDomainRequest for IE.
+        } else if (domain && this._isCrossDomain(domain) &&
+            typeof XDomainRequest != "undefined") {
+          // use XDR (IE7/8) when no other way
           xhr = new XDomainRequest();
-          this.isXDomain = true;
+          this.isXDR = true;
         } else {
           // CORS not supported.
         }
@@ -914,12 +917,12 @@ pzHttpRequest.prototype =
           }
         }
         this.request.open( type, url, this.async );
-        if (!this.isXDomain) {
+        if (!this.isXDR) {
           //setting headers is only allowed with XHR
           for (var key in this.requestHeaders)
             this.request.setRequestHeader(key, this.requestHeaders[key]);
         }
-        if (this.isXDomain) {
+        if (this.isXDR) {
           this.request.onload = function () {
             //fake XHR props
             context.request.status = 200;
@@ -956,7 +959,7 @@ pzHttpRequest.prototype =
             // pick up appplication errors first
             var errNode = null;
             // xdomainreq does not have responseXML
-            if (this.isXDomain) {
+            if (this.isXDR) {
               if (this.request.contentType.match(/\/xml/)){                
                 var dom = new ActiveXObject('Microsoft.XMLDOM');
                 dom.async = false;