]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/admin/stat_cat_editor.js
LP1615805 No inputs after submit in patron search (AngularJS)
[Evergreen.git] / Open-ILS / xul / staff_client / server / admin / stat_cat_editor.js
1 var SC_FETCH_ALL        = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.retrieve.all';
2 var SC_FETCH_SF         = 'open-ils.pcrud:open-ils.pcrud.search.PCRUD.atomic';
3 var SC_CREATE            = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.create';
4 var SC_UPDATE            = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.update';
5 var SC_DELETE            = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.delete';
6 var SC_ENTRY_CREATE    = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.entry.create';
7 var SC_ENTRY_UPDATE    = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.entry.update';
8 var SC_ENTRY_DELETE    = 'open-ils.circ:open-ils.circ.stat_cat.TYPE.entry.delete';
9 var SC_ENTRY_DEFAULT_CREATE    = 'open-ils.circ:open-ils.circ.stat_cat.actor.entry.default.create';
10 var SC_ENTRY_DEFAULT_DELETE    = 'open-ils.circ:open-ils.circ.stat_cat.actor.entry.default.delete';
11
12 var ACTOR                = 'actor';
13 var ASSET                = 'asset';
14 var session                = null;
15 var user                    = null;
16
17 var scCache                = {};
18 var PERMS                = {};
19 PERMS[ACTOR]            = {};
20 PERMS[ASSET]            = {};
21
22 var PCRUD_CLASS         = {};
23 PCRUD_CLASS[ACTOR]      = 'actscsf';
24 PCRUD_CLASS[ASSET]      = 'ascsf';
25
26 scSFCache               = {};
27
28 var currentlyVisible;
29 var opacVisible        = false;
30 var cgi;
31 var focusOrg;
32
33 var myPerms = [    
34     'CREATE_PATRON_STAT_CAT',
35     'UPDATE_PATRON_STAT_CAT',
36     'DELETE_PATRON_STAT_CAT',
37     'CREATE_PATRON_STAT_CAT_ENTRY',
38     'UPDATE_PATRON_STAT_CAT_ENTRY',
39     'DELETE_PATRON_STAT_CAT_ENTRY',
40     'CREATE_PATRON_STAT_CAT_ENTRY_DEFAULT',
41     'UPDATE_PATRON_STAT_CAT_ENTRY_DEFAULT',
42     'DELETE_PATRON_STAT_CAT_ENTRY_DEFAULT',
43
44     'CREATE_COPY_STAT_CAT',
45     'UPDATE_COPY_STAT_CAT',
46     'DELETE_COPY_STAT_CAT',
47     'CREATE_COPY_STAT_CAT_ENTRY',
48     'UPDATE_COPY_STAT_CAT_ENTRY',
49     'DELETE_COPY_STAT_CAT_ENTRY' 
50 ];
51
52 function scSetPerms() {
53     PERMS[ACTOR].create_stat_cat = OILS_WORK_PERMS.CREATE_PATRON_STAT_CAT;
54     PERMS[ACTOR].update_stat_cat = OILS_WORK_PERMS.UPDATE_PATRON_STAT_CAT;
55     PERMS[ACTOR].delete_stat_cat = OILS_WORK_PERMS.DELETE_PATRON_STAT_CAT;
56     PERMS[ACTOR].create_stat_cat_entry = OILS_WORK_PERMS.CREATE_PATRON_STAT_CAT_ENTRY;
57     PERMS[ACTOR].update_stat_cat_entry = OILS_WORK_PERMS.UPDATE_PATRON_STAT_CAT_ENTRY;
58     PERMS[ACTOR].delete_stat_cat_entry = OILS_WORK_PERMS.DELETE_PATRON_STAT_CAT_ENTRY;
59     PERMS[ACTOR].create_stat_cat_default_entry = OILS_WORK_PERMS.CREATE_PATRON_STAT_CAT_ENTRY_DEFAULT;
60     PERMS[ACTOR].update_stat_cat_default_entry = OILS_WORK_PERMS.UPDATE_PATRON_STAT_CAT_ENTRY_DEFAULT;
61     PERMS[ACTOR].delete_stat_cat_default_entry = OILS_WORK_PERMS.DELETE_PATRON_STAT_CAT_ENTRY_DEFAULT;
62
63     PERMS[ASSET].create_stat_cat = OILS_WORK_PERMS.CREATE_COPY_STAT_CAT;
64     PERMS[ASSET].update_stat_cat = OILS_WORK_PERMS.UPDATE_COPY_STAT_CAT;
65     PERMS[ASSET].delete_stat_cat = OILS_WORK_PERMS.DELETE_COPY_STAT_CAT;
66     PERMS[ASSET].create_stat_cat_entry =  OILS_WORK_PERMS.CREATE_COPY_STAT_CAT_ENTRY;
67     PERMS[ASSET].update_stat_cat_entry =  OILS_WORK_PERMS.UPDATE_COPY_STAT_CAT_ENTRY;
68     PERMS[ASSET].delete_stat_cat_entry =  OILS_WORK_PERMS.DELETE_COPY_STAT_CAT_ENTRY;
69
70     // set up the filter select
71     var fselector = $('sc_org_filter');
72     var org_list = PERMS[currentlyVisible].update_stat_cat;
73     buildMergedOrgSel(fselector, org_list, 0, 'shortname');
74     var org = findOrgUnit(org_list[0]);
75     if(org_list.length > 1 || (org.children() &&  org.children()[0])) 
76         fselector.disabled = false;
77
78     fselector.onchange = function() {
79         focusOrg = getSelectorVal(fselector);
80         scShow(currentlyVisible);
81     }
82     
83     focusOrg = USER.ws_ou();
84     if(!orgIsMineFromSet(org_list, focusOrg)) 
85         focusOrg = org_list[0];
86     setSelector(fselector, focusOrg);
87 }
88
89 function scEditorInit() {
90     cgi = new CGI();
91     session = cgi.param('ses');
92     if(!session && (location.protocol == 'chrome:' || location.protocol == 'oils:')) {
93         try {
94             var CacheClass = Components.classes["@open-ils.org/openils_data_cache;1"].getService();
95             session = CacheClass.wrappedJSObject.data.session.key;
96         } catch(e) {
97             console.log("Error loading XUL stash: " + e);
98         }
99     }
100     if(!session) throw "User session is not defined";
101     user = fetchUser(session);
102     $('sc_type_selector').onchange = scBuildNew;
103     setTimeout( 
104         function() { 
105             fetchHighestWorkPermOrgs(
106                 session, user.id(), myPerms, function(){scGo();});
107         }, 20 );
108 }
109
110 function scPopSipFields( selector, type ) {
111     while(selector.lastChild.value != '') selector.removeChild(selector.lastChild);
112     if(!scSFCache[type]) {
113         var req = new Request( 
114             SC_FETCH_SF.replace(/PCRUD/, PCRUD_CLASS[type]) , session, { 'field' : { '!=' : null } } );
115         req.send(true);
116         scSFCache[type] = req.result();
117     }
118     for(var f in scSFCache[type]) {
119         var option = document.createElement('option');
120         option.value = scSFCache[type][f].field();
121         option.appendChild(text(scSFCache[type][f].name() + ' (' + scSFCache[type][f].field() + ')' + (isTrue(scSFCache[type][f].one_only()) ? '**' : '')));
122         selector.appendChild(option);
123     }
124 }
125
126 function scGo() {
127     var show = cgi.param('show');
128     if(!show) currentlyVisible = ASSET;
129     scSetPerms();
130     scShow(currentlyVisible);
131     scBuildNew();
132     $('sc_user').appendChild(text(user.usrname()));
133 }
134
135 function scFetchAll( session, type, orgid, callback, args ) {
136     var req = new Request( 
137         SC_FETCH_ALL.replace(/TYPE/, type) , session, orgid );
138     req.send(true);
139     return req.result();
140 }
141
142 function scShow(type) { 
143     setTimeout(function(){_scShow(type)}, 500);
144 }
145
146 function _scShow(type) { 
147
148     currentlyVisible = type;
149
150     if( type == ASSET ) {
151         addCSSClass($('sc_show_copy'), 'has_color');
152         removeCSSClass($('sc_show_actor'), 'has_color');
153
154     } else if( type == ACTOR ) {
155         addCSSClass($('sc_show_actor'), 'has_color');
156         removeCSSClass($('sc_show_copy'), 'has_color');
157     }
158
159     scCache[type] = scFetchAll(session, type, focusOrg);   /* XXX */
160     scDraw( type, scCache[type] );
161 }
162
163 var scRow; var scCounter;
164 function scDraw( type, cats ) {
165
166     hideMe($('loading'));
167
168     var tbody = $('sc_tbody');
169     if(!scRow) scRow = tbody.removeChild($('sc_tr'));
170     removeChildren(tbody);
171
172     if(!cats || cats.length == 0) {
173         hideMe($('sc_table'));
174         unHideMe($('sc_none'));
175         return;
176     }
177
178     hideMe($('sc_none'));
179     unHideMe($('sc_table'));
180
181     if(type == ACTOR) {
182         unHideMe($('sc_usr_summary_label'));
183         unHideMe($('sc_usr_freetext_label'));
184     } else {
185         hideMe($('sc_usr_summary_label'));
186         hideMe($('sc_usr_freetext_label'));
187     }
188
189     scCounter = 0;
190     for( var c in cats ) scInsertCat( tbody, cats[c], type );
191 }
192
193
194 var scEntryCounter;
195 function scInsertCat( tbody, cat, type ) {
196
197     var default_entry_id = -1;
198     var row = scRow.cloneNode(true);
199     row.id = 'sc_tr_' + cat.id();
200     var required = cat.required();
201     var name_td = $n(row, 'sc_name');
202     name_td.appendChild( text(cat.name()) );
203     if(scCounter++ % 2) addCSSClass(row, 'has_color');
204
205     $n(row, 'sc_new_entry').onclick = function() { scNewEntry(type, cat, tbody); }
206     $n(row, 'sc_edit').onclick = function(){ scEdit(tbody, type, cat); };
207     $n(row, 'sc_owning_lib').appendChild( text( findOrgUnit(cat.owner()).name() ));
208
209     if(isTrue(cat.opac_visible()))
210         unHideMe($n(row, 'sc_opac_visible'));
211     else 
212         unHideMe($n(row, 'sc_opac_invisible'));
213
214     if(cat.sip_field() !== null && cat.sip_field().length != 2)
215         unHideMe($n(row, 'sc_sip_field_none'));
216     else {
217         $n(row, 'sc_sip_field_value').appendChild( text( cat.sip_field() ) );
218         unHideMe($n(row, 'sc_sip_field_value'));
219     }
220
221     $n(row, 'sc_sip_format_td').appendChild( text( cat.sip_format() ) );
222
223     if(isTrue(cat.checkout_archive()))
224         unHideMe($n(row, 'sc_checkout_archive_on'));
225     else
226         unHideMe($n(row, 'sc_checkout_archive'));
227
228     if(isTrue(required))
229         unHideMe($n(row, 'sc_required_on'));
230     else 
231         unHideMe($n(row, 'sc_required'));
232
233     if(type == ACTOR) {
234         if(isTrue(cat.usr_summary()))
235             unHideMe($n(row, 'sc_usr_summary_on'));
236         else 
237             unHideMe($n(row, 'sc_usr_summary'));
238
239         if(isTrue(cat.allow_freetext()))
240             unHideMe($n(row, 'sc_usr_freetext_on'));
241         else 
242             unHideMe($n(row, 'sc_usr_freetext'));
243     } else {
244         hideMe($n(row, 'sc_usr_summary_td'));
245         hideMe($n(row, 'sc_usr_freetext_td'));
246     }
247
248     tbody.appendChild(row);
249     scEntryCounter = 0;
250
251     cat.entries().sort(  /* sort the entries by value */
252         function( a, b ) { 
253          a = new String(a.value()).toLowerCase();
254          b = new String(b.value()).toLowerCase();
255             if( a > b ) return 1;
256             if( a < b ) return -1;
257             return 0;
258         }
259     );
260
261     for( var e in cat.entries() ) { 
262         if (scInsertEntry( cat, cat.entries()[e], $n(row, 'sc_entries_selector'), tbody, type ))
263             default_entry_id =  cat.entries()[e].id();
264     }
265     
266     if (default_entry_id > 0)
267         setSelector($n(row, 'sc_entries_selector'), default_entry_id);
268 }
269
270
271 function scInsertEntry( cat, entry, selector, tbody, type ) {
272     var val = entry.value();
273     var entry_id = entry.id();
274     var is_default_entry = false;
275
276     if(type == ACTOR) {
277         if( cat.default_entries()[0] && cat.default_entries()[0].stat_cat_entry() == entry_id ) {
278             val = val + "*";
279             is_default_entry = true;
280         }
281     }
282     setSelectorVal( selector, scEntryCounter++, val, entry_id, 
283             function(){ scUpdateEntry( cat, entry, tbody, type );} );
284
285     return is_default_entry;
286 }
287
288
289
290 function scDelete(type, id) {
291     if(!confirm($('sc_delete_confirm').innerHTML)) return;
292     var req = new Request( SC_DELETE.replace(/TYPE/,type), session, id );
293     req.send(true);
294     var res = req.result();
295     if(checkILSEvent(res)) throw res;
296     alertId('sc_update_success');
297     scShow(type);
298 }
299
300 function scCreateEntry( type, id, row ) {
301     var value = $n(row, 'sc_new_entry_name').value;
302     if(!value) return;
303     var entry;
304     if( type == ACTOR ) entry = new actsce();
305     if( type == ASSET ) entry = new asce();
306
307     entry.isnew(1);
308     entry.stat_cat(id);
309     entry.owner(getSelectorVal($n(row, 'sc_new_entry_lib')));
310     entry.value(value);
311
312          
313     var default_entry;
314     if ( type == ACTOR && $n(row, 'sc_new_entry_default_set').checked ) {
315         default_entry = new actsced();
316         default_entry.isnew(1);
317         default_entry.stat_cat(id);
318         default_entry.owner(getSelectorVal($n(row, 'sc_new_entry_default_lib')));
319         entry.default_entries([default_entry]);
320     }
321     var req = new Request( SC_ENTRY_CREATE.replace(/TYPE/, type), session, entry );
322     req.send(true);
323     var res = req.result();
324     if(checkILSEvent(res)) throw res;
325     alertId('sc_update_success');
326     scShow(type);
327 }
328
329 function scNewEntry( type, cat, tbody ) {
330     cleanTbody(tbody, 'edit');
331     var row = $('sc_new_entry_row').cloneNode(true);
332     row.setAttribute('edit', '1');
333
334     var r = $('sc_tr_' + cat.id());
335     if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
336     else{ tbody.appendChild(row); }
337
338     if(type == ACTOR) {
339         unHideMe($n(row, 'sc_new_entry_default'));
340     } else {
341         hideMe($n(row, 'sc_new_entry_default'));
342     }
343
344     $n(row, 'sc_new_entry_create').onclick = 
345         function() {
346             if( scCreateEntry( type, cat.id(), row ) )
347                 tbody.removeChild(row); };
348     $n(row, 'sc_new_entry_cancel').onclick = function(){tbody.removeChild(row);}
349
350     var org_list = PERMS[type].create_stat_cat_entry;
351     if(org_list.length == 0) {
352         $n(row, 'sc_new_entry_create').disabled = true;
353         $n(row, 'sc_new_entry_lib').disabled = true;
354         if (type==ACTOR)
355             $n(row, 'sc_new_entry_default_lib').disabled = true;
356         return;
357     }
358
359     var rootOrg = findReleventRootOrg(org_list, cat.owner());
360     if(!rootOrg) {
361         $n(row, 'sc_new_entry_create').disabled = true;
362         $n(row, 'sc_new_entry_lib').disabled = true;
363         if (type==ACTOR)
364             $n(row, 'sc_new_entry_default_lib').disabled = true;
365         return;
366     }
367     buildOrgSel($n(row, 'sc_new_entry_lib'), rootOrg, 0, 'shortname');
368     buildOrgSel($n(row, 'sc_new_entry_default_lib'), rootOrg, 0, 'shortname');
369     $n(row, 'sc_new_entry_name').focus();
370 }
371
372
373 function scBuildNew() {
374     var libSel = $('sc_owning_lib_selector');
375     var typeSel = $('sc_type_selector');
376     var type = getSelectorVal(typeSel);
377     switch(type) {
378         case ACTOR:
379             unHideMe($('usr_summary_td1'));
380             unHideMe($('usr_summary_td2'));
381             unHideMe($('sip_tr'));
382             unHideMe($('usr_freetext_td1'));
383             unHideMe($('usr_freetext_td2'));
384         break;
385         case ASSET:
386             hideMe($('usr_summary_td1'));
387             hideMe($('usr_summary_td2'));
388             hideMe($('sip_tr'));
389             hideMe($('usr_freetext_td1'));
390             hideMe($('usr_freetext_td2'));
391         break;
392     }
393     var org_list = PERMS[type].create_stat_cat;
394     if(org_list.length == 0) { /* no create perms */
395         $('sc_new').disabled = true;
396         libSel.disabled = true;
397         return;
398     }
399     else {
400         $('sc_new').disabled = false;
401         libSel.disabled = false;
402     }
403     buildMergedOrgSel(libSel, org_list, 0, 'shortname');
404     scPopSipFields($('sc_sip_field'),type);
405 }
406
407
408 function scNew() {
409
410     var name = $('sc_new_name').value;
411     var type = getSelectorVal($('sc_type_selector'));
412
413     var visible = 0;
414     var required = 0;
415     var usr_summary = 0;
416     var checkout_archive = 0;
417     var usr_freetext = 0;
418     if( $('sc_make_opac_visible').checked) visible = 1;
419     if( $('sc_make_required').checked) required = 1;
420     if( $('sc_make_usr_summary').checked) usr_summary = 1;
421     if( $('sc_make_checkout_archive').checked) checkout_archive = 1;
422     if( $('sc_make_usr_freetext').checked) usr_freetext = 1;
423
424     var cat;
425     if( type == ACTOR ) {
426         cat = new actsc();
427         cat.usr_summary( usr_summary );
428         cat.allow_freetext( usr_freetext );
429     }
430     if( type == ASSET ) {
431         cat = new asc();
432     }
433     var field = getSelectorVal($('sc_sip_field'));
434     if(field.length == 2) cat.sip_field(field);
435     else cat.sip_field(null);
436     cat.sip_format($('sc_sip_format').value);
437
438     cat.opac_visible(visible);
439     cat.required( required );
440     cat.name(name);
441     cat.checkout_archive(checkout_archive);
442     cat.owner(getSelectorVal($('sc_owning_lib_selector')));
443     cat.isnew(1);
444
445     var req = new Request( SC_CREATE.replace(/TYPE/, type), session, cat );
446
447     req.send(true);
448     var res = req.result();
449     if(checkILSEvent(res)) throw res;
450     alertId('sc_update_success');
451
452     scShow(type);
453 }
454
455 function scEdit( tbody, type, cat ) {
456
457     cleanTbody(tbody, 'edit');
458     var row = $('sc_edit_row').cloneNode(true);
459     row.setAttribute('edit', '1');
460
461     var r = $('sc_tr_' + cat.id());
462     if(r.nextSibling) { tbody.insertBefore( row, r.nextSibling ); }
463     else{ tbody.appendChild(row); }
464
465     var required = cat.required();
466     var reqcb = $n(row, 'sc_edit_required');
467     reqcb.checked = isTrue(required); 
468
469     scPopSipFields($n(row, 'sc_edit_sip_field'), type);
470     $n(row, 'sc_edit_name').value = cat.name();
471     setSelector($n(row, 'sc_edit_sip_field'), cat.sip_field());
472     $n(row, 'sc_edit_sip_format').value = cat.sip_format();
473
474     if(type == ACTOR) {
475         var cb1 = $n(row, 'sc_edit_usr_summary');
476         var cb2 = $n(row, 'sc_edit_usr_freetext');
477         cb1.checked = isTrue(cat.usr_summary()); 
478         cb2.checked = isTrue(cat.allow_freetext()); 
479         unHideMe($n(row, 'sc_edit_usr_summary_td'));
480         unHideMe($n(row, 'sc_edit_usr_freetext_td'));
481     } else {
482         hideMe($n(row, 'sc_edit_usr_summary_td'));
483         hideMe($n(row, 'sc_edit_usr_freetext_td'));
484     }
485
486     var name = $n(row, 'sc_edit_cancel');
487     name.onclick = function() { tbody.removeChild(row); };
488
489     var show = $n(row, 'sc_edit_show_owning_lib');
490     
491     var myorg = findOrgUnit(user.home_ou());
492     var ownerorg = findOrgUnit(cat.owner());
493     show.appendChild(text(ownerorg.name()));
494
495     var selector = null;
496     if( myorg.children() && myorg.children().length > 0 ) {
497         selector = $n(row, 'sc_edit_owning_lib');
498         buildOrgSel( selector, myorg, findOrgDepth(myorg), 'shortname');
499         setSelector( selector, cat.owner() );
500         unHideMe(selector);
501
502     } else { unHideMe(show); }
503
504     name.focus();
505     name.select();
506
507     if( cat.opac_visible() != 0 && cat.opac_visible() != '0' ) {
508         $n( $n(row, 'sc_edit_opac_visibility'), 
509             'sc_edit_opac_visibility').checked = true;
510     } 
511
512     $n( row, 'sc_edit_checkout_archive' ).checked = isTrue(cat.checkout_archive());
513
514     $n(row, 'sc_edit_submit').onclick = 
515         function() { scEditGo( type, cat, row, selector ); };
516
517     $n(row, 'sc_edit_delete').onclick = 
518         function(){ scDelete(type, cat.id()); };
519
520     var rootEditOrg = findReleventRootOrg(PERMS[type].update_stat_cat, cat.owner());
521     var rootDelOrg = findReleventRootOrg(PERMS[type].delete_stat_cat, cat.owner());
522
523     if(!rootEditOrg || rootEditOrg.id() != cat.owner())
524         $n(row,'sc_edit_submit').disabled = true;
525
526     if(!rootDelOrg || rootDelOrg.id() != cat.owner())
527         $n(row,'sc_edit_delete').disabled = true;
528 }
529
530 function scEditGo( type, cat, row, selector ) {
531     var name = $n(row, 'sc_edit_name').value;
532     var visible = 
533         $n( $n(row, 'sc_edit_opac_visibility'), 'sc_edit_opac_visibility').checked;
534
535     var newlib = cat.owner();
536     if(selector) newlib = getSelectorVal( selector );
537
538     if(!name) return false;
539
540     var required = $n(row, 'sc_edit_required').checked;
541     var usr_summary = $n(row, 'sc_edit_usr_summary').checked;
542     var sip_field = getSelectorVal( $n(row, 'sc_edit_sip_field') );
543     var usr_freetext = $n(row, 'sc_edit_usr_freetext').checked;
544
545     cat.name( name );
546     cat.owner( newlib );
547     cat.entries(null);
548     cat.opac_visible(0);
549     cat.checkout_archive($n(row, 'sc_edit_checkout_archive').checked ? 1 : 0);
550     cat.required( (required) ? 1 : 0 );
551     if(sip_field.length == 2) cat.sip_field( sip_field );
552     else cat.sip_field(null);
553     cat.sip_format($n(row, 'sc_edit_sip_format').value);
554     if( visible ) cat.opac_visible(1);
555     if(type == ACTOR) {
556         cat.usr_summary( (usr_summary) ? 1 : 0 );
557         cat.allow_freetext( (usr_freetext) ? 1 : 0 );
558     }
559
560     var req = new Request( SC_UPDATE.replace(/TYPE/,type), session, cat );
561     req.send(true);
562     var res = req.result();
563     if(checkILSEvent(res)) throw res;
564     alertId('sc_update_success');
565     scShow(type);
566
567     return true;
568 }
569
570 function scUpdateEntry( cat, entry, tbody, type ) {
571     cleanTbody(tbody, 'edit');
572     var row = $('sc_edit_entry_row').cloneNode(true);
573     row.setAttribute('edit', '1');
574
575     var r = $('sc_tr_' + cat.id());
576     if(r.nextSibling) tbody.insertBefore( row, r.nextSibling );
577     else{ tbody.appendChild(row); }
578
579     $n(row, 'sc_edit_entry_owner').appendChild(text(findOrgUnit(entry.owner()).name()));
580     
581     var defaultentry = $n(row, 'sc_edit_entry_default_set');
582     if(type == ACTOR) {
583         unHideMe($n(row, 'sc_edit_entry_default'));
584         if( cat.default_entries()[0] && cat.default_entries()[0].stat_cat_entry() == entry.id() )
585             defaultentry.checked =  true;
586     } else {
587         hideMe($n(row, 'sc_edit_entry_default'));
588     }
589
590     var name = $n(row, 'sc_edit_entry_name');
591     name.value = entry.value();
592     name.value.replace(/\*$/, "");
593     name.focus();
594     name.select();
595
596     $n(row,'sc_edit_entry_submit').onclick = 
597         function(){
598             if( scEditEntry(cat, entry, row, type ) )
599                 tbody.removeChild(row);
600             };
601
602     $n(row,'sc_edit_entry_cancel').onclick = function(){tbody.removeChild(row);};
603     $n(row,'sc_edit_entry_delete').onclick = 
604         function(){ scEntryDelete( cat, entry, type ); }
605
606     var rootEditOrg = findReleventRootOrg(PERMS[type].update_stat_cat_entry, entry.owner());
607     var rootDelOrg = findReleventRootOrg(PERMS[type].delete_stat_cat_entry, entry.owner());
608     var org_list = PERMS[type].update_stat_cat_entry;
609
610     if(!rootEditOrg || rootEditOrg.id() != entry.owner())
611         $n(row,'sc_edit_submit').disabled = true;
612
613     if(!rootDelOrg || rootDelOrg.id() != entry.owner())
614         $n(row,'sc_edit_delete').disabled = true;
615
616     if(type == ACTOR) {
617         if(!rootEditOrg || org_list.length == 0) {
618             $n(row, 'sc_edit_entry_default_lib').disabled = true;
619             return;
620         }
621         buildOrgSel($n(row, 'sc_edit_entry_default_lib'), rootEditOrg, 0, 'shortname');
622         if( cat.default_entries()[0] )
623            setSelector( $n(row, 'sc_edit_entry_default_lib'), cat.default_entries()[0].owner() );
624     }
625 }
626
627 function scEntryDelete( cat, entry, type ) {
628     if(!confirm($('sc_entry_delete_confirm').innerHTML)) return;
629     var req = new Request( SC_ENTRY_DELETE.replace(/TYPE/,type), session, entry.id() );
630     req.send(true);
631     var res = req.result();
632     if(checkILSEvent(res)) throw res;
633     alertId('sc_update_success');
634     scShow(type);
635 }
636
637 function scEditEntry( cat, entry, row, type ) {
638     var newvalue = $n(row, 'sc_edit_entry_name').value;
639     var curvalue = entry.value();
640     var didupdate = false;
641
642     if( curvalue != newvalue ) {
643         entry.value( newvalue );
644         var req = new Request( 
645             SC_ENTRY_UPDATE.replace(/TYPE/, type), session, entry );
646         req.send(true);
647         var res = req.result();
648         if(checkILSEvent(res)) throw res;
649         didupdate = true;
650     }
651
652     if(type == ACTOR) {
653         didupdate = scEditEntryDefault( cat, entry, row );
654     }
655
656     if (didupdate) scShow(type);
657 }
658
659 function scEditEntryDefault( cat, entry, row ) {
660     var newsetdefault = $n(row, 'sc_edit_entry_default_set').checked;
661     var newownerdefault = getSelectorVal($n(row, 'sc_edit_entry_default_lib'));
662     var cursetdefault = false;
663     var curownerdefault = null;
664     var default_entry = null;
665
666     if( cat.default_entries && cat.default_entries()[0] && cat.default_entries()[0].stat_cat_entry() == entry.id() ) {
667         cursetdefault = true;
668         default_entry = cat.default_entries()[0];
669         curownerdefault = default_entry.owner();
670     }
671
672     if( cursetdefault == newsetdefault &&
673          (curownerdefault == newownerdefault || curownerdefault == null) ) {
674         return;
675     }
676
677     if( cursetdefault == true &&
678          newsetdefault == false ) {
679         var req = new Request( 
680             SC_ENTRY_DEFAULT_DELETE, session, default_entry.id() );
681         req.send(true);
682         var res = req.result();
683         if(checkILSEvent(res)) throw res;
684     }
685
686     if( newsetdefault == true ) {
687         var cat_id = cat.id();
688         var entry_id = entry.id();
689         default_entry = new actsced();
690         default_entry.isnew(1);
691         default_entry.stat_cat(cat_id);
692         default_entry.stat_cat_entry(entry_id);
693         default_entry.owner(newownerdefault);
694         var req = new Request( 
695             SC_ENTRY_DEFAULT_CREATE, session, default_entry );
696         req.send(true);
697         var res = req.result();
698         if(checkILSEvent(res)) throw res;
699     }
700
701     return true;
702 }