Removing mk related classes.
[pazpar2-moved-to-github.git] / js / pz2.js
index 3d4d8da..cb19e78 100644 (file)
--- a/js/pz2.js
+++ b/js/pz2.js
@@ -1,5 +1,5 @@
 /*
-** $Id: pz2.js,v 1.51 2007-08-30 13:24:37 jakub Exp $
+** $Id: pz2.js,v 1.60 2007-10-02 10:33:18 jakub Exp $
 ** pz2.js - pazpar2's javascript client library.
 */
 
@@ -36,7 +36,10 @@ var pz2 = function ( paramArray )
 
     //supported pazpar2's protocol version
     __myself.suppProtoVer = '1';
-    __myself.pz2String = paramArray.pazpar2path || "/pazpar2/search.pz2";
+    if (typeof paramArray.pazpar2path != "undefined")
+        __myself.pz2String = paramArray.pazpar2path;
+    else
+        __myself.pz2String = "/pazpar2/search.pz2";
     __myself.useSessions = true;
     
     __myself.stylesheet = paramArray.detailstylesheet || null;
@@ -118,6 +121,20 @@ var pz2 = function ( paramArray )
 
 pz2.prototype = 
 {
+    //error handler for async error throws
+   throwError: function (errMsg, errCode)
+   {
+        var err = new Error(errMsg);
+        if (errCode) err.code = errCode;
+                
+        if (__myself.errorHandler) {
+            __myself.errorHandler(err);
+        }
+        else {
+            throw err;
+        }
+   },
+
     // stop activity by clearing tiemouts 
    stop: function ()
    {
@@ -168,7 +185,8 @@ pz2.prototype =
                     else
                         // if it gets here the http return code was 200 (pz2 errors are 417)
                         // but the response was invalid, it should never occur
-                        setTimeout("__myself.init()", 1000);
+                        // setTimeout("__myself.init()", 1000);
+                        __myself.throwError('Init failed. Malformed WS resonse.', 110);
                 }
             );
         // when through proxy no need to init
@@ -195,7 +213,8 @@ pz2.prototype =
                 else
                     // if it gets here the http return code was 200 (pz2 errors are 417)
                     // but the response was invalid, it should never occur
-                    setTimeout("__myself.ping()", 1000);
+                    // setTimeout("__myself.ping()", 1000);
+                    __myself.throwError('Ping failed. Malformed WS resonse.', 111);
             }
         );
     },
@@ -251,7 +270,8 @@ pz2.prototype =
                 else
                     // if it gets here the http return code was 200 (pz2 errors are 417)
                     // but the response was invalid, it should never occur
-                    setTimeout("__myself.search(__myself.currQuery)", 500);
+                    // setTimeout("__myself.search(__myself.currQuery)", 500);
+                    __myself.throwError('Search failed. Malformed WS resonse.', 112);
             }
         );
     },
@@ -292,7 +312,8 @@ pz2.prototype =
                 else
                     // if it gets here the http return code was 200 (pz2 errors are 417)
                     // but the response was invalid, it should never occur
-                    __myself.statTimer = setTimeout("__myself.stat()", __myself.statTime / 4);
+                    //__myself.statTimer = setTimeout("__myself.stat()", __myself.statTime / 4);
+                    __myself.throwError('Stat failed. Malformed WS resonse.', 113);
             }
         );
     },
@@ -369,7 +390,8 @@ pz2.prototype =
                 else
                     // if it gets here the http return code was 200 (pz2 errors are 417)
                     // but the response was invalid, it should never occur
-                    __myself.showTimer = setTimeout("__myself.show()", __myself.showTime / 4);
+                    // __myself.showTimer = setTimeout("__myself.show()", __myself.showTime / 4);
+                    __myself.throwError('Show failed. Malformed WS resonse.', 114);
             }
         );
     },
@@ -462,14 +484,15 @@ pz2.prototype =
                 else
                     // if it gets here the http return code was 200 (pz2 errors are 417)
                     // but the response was invalid, it should never occur
