]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/util/util.js
magic money distribution
[working/Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / util / util.js
1 sdump('D_TRACE','Loading util.js\n');
2
3 var timer = {};
4 var counter = {};
5 var consider_Timeout_default = false;
6
7 function consider_Timeout( f, t, b) {
8         sdump('D_TIMEOUT', arg_dump(arguments,{0:true,1:true,2:true}));
9         if (b) {
10                 setTimeout(f,t);
11         } else {
12                 if (consider_Timeout_default)
13                         setTimeout(f,t);
14                 else
15                         f();
16         }
17 }
18
19 function parse_render_string( obj_string, render_string, regexp ) {
20         sdump('D_UTIL', arg_dump(arguments,{0:true,1:true}));
21         var cmd;
22         try {
23                 if (!regexp) regexp = /\$\$/g;
24                 if (render_string.slice(0,1) == '.') {
25                         cmd = obj_string + render_string;
26                 } else {
27                         cmd = render_string.replace( regexp, obj_string );
28                 }
29
30         } catch(E) {
31
32                 sdump('D_ERROR',E);
33         }
34         sdump('D_UTIL', 'cmd = ' + cmd + '\n');
35         return cmd;
36 }
37
38 function getString( key ) {
39         var s = '';
40         var bundles = mw.document.getElementById('string_bundles');
41         sdump('D_STRING','bundles = ' + bundles + ' bundles.childNodes.length = ' + bundles.childNodes.length + '\n');
42         for (var i = 0; i < bundles.childNodes.length; i++) {
43                 var bundle = bundles.childNodes[i];
44                 sdump('D_STRING','\ttrying bundle = ' + bundle + '\n');
45                 try {
46
47                         var string = bundle.getString( key );
48                         if (string) {
49                                 s = string;
50                                 sdump('D_STRING','\tfound\n');
51                         } else {
52                                 sdump('D_STRING','\tnot found\n');
53                         }
54
55                 } catch(E) {
56                         sdump('D_ERROR',E + '\n');
57                 }
58         }
59         sdump('D_STRING',key + '=' + s + '\n');
60         return s;
61 }
62
63 function getFormattedString( key, strArray ) {
64         var s = '';
65         var bundles = mw.document.getElementById('string_bundles');
66         for (var i = i; i < bundles.childNodes.length; i++) {
67                 var bundle = bundles[i];
68                 try {
69
70                         var string = bundle.getFormattedString( key, strArray );
71                         if (string)
72                                 s = string;
73
74                 } catch(E) {
75                         sdump('D_ERROR',E + '\n');
76                 }
77         }
78         sdump('D_STRING',key + '(' + strArray + ')=' + s + '\n');
79         return s;
80 }
81
82 function string_to_array(s) {
83         var my_array = [];
84         for (var i = 0; i < s.length; i++ ) {
85                 my_array.push( s.charAt(i) );
86         }
87         return my_array;
88 }
89
90 function yesno(value) {
91         switch(value) {
92                 case true: case 'true': case '1': case 'on':
93                         return 'Yes';
94                 default: 
95                         return 'No';
96         }
97 }
98
99 function dollars_float_to_cents_integer( money ) {
100         // careful to avoid fractions of pennies
101         var money_s = money.toString();
102         // FIXME: strip miscellaneous characters
103         var marray = money_s.split(".");
104         var dollars = marray[0];
105         var cents = marray[1];
106         try {
107                 if (cents.length < 2) {
108                         cents = cents + '0';
109                 }
110         } catch(E) {
111                 // I'm not sure why these are getting thrown, especially with the code still working
112                 sdump('D_ERROR',"cents.length? " + E + "\n");
113         }
114         try {
115                 if (cents.length > 2) {
116                         sdump('D_ERROR',"We don't round money\n");
117                         cents = cents.substr(0,2);
118                 }
119         } catch(E) {
120                 sdump('D_ERROR',"cents.length? " + E + "\n");
121         }
122         var total = 0;
123         try {
124                 if (parseInt(cents)) total += parseInt(cents);
125         } catch(E) {
126                 sdump('D_ERROR',"parseInt(cents)? " + E + "\n");
127         }
128         try {
129                 if (parseInt(dollars)) total += (parseInt(dollars) * 100);
130         } catch(E) {
131                 sdump('D_ERROR',"parseInt(dollars)? " + E + "\n");
132         }
133         return total;   
134 }
135
136 function cents_as_dollars( cents ) {
137         cents = cents.toString(); 
138         // FIXME: strip miscellaneous characters
139         switch( cents.length ) {
140                 case 0: cents = '000'; break;
141                 case 1: cents = '0' + cents; break;
142         }
143         return cents.substr(0,cents.length-2) + '.' + cents.substr(cents.length - 2);
144 }
145
146 function formatted_date(date,format) {
147         // pass in a Date object or epoch seconds
148         if (typeof(date) == 'string') {
149                 date = new Date( parseInt( date + '000' ) );
150         }
151         var mm = date.getMonth() + 1;
152         mm = mm.toString();
153         if (mm.length == 1) mm = '0' +mm;
154         var dd = date.getDate().toString();
155         if (dd.length == 1) dd = '0' +dd;
156         var yyyy = date.getFullYear().toString();
157         var s = format.replace( /%m/g, mm );
158         s = s.replace( /%d/g, dd );
159         s = s.replace( /%Y/g, yyyy );
160         return s;
161 }
162
163 function interval_to_seconds ( $interval ) {
164
165         $interval = $interval.replace( /and/, ',' );
166         $interval = $interval.replace( /,/, ' ' );
167
168         var $amount = 0;
169         var results = $interval.match( /\s*\+?\s*(\d+)\s*(\w{1})\w*\s*/g);  
170         for (var i in results) {
171                 var result = results[i].match( /\s*\+?\s*(\d+)\s*(\w{1})\w*\s*/ );
172                 if (result[2] == 's') $amount += result[1] ;
173                 if (result[2] == 'm') $amount += 60 * result[1] ;
174                 if (result[2] == 'h') $amount += 60 * 60 * result[1] ;
175                 if (result[2] == 'd') $amount += 60 * 60 * 24 * result[1] ;
176                 if (result[2] == 'w') $amount += 60 * 60 * 24 * 7 * result[1] ;
177                 if (result[2] == 'M') $amount += ((60 * 60 * 24 * 365)/12) * result[1] ;
178                 if (result[2] == 'y') $amount += 60 * 60 * 24 * 365 * result[1] ;
179         }
180         return $amount;
181 }
182
183 /*
184 function debug() {
185         var s = '';
186         for (var i = 0; i < arguments.length; i++) {
187                 s = s + arguments[i];
188         }
189         //sdump('D_UTIL','debug:' + s + '\n');
190 }
191 */
192
193 function counter_init(id) {
194         counter[id] = 0;
195 }
196
197 function counter_incr(id) {
198         if (! counter[id]) { counter_init(id); }
199         return ++counter[id];
200 }
201
202 function counter_peek(id) {
203         if (! counter[id]) { return 0; }
204         return counter[id];
205 }
206
207 function timer_init(id) {
208         timer[id] = (new Date).getTime();
209 }
210
211 function timer_elapsed(id) {
212         if (! timer[id]) { timer_init(id); }
213         var ms = (new Date).getTime() - timer[id];
214         return( ms + 'ms (' + ms/1000 + 's)' );
215 }
216
217 function dump_ns_node( node ) {
218         return (
219         'id=<' + 
220         node[fieldmap["Fieldmapper::biblio::record_node"].fields.id.position] 
221         + '>  intra-id=<' + 
222         node[fieldmap["Fieldmapper::biblio::record_node"].fields.intra_doc_id.position]
223         + '>  name=<' + 
224         node[fieldmap["Fieldmapper::biblio::record_node"].fields.name.position]
225         + '>  node_type=<' + 
226         node[fieldmap["Fieldmapper::biblio::record_node"].fields.type.position]
227         + '>  parent_node=<' + 
228         node[fieldmap["Fieldmapper::biblio::record_node"].fields.parent_node.position]
229         + '>  '
230         );
231 }
232
233 function nodeset2tree(ns) {
234         for (var i in ns) {
235                 if (ns[i].parent_node) {
236                         ns_addChild( 
237                                 ns, 
238                                 ns[i].parent_node, 
239                                 ns[i].intra_doc_id 
240                         );
241                 }
242         }
243         return ns;
244 }
245
246 function ns_addChild(ns,p,c) {
247         if (! ns[p].children ) { ns[p].children = []; }
248         ns[p].children.push(ns[c]);
249 }
250
251 function print_tabs(t) {
252         var r = '';
253         for (var j = 0; j < t; j++ ) { r = r + "\t"; }
254         return r;
255 }
256
257 function pretty_print(s) {
258         var r = ''; var t = 0;
259         for (var i in s) {
260                 if (s[i] == '{') {
261                         r = r + "\n" + print_tabs(t) + s[i]; t++;
262                         r = r + "\n" + print_tabs(t);
263                 } else if (s[i] == '[') {
264                         r = r + "\n" + print_tabs(t) + s[i]; t++;
265                         r = r + "\n" + print_tabs(t);
266                 } else if (s[i] == '}') {
267                         t--; r = r + "\n" + print_tabs(t) + s[i]; 
268                         r = r + "\n" + print_tabs(t);
269                 } else if (s[i] == ']') { 
270                         t--; r = r + "\n" + print_tabs(t) + s[i];
271                         r = r + "\n" + print_tabs(t);
272                 } else if (s[i] == ',') {
273                         r = r + s[i]; 
274                         r = r + "\n" + print_tabs(t);
275                 } else {
276                         r = r + s[i];
277                 }
278         }
279         return r;
280 }
281
282 function super_dump(o,t) {
283         var s = "\n";
284         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
285         s = s + "=-=-=\n";
286         s = s + 'o.constructor == Array = ' + (o.constructor == Array) + '\n';
287         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
288         s = s + "typeof = " + typeof(o) + "\n";
289         try {
290                 var string = new XMLSerializer().serializeToString(o);
291                 return( string + "\n" );
292         } catch( E ) {
293                 var i;
294                 var c = 0;
295                 for (i in o) {
296                         switch(typeof(i)) {
297                                 case 'object':
298                                         s = s + super_dump(i,t+1);
299                                         break;
300                                 default :
301                                         var value = o[i];
302                                         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
303                                         s = s + "\tMember#" + c++ + "\tType:" + typeof(value);
304                                         if (typeof(value) == 'object') {
305                                                 value = super_dump(value,t+1);
306                                         }
307                                         s = s + "\ttoString:" + i.toString() + "\tvalue:" + value + "\n";
308                                         break;
309                         }
310                 }
311                 return( s + "\n" );
312         }
313 }
314
315 function super_dump_norecurse(o,t) {
316         var s = "\n";
317         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
318         s = s + "=-=-=\n";
319         s = s + 'o.constructor == Array = ' + (o.constructor == Array) + '\n';
320         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
321         s = s + "typeof = " + typeof(o) + "\n";
322         try {
323                 var string = new XMLSerializer().serializeToString(o);
324                 return( string + "\n" );
325         } catch( E ) {
326                 var i;
327                 var c = 0;
328                 for (i in o) {
329                         switch(typeof(i)) {
330                                 default :
331                                         var value = o[i];
332                                         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
333                                         s = s + "\tMember#" + c++ + "\tType:" + typeof(value);
334                                         s = s + "\ttoString:" + i.toString() + "\n";
335                                         break;
336                         }
337                 }
338                 return( s + "\n" );
339         }
340 }
341
342