if(!window.Node){window.Node=new Object();Node.ELEMENT_NODE=1;Node.ATTRIBUTE_NODE=2;Node.TEXT_NODE=3;Node.CDATA_SECTION_NODE=4;Node.ENTITY_REFERENCE_NODE=5;Node.ENTITY_NODE=6;Node.PROCESSING_INSTRUCTION_NODE=7;Node.COMMENT_NODE=8;Node.DOCUMENT_NODE=9;Node.DOCUMENT_TYPE_NODE=10;Node.DOCUMENT_FRAGMENT_NODE=11;Node.NOTATION_NODE=12}if(typeof window.pz2=="undefined"){window.undefined=window.undefined;var pz2=function(a){if(!a){throw new Error("Pz2.js: Array with parameters has to be suplied.")}this.suppProtoVer="1";if(typeof a.pazpar2path!="undefined"){this.pz2String=a.pazpar2path}else{this.pz2String="/pazpar2/search.pz2"}this.useSessions=true;this.stylesheet=a.detailstylesheet||null;if(this.stylesheet){var b=this;var c=new pzHttpRequest(this.stylesheet);c.get({},function(d){b.xslDoc=d})}this.errorHandler=a.errorhandler||null;this.initCallback=a.oninit||null;this.statCallback=a.onstat||null;this.showCallback=a.onshow||null;this.termlistCallback=a.onterm||null;this.recordCallback=a.onrecord||null;this.bytargetCallback=a.onbytarget||null;this.resetCallback=a.onreset||null;this.termKeys=a.termlist||"subject";this.keepAlive=50000;if(a.keepAlive<this.keepAlive){this.keepAlive=a.keepAlive}this.sessionID=null;this.initStatusOK=false;this.pingStatusOK=false;this.searchStatusOK=false;this.currentSort="relevance";this.currentStart=0;this.currentNum=20;this.currRecID=null;this.currQuery=null;this.currRecOffset=null;this.statTime=a.stattime||1000;this.statTimer=null;this.termTime=a.termtime||1000;this.termTimer=null;this.showTime=a.showtime||1000;this.showTimer=null;this.showFastCount=4;this.bytargetTime=a.bytargettime||1000;this.bytargetTimer=null;this.dumpFactor=500;this.showCounter=0;this.termCounter=0;this.statCounter=0;this.bytargetCounter=0;this.activeClients=1;if(a.usesessions!=undefined){this.useSessions=a.usesessions;this.initStatusOK=true}if(this.useSessions&&a.autoInit!==false){this.init()}};pz2.prototype={throwError:function(c,a){var b=new Error(c);if(a){b.code=a}if(this.errorHandler){this.errorHandler(b)}else{throw b}},stop:function(){clearTimeout(this.statTimer);clearTimeout(this.showTimer);clearTimeout(this.termTimer);clearTimeout(this.bytargetTimer)},reset:function(){if(this.useSessions){this.sessionID=null;this.initStatusOK=false;this.pingStatusOK=false}this.searchStatusOK=false;this.stop();if(this.resetCallback){this.resetCallback()}},init:function(c){this.reset();if(c!=undefined&&this.useSessions){this.initStatusOK=true;this.sessionID=c;this.ping()}else{if(this.useSessions){var a=this;var b=new pzHttpRequest(this.pz2String,this.errorHandler);b.safeGet({command:"init"},function(d){if(d.getElementsByTagName("status")[0].childNodes[0].nodeValue=="OK"){if(d.getElementsByTagName("protocol")[0].childNodes[0].nodeValue!=a.suppProtoVer){throw new Error("Server's protocol not supported by the client")}a.initStatusOK=true;a.sessionID=d.getElementsByTagName("session")[0].childNodes[0].nodeValue;setTimeout(function(){a.ping()},a.keepAlive);if(a.initCallback){a.initCallback()}}else{a.throwError("Init failed. Malformed WS resonse.",110)}})}else{this.initStatusOK=true}}},ping:function(){if(!this.initStatusOK||!this.useSessions){throw new Error("Pz2.js: Ping not allowed (proxy mode) or session not initialized.")}var a=this;var b=new pzHttpRequest(this.pz2String,this.errorHandler);b.safeGet({command:"ping",session:this.sessionID},function(c){if(c.getElementsByTagName("status")[0].childNodes[0].nodeValue=="OK"){a.pingStatusOK=true;setTimeout(function(){a.ping()},a.keepAlive)}else{a.throwError("Ping failed. Malformed WS resonse.",111)}})},search:function(l,h,g,d,e,k){clearTimeout(this.statTimer);clearTimeout(this.showTimer);clearTimeout(this.termTimer);clearTimeout(this.bytargetTimer);this.showCounter=0;this.termCounter=0;this.bytargetCounter=0;this.statCounter=0;if(!this.initStatusOK){throw new Error("Pz2.js: session not initialized.")}if(l!==undefined){this.currQuery=l}else{throw new Error("Pz2.js: no query supplied to the search command.")}if(e!==undefined){var c=e}else{var c=0}var m={command:"search",query:this.currQuery,session:this.sessionID};if(d!==undefined){m.filter=d}if(k!=undefined){for(var a in k){if(!m.hasOwnProperty(a)){m[a]=k[a]}}}var b=this;var f=new pzHttpRequest(this.pz2String,this.errorHandler);f.safeGet(m,function(n){if(n.getElementsByTagName("status")[0].childNodes[0].nodeValue=="OK"){b.searchStatusOK=true;b.show(c,h,g);if(b.statCallback){b.stat()}if(b.termlistCallback){b.termlist()}if(b.bytargetCallback){b.bytarget()}}else{b.throwError("Search failed. Malformed WS resonse.",112)}})},stat:function(){if(!this.initStatusOK){throw new Error("Pz2.js: session not initialized.")}clearTimeout(this.statTimer);var a=this;var b=new pzHttpRequest(this.pz2String,this.errorHandler);b.safeGet({command:"stat",session:this.sessionID},function(f){if(f.getElementsByTagName("stat")){var d=Number(f.getElementsByTagName("activeclients")[0].childNodes[0].nodeValue);a.activeClients=d;var e={activeclients:d,hits:Number(f.getElementsByTagName("hits")[0].childNodes[0].nodeValue),records:Number(f.getElementsByTagName("records")[0].childNodes[0].nodeValue),clients:Number(f.getElementsByTagName("clients")[0].childNodes[0].nodeValue),initializing:Number(f.getElementsByTagName("initializing")[0].childNodes[0].nodeValue),searching:Number(f.getElementsByTagName("searching")[0].childNodes[0].nodeValue),presenting:Number(f.getElementsByTagName("presenting")[0].childNodes[0].nodeValue),idle:Number(f.getElementsByTagName("idle")[0].childNodes[0].nodeValue),failed:Number(f.getElementsByTagName("failed")[0].childNodes[0].nodeValue),error:Number(f.getElementsByTagName("error")[0].childNodes[0].nodeValue)};a.statCounter++;var c=a.statTime+a.statCounter*a.dumpFactor;if(d>0){a.statTimer=setTimeout(function(){a.stat()},c)}a.statCallback(e)}else{a.throwError("Stat failed. Malformed WS resonse.",113)}})},show:function(e,a,c){if(!this.searchStatusOK&&this.useSessions){throw new Error("Pz2.js: show command has to be preceded with a search command.")}clearTimeout(this.showTimer);if(c!==undefined){this.currentSort=c}if(e!==undefined){this.currentStart=Number(e)}if(a!==undefined){this.currentNum=Number(a)}var b=this;var d=new pzHttpRequest(this.pz2String,this.errorHandler);d.safeGet({command:"show",session:this.sessionID,start:this.currentStart,num:this.currentNum,sort:this.currentSort,block:1},function(l){if(l.getElementsByTagName("status")[0].childNodes[0].nodeValue=="OK"){var k=Number(l.getElementsByTagName("activeclients")[0].childNodes[0].nodeValue);b.activeClients=k;var g={activeclients:k,merged:Number(l.getElementsByTagName("merged")[0].childNodes[0].nodeValue),total:Number(l.getElementsByTagName("total")[0].childNodes[0].nodeValue),start:Number(l.getElementsByTagName("start")[0].childNodes[0].nodeValue),num:Number(l.getElementsByTagName("num")[0].childNodes[0].nodeValue),hits:[]};var f=l.getElementsByTagName("hit");for(i=0;i<f.length;i++){g.hits[i]=Element_parseChildNodes(f[i])}b.showCounter++;var h=b.showTime;if(b.showCounter>b.showFastCount){h+=b.showCounter*b.dumpFactor}if(k>0){b.showTimer=setTimeout(function(){b.show()},h)}global_show=g;b.showCallback(g)}else{b.throwError("Show failed. Malformed WS resonse.",114)}})},record:function(a,e,c,k){if(!this.searchStatusOK&&this.useSessions){throw new Error("Pz2.js: record command has to be preceded with a search command.")}if(a!==undefined){this.currRecID=a}var f={command:"record",session:this.sessionID,id:this.currRecID};this.currRecOffset=null;if(e!=undefined){f.offset=e;this.currRecOffset=e}if(c!=undefined){f.syntax=c}var h=this.recordCallback;var g=undefined;if(k!=undefined){h=k.callback;g=k.args}var b=this;var d=new pzHttpRequest(this.pz2String,this.errorHandler);d.safeGet(f,function(n){var l;var m;if(b.currRecOffset!==null){m=new Array();m.xmlDoc=n;m.offset=b.currRecOffset;h(m,g)}else{if(l=n.getElementsByTagName("record")[0]){if(b.xslDoc){m=new Array();m.xmlDoc=n;m.xslDoc=b.xslDoc;m.recid=l.getElementsByTagName("recid")[0].firstChild.nodeValue}else{m=Element_parseChildNodes(l)}h(m,g)}else{b.throwError("Record failed. Malformed WS resonse.",115)}}})},termlist:function(){if(!this.searchStatusOK&&this.useSessions){throw new Error("Pz2.js: termlist command has to be preceded with a search command.")}clearTimeout(this.termTimer);var a=this;var b=new pzHttpRequest(this.pz2String,this.errorHandler);b.safeGet({command:"termlist",session:this.sessionID,name:this.termKeys},function(g){if(g.getElementsByTagName("termlist")){var l=Number(g.getElementsByTagName("activeclients")[0].childNodes[0].nodeValue);a.activeClients=l;var h={activeclients:l};var m=g.getElementsByTagName("list");for(i=0;i<m.length;i++){var d=m[i].getAttribute("name");h[d]=new Array();var k=m[i].getElementsByTagName("term");for(j=0;j<k.length;j++){var e={name:(k[j].getElementsByTagName("name")[0].childNodes.length?k[j].getElementsByTagName("name")[0].childNodes[0].nodeValue:"ERROR"),freq:k[j].getElementsByTagName("frequency")[0].childNodes[0].nodeValue||"ERROR"};var c=k[j].getElementsByTagName("id");if(k[j].getElementsByTagName("id").length){e.id=c[0].childNodes[0].nodeValue}h[d][j]=e}}a.termCounter++;var f=a.termTime+a.termCounter*a.dumpFactor;if(l>0){a.termTimer=setTimeout(function(){a.termlist()},f)}a.termlistCallback(h)}else{a.throwError("Termlist failed. Malformed WS resonse.",116)}})},bytarget:function(){if(!this.initStatusOK&&this.useSessions){throw new Error("Pz2.js: bytarget command has to be preceded with a search command.")}if(!this.searchStatusOK){return}clearTimeout(this.bytargetTimer);var a=this;var b=new pzHttpRequest(this.pz2String,this.errorHandler);b.safeGet({command:"bytarget",session:this.sessionID},function(g){if(g.getElementsByTagName("status")[0].childNodes[0].nodeValue=="OK"){var c=g.getElementsByTagName("target");var f=new Array();for(i=0;i<c.length;i++){f[i]=new Array();for(j=0;j<c[i].childNodes.length;j++){if(c[i].childNodes[j].nodeType==Node.ELEMENT_NODE){var h=c[i].childNodes[j].nodeName;var e=c[i].childNodes[j].firstChild.nodeValue;f[i][h]=e}}}a.bytargetCounter++;var d=a.bytargetTime+a.bytargetCounter*a.dumpFactor;if(a.activeClients>0){a.bytargetTimer=setTimeout(function(){a.bytarget()},d)}a.bytargetCallback(f)}else{a.throwError("Bytarget failed. Malformed WS resonse.",117)}})},showNext:function(b){var a=b||1;this.show((a*this.currentNum)+this.currentStart)},showPrev:function(c){if(this.currentStart==0){return false}var b=c||1;var a=this.currentStart-(b*this.currentNum);this.show(a>0?a:0)},showPage:function(a){this.show(a*this.currentNum)}};var pzHttpRequest=function(b,a){this.maxUrlLength=2048;this.request=null;this.url=b;this.errorHandler=a||null;this.async=true;this.requestHeaders={};if(window.XMLHttpRequest){this.request=new XMLHttpRequest()}else{if(window.ActiveXObject){try{this.request=new ActiveXObject("Msxml2.XMLHTTP")}catch(c){this.request=new ActiveXObject("Microsoft.XMLHTTP")}}}};pzHttpRequest.prototype={safeGet:function(b,d){var c=this.encodeParams(b);var a=this._urlAppendParams(c);if(a.length>=this.maxUrlLength){this.requestHeaders["Content-Type"]="application/x-www-form-urlencoded";this._send("POST",this.url,c,d)}else{this._send("GET",a,"",d)}},get:function(a,b){this._send("GET",this._urlAppendParams(this.encodeParams(a)),"",b)},post:function(b,a,c){this._send("POST",this._urlAppendParams(this.encodeParams(b)),a,c)},load:function(){this.async=false;this.request.open("GET",this.url,this.async);this.request.send("");if(this.request.status==200){return this.request.responseXML}},encodeParams:function(d){var a="";var c="";for(var b in d){if(d[b]!=null){c+=a+b+"="+encodeURIComponent(d[b]);a="&"}}return c},_send:function(d,a,e,f){var c=this;this.callback=f;this.async=true;this.request.open(d,a,this.async);for(var b in this.requestHeaders){this.request.setRequestHeader(b,this.requestHeaders[b])}this.request.onreadystatechange=function(){c._handleResponse()};this.request.send(e)},_urlAppendParams:function(a){if(a){return this.url+"?"+a}else{return this.url}},_handleResponse:function(){if(this.request.readyState==4){var c=null;if(this.request.responseXML&&(c=this.request.responseXML.documentElement)&&c.nodeName=="error"){var e=c.getAttribute("msg");var b=c.getAttribute("code");var a="";if(c.childNodes.length){a=": "+c.childNodes[0].nodeValue}var d=new Error(e+a);d.code=b;if(this.errorHandler){this.errorHandler(d)}else{throw d}}else{if(this.request.status==200){this.callback(this.request.responseXML)}else{var d=new Error("HTTP response not OK: "+this.request.status+" - "+this.request.statusText);d.code="00"+this.request.status;if(this.errorHandler){this.errorHandler(d)}else{throw d}}}}}};if(window.ActiveXObject){var DOMDoc=document}else{var DOMDoc=Document.prototype}DOMDoc.newXmlDoc=function(a){var b;if(document.implementation&&document.implementation.createDocument){b=document.implementation.createDocument("",a,null)}else{if(window.ActiveXObject){b=new ActiveXObject("MSXML2.DOMDocument");b.loadXML("<"+a+"/>")}else{throw new Error("No XML support in this browser")}}return b};DOMDoc.parseXmlFromString=function(b){var a;if(window.DOMParser){var c=new DOMParser();a=c.parseFromString(b,"text/xml")}else{if(window.ActiveXObject){a=new ActiveXObject("MSXML2.DOMDocument");a.loadXML(b)}else{throw new Error("No XML parsing support in this browser.")}}return a};DOMDoc.transformToDoc=function(b,c){if(window.XSLTProcessor){var a=new XSLTProcessor();a.importStylesheet(c);return a.transformToDocument(b)}else{if(window.ActiveXObject){return document.parseXmlFromString(b.transformNode(c))}else{alert("Unable to perform XSLT transformation in this browser")}}};Element_removeFromDoc=function(a){a.parentNode.removeChild(a)};Element_emptyChildren=function(a){while(a.firstChild){a.removeChild(a.firstChild)}};Element_appendTransformResult=function(c,d,e){if(window.XSLTProcessor){var a=new XSLTProcessor();a.importStylesheet(e);var b=false;b=a.transformToFragment(d,c.ownerDocument);c.appendChild(b)}else{if(window.ActiveXObject){c.innerHTML=d.transformNode(e)}else{alert("Unable to perform XSLT transformation in this browser")}}};Element_appendTextNode=function(d,a,c){var b=d.ownerDocument.createElement(a);var e=d.ownerDocument.createTextNode(c);d.appendChild(b);b.appendChild(e);return b};Element_setTextContent=function(b,a){if(typeof b.textContent!=="undefined"){b.textContent=a}else{if(typeof b.innerText!=="undefined"){b.innerText=a}else{throw new Error("Cannot set text content of the node, no such method.")}}};Element_getTextContent=function(a){if(typeof a.textContent!="undefined"){return a.textContent}else{if(typeof a.text!="undefined"){return a.text}else{throw new Error("Cannot get text content of the node, no such method.")}}};Element_parseChildNodes=function(c){var h={};var e=false;if(c.hasChildNodes()){var b=c.childNodes;for(var d=0;d<b.length;d++){var a=b[d];if(a.nodeType==Node.ELEMENT_NODE){e=true;var k=a.nodeName;if(!(k in h)){h[k]=[]}h[k].push(Element_parseChildNodes(a))}}}var l=c.attributes;for(var d=0;d<l.length;d++){var g="@"+l[d].nodeName;var f=l[d].nodeValue;h[g]=f}if(c.hasChildNodes()&&!e){if(c.attributes.length){h.textContent=c.firstChild.nodeValue}else{h=c.firstChild.nodeValue}}return h}};