-                    setTimeout("__myself.record(__myself.currRecID)", 500);
+                    // setTimeout("__myself.record(__myself.currRecID)", 500);
+                    __myself.throwError('Record failed. Malformed WS resonse.', 115);
             }
         );
     },
 
     termlist: function()
     {
-        if( !__myself.searchStatusOK && __.myself.useSessions )
+        if( !__myself.searchStatusOK && __myself.useSessions )
             throw new Error('Pz2.js: termlist command has to be preceded with a search command.');
 
         // if called explicitly takes precedence
@@ -516,7 +539,8 @@ pz2.prototype =
                 else
                     // if it gets here the http return code was 200 (pz2 errors are 417)
                     // but the response was invalid, it should never occur
-                    __myself.termTimer = setTimeout("__myself.termlist()", __myself.termTime / 4); 
+                    // __myself.termTimer = setTimeout("__myself.termlist()", __myself.termTime / 4); 
+                    __myself.throwError('Termlist failed. Malformed WS resonse.', 116);
             }
         );
 
@@ -561,7 +585,8 @@ pz2.prototype =
                 else
                     // if it gets here the http return code was 200 (pz2 errors are 417)
                     // but the response was invalid, it should never occur
-                    __myself.bytargetTimer = setTimeout("__myself.bytarget()", __myself.bytargetTime / 4);
+                    // __myself.bytargetTimer = setTimeout("__myself.bytarget()", __myself.bytargetTime / 4);
+                    __myself.throwError('Bytarget failed. Malformed WS resonse.', 117);
             }
         );
     },
@@ -652,7 +677,7 @@ pzHttpRequest.prototype =
         var el = params;
         for (var key in el) {
             if (el[key] != null) {
-                getUrl += sep + key + '=' + encodeURI(el[key]);
+                getUrl += sep + key + '=' + encodeURIComponent(el[key]);
                 sep = '&';
             }
         }
