1 /* prevent execution of more than once */
2 if(typeof window.pz2 == "undefined") {
3 window.undefined = window.undefined;
5 var pz2 = function(callbackArr, autoInit, keepAlive) {
9 // at least one callback required
11 throw new Error("Callback parameters array has to be suplied when instantiating a class");
14 myself.statCallback = callbackArr.onstat;
15 myself.showCallback = callbackArr.onshow;
16 myself.termlistCallback = callbackArr.onterm;
17 myself.recordCallback = callbackArr.onrecord || null;
20 myself.termKeys = callbackArr.termlist || "subject";
22 myself.pz2String = "search.pz2";
23 myself.sessionID = null;
24 myself.initStatusOK = false;
25 myself.pingStatusOK = false;
26 myself.searchStatusOK = false;
27 myself.keepAlive = 50000;
29 if ( keepAlive < myself.keepAlive )
30 myself.keepAlive = keepAlive;
33 myself.currentSort = "relevance";
35 myself.currentStart = 0;
36 myself.currentNum = 20;
39 myself.statTime = 2000;
40 myself.statTimer = null;
41 myself.termTime = 1000;
42 myself.termTimer = null;
43 myself.showTime = 1000;
44 myself.showTimer = null;
47 $(document).ajaxError(
48 function (request, settings, exception) {
49 if ( settings.responseXML && settings.responseXML.getElementsByTagName("error")[0].childNodes[0].nodeValue)
50 throw new Error( settings.responseXML.getElementsByTagName("error")[0].childNodes[0].nodeValue);
53 if (autoInit !== false)
54 myself.init(myself.keepAlive);
57 init: function(keepAlive) {
58 if ( keepAlive < myself.keepAlive ) myself.keepAlive = keepAlive;
59 $.get( myself.pz2String,
62 if ( data.getElementsByTagName("status")[0].childNodes[0].nodeValue == "OK" ) {
63 myself.initStatusOK = true;
64 myself.sessionID = data.getElementsByTagName("session")[0].childNodes[0].nodeValue;
65 setTimeout(myself.ping, myself.keepAlive);
70 // no need to ping explicitly
72 if( !myself.initStatusOK )
74 // session is not initialized code here
75 $.get( myself.pz2String,
76 { command: "ping", session: myself.sessionID },
78 if ( data.getElementsByTagName("status")[0].childNodes[0].nodeValue == "OK" ) {
79 myself.pingStatusOK = true;
80 setTimeout("myself.ping()", myself.keepAlive);
87 search: function(query, num, sort) {
88 clearTimeout(myself.statTimer);
89 clearTimeout(myself.showTimer);
90 clearTimeout(myself.termTimer);
91 if( !myself.initStatusOK )
93 $.get( myself.pz2String,
94 { command: "search", session: myself.sessionID, query: query },
96 if ( data.getElementsByTagName("status")[0].childNodes[0].nodeValue == "OK" ) {
97 myself.searchStatusOK = true;
99 myself.show(0, num, sort)
100 if ( myself.statCallback )
101 myself.statTimer = setTimeout("myself.stat()", myself.statTime / 2);
102 if ( myself.termlistCallback )
103 myself.termTimer = setTimeout("myself.termlist()", myself.termTime / 2);
110 // callback, not to be called explicitly
111 stat: function(test) {
112 if( !myself.searchStatusOK )
114 $.get( myself.pz2String,
115 { command: "stat", session: myself.sessionID },
117 if ( data.getElementsByTagName("stat") ) {
118 var activeClients = Number( data.getElementsByTagName("activeclients")[0].childNodes[0].nodeValue );
120 "activeclients": activeClients,
121 "hits": Number( data.getElementsByTagName("hits")[0].childNodes[0].nodeValue ),
122 "records": Number( data.getElementsByTagName("records")[0].childNodes[0].nodeValue ),
123 "clients": Number( data.getElementsByTagName("clients")[0].childNodes[0].nodeValue ),
124 "initializing": Number( data.getElementsByTagName("initializing")[0].childNodes[0].nodeValue ),
125 "searching": Number( data.getElementsByTagName("searching")[0].childNodes[0].nodeValue ),
126 "presenting": Number( data.getElementsByTagName("presenting")[0].childNodes[0].nodeValue ),
127 "idle": Number( data.getElementsByTagName("idle")[0].childNodes[0].nodeValue ),
128 "failed": Number( data.getElementsByTagName("failed")[0].childNodes[0].nodeValue ),
129 "error": Number( data.getElementsByTagName("error")[0].childNodes[0].nodeValue )
131 myself.statCallback(stat);
132 if (activeClients > 0)
133 myself.statTimer = setTimeout("myself.stat()", myself.statTime);
136 myself.statTimer = setTimeout("myself.stat()", myself.statTime / 4)
138 // some error handling
142 //callback not to be called explicitly
143 show: function(start, num, sort) {
144 clearTimeout(myself.showTimer);
145 if( !myself.searchStatusOK )
148 if( sort !== undefined )
149 myself.currentSort = sort;
150 if( start !== undefined )
151 myself.currentStart = Number( start );
152 if( num !== undefined )
153 myself.currentNum = Number( num );
155 $.get( myself.pz2String,
156 { "command": "show", "session": myself.sessionID, "start": myself.currentStart, "num": myself.currentNum, "sort": myself.currentSort, "block": 1 },
158 if ( data.getElementsByTagName("status")[0].childNodes[0].nodeValue == "OK" ) {
159 var activeClients = Number( data.getElementsByTagName("activeclients")[0].childNodes[0].nodeValue );
161 "activeclients": activeClients,
162 "merged": Number( data.getElementsByTagName("merged")[0].childNodes[0].nodeValue ),
163 "total": Number( data.getElementsByTagName("total")[0].childNodes[0].nodeValue ),
164 "start": Number( data.getElementsByTagName("start")[0].childNodes[0].nodeValue ),
165 "num": Number( data.getElementsByTagName("num")[0].childNodes[0].nodeValue ),
169 var hits = data.getElementsByTagName("hit");
170 var hit = new Array();
171 for (i = 0; i < hits.length; i++) {
172 show.hits[i] = new Array();
173 for ( j = 0; j < hits[i].childNodes.length; j++) {
174 if ( hits[i].childNodes[j].nodeType == Node.ELEMENT_NODE ) {
175 var nodeName = hits[i].childNodes[j].nodeName;
176 var nodeText = hits[i].childNodes[j].firstChild.nodeValue;
177 show.hits[i][nodeName] = nodeText;
182 //TODO include records
183 myself.showCallback(show);
184 if (activeClients > 0)
185 myself.showTimer = setTimeout("myself.show()", myself.showTime);
188 myself.showTimer = setTimeout("myself.show()", myself.showTime / 4);
190 // some error handling
194 record: function(id) {
195 if( !myself.searchStatusOK )
197 $.get( myself.pz2String,
198 { "command": "record", "session": myself.sessionID, "id": id },
201 var record = new Array();
202 if ( recordNode = data.getElementsByTagName("record")[0] ) {
203 for ( i = 0; i < recordNode.childNodes.length; i++) {
204 if ( recordNode.childNodes[i].nodeType == Node.ELEMENT_NODE ) {
205 var nodeName = recordNode.childNodes[i].nodeName;
206 var nodeText = recordNode.childNodes[i].firstChild.nodeValue;
207 record[nodeName] = nodeText;
210 myself.recordCallback(record);
215 // some error handling
220 termlist: function() {
221 if( !myself.searchStatusOK )
223 $.get( myself.pz2String,
224 { "command": "termlist", "session": myself.sessionID, "name": myself.termKeys },
226 if ( data.getElementsByTagName("termlist") ) {
227 var termList = { "activeclients": Number( data.getElementsByTagName("activeclients")[0].childNodes[0].nodeValue ) }
228 var termLists = data.getElementsByTagName("list");
230 for (i = 0; i < termLists.length; i++) {
231 var listName = termLists[i].getAttribute('name');
232 termList[listName] = new Array();
233 var terms = termLists[i].getElementsByTagName('term');
234 //for each term in the list
235 for (j = 0; j < terms.length; j++) {
237 "name": terms[j].getElementsByTagName("name")[0].childNodes[0].nodeValue,
238 "freq": terms[j].getElementsByTagName("frequency")[0].childNodes[0].nodeValue,
240 termList[listName][j] = term;
243 myself.termlistCallback(termList);
244 if (termList["activeclients"] > 0)
245 myself.termTimer = setTimeout("myself.termlist()", myself.termTime);
248 myself.termTimer = setTimeout("myself.termlist()", myself.termTime / 4);
250 // some error handling
255 bytarget: function() {