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) {
7 if ( callbackArr == null )
13 myself.pz2String = "search.pz2";
15 myself.initStatus = 0;
16 myself.pingStatus = 0;
17 myself.keepAlive = 50000;
19 if ( keepAlive < myself.keepAlive )
20 myself.keepAlive = keepAlive;
23 myself.currentSort = "relevance";
24 myself.sortKeywords = [ "relevance", "title", "author" ];
27 myself.statCallback = callbackArr.onstat;
28 myself.showCallback = callbackArr.onshow;
29 myself.termlistCallback = callbackArr.onterm;
32 myself.statTime = 2000;
34 myself.termTime = 1000;
36 myself.showTime = 1000;
40 myself.init(myself.keepAlive);
43 init: function(keepAlive) {
44 if ( keepAlive < myself.keepAlive ) myself.keepAlive = keepAlive;
45 $.get( myself.pz2String,
48 if ( data.getElementsByTagName("status")[0].childNodes[0].nodeValue == "OK" )
49 myself.initStatus = 1;
50 myself.sessionID = data.getElementsByTagName("session")[0].childNodes[0].nodeValue;
51 setTimeout(myself.ping, myself.keepAlive);
55 // no need to ping explicitly
57 if( !myself.initStatus )
59 // session is not initialized code here
60 $.get( myself.pz2String,
61 { command: "ping", session: myself.sessionID },
63 if ( data.getElementsByTagName("status")[0].childNodes[0].nodeValue == "OK" ) {
64 myself.pingStatus = 1;
65 setTimeout(myself.ping, myself.keepAlive);
72 search: function(query, num, sort) {
73 clearTimeout(myself.statTimer);
74 clearTimeout(myself.showTimer);
75 clearTimeout(myself.termTimer);
76 if( !myself.initStatus )
78 $.get( myself.pz2String,
79 { command: "search", session: myself.sessionID, query: query },
81 if ( data.getElementsByTagName("status")[0].childNodes[0].nodeValue == "OK" ) {
82 myself.searchStatus = 1;
84 myself.show(0, num, sort)
85 if ( myself.statCallback )
86 myself.statTimer = setTimeout(myself.stat, myself.statTime / 2);
87 if ( myself.termlistCallback )
88 myself.termTimer = setTimeout(myself.termlist, myself.termTime / 2);
95 // callback, not to be called explicitly
97 if( !myself.searchStatus )
99 $.get( myself.pz2String,
100 { command: "stat", session: myself.sessionID },
102 if ( data.getElementsByTagName("stat") ) {
103 var activeClients = Number( data.getElementsByTagName("activeclients")[0].childNodes[0].nodeValue );
105 "activeclients": activeClients,
106 "hits": Number( data.getElementsByTagName("hits")[0].childNodes[0].nodeValue ),
107 "records": Number( data.getElementsByTagName("records")[0].childNodes[0].nodeValue ),
108 "clients": Number( data.getElementsByTagName("clients")[0].childNodes[0].nodeValue ),
109 "initializing": Number( data.getElementsByTagName("initializing")[0].childNodes[0].nodeValue ),
110 "searching": Number( data.getElementsByTagName("searching")[0].childNodes[0].nodeValue ),
111 "presenting": Number( data.getElementsByTagName("presenting")[0].childNodes[0].nodeValue ),
112 "idle": Number( data.getElementsByTagName("idle")[0].childNodes[0].nodeValue ),
113 "failed": Number( data.getElementsByTagName("failed")[0].childNodes[0].nodeValue ),
114 "error": Number( data.getElementsByTagName("error")[0].childNodes[0].nodeValue )
116 myself.statCallback(stat);
117 if (activeClients > 0)
118 myself.statTimer = setTimeout(myself.stat, myself.statTime);
121 myself.statTimer = setTimeout(myself.stat, myself.statTime / 4)
123 // some error handling
127 //callback not to be called explicitly
128 show: function(start, num, sort) {
129 clearTimeout(myself.showTimer);
130 if( !myself.searchStatus )
132 if ( myself.sortKeywords.some( function(element, index, arr) { if (element == sort) return true; else return false; } ) )
133 myself.currentSort = sort;
134 $.get( myself.pz2String,
135 { "command": "show", "session": myself.sessionID, "start": start, "num": num, "sort": myself.currentSort, "block": 1 },
137 if ( data.getElementsByTagName("status")[0].childNodes[0].nodeValue == "OK" ) {
138 var activeClients = Number( data.getElementsByTagName("activeclients")[0].childNodes[0].nodeValue );
140 "activeclients": activeClients,
141 "merged": Number( data.getElementsByTagName("merged")[0].childNodes[0].nodeValue ),
142 "total": Number( data.getElementsByTagName("total")[0].childNodes[0].nodeValue ),
143 "start": Number( data.getElementsByTagName("start")[0].childNodes[0].nodeValue ),
144 "num": Number( data.getElementsByTagName("num")[0].childNodes[0].nodeValue )
146 //TODO include records
147 myself.showCallback(show);
148 if (activeClients > 0)
149 myself.showTimer = setTimeout("myself.show(" + start + "," + num + "," + sort + ")", myself.showTime);
152 myself.showTimer = setTimeout("myself.show(" + start + "," + num + "," + sort + ")", myself.showTime / 4);
154 // some error handling
158 record: function(id) {
160 termlist: function(name) {
161 if( !myself.searchStatus )
163 $.get( myself.pz2String,
164 { "command": "termlist", "session": myself.sessionID, "name": "author" },
166 if ( data.getElementsByTagName("termlist") ) {
167 var termList = { "activeclients": Number( data.getElementsByTagName("activeclients")[0].childNodes[0].nodeValue ) }
168 var termLists = data.getElementsByTagName("list");
170 for (i = 0; i < termLists.length; i++) {
171 var listName = termLists[i].getAttribute('name');
172 termList[listName] = new Array();
173 var terms = termLists[i].getElementsByTagName('term');
174 //for each term in the list
175 for (j = 0; j < terms.length; j++) {
177 "name": terms[j].getElementsByTagName("name")[0].childNodes[0].nodeValue,
178 "freq": terms[j].getElementsByTagName("frequency")[0].childNodes[0].nodeValue,
180 termList[listName][j] = term;
183 myself.termlistCallback(termList);
184 if (termList["activeclients"] > 0)
185 myself.termTimer = setTimeout("myself.termlist(" + name + ")" , myself.termTime);
188 myself.termTimer = setTimeout("myself.termlist(" + name + ")" , myself.termTime / 4);
190 // some error handling
195 bytarget: function() {