5 var SC_FETCH_ALL = 'open-ils.circ:open-ils.circ.stat_cat.actor.retrieve.all';
6 var SC_CREATE_MAP = 'open-ils.circ:open-ils.circ.stat_cat.actor.user_map.create';
7 var SV_FETCH_ALL = 'open-ils.circ:open-ils.circ.survey.retrieve.all';
8 var FETCH_ID_TYPES = 'open-ils.actor:open-ils.actor.user.ident_types.retrieve';
9 var FETCH_GROUPS = 'open-ils.actor:open-ils.actor.groups.tree.retrieve';
10 var UPDATE_PATRON = 'open-ils.actor:open-ils.actor.patron.update';
13 var cachedSurveys = {};
14 var cachedSurveyQuestions = {};
15 var cachedSurveyAnswers = {};
16 var ERRORS = ""; /* global set of errors */
17 var cachedStatCats = {};
18 var deletedStatCats = {};
19 var cachedAddresses = {};
20 var deletedAddresses = {};
22 /* if they don't have these perms, they shouldn't be here */
23 //var myPerms = [ 'CREATE_USER', 'UPDATE_USER', 'CREATE_PATRON_STAT_CAT_ENTRY_MAP' ];
35 /* ID's of objects that should be focused when their page is made visible */
41 'ue_stat_cat_selector_1',
42 'ue_survey_selector_1',
47 regexes.phone = /\d{3}-\d{3}-\d{4}/;
48 regexes.email = /.+\@.+\..+/;
49 regexes.date = /^\d{4}-\d{2}-\d{2}/;
50 regexes.isnum = /^\d+$/;
52 /* fetch the necessary data to start off */
53 function uEditInit() {
56 session = cgi.param('ses');
57 if(cgi.param('adv')) advanced = true
58 if(!session) throw "User session is not defined";
61 $('uedit_user').appendChild(text(USER.usrname()));
62 uEditShowPage('uedit_userid');
67 /* these can be asynch */
68 /*fetchHighestPermOrgs( SESSION, USER.id(), myPerms );*/
71 /* these have to be synchronous */
72 uEditBuildLibSelector();
78 uEditDrawUser(fetchFleshedUser(cgi.param('usr')));
84 /* UI code ---------------------------------------------------- */
86 function uEditNext() {
87 var i = _findActive();
88 if( i < (pages.length - 1)) uEditShowPage(pages[i+1]);
91 function uEditPrev() {
92 var i = _findActive();
93 if( i > 0 ) uEditShowPage(pages[i-1]);
96 function uEditFetchError(id) { if($(id)) return $(id).innerHTML + "\n"; return "";}
98 function uEditShowPage(id) {
99 if( id == null ) return;
101 for( var p in pages ) {
104 removeCSSClass($(page+'_label'), 'label_active');
108 addCSSClass($(id+'_label'), 'label_active');
109 var idx = _findPageIdx(id);
110 var fpage = pageFocus[idx];
111 if(fpage) { $(fpage).focus(); try{$(fpage).select()}catch(e){} }
113 unHideMe($('ue_back'));
114 unHideMe($('ue_fwd'));
116 if(idx == 0) hideMe($('ue_back'));
117 if(idx == (pages.length-1)) hideMe($('ue_fwd'));
121 function _findActive() {
122 for( var p in pages ) {
123 if(! $(pages[p]).className.match(/hide_me/) )
128 function _findPageIdx(name) {
129 for( var i in pages ) {
131 if( page == name ) return i;
136 function uEditAddrHighlight( node, type ) {
137 var tbody = $('ue_address_tbody');
138 for( var c in tbody.childNodes ) {
139 var row = tbody.childNodes[c];
140 if(row.nodeType != XML_ELEMENT_NODE ) continue;
141 var div = $n(row,'ue_addr_'+type+'_yes').parentNode;
142 removeCSSClass(div, 'addr_info_checked');
144 addCSSClass(node.parentNode, 'addr_info_checked');
148 /* ------------------------------------------------------------------------------ */
150 /* ------------------------------------------------------------------------------ */
151 function uEditFetchIDTypes() {
152 var req = new Request(FETCH_ID_TYPES);
153 //req.callback(uEditDrawIDTypes);
155 uEditDrawIDTypes(req.request);
158 function uEditFetchStatCats() {
159 var req = new Request(SC_FETCH_ALL, SESSION);
160 //req.callback(uEditDrawStatCats);
162 uEditDrawStatCats(req.request);
165 function uEditFetchSurveys() {
166 var req = new Request(SV_FETCH_ALL, SESSION);
167 req.callback(uEditDrawSurveys);
172 /* ------------------------------------------------------------------------------ */
174 /* ------------------------------------------------------------------------------ */
175 var uEditExistingStatEntries;
176 var uEditExistingSurveyResponses;
178 function uEditSaveUser() {
187 //alert(js2JSON(patron));
190 var req = new Request(UPDATE_PATRON, SESSION, patron);
192 var result = req.result();
193 if( checkILSEvent(result) ) alert(js2JSON(result));
194 else alert($('ue_success').innerHTML);
198 function uEditCollectData() {
207 patron.card(-1); /* attach to the virtual id of the card */
208 patron.cards([card]);
212 /* if this function is called again, patron will exist */
213 if(!patron.isnew()) {
216 if(!uEditExistingStatEntries)
217 uEditExistingStatEntries = patron.stat_cat_entries();
218 if(!uEditExistingSurveyResponses)
219 uEditExistingSurveyResponses = patron.survey_responses();
223 patron.stat_cat_entries([]);
224 patron.survey_responses([]);
226 uEditFleshCard(card);
227 uEditAddBasicPatronInfo(patron);
228 uEditAddPhones(patron);
229 uEditAddIdents(patron);
230 uEditAddAddresses(patron);
231 uEditAddGroupsAndPerms(patron);
232 uEditReapStatCats(patron);
233 uEditReapSurveys(patron);
239 /* ------------------------------------------------------------------------------ */
241 /* ------------------------------------------------------------------------------ */
242 function uEditDrawUser(p) {
244 hideMe($('uedit_loading'));
245 unHideMe($('ue_maintd'));
250 $('ue_barcode').value = patron.card().barcode();
251 $('ue_username').value = patron.usrname();
252 $('ue_firstname').value = patron.first_given_name();
253 $('ue_middlename').value = patron.second_given_name();
254 $('ue_lastname').value = patron.family_name();
255 $('ue_suffix').value = patron.suffix();
256 $('ue_dob').value = patron.dob();
257 $('ue_primary_ident').value = patron.ident_value();
258 $('ue_secondary_ident').value = patron.ident_value2();
259 $('ue_email1').value = patron.email();
260 $('ue_email2').value = patron.email();
261 $('ue_expire').value = patron.expire_date();
262 $('ue_active').value = patron.active();
263 $('ue_barred').value = patron.barred();
264 $('ue_claims_returned').value = patron.claims_returned_count();
265 $('ue_alert_message').value = patron.alert_message();
267 setSelector( $('ue_primary_ident_type'), patron.ident_type() );
268 setSelector( $('ue_secondary_ident_type'), patron.ident_type2() );
269 setSelector( $('ue_org_selector'), patron.home_ou() );
270 setSelector( $('ue_profile'), patron.profile() );
272 /* flesh out the phone numbers ------------------------- */
273 var dp = patron.day_phone();
274 var np = patron.evening_phone();
275 var op = patron.other_phone();
278 var daynums = dp.split('-');
279 $('ue_day_phone_area').value = daynums[0];
280 $('ue_day_phone_prefix').value = daynums[1];
281 $('ue_day_phone_suffix').value = daynums[2];
285 var nightnums = np.split('-');
286 $('ue_night_phone_area').value = nightnums[0];
287 $('ue_night_phone_prefix').value = nightnums[1];
288 $('ue_night_phone_suffix').value = nightnums[2];
292 var othernums = op.split('-');
293 $('ue_other_phone_area').value = othernums[0];
294 $('ue_other_phone_prefix').value = othernums[1];
295 $('ue_other_phone_suffix').value = othernums[2];
299 /* Flesh the addresses ------------------------------------ */
301 var tbody = $('ue_address_tbody');
302 for( var i = 0; i != patron.addresses().length; i++ ) {
303 var addr = patron.addresses()[i];
304 cachedAddresses[addr.id()] = addr;
306 if( i == 0 ) row = getElementsByTagNameFlat(tbody, 'tr')[0];
307 else row = $('ue_address_new').onclick(); /* create a new row if necessary */
309 row.setAttribute('exists', addr.id() );
311 if( patron.mailing_address().id() == addr.id())
312 $n(row, 'ue_addr_mailing_yes').checked = true;
314 if( patron.billing_address().id() == addr.id())
315 $n(row, 'ue_addr_billing_yes').checked = true;
317 if( addr.valid() ) $n(row, 'ue_addr_valid_yes').checked = true;
320 $n(row, 'ue_addr_label').value = addr.address_type();
321 $n(row, 'ue_addr_street1').value = addr.street1();
322 $n(row, 'ue_addr_street2').value = addr.street2();
323 $n(row, 'ue_addr_city').value = addr.city();
324 $n(row, 'ue_addr_county').value = addr.county();
325 $n(row, 'ue_addr_state').value = addr.state();
326 $n(row, 'ue_addr_zip').value = addr.post_code();
327 $n(row, 'ue_addr_country').value = addr.country();
333 var stattbody = $('ue_stat_cat_tbody');
334 for( var m in patron.stat_cat_entries() ) {
335 var map = patron.stat_cat_entries()[m];
336 var row = grep( getElementsByTagNameFlat( stattbody, 'tr' ),
337 function(a) { return a.getAttribute('statcat') == map.stat_cat() })[0];
338 $n(row, 'ue_stat_cat_newval').value = map.stat_cat_entry();
339 setSelectorByName( $n(row, 'ue_stat_cat_selector'), map.stat_cat_entry() );
347 /* ------------------------------------------------------------------------------ */
349 /* ------------------------------------------------------------------------------ */
350 function uEditDrawIDTypes(r) {
352 var types = r.getResultObject();
353 var pri_sel = $('ue_primary_ident_type');
354 var sec_sel = $('ue_secondary_ident_type');
357 for( var t in types ) {
359 identTypes[type.id()] = type;
360 setSelectorVal( pri_sel, idx, type.name(), type.id() );
362 if(patron && patron.ident_type() != null )
363 setSelector( pri_sel, patron.ident_type() );
365 setSelectorVal( sec_sel, idx++, type.name(), type.id() );
366 if(patron && patron.ident_type2() != null )
367 setSelector( sec_sel, patron.ident_type2() );
373 /* ------------------------------------------------------------------------------ */
374 /* Stat Cat handling code
375 /* ------------------------------------------------------------------------------ */
376 function uEditDrawStatCats(r) {
377 var cats = r.getResultObject();
378 var tbody = $('ue_stat_cat_tbody');
379 var templ = tbody.removeChild($('ue_stat_cat_row'));
381 for( var c in cats ) {
382 var row = templ.cloneNode(true);
383 uEditInsertCat( tbody, row, cats[c], c );
384 tbody.appendChild(row);
388 /* fleshes the stat cat with entries in the dropdown */
389 function uEditInsertCat( tbody, row, cat, idx ) {
391 cat.entries().sort( /* sort the entries by value */
393 if( a.value().toLowerCase() > b.value().toLowerCase()) return 1;
394 if( a.value().toLowerCase() < b.value().toLowerCase()) return -1;
399 cachedStatCats[cat.id()] = cat;
401 row.setAttribute('statcat', cat.id());
402 var newval = $n(row, 'ue_stat_cat_newval');
403 newval.onchange = function(){
404 findParentByNodeName(newval,'tr').setAttribute('changed', '1'); }
406 var selector = $n(row, 'ue_stat_cat_selector');
407 selector.onchange = function(){
408 findParentByNodeName(selector, 'tr').setAttribute('changed', '1');
409 newval.value = getSelectorName(selector);
410 newval.setAttribute('entry', getSelectorVal(selector));
413 if( idx == 0 ) selector.id = 'ue_stat_cat_selector_1';
415 $n(row, 'ue_stat_cat_name').appendChild(text(cat.name()));
416 $n(row, 'ue_stat_cat_owner').appendChild(
417 text(fetchOrgUnit(cat.owner()).shortname()));
420 for( var e in cat.entries() ) {
421 var entry = cat.entries()[e];
422 setSelectorVal( selector, idx++, entry.value(), entry.id() );
426 /* finds all the changed/new stat entries and updates the patron object*/
427 function uEditReapStatCats(patron) {
428 var tbody = $('ue_stat_cat_tbody');
429 for( var r in tbody.childNodes ) {
430 var row = tbody.childNodes[r];
431 if( !row || row.nodeName != 'tr' ) continue;
432 if( row.getAttribute('changed') ) {
433 var val = $n( row, 'ue_stat_cat_newval' );
434 uEditCreateStatMap( patron, row.getAttribute('statcat'),
435 val.value, val.getAttribute('entry') );
441 function uEditCreateStatMap( patron, catid, newval, entryid ) {
443 if( ! patron.isnew() ) {
445 /* if the patron exists and we're editing an entry that's
446 already been created for this user... */
447 for( var m in uEditExistingStatEntries ) {
448 var map = uEditExistingStatEntries[m];
449 if( map.stat_cat() == catid ) {
450 if( newval ) map.ischanged(1);
451 else map.isdeleted(1);
452 patron.stat_cat_entries().push(map);
458 var map = new actscecm();
460 map.stat_cat_entry(newval);
462 map.target_usr(patron.id());
463 patron.stat_cat_entries().push(map);
468 /* ------------------------------------------------------------------------------ */
469 /* Survey handling code
470 /* ------------------------------------------------------------------------------ */
471 function uEditDrawSurveys(r) {
473 var surveys = r.getResultObject();
474 var div = $('uedit_surveys');
475 var table = div.removeChild($('ue_survey_table'));
478 for( var s in surveys ) {
479 var survey = surveys[s];
480 cachedSurveys[survey.id()] = survey;
481 var clone = table.cloneNode(true);
482 uEditInsertSurvey( div, clone, survey, x++ );
483 div.appendChild(clone);
487 function uEditInsertSurvey( div, table, survey, sidx ) {
488 $n(table, 'ue_survey_name').appendChild(text(survey.name()));
489 $n(table, 'ue_survey_desc').appendChild(text(survey.description()));
490 var tbody = $n(table, 'ue_survey_tbody');
491 var templ = tbody.removeChild($n(table, 'ue_survey_row'));
493 var polldiv = $('ue_survey_answer_poll');
496 for( var q in survey.questions() ) {
497 var row = templ.cloneNode(true);
498 var quest = survey.questions()[q];
499 cachedSurveyQuestions[quest.id()] = quest;
500 uEditInsertSurveyQuestion( div, table, tbody, row, survey, quest, sidx );
501 tbody.appendChild(row);
505 function uEditInsertSurveyQuestion( div, table, tbody, row, survey, question, sidx ) {
507 $n(row, 'ue_survey_question').appendChild(text(question.question()));
509 var selector = $n(row, 'ue_survey_answer');
510 var polldiv = $n(row, 'ue_survey_answer_poll');
512 var polltbody = $n(row, 'ue_survey_answer_poll_tbody');
513 var pollrow = polltbody.removeChild($n(polltbody, 'ue_survey_answer_poll_row'));
515 table.setAttribute('survey', survey.id());
516 row.setAttribute('question', question.id());
518 selector.onchange = function() {
519 row.setAttribute('answer', getSelectorVal(selector));
520 row.setAttribute('changed', '1');
523 if( sidx == 0 ) selector.id = 'ue_survey_selector_1';
525 for( var a in question.answers() ) {
527 var answer = question.answers()[a];
528 cachedSurveyAnswers[answer.id()] = answer;
530 if( survey.poll() ) {
533 var prow = pollrow.cloneNode(true);
536 $n(prow, 'ue_survey_answer_poll_answer').appendChild(text(answer.answer()));
539 var input = elem('input', {
541 name : 'survey_poll_answer_'+survey.id(),
545 input.onchange = function() {
546 row.setAttribute('answer', answer.id());
547 row.setAttribute('changed', '1');
550 $n(prow, 'ue_survey_answer_poll_radio').appendChild(input);
551 polltbody.appendChild(prow);
555 unHideMe(selector.parentNode);
556 setSelectorVal( selector, idx++, answer.answer(), answer.id() );
562 function uEditReapSurveys(patron) {
564 var div = $('uedit_surveys');
565 var tables = getElementsByTagNameFlat(div, 'table');
567 for( var t in tables ) {
569 var table = tables[t];
570 var survey = cachedSurveys[table.getAttribute('survey')];
571 var tbody = getElementsByTagNameFlat( table, 'tbody' )[0];
572 var rows = getElementsByTagNameFlat( tbody, 'tr' );
574 for( var r in rows ) {
576 if(!row.getAttribute('changed')) continue;
578 var resp = new asvr();
580 resp.survey(survey.id());
581 resp.usr(patron.id());
582 resp.question(row.getAttribute('question'));
583 resp.answer(row.getAttribute('answer'));
584 patron.survey_responses().push( resp );
594 /* returns true if an error occurred */
595 function uEditSetVal( obj, func, val, regxtype, errtype ) {
597 var error = uEditFetchError(errtype);
602 if( val == null ) { iserr = true; break; }
604 if(!instanceOf(val, String)) {
605 try { val = val.value; } catch(e) { return; }
608 if(val == "" ) { iserr = true; break; }
610 if(regxtype && regexes[regxtype]
611 && !val.match(regexes[regxtype]) ) { iserr = true; break; }
613 try { obj[func](val); } catch(e) {
614 alert("Error running function: " +func);
620 if(iserr) { ERRORS += error; return true; }
625 function uEditAddBasicPatronInfo(patron) {
629 /* make sure passwords match */
630 var p1 = $('ue_password1').value;
631 var p2 = $('ue_password1').value;
633 if( p1 || patron.isnew() ) { /* existing patrons will have a blank password */
634 if( p1 != p2 || uEditSetVal( patron, "passwd", p1 ))
635 ERRORS += uEditFetchError('ue_bad_password');
638 uEditSetVal(patron, "usrname", $('ue_username'), null, 'ue_bad_username' );
639 uEditSetVal(patron, "first_given_name", $('ue_firstname'), null, 'ue_bad_firstname' );
640 uEditSetVal(patron, "second_given_name", $('ue_middlename'), null, 'ue_bad_middlename' );
641 uEditSetVal(patron, "family_name", $('ue_lastname'), null, 'ue_bad_lastname' );
642 uEditSetVal(patron, "dob", $('ue_dob'), 'date', 'ue_bad_dob' );
644 patron.suffix($('ue_suffix').value); /* suffis isn't required */
647 /* make sure emails match */
648 var email = $('ue_email1').value;
649 var email2 = $('ue_email2').value;
650 if( email != email2 || uEditSetVal(patron, "email", email, 'email' ))
651 ERRORS += uEditFetchError('ue_bad_email');
653 patron.home_ou(getSelectorVal($('ue_org_selector')));
656 function uEditAddPhones(patron) {
659 /* verifies the phone numbers are formatted correctly */
660 var verify = function(n1, n2, n3) {
664 if( !a || !p || !s ) return false;
665 return a + '-' + p + '-' + s;
669 var er = 'ue_bad_phone'
671 uEditSetVal( patron, "day_phone",
672 verify($('ue_day_phone_area'),
673 $('ue_day_phone_prefix'),
674 $('ue_day_phone_suffix')), 'phone', er );
676 uEditSetVal( patron, "evening_phone",
677 verify($('ue_night_phone_area'),
678 $('ue_night_phone_prefix'),
679 $('ue_night_phone_suffix')), 'phone', er );
681 if( $('ue_other_phone_prefix').value ) {
682 uEditSetVal( patron, "other_phone",
683 verify($('ue_other_phone_area'),
684 $('ue_other_phone_prefix'),
685 $('ue_other_phone_suffix')), 'phone', er );
690 function uEditFleshCard(card) {
693 if(uEditSetVal( card, "barcode", $('ue_barcode'), null, 'ue_bad_barcode' ))
702 function uEditAddIdents(patron) {
704 var err = 'ue_no_ident';
706 uEditSetVal( patron, "ident_type",
707 getSelectorVal($('ue_primary_ident_type')), 'isnum', err );
709 uEditSetVal( patron, "ident_type2",
710 getSelectorVal($('ue_secondary_ident_type')), 'isnum', err );
712 uEditSetVal( patron, "ident_value",
713 $('ue_primary_ident'), null, err );
715 uEditSetVal( patron, "ident_value2",
716 $('ue_secondary_ident'), null, err );
721 function uEditBuildLibSelector( node, depth, selector ) {
722 if(!selector) selector = $('ue_org_selector');
723 if(!node) { depth = 0; node = globalOrgTree; }
725 var opt = insertSelectorVal( selector, -1, node.name(), node.id(), null, depth++ );
727 /* allow these orgs to be selectable via permission? */
728 if(!findOrgType(node.ou_type()).can_have_vols()) opt.disabled = true;
730 if( node.id() == USER.home_ou() ) setSelector(selector, node.id());
731 for( var c in node.children() )
732 uEditBuildLibSelector(node.children()[c], depth, selector);
735 function uEditFetchGroups() {
736 var req = new Request(FETCH_GROUPS);
737 //req.callback(uEditDrawGroups);
739 uEditDrawGroups(req.request);
742 function uEditDrawGroups(r, tree, depth, selector) {
745 tree = r.getResultObject();
748 selector = $('ue_profile');
751 insertSelectorVal( selector, -1, tree.name(), tree.id(), null, depth++ );
752 for( var c in tree.children() )
753 uEditDrawGroups( null, tree.children()[c], depth, selector );
758 function uEditAddGroupsAndPerms(patron) {
760 uEditSetVal( patron, "profile",
761 getSelectorVal($('ue_profile')), 'isnum', 'ue_no_profile');
763 var expire = $('ue_expire').value;
765 uEditSetVal( patron, "expire_date", expire, 'date', 'ue_bad_expire' );
767 if($('ue_active').checked) patron.active(1);
768 if($('ue_barred').checked) patron.barred(1);
769 if($('ue_group_lead').checked) patron.master_account(1);
771 uEditSetVal( patron, "claims_returned_count",
772 $('ue_claims_returned'), 'isnum', 'ue_bad_claims_returned');
774 if($('ue_alert_message').value)
775 uEditSetVal(patron, "alert_message", $('ue_alert_message'));
780 function uEditAddAddresses(patron) {
781 var tbody = $('ue_address_tbody');
782 patron.addresses([]);
784 /* shove the addresses living in the page into the patron */
785 for( var r in tbody.childNodes ) {
786 var row = tbody.childNodes[r];
787 if(!(row && row.nodeName == 'tr')) continue;
788 patron.addresses().push( uEditBuildAddress( patron, tbody, row ));
790 for( var a in deletedAddresses ) {
791 var addr = deletedAddresses[a];
792 patron.addresses().push(addr);
796 /* extracts a single address from the page */
797 var uEditVirtualAddrId = -1;
798 function uEditBuildAddress( patron, tbody, row ) {
800 var addr = new aua();
801 var id = row.getAttribute('exists');
808 addr.id(uEditVirtualAddrId--);
812 if($n(row, 'ue_addr_mailing_yes').checked) patron.mailing_address(addr.id());
813 if($n(row, 'ue_addr_billing_yes').checked) patron.billing_address(addr.id());
814 if($n(row, 'ue_addr_valid_yes').checked) addr.valid(1);
815 if($n(row, 'ue_addr_street2').value) addr.street2($n(row, 'ue_addr_street2').value);
817 uEditSetVal(addr, "address_type", $n(row, 'ue_addr_label'), null, 'ue_bad_addr_label' );
818 uEditSetVal(addr, "street1", $n(row, 'ue_addr_street1'), null, 'ue_bad_addr_street' );
819 uEditSetVal(addr, "city", $n(row, 'ue_addr_city'), null, 'ue_bad_addr_city' );
820 uEditSetVal(addr, "county", $n(row, 'ue_addr_county'), null, 'ue_bad_addr_county' );
821 uEditSetVal(addr, "state", $n(row, 'ue_addr_state'), null, 'ue_bad_addr_state' );
822 uEditSetVal(addr, "post_code", $n(row, 'ue_addr_zip'), null, 'ue_bad_addr_zip' );
823 uEditSetVal(addr, "country", $n(row, 'ue_addr_country'), null, 'ue_bad_addr_country' );
828 function uEditRemoveAddress(node) {
829 if( confirm($("ue_delete_addr_warn").innerHTML) ) {
830 var td = node.parentNode.parentNode;
831 var mytab = td.parentNode.parentNode.parentNode;
832 var row = mytab.parentNode.parentNode;
833 if( row.getAttribute('exists') ) {
834 var a = cachedAddresses[row.getAttribute('exists')];
836 deletedAddresses[a.id()] = a;
838 var tbody = row.parentNode;
839 tbody.removeChild(mytab.parentNode.parentNode);
845 var uEditAddrTemplate;
846 var uEditOrigAddrRow;
847 function uEditBuildAddrs() {
849 var tbody = $('ue_address_tbody');
850 uEditAddrTemplate = tbody.removeChild($('ue_address_template'));
852 $('ue_address_new').onclick =
854 /* we have to retain the mailing/billing radio input values */
855 var rows = getElementsByTagNameFlat(tbody,'tr');
858 for( var r in rows ) {
860 if($n(row,'ue_addr_mailing_yes').checked) mailrow = row;
861 if($n(row,'ue_addr_billing_yes').checked) billrow = row;
863 var newrow = uEditAddrTemplate.cloneNode(true);
864 tbody.appendChild(newrow);
865 $n(newrow, 'ue_addr_label').focus();
866 if(mailrow) $n(mailrow,'ue_addr_mailing_yes').checked = true;
867 if(billrow) $n(billrow,'ue_addr_billing_yes').checked = true;
871 /* go ahead and add a blank addr */
873 var row = uEditAddrTemplate.cloneNode(true);
874 uEditOrigAddrRow = row;
875 $n( row, 'ue_addr_label').id = 'ue_addr_label_1';
876 tbody.appendChild(row);
882 function uEditShowSummary() {
884 var table = $('ue_summary_table').cloneNode(true);;
885 uEditFleshSummaryTable(table);
886 var win = window.open("", $('ue_summary_window').innerHTML );
887 win.document.body.innerHTML = "";
888 win.document.body.appendChild(table);
892 function uEditFleshSummaryTable(table) {
894 var yes = $('yes').innerHTML;
895 var no = $('no').innerHTML;
902 if( patron.ident_type() != null)
903 identt1 = identTypes[patron.ident_type()].name();
904 if( patron.ident_type2() != null )
905 identt2 = identTypes[patron.ident_type2()].name();
906 if( patron.home_ou() != null )
907 homeorg = findOrgUnit(patron.home_ou()).name();
908 if( patron.profile() != null )
909 profile = findTreeItemById(groupTree, patron.profile()).name();
912 $n(table, 'ue_summary_username').appendChild(text(patron.usrname()));
913 $n(table, 'ue_summary_firstname').appendChild(text(patron.first_given_name()));
914 $n(table, 'ue_summary_middlename').appendChild(text(patron.second_given_name()));
915 $n(table, 'ue_summary_lastname').appendChild(text(patron.family_name()));
916 $n(table, 'ue_summary_suffix').appendChild(text(patron.suffix()));
917 $n(table, 'ue_summary_dob').appendChild(text(patron.dob()));
918 $n(table, 'ue_summary_primary_ident_type').appendChild(text(identt1));
919 $n(table, 'ue_summary_primary_ident').appendChild(text(patron.ident_value()));
920 $n(table, 'ue_summary_secondary_ident_type').appendChild(text(identt2));
921 $n(table, 'ue_summary_secondary_ident').appendChild(text(patron.ident_value2()));
922 $n(table, 'ue_summary_email').appendChild(text(patron.email()));
923 $n(table, 'ue_summary_dayphone').appendChild(text(patron.day_phone()));
924 $n(table, 'ue_summary_nightphone').appendChild(text(patron.evening_phone()));
925 $n(table, 'ue_summary_otherphone').appendChild(text(patron.other_phone()));
926 $n(table, 'ue_summary_home_lib').appendChild(text(homeorg));
927 $n(table, 'ue_summary_profile').appendChild(text(profile));
928 $n(table, 'ue_summary_expire').appendChild(text(patron.expire_date()));
929 $n(table, 'ue_summary_family_lead').appendChild(text( (patron.master_account()) ? yes : no ));
930 $n(table, 'ue_summary_claims_returned').appendChild(text(patron.claims_returned_count()));
931 $n(table, 'ue_summary_alert_message').appendChild(text(patron.alert_message()));
933 uEditFleshSummaryAddresses( table, patron );
934 uEditFleshSummaryStatCats( table, patron );
935 uEditFleshSummarySurveys( table, patron );
936 uEditFleshSummaryErrors( table );
941 function uEditFleshSummaryAddresses( table, patron ) {
943 var addrtbody = $n(table, 'ue_summary_addr_tbody');
944 var rowtmpl = addrtbody.removeChild($n(addrtbody, 'ue_summary_addr_row'));
946 for( var a in patron.addresses() ) {
947 var address = patron.addresses()[a];
948 var row = rowtmpl.cloneNode(true);
949 uEditFleshSummaryAddr( address, patron, row );
950 addrtbody.appendChild(row);
951 if(address.isdeleted()) addCSSClass(row, 'deleted');
956 function uEditFleshSummaryAddr( address, patron, row ) {
957 var yes = $('yes').innerHTML;
958 var no = $('no').innerHTML;
960 $n(row, 'label').appendChild(text(address.address_type()));
961 $n(row, 'street1').appendChild(text(address.street1()));
962 $n(row, 'street2').appendChild(text(address.street2()));
963 $n(row, 'city').appendChild(text(address.city()));
964 $n(row, 'county').appendChild(text(address.county()));
965 $n(row, 'state').appendChild(text(address.state()));
966 $n(row, 'country').appendChild(text(address.country()));
967 $n(row, 'zip').appendChild(text(address.post_code()));
968 $n(row, 'valid').appendChild(text( (address.valid()) ? yes : no ));
970 $n(row, 'mailing').appendChild(text(
971 (patron.mailing_address() == address.id()) ? yes : no ));
973 $n(row, 'billing').appendChild(text(
974 (patron.billing_address() == address.id()) ? yes : no ));
978 function uEditFleshSummaryStatCats( table, patron ) {
979 var tbody = $n(table, 'ue_summary_stats_tbody');
980 var rowtmpl = tbody.removeChild($n(tbody, 'ue_summary_stats_row'));
982 for( var s in patron.stat_cat_entries() ) {
983 row = rowtmpl.cloneNode(true);
984 var entry = patron.stat_cat_entries()[s];
985 var cat = cachedStatCats[entry.stat_cat()];
986 $n(row, 'ue_summary_stat_name').appendChild(text(cat.name()));
987 $n(row, 'ue_summary_stat_value').appendChild(text(entry.stat_cat_entry()));
988 row.setAttribute('statcat', entry.stat_cat());
989 if( entry.isdeleted() ) addCSSClass(row, 'deleted');
990 tbody.appendChild(row);
993 for( var s in uEditExistingStatEntries ) {
995 var entry = uEditExistingStatEntries[s];
996 var rows = getElementsByTagNameFlat( tbody, 'tr' );
997 var test = function(a) { return a.getAttribute('statcat') == entry.stat_cat() };
999 if( ! grep( rows, test ) ) {
1001 row = rowtmpl.cloneNode(true);
1002 var cat = cachedStatCats[entry.stat_cat()];
1003 $n(row, 'ue_summary_stat_name').appendChild(text(cat.name()));
1004 $n(row, 'ue_summary_stat_value').appendChild(text(entry.stat_cat_entry()));
1005 row.setAttribute('statcat', entry.stat_cat());
1006 tbody.appendChild(row);
1011 if( ! getElementsByTagNameFlat( tbody, 'tr' )[1] )
1012 unHideMe($n(tbody, 'ue_summary_stat_cat_none'));
1016 function uEditFleshSummarySurveys( table, patron ) {
1018 var tbody = $n(table, 'ue_summary_survey_tbody');
1019 var rowtmpl = tbody.removeChild($n(tbody, 'ue_summary_survey_row'));
1021 for( var r in patron.survey_responses() ) {
1022 var row = rowtmpl.cloneNode(rowtmpl);
1023 var resp = patron.survey_responses()[r];
1024 var survey = cachedSurveys[resp.survey()];
1025 var quest = cachedSurveyQuestions[resp.question()];
1026 var answer = cachedSurveyAnswers[resp.answer()];
1027 $n(row, 'ue_summary_survey_name').appendChild(text(survey.name()));
1028 $n(row, 'ue_summary_survey_question').appendChild(text(quest.question()));
1029 $n(row, 'ue_summary_survey_answer').appendChild(text(answer.answer()));
1030 tbody.appendChild(row);
1033 if( ! getElementsByTagNameFlat(tbody, 'tr')[1])
1034 unHideMe($n(tbody, 'ue_summary_survey_none'))
1038 function uEditFleshSummaryErrors( table ) {
1040 unHideMe($n(table, 'ue_summary_errors_row'));
1041 var errors = ERRORS.replace(/\n/g, "<br/>");
1042 $n(table, 'ue_summary_errors').innerHTML += errors;