@@ -666,11 +691,13 @@ pzHttpRequest.prototype =
             if ( this.request.responseXML 
                 && this.request.responseXML.documentElement.nodeName == 'error'
                 && this.request.responseXML.getElementsByTagName("error").length ) {
-                var errAddInfo = this.request.responseXML.getElementsByTagName("error")[0].childNodes[0].nodeValue;
+                var errAddInfo = '';
+                if ( this.request.responseXML.getElementsByTagName("error")[0].childNodes.length )
+                    errAddInfo = ': ' + this.request.responseXML.getElementsByTagName("error")[0].childNodes[0].nodeValue;
                 var errMsg = this.request.responseXML.getElementsByTagName("error")[0].getAttribute("msg");
                 var errCode = this.request.responseXML.getElementsByTagName("error")[0].getAttribute("code");
             
-                var err = new Error(errMsg + ': ' + errAddInfo);
+                var err = new Error(errMsg + errAddInfo);
                 err.code = errCode;
            
                 if (this.errorHandler) {
@@ -746,6 +773,19 @@ DOMDoc.parseXmlFromString = function ( xmlString )
     return doc;
 }
 
+DOMDoc.transformToDoc = function (xmlDoc, xslDoc)
+{
+    if ( window.XSLTProcessor ) {
+        var proc = new XSLTProcessor();
+        proc.importStylesheet( xslDoc );
+        return proc.transformToDocument(xmlDoc);
+    } else if ( window.ActiveXObject ) {
+        return document.parseXmlFromString(xmlDoc.transformNode(xslDoc));
+    } else {
+        alert( 'Unable to perform XSLT transformation in this browser' );
+    }
+}
 // DOMElement
 
 Element_removeFromDoc = function (DOM_Element)
@@ -801,158 +841,11 @@ Element_getTextContent = function (DOM_Element)
 {
     if ( typeof DOM_Element.textContent != 'undefined' ) {
         return DOM_Element.textContent;
-    } else if (DOM_Element.text ) {
+    } else if (typeof DOM_Element.text != 'undefined') {
         return DOM_Element.text;
     } else {
         throw new Error("Cannot get text content of the node, no such method.");
     }
 }
 
-/*
-*********************************************************************************
-** QUERY CLASS ******************************************************************
-*********************************************************************************
-*/
-var pzQuery = function()
-{
-    this.simpleQuery = '';
-    this.singleFilter = null;
-    this.advTerms = new Array();
-    this.filterHash = new Array();
-    this.numTerms = 0;
-    this.filterNums = 0;
-};
-pzQuery.prototype = {
-    reset: function()
-    {
-        this.simpleQuery = '';
-        this.advTerms = new Array();
-        this.simpleFilter = null;
-        this.numTerms = 0;
-    },
-    clearSimpleQuery: function()
-    {
-        this.simpleQuery = '';
-    },
-    addTerm: function(field, value)
-    {
-        var term = {"field": field, "value": value};
-        this.advTerms[this.numTerms] = term;
-        this.numTerms++;
-    },
-    getTermValueByIdx: function(index)
-    {
-        return this.advTerms[index].value;
-    },
-    getTermFieldByIdx: function(index)
-    {
-        return this.advTerms[index].field;
-    },
-    /* semicolon separated list of terms for given field*/
-    getTermsByField: function(field)
-    {
-        var terms = '';
-        for(var i = 0; i < this.advTerms.length; i++)
-        {
-            if( this.advTerms[i].field == field )
-                terms = terms + this.queryHas[i].value + ';';
-        }
-        return terms;
-    },
-    addTermsFromList: function(inputString, field)
-    {
-        var inputArr = inputString.split(';');
-        for(var i=0; i < inputArr.length; i++)
-        {
-            if(inputArr[i].length < 3) continue;
-            this.advTerms[this.numTerms] = {"field": field, "value": inputArr[i] };
-            this.numTerms++;
-        }
-    },
-    removeTermByIdx: function(index)
-    {
-        this.advTerms.splice(index, 1);
-        this.numTerms--;
-    },
-    toCCL: function()
-    {   
-        var ccl = '';
-        if( this.simpleQuery != '')
-            ccl = this.simpleQuery;
-        for(var i = 0; i < this.advTerms.length; i++)
-        {
-            if (ccl != '') ccl = ccl + ' and ';
-            ccl = ccl + this.advTerms[i].field+'="'+this.advTerms[i].value+'"';
-        }
-        return ccl;
-    },
-    addFilter: function(name, value)
-    {
-        var filter = {"name": name, "id": value };
-        this.filterHash[this.filterHash.length] = filter;
-        this.filterNums++
-        return  this.filterHash.length - 1;
-    },
-    setFilter: function(name, value)
-    {
-        this.filterHash = new Array();
-        this.filterNums = 0;
-        this.addFilter(name, value);
-    },
-    getFilter: function(index)
-    {
-        return this.filterHash[index].id;
-    },
-    getFilterName: function(index)
-    {
-        return this.filterHash[index].name;
-    },
-    removeFilter: function(index)
-    {
-        delete this.filterHash[index];
-        this.filterNums--;
-    },
-    clearFilter: function()
-    {
-        this.filterHash = new Array();
-        this.filterNums = 0;
-    },
-    getFilterString: function()
-    {
-        //temporary
-        if( this.singleFilter != null ) {
-            return 'pz:id='+this.singleFilter.id;
-        } 
-        else if( this.filterNums <= 0 ) {
-            return undefined;
-        }
-
-        var filter = 'pz:id=';
-        for(var i = 0; i < this.filterHash.length; i++)
-        {
-            if (this.filterHash[i] == undefined) continue;
-            if (filter > 'pz:id=') filter = filter + '|';            
-            filter += this.filterHash[i].id; 
-        }
-        return filter;
-    },
-    totalLength: function()
-    {
-        var simpleLength = this.simpleQuery != '' ? 1 : 0;
-        return this.advTerms.length + simpleLength;
-    },
-    clearSingleFilter: function()
-    {
-        this.singleFilter = null;
-    },
-    setSingleFilter: function(name, value)
-    {
-        this.singleFilter = {"name": name, "id": value };
-    },
-    getSingleFilterName: function()
-    {
-        return this.singleFilter.name;
-    }
-}
-
 }